From c72f4be6d80985c2ac9971ed47299321bee6fe1c Mon Sep 17 00:00:00 2001 From: Yassine Doghri <yassine@doghri.fr> Date: Tue, 8 Jun 2021 09:52:11 +0000 Subject: [PATCH] refactor: add strict types declaration before each file and fix activitypub issues fix some style issues --- INSTALL.md | 17 +- app/Authorization/FlatAuthorization.php | 4 +- app/Authorization/GroupModel.php | 2 + app/Authorization/PermissionModel.php | 2 + app/Common.php | 2 + app/Config/ActivityPub.php | 2 + app/Config/Analytics.php | 2 + app/Config/App.php | 2 + app/Config/Auth.php | 2 + app/Config/Autoload.php | 2 + app/Config/Boot/development.php | 2 + app/Config/Boot/production.php | 4 +- app/Config/Boot/testing.php | 2 + app/Config/Cache.php | 15 + app/Config/Constants.php | 2 + app/Config/ContentSecurityPolicy.php | 2 + app/Config/Cookie.php | 2 + app/Config/Database.php | 2 + app/Config/DocTypes.php | 2 + app/Config/Email.php | 2 + app/Config/Encryption.php | 2 + app/Config/Events.php | 232 +- app/Config/Exceptions.php | 2 + app/Config/Filters.php | 2 + app/Config/ForeignCharacters.php | 2 + app/Config/Format.php | 2 + app/Config/Generators.php | 2 + app/Config/Honeypot.php | 2 + app/Config/Images.php | 2 + app/Config/Kint.php | 2 + app/Config/Logger.php | 2 + app/Config/Migrations.php | 2 + app/Config/Mimes.php | 2 + app/Config/Modules.php | 2 + app/Config/Pager.php | 2 + app/Config/Paths.php | 2 + app/Config/Routes.php | 10 +- app/Config/Security.php | 2 + app/Config/Services.php | 6 +- app/Config/Toolbar.php | 2 + app/Config/UserAgents.php | 2 + app/Config/Validation.php | 2 + app/Config/View.php | 2 + app/Controllers/ActorController.php | 3 + app/Controllers/Admin/BaseController.php | 2 + .../Admin/ContributorController.php | 2 + app/Controllers/Admin/EpisodeController.php | 32 +- .../Admin/EpisodePersonController.php | 4 +- app/Controllers/Admin/FediverseController.php | 2 + app/Controllers/Admin/HomeController.php | 2 + app/Controllers/Admin/MyAccountController.php | 2 + app/Controllers/Admin/PageController.php | 4 +- app/Controllers/Admin/PersonController.php | 4 +- app/Controllers/Admin/PodcastController.php | 16 +- .../Admin/PodcastImportController.php | 22 +- .../Admin/PodcastPersonController.php | 4 +- .../Admin/PodcastPlatformController.php | 6 +- app/Controllers/Admin/UserController.php | 12 +- app/Controllers/AuthController.php | 6 +- app/Controllers/BaseController.php | 2 + app/Controllers/CreditsController.php | 2 + app/Controllers/EpisodeController.php | 8 +- app/Controllers/FeedController.php | 6 +- app/Controllers/HomeController.php | 2 + app/Controllers/InstallController.php | 6 +- app/Controllers/NoteController.php | 19 +- app/Controllers/PageController.php | 2 + app/Controllers/PlatformController.php | 2 + app/Controllers/PodcastController.php | 4 +- ...17-12-01-160000_add_podcasts_platforms.php | 2 + .../2020-05-29-152000_add_categories.php | 2 + .../2020-05-30-101000_add_languages.php | 2 + .../2020-05-30-101500_add_podcasts.php | 4 +- .../2020-06-05-170000_add_episodes.php | 4 +- .../2020-06-05-180000_add_soundbites.php | 6 +- .../2020-06-05-190000_add_platforms.php | 4 +- .../2020-07-03-191500_add_podcasts_users.php | 6 +- .../2020-08-17-150000_add_pages.php | 2 + ...0-09-29-150000_add_podcasts_categories.php | 6 +- .../2020-12-25-120000_add_persons.php | 2 + ...2020-12-25-130000_add_podcasts_persons.php | 6 +- ...2020-12-25-140000_add_episodes_persons.php | 8 +- .../2020-12-25-150000_add_credit_view.php | 2 + ...1-02-23-100000_add_episode_id_to_notes.php | 4 +- ...1-03-09-113000_add_created_by_to_notes.php | 4 +- app/Database/Seeds/AppSeeder.php | 2 + app/Database/Seeds/AuthSeeder.php | 2 + app/Database/Seeds/CategorySeeder.php | 2 + .../Seeds/FakePodcastsAnalyticsSeeder.php | 6 +- .../Seeds/FakeWebsiteAnalyticsSeeder.php | 4 +- app/Database/Seeds/LanguageSeeder.php | 2 + app/Database/Seeds/PlatformSeeder.php | 2 + app/Database/Seeds/TestSeeder.php | 2 + app/Entities/Actor.php | 10 +- app/Entities/Category.php | 2 + app/Entities/Credit.php | 16 +- app/Entities/Episode.php | 32 +- app/Entities/Image.php | 4 +- app/Entities/Language.php | 2 + app/Entities/Location.php | 4 +- app/Entities/Note.php | 6 +- app/Entities/Page.php | 4 +- app/Entities/Person.php | 10 +- app/Entities/Platform.php | 2 + app/Entities/Podcast.php | 44 +- app/Entities/Soundbite.php | 2 + app/Entities/User.php | 4 +- app/Filters/PermissionFilter.php | 2 + app/Helpers/auth_helper.php | 4 +- app/Helpers/breadcrumb_helper.php | 2 + app/Helpers/components_helper.php | 10 +- app/Helpers/form_helper.php | 2 + app/Helpers/id3_helper.php | 4 +- app/Helpers/media_helper.php | 2 + app/Helpers/misc_helper.php | 2 + app/Helpers/page_helper.php | 2 + app/Helpers/rss_helper.php | 88 +- app/Helpers/svg_helper.php | 6 +- app/Helpers/url_helper.php | 2 + app/Language/en/ActivityPub.php | 2 + app/Language/en/Admin.php | 2 + app/Language/en/AdminNavigation.php | 2 + app/Language/en/Breadcrumb.php | 2 + app/Language/en/Charts.php | 2 + app/Language/en/Common.php | 2 + app/Language/en/Contributor.php | 2 + app/Language/en/Countries.php | 2 + app/Language/en/Episode.php | 2 + app/Language/en/Fediverse.php | 2 + app/Language/en/Home.php | 2 + app/Language/en/Install.php | 2 + app/Language/en/MyAccount.php | 2 + app/Language/en/Note.php | 2 + app/Language/en/Page.php | 2 + app/Language/en/Pager.php | 2 + app/Language/en/Person.php | 2 + app/Language/en/Platforms.php | 2 + app/Language/en/Podcast.php | 2 + app/Language/en/PodcastImport.php | 2 + app/Language/en/PodcastNavigation.php | 2 + app/Language/en/User.php | 2 + app/Language/en/Validation.php | 2 + app/Language/fr/ActivityPub.php | 2 + app/Language/fr/Admin.php | 2 + app/Language/fr/AdminNavigation.php | 2 + app/Language/fr/Breadcrumb.php | 2 + app/Language/fr/Charts.php | 2 + app/Language/fr/Common.php | 2 + app/Language/fr/Contributor.php | 2 + app/Language/fr/Countries.php | 2 + app/Language/fr/Episode.php | 2 + app/Language/fr/Fediverse.php | 2 + app/Language/fr/Home.php | 2 + app/Language/fr/Install.php | 2 + app/Language/fr/MyAccount.php | 2 + app/Language/fr/Note.php | 2 + app/Language/fr/Page.php | 2 + app/Language/fr/Pager.php | 2 + app/Language/fr/Person.php | 2 + app/Language/fr/Platforms.php | 2 + app/Language/fr/Podcast.php | 2 + app/Language/fr/PodcastImport.php | 2 + app/Language/fr/PodcastNavigation.php | 2 + app/Language/fr/User.php | 2 + app/Language/fr/Validation.php | 2 + .../ActivityPub/Activities/AcceptActivity.php | 2 + .../Activities/AnnounceActivity.php | 2 + .../ActivityPub/Activities/CreateActivity.php | 2 + .../ActivityPub/Activities/DeleteActivity.php | 2 + .../ActivityPub/Activities/FollowActivity.php | 2 + .../ActivityPub/Activities/LikeActivity.php | 2 + .../ActivityPub/Activities/UndoActivity.php | 2 + app/Libraries/ActivityPub/ActivityRequest.php | 8 +- .../ActivityPub/Config/ActivityPub.php | 2 + app/Libraries/ActivityPub/Config/Routes.php | 2 + .../Controllers/ActorController.php | 155 +- .../Controllers/BlockController.php | 6 +- .../Controllers/NoteController.php | 19 +- .../Controllers/SchedulerController.php | 2 + .../Controllers/WebFingerController.php | 2 + .../ActivityPub/Core/AbstractObject.php | 2 + app/Libraries/ActivityPub/Core/Activity.php | 2 + app/Libraries/ActivityPub/Core/ObjectType.php | 2 + .../2018-01-01-010000_add_actors.php | 2 + .../2018-01-01-020000_add_notes.php | 8 +- .../2018-01-01-100000_add_activities.php | 8 +- .../2018-01-01-100000_add_favourites.php | 8 +- .../2018-01-01-100000_add_follows.php | 8 +- .../2018-01-01-100000_add_preview_cards.php | 2 + ...8-01-01-110000_add_notes_preview_cards.php | 6 +- .../2018-01-01-120000_add_blocked_domains.php | 2 + .../ActivityPub/Entities/Activity.php | 16 +- app/Libraries/ActivityPub/Entities/Actor.php | 6 +- .../ActivityPub/Entities/BlockedDomain.php | 2 + .../ActivityPub/Entities/Favourite.php | 2 + app/Libraries/ActivityPub/Entities/Follow.php | 2 + app/Libraries/ActivityPub/Entities/Note.php | 34 +- .../ActivityPub/Entities/PreviewCard.php | 2 + .../ActivityPub/Filters/ActivityPubFilter.php | 2 + .../Helpers/activitypub_helper.php | 26 +- app/Libraries/ActivityPub/HttpSignature.php | 11 +- .../ActivityPub/Models/ActivityModel.php | 2 + .../ActivityPub/Models/ActorModel.php | 27 +- .../ActivityPub/Models/BlockedDomainModel.php | 10 +- .../ActivityPub/Models/FavouriteModel.php | 52 +- .../ActivityPub/Models/FollowModel.php | 27 +- .../ActivityPub/Models/NoteModel.php | 170 +- .../ActivityPub/Models/PreviewCardModel.php | 4 +- .../ActivityPub/Objects/ActorObject.php | 2 + .../ActivityPub/Objects/NoteObject.php | 4 +- .../Objects/OrderedCollectionObject.php | 8 +- .../Objects/OrderedCollectionPage.php | 6 +- .../ActivityPub/Objects/TombstoneObject.php | 2 + app/Libraries/ActivityPub/WebFinger.php | 2 + app/Libraries/Analytics/AnalyticsTrait.php | 4 +- app/Libraries/Analytics/Config/Analytics.php | 2 + app/Libraries/Analytics/Config/Routes.php | 4 +- .../Controllers/AnalyticsController.php | 10 +- .../EpisodeAnalyticsController.php | 2 + .../Controllers/EpisodeController.php | 8 +- .../UnknownUserAgentsController.php | 2 + ...17-12-01-120000_add_analytics_podcasts.php | 4 +- ...0000_add_analytics_podcasts_by_episode.php | 4 +- ...-130000_add_analytics_podcasts_by_hour.php | 4 +- ...40000_add_analytics_podcasts_by_player.php | 4 +- ...0000_add_analytics_podcasts_by_country.php | 4 +- ...60000_add_analytics_podcasts_by_region.php | 4 +- ...70000_add_analytics_website_by_browser.php | 4 +- ...80000_add_analytics_website_by_referer.php | 4 +- ...00_add_analytics_website_by_entry_page.php | 4 +- ...00000_add_analytics_unknown_useragents.php | 4 +- ...10000_add_analytics_podcasts_procedure.php | 4 +- ...analytics_unknown_useragents_procedure.php | 2 + ...210000_add_analytics_website_procedure.php | 2 + .../Analytics/Entities/AnalyticsPodcasts.php | 2 + .../Entities/AnalyticsPodcastsByCountry.php | 2 + .../Entities/AnalyticsPodcastsByEpisode.php | 2 + .../Entities/AnalyticsPodcastsByHour.php | 2 + .../Entities/AnalyticsPodcastsByPlayer.php | 2 + .../Entities/AnalyticsPodcastsByRegion.php | 2 + .../Entities/AnalyticsPodcastsByService.php | 2 + .../Entities/AnalyticsUnknownUserAgent.php | 2 + .../Entities/AnalyticsWebsiteByBrowser.php | 2 + .../Entities/AnalyticsWebsiteByEntryPage.php | 2 + .../Entities/AnalyticsWebsiteByReferer.php | 2 + .../Analytics/Helpers/analytics_helper.php | 20 +- .../Models/AnalyticsPodcastByCountryModel.php | 6 +- .../Models/AnalyticsPodcastByEpisodeModel.php | 6 +- .../Models/AnalyticsPodcastByHourModel.php | 4 +- .../Models/AnalyticsPodcastByPlayerModel.php | 12 +- .../Models/AnalyticsPodcastByRegionModel.php | 4 +- .../Models/AnalyticsPodcastByServiceModel.php | 4 +- .../Models/AnalyticsPodcastModel.php | 16 +- .../AnalyticsUnknownUseragentsModel.php | 2 + .../Models/AnalyticsWebsiteByBrowserModel.php | 4 +- .../AnalyticsWebsiteByEntryPageModel.php | 4 +- .../Models/AnalyticsWebsiteByRefererModel.php | 8 +- app/Libraries/Breadcrumb.php | 2 + app/Libraries/Negotiate.php | 2 + app/Libraries/NoteObject.php | 7 +- app/Libraries/PodcastActor.php | 2 + app/Libraries/Router.php | 10 +- app/Libraries/SimpleRSSElement.php | 4 +- app/Models/ActorModel.php | 2 + app/Models/CategoryModel.php | 4 +- app/Models/CreditModel.php | 2 + app/Models/EpisodeModel.php | 8 +- app/Models/LanguageModel.php | 2 + app/Models/NoteModel.php | 2 + app/Models/PageModel.php | 2 + app/Models/PersonModel.php | 2 + app/Models/PlatformModel.php | 4 +- app/Models/PodcastModel.php | 58 +- app/Models/SoundbiteModel.php | 6 +- app/Models/UserModel.php | 2 + app/Validation/FileRules.php | 2 + app/Validation/Rules.php | 2 + app/Views/admin/_layout.php | 2 +- composer.lock | 14072 ++++++++-------- docs/setup-development.md | 5 + public/index.php | 6 +- spark | 3 +- .../2020-02-22-222222_example_migration.php | 2 + .../_support/Database/Seeds/ExampleSeeder.php | 2 + tests/_support/DatabaseTestCase.php | 2 + tests/_support/Libraries/ConfigReader.php | 2 + tests/_support/Models/ExampleModel.php | 2 + tests/_support/SessionTestCase.php | 2 + tests/database/ExampleDatabaseTest.php | 2 + tests/session/ExampleSessionTest.php | 2 + tests/unit/HealthTest.php | 2 + 291 files changed, 8727 insertions(+), 7357 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 295c4e740f..826458f355 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -7,10 +7,10 @@ or shared hosting, you can install it on most PHP-MySQL compatible web servers. - [Install instructions](#install-instructions) - [0. Pre-requisites](#0-pre-requisites) - - [1. Install Wizard](#1-install-wizard) - - [1-alt Manual configuration](#1-alt-manual-configuration) + - [(recommended) Install Wizard](#recommended-install-wizard) + - [(alternative) Manual configuration](#alternative-manual-configuration) - [Web Server Requirements](#web-server-requirements) - - [PHP v8.0 or higher](#php-v73-or-higher) + - [PHP v8.0 or higher](#php-v80-or-higher) - [MySQL compatible database](#mysql-compatible-database) - [Privileges](#privileges) - [(Optional) Other recommendations](#optional-other-recommendations) @@ -39,17 +39,20 @@ or shared hosting, you can install it on most PHP-MySQL compatible web servers. > âš ï¸ Social features will not work properly if you do not set the task. It is > used to broadcast social activities to the fediverse. -### 1. Install Wizard +### (recommended) Install Wizard 1. Run the Castopod Host install script by going to the install wizard page (`https://your_domain_name.com/cp-install`) in your favorite web browser. 2. Follow the instructions on your screen. 3. Start podcasting! -### 1-alt Manual configuration +> **Note:** +> +> The install script writes a `.env` file in the package root. If you cannot go +> through the install wizard, you can +> [create and update the `.env` file manually](#alternative-manual-configuration). -The install script writes a `.env` file in the package root. If you cannot go -through the install wizard, you can create and update the `.env` file yourself: +### (alternative) Manual configuration 1. Rename the `.env.example` file to `.env` and update the default values with your own. diff --git a/app/Authorization/FlatAuthorization.php b/app/Authorization/FlatAuthorization.php index 2e706b642c..31d9063024 100644 --- a/app/Authorization/FlatAuthorization.php +++ b/app/Authorization/FlatAuthorization.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace App\Authorization; use Myth\Auth\Authorization\FlatAuthorization as MythAuthFlatAuthorization; @@ -26,7 +28,7 @@ class FlatAuthorization extends MythAuthFlatAuthorization return false; } - return $this->permissionModel->doesGroupHavePermission($groupId, $permissionId,); + return $this->permissionModel->doesGroupHavePermission($groupId, $permissionId); } /** diff --git a/app/Authorization/GroupModel.php b/app/Authorization/GroupModel.php index f48ab40c52..1e2e74a355 100644 --- a/app/Authorization/GroupModel.php +++ b/app/Authorization/GroupModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace App\Authorization; use Myth\Auth\Authorization\GroupModel as MythAuthGroupModel; diff --git a/app/Authorization/PermissionModel.php b/app/Authorization/PermissionModel.php index aefea9e975..8809818dd8 100644 --- a/app/Authorization/PermissionModel.php +++ b/app/Authorization/PermissionModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace App\Authorization; use Myth\Auth\Authorization\PermissionModel as MythAuthPermissionModel; diff --git a/app/Common.php b/app/Common.php index 6399254229..7448f1ad83 100644 --- a/app/Common.php +++ b/app/Common.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * The goal of this file is to allow developers a location where they can overwrite core procedural functions and * replace them with their own. This file is loaded during the bootstrap process and is called during the frameworks diff --git a/app/Config/ActivityPub.php b/app/Config/ActivityPub.php index 6f1539e119..00bb648211 100644 --- a/app/Config/ActivityPub.php +++ b/app/Config/ActivityPub.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use ActivityPub\Config\ActivityPub as ActivityPubBase; diff --git a/app/Config/Analytics.php b/app/Config/Analytics.php index d45b397834..e1a40f42bb 100644 --- a/app/Config/Analytics.php +++ b/app/Config/Analytics.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use Analytics\Config\Analytics as AnalyticsBase; diff --git a/app/Config/App.php b/app/Config/App.php index 134dab1789..4eb43e327c 100644 --- a/app/Config/App.php +++ b/app/Config/App.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Auth.php b/app/Config/Auth.php index 20e5303db4..08e2e6249a 100644 --- a/app/Config/Auth.php +++ b/app/Config/Auth.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use Myth\Auth\Config\Auth as MythAuthConfig; diff --git a/app/Config/Autoload.php b/app/Config/Autoload.php index b74370e82b..1bc7dd6158 100644 --- a/app/Config/Autoload.php +++ b/app/Config/Autoload.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\AutoloadConfig; diff --git a/app/Config/Boot/development.php b/app/Config/Boot/development.php index 036960ed11..8193a56a4a 100644 --- a/app/Config/Boot/development.php +++ b/app/Config/Boot/development.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * -------------------------------------------------------------------------- * ERROR DISPLAY diff --git a/app/Config/Boot/production.php b/app/Config/Boot/production.php index 4653c264a8..4cf210d8ff 100644 --- a/app/Config/Boot/production.php +++ b/app/Config/Boot/production.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * -------------------------------------------------------------------------- * ERROR DISPLAY @@ -8,7 +10,7 @@ * it and display a generic error message. */ ini_set('display_errors', '0'); -error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED,); +error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED); /** * -------------------------------------------------------------------------- diff --git a/app/Config/Boot/testing.php b/app/Config/Boot/testing.php index a5e9b5e1c6..56c22a9c7d 100644 --- a/app/Config/Boot/testing.php +++ b/app/Config/Boot/testing.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * -------------------------------------------------------------------------- * ERROR DISPLAY diff --git a/app/Config/Cache.php b/app/Config/Cache.php index 42266130e4..f08efbc61a 100644 --- a/app/Config/Cache.php +++ b/app/Config/Cache.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Cache\Handlers\DummyHandler; @@ -74,6 +76,19 @@ class Cache extends BaseConfig */ public string $prefix = ''; + /** + * -------------------------------------------------------------------------- + * Default TTL + * -------------------------------------------------------------------------- + * + * The default number of seconds to save items when none is specified. + * + * WARNING: This is not used by framework handlers where 60 seconds is + * hard-coded, but may be useful to projects and modules. This will replace + * the hard-coded value in a future release. + */ + public int $ttl = 60; + /** * -------------------------------------------------------------------------- * File settings diff --git a/app/Config/Constants.php b/app/Config/Constants.php index e486ae7ec2..dcc156dbe0 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /* | -------------------------------------------------------------------- | Castopod Version diff --git a/app/Config/ContentSecurityPolicy.php b/app/Config/ContentSecurityPolicy.php index ae5374e255..4467086773 100644 --- a/app/Config/ContentSecurityPolicy.php +++ b/app/Config/ContentSecurityPolicy.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Cookie.php b/app/Config/Cookie.php index dba5bf4fed..0a051c4176 100644 --- a/app/Config/Cookie.php +++ b/app/Config/Cookie.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Database.php b/app/Config/Database.php index b2d9918e57..372fcb870d 100644 --- a/app/Config/Database.php +++ b/app/Config/Database.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Database\Config; diff --git a/app/Config/DocTypes.php b/app/Config/DocTypes.php index 81bdfb2607..428c7ee03f 100644 --- a/app/Config/DocTypes.php +++ b/app/Config/DocTypes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; class DocTypes diff --git a/app/Config/Email.php b/app/Config/Email.php index 7d47308f6f..68f787a92b 100644 --- a/app/Config/Email.php +++ b/app/Config/Email.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Encryption.php b/app/Config/Encryption.php index bd69c7523f..a69b8b38c7 100644 --- a/app/Config/Encryption.php +++ b/app/Config/Encryption.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Events.php b/app/Config/Events.php index dc9fe3a341..4de3cedb8b 100644 --- a/app/Config/Events.php +++ b/app/Config/Events.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use App\Entities\Actor; @@ -50,7 +52,7 @@ Events::on('pre_system', function () { * @phpstan-ignore-next-line */ if (CI_DEBUG && ! is_cli()) { - Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect',); + Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect'); Services::toolbar()->respond(); } }); @@ -76,47 +78,109 @@ Events::on('logout', function (User $user): void { * -------------------------------------------------------------------- * ActivityPub events * -------------------------------------------------------------------- - * Update episode metadata counts */ -Events::on('on_note_add', function (Note $note): void { +/** + * @param Actor $actor + * @param Actor $targetActor + */ +Events::on('on_follow', function ($actor, $targetActor): void { + if ($actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$actor->podcast->id}*"); + } + + if ($targetActor->is_podcast) { + cache() + ->deleteMatching("podcast#{$targetActor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$targetActor->podcast->id}*"); + } +}); + +/** + * @param Actor $actor + * @param Actor $targetActor + */ +Events::on('on_undo_follow', function ($actor, $targetActor): void { + if ($actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$actor->podcast->id}*"); + } + + if ($targetActor->is_podcast) { + cache() + ->deleteMatching("podcast#{$targetActor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$targetActor->podcast->id}*"); + } +}); + +/** + * @param Note $note + */ +Events::on('on_note_add', function ($note): void { + if ($note->is_reply) { + $note = $note->reply_to_note; + } + if ($note->episode_id) { model('EpisodeModel') ->where('id', $note->episode_id) ->increment('notes_total'); } - // Removing all of the podcast pages is a bit overkill, but works perfectly - // same for other events below - cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); - cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + if ($note->actor->is_podcast) { + // Removing all of the podcast pages is a bit overkill, but works to avoid caching bugs + // same for other events below + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + } }); -Events::on('on_note_remove', function (Note $note): void { - if ($note->episode_id) { +/** + * @param Note $note + */ +Events::on('on_note_remove', function ($note): void { + if ($note->is_reply) { + Events::trigger('on_note_remove', $note->reply_to_note); + } + + if ($episodeId = $note->episode_id) { model('EpisodeModel') - ->where('id', $note->episode_id) + ->where('id', $episodeId) ->decrement('notes_total', 1 + $note->reblogs_count); model('EpisodeModel') - ->where('id', $note->episode_id) + ->where('id', $episodeId) ->decrement('reblogs_total', $note->reblogs_count); model('EpisodeModel') - ->where('id', $note->episode_id) + ->where('id', $episodeId) ->decrement('favourites_total', $note->favourites_count); } - cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); - cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + if ($note->actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + } + cache() ->deleteMatching("page_note#{$note->id}*"); }); -Events::on('on_note_reblog', function (Actor $actor, Note $note): void { +/** + * @param Actor $actor + * @param Note $note + */ +Events::on('on_note_reblog', function ($actor, $note): void { if ($episodeId = $note->episode_id) { model('EpisodeModel') ->where('id', $episodeId) @@ -127,19 +191,31 @@ Events::on('on_note_reblog', function (Actor $actor, Note $note): void { ->increment('notes_total'); } - cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); - cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + if ($note->actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + } + + if ($actor->is_podcast) { + cache()->deleteMatching("podcast#{$actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$actor->podcast->id}*"); + } + cache() ->deleteMatching("page_note#{$note->id}*"); - if ($actor->is_podcast) { - cache()->deleteMatching("page_podcast#{$actor->podcast->id}*"); + if ($note->is_reply) { + cache()->deleteMatching("page_note#{$note->in_reply_to_id}"); } }); -Events::on('on_note_undo_reblog', function (Note $reblogNote): void { +/** + * @param Note $reblogNote + */ +Events::on('on_note_undo_reblog', function ($reblogNote): void { $note = $reblogNote->reblog_of_note; if ($episodeId = $note->episode_id) { model('EpisodeModel') @@ -151,74 +227,128 @@ Events::on('on_note_undo_reblog', function (Note $reblogNote): void { ->decrement('notes_total'); } - cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); - cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + if ($note->actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + } + cache() ->deleteMatching("page_note#{$note->id}*"); + cache() + ->deleteMatching("page_note#{$reblogNote->id}*"); + + if ($note->is_reply) { + cache()->deleteMatching("page_note#{$note->in_reply_to_id}"); + } if ($reblogNote->actor->is_podcast) { - cache()->deleteMatching("page_podcast#{$reblogNote->actor->podcast->id}*",); + cache() + ->deleteMatching("podcast#{$reblogNote->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$reblogNote->actor->podcast->id}*"); } }); -Events::on('on_note_reply', function (Note $reply): void { +/** + * @param Note $reply + */ +Events::on('on_note_reply', function ($reply): void { $note = $reply->reply_to_note; - cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + if ($note->actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + } + cache() ->deleteMatching("page_note#{$note->id}*"); }); -Events::on('on_reply_remove', function (Note $reply): void { +/** + * @param Note $reply + */ +Events::on('on_reply_remove', function ($reply): void { $note = $reply->reply_to_note; - cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); - cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + if ($note->actor->is_podcast) { + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + } + cache() ->deleteMatching("page_note#{$note->id}*"); + cache() + ->deleteMatching("page_note#{$reply->id}*"); }); -Events::on('on_note_favourite', function (Actor $actor, Note $note): void { +/** + * @param Actor $actor + * @param Note $note + */ +Events::on('on_note_favourite', function ($actor, $note): void { if ($note->episode_id) { model('EpisodeModel') ->where('id', $note->episode_id) ->increment('favourites_total'); } - cache() - ->deleteMatching("page_podcast#{$actor->podcast->id}*"); - cache() - ->deleteMatching("podcast#{$actor->podcast->id}*"); + if ($note->actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + } + cache() ->deleteMatching("page_note#{$note->id}*"); - if ($note->in_reply_to_id) { + if ($note->is_reply) { cache()->deleteMatching("page_note#{$note->in_reply_to_id}*"); } + + if ($actor->is_podcast) { + cache()->deleteMatching("podcast#{$actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$actor->podcast->id}*"); + } }); -Events::on('on_note_undo_favourite', function (Actor $actor, Note $note): void { +/** + * @param Actor $actor + * @param Note $note + */ +Events::on('on_note_undo_favourite', function ($actor, $note): void { if ($note->episode_id) { model('EpisodeModel') ->where('id', $note->episode_id) ->decrement('favourites_total'); } - cache() - ->deleteMatching("page_podcast#{$actor->podcast->id}*"); - cache() - ->deleteMatching("podcast#{$actor->podcast->id}*"); + if ($note->actor->is_podcast) { + cache() + ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + } + cache() ->deleteMatching("page_note#{$note->id}*"); - if ($note->in_reply_to_id) { + if ($note->is_reply) { cache()->deleteMatching("page_note#{$note->in_reply_to_id}*"); } + + if ($actor->is_podcast) { + cache()->deleteMatching("podcast#{$actor->podcast->id}*"); + cache() + ->deleteMatching("page_podcast#{$actor->podcast->id}*"); + } }); Events::on('on_block_actor', function (int $actorId): void { diff --git a/app/Config/Exceptions.php b/app/Config/Exceptions.php index f264eee9bb..84f4864705 100644 --- a/app/Config/Exceptions.php +++ b/app/Config/Exceptions.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Filters.php b/app/Config/Filters.php index 20504ddd9a..9a5b8a2e85 100644 --- a/app/Config/Filters.php +++ b/app/Config/Filters.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use ActivityPub\Filters\ActivityPubFilter; diff --git a/app/Config/ForeignCharacters.php b/app/Config/ForeignCharacters.php index 174ddb16a8..c8fb8ba376 100644 --- a/app/Config/ForeignCharacters.php +++ b/app/Config/ForeignCharacters.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\ForeignCharacters as BaseForeignCharacters; diff --git a/app/Config/Format.php b/app/Config/Format.php index ad234bfac2..9cf092441c 100644 --- a/app/Config/Format.php +++ b/app/Config/Format.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Generators.php b/app/Config/Generators.php index 922a02ff60..889825aa92 100644 --- a/app/Config/Generators.php +++ b/app/Config/Generators.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Honeypot.php b/app/Config/Honeypot.php index 179b015469..e47cfdf4be 100644 --- a/app/Config/Honeypot.php +++ b/app/Config/Honeypot.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Images.php b/app/Config/Images.php index 9d1cea8a11..debc98f039 100644 --- a/app/Config/Images.php +++ b/app/Config/Images.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Kint.php b/app/Config/Kint.php index 81fb26e938..c814e56453 100644 --- a/app/Config/Kint.php +++ b/app/Config/Kint.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Logger.php b/app/Config/Logger.php index 26cea6dfd5..5e5b728b89 100644 --- a/app/Config/Logger.php +++ b/app/Config/Logger.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Migrations.php b/app/Config/Migrations.php index 937484ce14..d4e7731be3 100644 --- a/app/Config/Migrations.php +++ b/app/Config/Migrations.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Mimes.php b/app/Config/Mimes.php index 759ccac63f..794c58db60 100644 --- a/app/Config/Mimes.php +++ b/app/Config/Mimes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; /** diff --git a/app/Config/Modules.php b/app/Config/Modules.php index 5fe2b53a27..e17d03f7bb 100644 --- a/app/Config/Modules.php +++ b/app/Config/Modules.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Modules\Modules as BaseModules; diff --git a/app/Config/Pager.php b/app/Config/Pager.php index eb14d9a578..b98b2d8f23 100644 --- a/app/Config/Pager.php +++ b/app/Config/Pager.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Paths.php b/app/Config/Paths.php index ab3c0d7b43..92fcea0121 100644 --- a/app/Config/Paths.php +++ b/app/Config/Paths.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; /** diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 7ca364c66e..edef6a7ed6 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; // Create a new instance of our RouteCollection class. @@ -34,7 +36,7 @@ $routes->addPlaceholder('slug', '[a-zA-Z0-9\-]{1,191}'); $routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}'); $routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding'); $routes->addPlaceholder('noteAction', '\bfavourite|\breblog|\breply'); -$routes->addPlaceholder('embeddablePlayerTheme', '\blight|\bdark|\blight-transparent|\bdark-transparent',); +$routes->addPlaceholder('embeddablePlayerTheme', '\blight|\bdark|\blight-transparent|\bdark-transparent'); $routes->addPlaceholder( 'uuid', '[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}', @@ -59,10 +61,10 @@ $routes->group(config('App')->installGateway, function ($routes): void { ]); $routes->post('instance-config', 'InstallController::attemptInstanceConfig', [ 'as' => 'instance-config', - ],); + ]); $routes->post('database-config', 'InstallController::attemptDatabaseConfig', [ 'as' => 'database-config', - ],); + ]); $routes->post('cache-config', 'InstallController::attemptCacheConfig', [ 'as' => 'cache-config', ]); @@ -626,7 +628,7 @@ $routes->group( 'as' => 'change-password', ], ); - $routes->post('change-password', 'MyAccountController::attemptChange/$1',); + $routes->post('change-password', 'MyAccountController::attemptChange/$1'); }); }, ); diff --git a/app/Config/Security.php b/app/Config/Security.php index d0f31414b1..9334bbe987 100644 --- a/app/Config/Security.php +++ b/app/Config/Security.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Services.php b/app/Config/Services.php index 517459be1c..cb84fa77a6 100644 --- a/app/Config/Services.php +++ b/app/Config/Services.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use App\Authorization\FlatAuthorization; @@ -76,7 +78,7 @@ class Services extends BaseService bool $getShared = true ) { if ($getShared) { - return self::getSharedInstance('authentication', $lib, $userModel, $loginModel,); + return self::getSharedInstance('authentication', $lib, $userModel, $loginModel); } // config() checks first in app/Config @@ -108,7 +110,7 @@ class Services extends BaseService bool $getShared = true ) { if ($getShared) { - return self::getSharedInstance('authorization', $groupModel, $permissionModel, $userModel,); + return self::getSharedInstance('authorization', $groupModel, $permissionModel, $userModel); } if ($groupModel === null) { diff --git a/app/Config/Toolbar.php b/app/Config/Toolbar.php index 327d433d6c..bba751e32b 100644 --- a/app/Config/Toolbar.php +++ b/app/Config/Toolbar.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/UserAgents.php b/app/Config/UserAgents.php index 05cdd725ec..0265a5ebb0 100644 --- a/app/Config/UserAgents.php +++ b/app/Config/UserAgents.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Config/Validation.php b/app/Config/Validation.php index fd1e70042f..bcabb7f472 100644 --- a/app/Config/Validation.php +++ b/app/Config/Validation.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use App\Validation\FileRules as AppFileRules; diff --git a/app/Config/View.php b/app/Config/View.php index e2e65a6196..0650d129ee 100644 --- a/app/Config/View.php +++ b/app/Config/View.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Config; use CodeIgniter\Config\View as BaseView; diff --git a/app/Controllers/ActorController.php b/app/Controllers/ActorController.php index d667957c3b..fb9c2bc680 100644 --- a/app/Controllers/ActorController.php +++ b/app/Controllers/ActorController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -24,6 +26,7 @@ class ActorController extends ActivityPubActorController { // Prevent analytics hit when authenticated if (! can_user_interact()) { + // @phpstan-ignore-next-line $this->registerPodcastWebpageHit($this->actor->podcast->id); } diff --git a/app/Controllers/Admin/BaseController.php b/app/Controllers/Admin/BaseController.php index 207698faa4..a5629f250b 100644 --- a/app/Controllers/Admin/BaseController.php +++ b/app/Controllers/Admin/BaseController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace App\Controllers\Admin; use CodeIgniter\Controller; diff --git a/app/Controllers/Admin/ContributorController.php b/app/Controllers/Admin/ContributorController.php index 54abfd3ad7..d09ed1c4c5 100644 --- a/app/Controllers/Admin/ContributorController.php +++ b/app/Controllers/Admin/ContributorController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/Admin/EpisodeController.php b/app/Controllers/Admin/EpisodeController.php index 385a94dc5e..2bef93fe99 100644 --- a/app/Controllers/Admin/EpisodeController.php +++ b/app/Controllers/Admin/EpisodeController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -161,7 +163,7 @@ class EpisodeController extends BaseController ) { $newEpisode->transcript_file = $transcriptFile; } elseif ($transcriptChoice === 'remote-url') { - $newEpisode->transcript_file_remote_url = $this->request->getPost('transcript_file_remote_url',); + $newEpisode->transcript_file_remote_url = $this->request->getPost('transcript_file_remote_url'); } $chaptersChoice = $this->request->getPost('chapters-choice'); @@ -171,7 +173,7 @@ class EpisodeController extends BaseController ) { $newEpisode->chapters_file = $chaptersFile; } elseif ($chaptersChoice === 'remote-url') { - $newEpisode->chapters_file_remote_url = $this->request->getPost('chapters_file_remote_url',); + $newEpisode->chapters_file_remote_url = $this->request->getPost('chapters_file_remote_url'); } $episodeModel = new EpisodeModel(); @@ -187,7 +189,7 @@ class EpisodeController extends BaseController $podcastModel = new PodcastModel(); if ($this->podcast->hasChanged('episode_description_footer_markdown')) { - $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer',); + $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer'); if (! $podcastModel->update($this->podcast->id, $this->podcast)) { return redirect() @@ -237,8 +239,8 @@ class EpisodeController extends BaseController $this->episode->title = $this->request->getPost('title'); $this->episode->slug = $this->request->getPost('slug'); - $this->episode->description_markdown = $this->request->getPost('description',); - $this->episode->location = new Location($this->request->getPost('location_name'),); + $this->episode->description_markdown = $this->request->getPost('description'); + $this->episode->location = new Location($this->request->getPost('location_name')); $this->episode->parental_advisory = $this->request->getPost('parental_advisory') !== 'undefined' ? $this->request->getPost('parental_advisory') @@ -251,7 +253,7 @@ class EpisodeController extends BaseController : null; $this->episode->type = $this->request->getPost('type'); $this->episode->is_blocked = $this->request->getPost('block') === 'yes'; - $this->episode->custom_rss_string = $this->request->getPost('custom_rss',); + $this->episode->custom_rss_string = $this->request->getPost('custom_rss'); $this->episode->updated_by = (int) user_id(); @@ -278,7 +280,7 @@ class EpisodeController extends BaseController (($transcriptFile = $this->episode->transcript_file) && $transcriptFile !== null) ) { - unlink($transcriptFile); + unlink((string) $transcriptFile); $this->episode->transcript_file_path = null; } $this->episode->transcript_file_remote_url = $transcriptFileRemoteUrl; @@ -297,7 +299,7 @@ class EpisodeController extends BaseController (($chaptersFile = $this->episode->chapters_file) && $chaptersFile !== null) ) { - unlink($chaptersFile); + unlink((string) $chaptersFile); $this->episode->chapters_file_path = null; } $this->episode->chapters_file_remote_url = $chaptersFileRemoteUrl; @@ -313,7 +315,7 @@ class EpisodeController extends BaseController } // update podcast's episode_description_footer_markdown if changed - $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer',); + $this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer'); if ($this->podcast->hasChanged('episode_description_footer_markdown')) { $podcastModel = new PodcastModel(); @@ -330,7 +332,7 @@ class EpisodeController extends BaseController public function transcriptDelete(): RedirectResponse { - unlink($this->episode->transcript_file); + unlink((string) $this->episode->transcript_file); $this->episode->transcript_file_path = null; $episodeModel = new EpisodeModel(); @@ -347,7 +349,7 @@ class EpisodeController extends BaseController public function chaptersDelete(): RedirectResponse { - unlink($this->episode->chapters_file); + unlink((string) $this->episode->chapters_file); $this->episode->chapters_file_path = null; $episodeModel = new EpisodeModel(); @@ -409,7 +411,7 @@ class EpisodeController extends BaseController $publishMethod = $this->request->getPost('publication_method'); if ($publishMethod === 'schedule') { - $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date',); + $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date'); if ($scheduledPublicationDate) { $this->episode->published_at = Time::createFromFormat( 'Y-m-d H:i', @@ -498,7 +500,7 @@ class EpisodeController extends BaseController $publishMethod = $this->request->getPost('publication_method'); if ($publishMethod === 'schedule') { - $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date',); + $scheduledPublicationDate = $this->request->getPost('scheduled_publication_date'); if ($scheduledPublicationDate) { $this->episode->published_at = Time::createFromFormat( 'Y-m-d H:i', @@ -516,7 +518,7 @@ class EpisodeController extends BaseController $this->episode->published_at = Time::now(); } - $note = (new NoteModel())->getNoteById($this->request->getPost('note_id'),); + $note = (new NoteModel())->getNoteById($this->request->getPost('note_id')); if ($note !== null) { $note->message = $this->request->getPost('message'); @@ -688,7 +690,7 @@ class EpisodeController extends BaseController public function soundbiteDelete(int $soundbiteId): RedirectResponse { - (new SoundbiteModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbiteId,); + (new SoundbiteModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbiteId); return redirect()->route('soundbites-edit', [$this->podcast->id, $this->episode->id]); } diff --git a/app/Controllers/Admin/EpisodePersonController.php b/app/Controllers/Admin/EpisodePersonController.php index 4257bef2d8..50289a7a2d 100644 --- a/app/Controllers/Admin/EpisodePersonController.php +++ b/app/Controllers/Admin/EpisodePersonController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -88,7 +90,7 @@ class EpisodePersonController extends BaseController public function remove(int $personId): RedirectResponse { - (new PersonModel())->removePersonFromEpisode($this->podcast->id, $this->episode->id, $personId,); + (new PersonModel())->removePersonFromEpisode($this->podcast->id, $this->episode->id, $personId); return redirect()->back(); } diff --git a/app/Controllers/Admin/FediverseController.php b/app/Controllers/Admin/FediverseController.php index 29a5188d2b..a51dc095cd 100644 --- a/app/Controllers/Admin/FediverseController.php +++ b/app/Controllers/Admin/FediverseController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/Admin/HomeController.php b/app/Controllers/Admin/HomeController.php index 7504b6ed9e..f0db00f0a3 100644 --- a/app/Controllers/Admin/HomeController.php +++ b/app/Controllers/Admin/HomeController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/Admin/MyAccountController.php b/app/Controllers/Admin/MyAccountController.php index fa4f87e5e1..84ddc14df0 100644 --- a/app/Controllers/Admin/MyAccountController.php +++ b/app/Controllers/Admin/MyAccountController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/Admin/PageController.php b/app/Controllers/Admin/PageController.php index a38ebdf0f4..7c21f99b19 100644 --- a/app/Controllers/Admin/PageController.php +++ b/app/Controllers/Admin/PageController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -74,7 +76,7 @@ class PageController extends BaseController ->route('page-list') ->with('message', lang('Page.messages.createSuccess', [ 'pageTitle' => $page->title, - ]),); + ])); } public function edit(): string diff --git a/app/Controllers/Admin/PersonController.php b/app/Controllers/Admin/PersonController.php index 7de6ae4220..d8cb6bca80 100644 --- a/app/Controllers/Admin/PersonController.php +++ b/app/Controllers/Admin/PersonController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -126,7 +128,7 @@ class PersonController extends BaseController $this->person->full_name = $this->request->getPost('full_name'); $this->person->unique_name = $this->request->getPost('unique_name'); - $this->person->information_url = $this->request->getPost('information_url',); + $this->person->information_url = $this->request->getPost('information_url'); $imageFile = $this->request->getFile('image'); if ($imageFile !== null && $imageFile->isValid()) { $this->person->image = new Image($imageFile); diff --git a/app/Controllers/Admin/PodcastController.php b/app/Controllers/Admin/PodcastController.php index 47717682be..f68ef5e3fe 100644 --- a/app/Controllers/Admin/PodcastController.php +++ b/app/Controllers/Admin/PodcastController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -225,7 +227,7 @@ class PodcastController extends BaseController $authorize = Services::authorization(); $podcastAdminGroup = $authorize->group('podcast_admin'); - $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id,); + $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id); // set Podcast categories (new CategoryModel())->setPodcastCategories( @@ -276,7 +278,7 @@ class PodcastController extends BaseController } $this->podcast->title = $this->request->getPost('title'); - $this->podcast->description_markdown = $this->request->getPost('description',); + $this->podcast->description_markdown = $this->request->getPost('description'); $image = $this->request->getFile('image'); if ($image !== null && $image->isValid()) { @@ -293,12 +295,12 @@ class PodcastController extends BaseController $this->podcast->owner_email = $this->request->getPost('owner_email'); $this->podcast->type = $this->request->getPost('type'); $this->podcast->copyright = $this->request->getPost('copyright'); - $this->podcast->location = new Location($this->request->getPost('location_name'),); - $this->podcast->payment_pointer = $this->request->getPost('payment_pointer',); - $this->podcast->custom_rss_string = $this->request->getPost('custom_rss',); + $this->podcast->location = new Location($this->request->getPost('location_name')); + $this->podcast->payment_pointer = $this->request->getPost('payment_pointer'); + $this->podcast->custom_rss_string = $this->request->getPost('custom_rss'); $this->podcast->partner_id = $this->request->getPost('partner_id'); - $this->podcast->partner_link_url = $this->request->getPost('partner_link_url',); - $this->podcast->partner_image_url = $this->request->getPost('partner_image_url',); + $this->podcast->partner_link_url = $this->request->getPost('partner_link_url'); + $this->podcast->partner_image_url = $this->request->getPost('partner_image_url'); $this->podcast->is_blocked = $this->request->getPost('block') === 'yes'; $this->podcast->is_completed = $this->request->getPost('complete') === 'yes'; diff --git a/app/Controllers/Admin/PodcastImportController.php b/app/Controllers/Admin/PodcastImportController.php index 1f669a2a8d..a7962f96bb 100644 --- a/app/Controllers/Admin/PodcastImportController.php +++ b/app/Controllers/Admin/PodcastImportController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -78,7 +80,7 @@ class PodcastImportController extends BaseController } try { ini_set('user_agent', 'Castopod/' . CP_VERSION); - $feed = simplexml_load_file($this->request->getPost('imported_feed_url'),); + $feed = simplexml_load_file($this->request->getPost('imported_feed_url')); } catch (ErrorException $errorException) { return redirect() ->back() @@ -92,11 +94,11 @@ class PodcastImportController extends BaseController ' ⎋</a>', ]); } - $nsItunes = $feed->channel[0]->children('http://www.itunes.com/dtds/podcast-1.0.dtd',); + $nsItunes = $feed->channel[0]->children('http://www.itunes.com/dtds/podcast-1.0.dtd'); $nsPodcast = $feed->channel[0]->children( 'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md', ); - $nsContent = $feed->channel[0]->children('http://purl.org/rss/1.0/modules/content/',); + $nsContent = $feed->channel[0]->children('http://purl.org/rss/1.0/modules/content/'); if ((string) $nsPodcast->locked === 'yes') { return redirect() @@ -114,9 +116,9 @@ class PodcastImportController extends BaseController property_exists($nsItunes, 'image') && $nsItunes->image !== null && $nsItunes->image->attributes()['href'] !== null ) { - $imageFile = download_file((string) $nsItunes->image->attributes()['href'],); + $imageFile = download_file((string) $nsItunes->image->attributes()['href']); } else { - $imageFile = download_file((string) $feed->channel[0]->image->url,); + $imageFile = download_file((string) $feed->channel[0]->image->url); } $location = null; @@ -195,7 +197,7 @@ class PodcastImportController extends BaseController $authorize = Services::authorization(); $podcastAdminGroup = $authorize->group('podcast_admin'); - $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id,); + $podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id); $podcastsPlatformsData = []; $platformTypes = [ @@ -230,7 +232,7 @@ class PodcastImportController extends BaseController } if (count($podcastsPlatformsData) > 1) { - $platformModel->createPodcastPlatforms($newPodcastId, $podcastsPlatformsData,); + $platformModel->createPodcastPlatforms($newPodcastId, $podcastsPlatformsData); } foreach ($nsPodcast->person as $podcastPerson) { @@ -291,11 +293,11 @@ class PodcastImportController extends BaseController for ($itemNumber = 1; $itemNumber <= $lastItem; ++$itemNumber) { $item = $feed->channel[0]->item[$numberItems - $itemNumber]; - $nsItunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd',); + $nsItunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd'); $nsPodcast = $item->children( 'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md', ); - $nsContent = $item->children('http://purl.org/rss/1.0/modules/content/',); + $nsContent = $item->children('http://purl.org/rss/1.0/modules/content/'); $slug = slugify( $this->request->getPost('slug_field') === 'title' @@ -321,7 +323,7 @@ class PodcastImportController extends BaseController property_exists($nsItunes, 'image') && $nsItunes->image !== null && $nsItunes->image->attributes()['href'] !== null ) { - $episodeImage = new Image(download_file((string) $nsItunes->image->attributes()['href'],),); + $episodeImage = new Image(download_file((string) $nsItunes->image->attributes()['href'],)); } else { $episodeImage = null; } diff --git a/app/Controllers/Admin/PodcastPersonController.php b/app/Controllers/Admin/PodcastPersonController.php index cd4c5a3613..8bab93babe 100644 --- a/app/Controllers/Admin/PodcastPersonController.php +++ b/app/Controllers/Admin/PodcastPersonController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -74,7 +76,7 @@ class PodcastPersonController extends BaseController public function remove(int $personId): RedirectResponse { - (new PersonModel())->removePersonFromPodcast($this->podcast->id, $personId,); + (new PersonModel())->removePersonFromPodcast($this->podcast->id, $personId); return redirect()->back(); } diff --git a/app/Controllers/Admin/PodcastPlatformController.php b/app/Controllers/Admin/PodcastPlatformController.php index 7a38a8ba5a..a8ed9dde0d 100644 --- a/app/Controllers/Admin/PodcastPlatformController.php +++ b/app/Controllers/Admin/PodcastPlatformController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -93,7 +95,7 @@ class PodcastPlatformController extends BaseController ->with('message', lang('Platforms.messages.updateSuccess')); } - $platformModel->savePodcastPlatforms($this->podcast->id, $platformType, $podcastsPlatformsData,); + $platformModel->savePodcastPlatforms($this->podcast->id, $platformType, $podcastsPlatformsData); return redirect() ->back() @@ -102,7 +104,7 @@ class PodcastPlatformController extends BaseController public function removePodcastPlatform(string $platformSlug): RedirectResponse { - (new PlatformModel())->removePodcastPlatform($this->podcast->id, $platformSlug,); + (new PlatformModel())->removePodcastPlatform($this->podcast->id, $platformSlug); return redirect() ->back() diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index 185dc15627..f6b5096b1d 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -108,7 +110,7 @@ class UserController extends BaseController ->route('user-list') ->with('message', lang('User.messages.createSuccess', [ 'username' => $user->username, - ]),); + ])); } public function edit(): string @@ -148,7 +150,7 @@ class UserController extends BaseController ->route('user-list') ->with('message', lang('User.messages.rolesEditSuccess', [ 'username' => $this->user->username, - ]),); + ])); } public function forcePassReset(): RedirectResponse @@ -200,7 +202,7 @@ class UserController extends BaseController ->route('user-list') ->with('message', lang('User.messages.banSuccess', [ 'username' => $this->user->username, - ]),); + ])); } public function unBan(): RedirectResponse @@ -218,7 +220,7 @@ class UserController extends BaseController ->route('user-list') ->with('message', lang('User.messages.unbanSuccess', [ 'username' => $this->user->username, - ]),); + ])); } public function delete(): RedirectResponse @@ -240,6 +242,6 @@ class UserController extends BaseController ->back() ->with('message', lang('User.messages.deleteSuccess', [ 'username' => $this->user->username, - ]),); + ])); } } diff --git a/app/Controllers/AuthController.php b/app/Controllers/AuthController.php index fad88706e1..9160453a01 100644 --- a/app/Controllers/AuthController.php +++ b/app/Controllers/AuthController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -53,7 +55,7 @@ class AuthController extends MythAuthController } // Save the user - $allowedPostFields = array_merge(['password'], $this->config->validFields, $this->config->personalFields,); + $allowedPostFields = array_merge(['password'], $this->config->validFields, $this->config->personalFields); $user = new User($this->request->getPost($allowedPostFields)); $this->config->requireActivation === null @@ -80,7 +82,7 @@ class AuthController extends MythAuthController return redirect() ->back() ->withInput() - ->with('error', $activator->error() ?? lang('Auth.unknownError'),); + ->with('error', $activator->error() ?? lang('Auth.unknownError')); } // Success! diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index c3320c050d..b76cf7b206 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace App\Controllers; use CodeIgniter\Controller; diff --git a/app/Controllers/CreditsController.php b/app/Controllers/CreditsController.php index 99ee06e059..8c1b5418bf 100644 --- a/app/Controllers/CreditsController.php +++ b/app/Controllers/CreditsController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/EpisodeController.php b/app/Controllers/EpisodeController.php index 96c1289414..f94fb386c8 100644 --- a/app/Controllers/EpisodeController.php +++ b/app/Controllers/EpisodeController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -100,7 +102,7 @@ class EpisodeController extends BaseController $session = Services::session(); $session->start(); if (isset($_SERVER['HTTP_REFERER'])) { - $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST),); + $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)); } $locale = service('request') @@ -159,7 +161,7 @@ class EpisodeController extends BaseController public function oembedXML(): ResponseInterface { - $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>",); + $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>"); $oembed->addChild('type', 'rich'); $oembed->addChild('version', '1.0'); @@ -182,6 +184,6 @@ class EpisodeController extends BaseController $oembed->addChild('width', '600'); $oembed->addChild('height', '200'); - return $this->response->setXML($oembed); + return $this->response->setXML((string) $oembed); } } diff --git a/app/Controllers/FeedController.php b/app/Controllers/FeedController.php index 3fca237629..ab0d26a412 100644 --- a/app/Controllers/FeedController.php +++ b/app/Controllers/FeedController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -33,10 +35,10 @@ class FeedController extends Controller $service = UserAgentsRSS::find($_SERVER['HTTP_USER_AGENT']); } catch (Exception $exception) { // If things go wrong the show must go on and the user must be able to download the file - log_message('critical', $exception); + log_message('critical', $exception->getMessage()); } - $serviceSlug = null; + $serviceSlug = ''; if ($service) { $serviceSlug = $service['slug']; } diff --git a/app/Controllers/HomeController.php b/app/Controllers/HomeController.php index 99e4d2bc9e..26c7e480b6 100644 --- a/app/Controllers/HomeController.php +++ b/app/Controllers/HomeController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/InstallController.php b/app/Controllers/InstallController.php index 8e80b35dfc..9873ac5003 100644 --- a/app/Controllers/InstallController.php +++ b/app/Controllers/InstallController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -123,7 +125,7 @@ class InstallController extends Controller // Could not connect to the database // show database config view to fix value session() - ->setFlashdata('error', lang('Install.messages.databaseConnectError'),); + ->setFlashdata('error', lang('Install.messages.databaseConnectError')); return view('install/database_config'); } @@ -171,7 +173,7 @@ class InstallController extends Controller helper('text'); // redirect to full install url with new baseUrl input - return redirect()->to(reduce_double_slashes($baseUrl . '/' . config('App')->installGateway,),); + return redirect()->to(reduce_double_slashes($baseUrl . '/' . config('App')->installGateway,)); } public function databaseConfig(): string diff --git a/app/Controllers/NoteController.php b/app/Controllers/NoteController.php index 35c1fd08c0..90524b54d2 100644 --- a/app/Controllers/NoteController.php +++ b/app/Controllers/NoteController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -15,6 +17,7 @@ use App\Entities\Actor; use App\Entities\Note as CastopodNote; use App\Entities\Podcast; use App\Models\EpisodeModel; +use App\Models\NoteModel; use App\Models\PodcastModel; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\RedirectResponse; @@ -46,7 +49,7 @@ class NoteController extends ActivityPubNoteController if ( count($params) > 1 && - ! ($this->note = model('NoteModel')->getNoteById($params[1])) + ! ($this->note = (new NoteModel())->getNoteById($params[1])) ) { throw PageNotFoundException::forPageNotFound(); } @@ -129,14 +132,15 @@ class NoteController extends ActivityPubNoteController $newNote->message = $message; + $noteModel = new NoteModel(); if ( - ! model('NoteModel') + ! $noteModel ->addNote($newNote, ! (bool) $newNote->episode_id, true,) ) { return redirect() ->back() ->withInput() - ->with('errors', model('NoteModel')->errors()); + ->with('errors', $noteModel->errors()); } // Note has been successfully created @@ -164,11 +168,12 @@ class NoteController extends ActivityPubNoteController 'created_by' => user_id(), ]); - if (! model('NoteModel')->addReply($newNote)) { + $noteModel = new NoteModel(); + if (! $noteModel->addReply($newNote)) { return redirect() ->back() ->withInput() - ->with('errors', model('NoteModel')->errors()); + ->with('errors', $noteModel->errors()); } // Reply note without preview card has been successfully created @@ -177,14 +182,14 @@ class NoteController extends ActivityPubNoteController public function attemptFavourite(): RedirectResponse { - model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->note,); + model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->note); return redirect()->back(); } public function attemptReblog(): RedirectResponse { - model('NoteModel')->toggleReblog(interact_as_actor(), $this->note); + (new NoteModel())->toggleReblog(interact_as_actor(), $this->note); return redirect()->back(); } diff --git a/app/Controllers/PageController.php b/app/Controllers/PageController.php index d3476ecc81..499dabd0f6 100644 --- a/app/Controllers/PageController.php +++ b/app/Controllers/PageController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/PlatformController.php b/app/Controllers/PlatformController.php index 481f8e4370..812bacaf35 100644 --- a/app/Controllers/PlatformController.php +++ b/app/Controllers/PlatformController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Controllers/PodcastController.php b/app/Controllers/PodcastController.php index b9b1da35aa..07fbc1b0d7 100644 --- a/app/Controllers/PodcastController.php +++ b/app/Controllers/PodcastController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -94,7 +96,7 @@ class PodcastController extends BaseController $seasonQuery = $this->request->getGet('season'); if (! $yearQuery && ! $seasonQuery) { - $defaultQuery = (new PodcastModel())->getDefaultQuery($this->podcast->id,); + $defaultQuery = (new PodcastModel())->getDefaultQuery($this->podcast->id); if ($defaultQuery) { if ($defaultQuery['type'] === 'season') { $seasonQuery = $defaultQuery['data']['season_number']; diff --git a/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php b/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php index d65ca3e95a..7018080387 100644 --- a/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php +++ b/app/Database/Migrations/2017-12-01-160000_add_podcasts_platforms.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAddPodcastsPlatforms Creates podcasts_platforms table in database * diff --git a/app/Database/Migrations/2020-05-29-152000_add_categories.php b/app/Database/Migrations/2020-05-29-152000_add_categories.php index d9ea0b6410..7841241722 100644 --- a/app/Database/Migrations/2020-05-29-152000_add_categories.php +++ b/app/Database/Migrations/2020-05-29-152000_add_categories.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddCategories Creates categories table in database * diff --git a/app/Database/Migrations/2020-05-30-101000_add_languages.php b/app/Database/Migrations/2020-05-30-101000_add_languages.php index 4a4a341739..ee287a302d 100644 --- a/app/Database/Migrations/2020-05-30-101000_add_languages.php +++ b/app/Database/Migrations/2020-05-30-101000_add_languages.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddLanguages Creates languages table in database * diff --git a/app/Database/Migrations/2020-05-30-101500_add_podcasts.php b/app/Database/Migrations/2020-05-30-101500_add_podcasts.php index 5e82045a15..b04c92667a 100644 --- a/app/Database/Migrations/2020-05-30-101500_add_podcasts.php +++ b/app/Database/Migrations/2020-05-30-101500_add_podcasts.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddPodcasts Creates podcasts table in database * @@ -189,7 +191,7 @@ class AddPodcasts extends Migration // TODO: remove name in favor of username from actor $this->forge->addUniqueKey('name'); $this->forge->addUniqueKey('actor_id'); - $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); $this->forge->addForeignKey('category_id', 'categories', 'id'); $this->forge->addForeignKey('language_code', 'languages', 'code'); $this->forge->addForeignKey('created_by', 'users', 'id'); diff --git a/app/Database/Migrations/2020-06-05-170000_add_episodes.php b/app/Database/Migrations/2020-06-05-170000_add_episodes.php index b65a09b9a6..e54794a60a 100644 --- a/app/Database/Migrations/2020-06-05-170000_add_episodes.php +++ b/app/Database/Migrations/2020-06-05-170000_add_episodes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddEpisodes Creates episodes table in database * @@ -185,7 +187,7 @@ class AddEpisodes extends Migration ]); $this->forge->addPrimaryKey('id'); $this->forge->addUniqueKey(['podcast_id', 'slug']); - $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE'); $this->forge->addForeignKey('created_by', 'users', 'id'); $this->forge->addForeignKey('updated_by', 'users', 'id'); $this->forge->createTable('episodes'); diff --git a/app/Database/Migrations/2020-06-05-180000_add_soundbites.php b/app/Database/Migrations/2020-06-05-180000_add_soundbites.php index 68eecadcc4..cf20ee1d3c 100644 --- a/app/Database/Migrations/2020-06-05-180000_add_soundbites.php +++ b/app/Database/Migrations/2020-06-05-180000_add_soundbites.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddSoundbites Creates soundbites table in database * @@ -63,8 +65,8 @@ class AddSoundbites extends Migration ]); $this->forge->addKey('id', true); $this->forge->addUniqueKey(['episode_id', 'start_time', 'duration']); - $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE'); $this->forge->addForeignKey('created_by', 'users', 'id'); $this->forge->addForeignKey('updated_by', 'users', 'id'); $this->forge->createTable('soundbites'); diff --git a/app/Database/Migrations/2020-06-05-190000_add_platforms.php b/app/Database/Migrations/2020-06-05-190000_add_platforms.php index 4bb7ba801d..24dec9434a 100644 --- a/app/Database/Migrations/2020-06-05-190000_add_platforms.php +++ b/app/Database/Migrations/2020-06-05-190000_add_platforms.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddPlatforms Creates platforms table in database * @@ -41,7 +43,7 @@ class AddPlatforms extends Migration ], ]); $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT NOW()'); - $this->forge->addField('`updated_at` timestamp NOT NULL DEFAULT NOW() ON UPDATE NOW()',); + $this->forge->addField('`updated_at` timestamp NOT NULL DEFAULT NOW() ON UPDATE NOW()'); $this->forge->addPrimaryKey('slug'); $this->forge->createTable('platforms'); } diff --git a/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php b/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php index 18ca8dd047..75810948c8 100644 --- a/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php +++ b/app/Database/Migrations/2020-07-03-191500_add_podcasts_users.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddPodcastUsers Creates podcast_users table in database * @@ -32,8 +34,8 @@ class AddPodcastsUsers extends Migration ]); $this->forge->addPrimaryKey(['user_id', 'podcast_id']); $this->forge->addForeignKey('user_id', 'users', 'id', '', 'CASCADE'); - $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('group_id', 'auth_groups', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('group_id', 'auth_groups', 'id', '', 'CASCADE'); $this->forge->createTable('podcasts_users'); } diff --git a/app/Database/Migrations/2020-08-17-150000_add_pages.php b/app/Database/Migrations/2020-08-17-150000_add_pages.php index 6ee21b07ef..cee4ef5877 100644 --- a/app/Database/Migrations/2020-08-17-150000_add_pages.php +++ b/app/Database/Migrations/2020-08-17-150000_add_pages.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddPages Creates pages table in database * diff --git a/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php b/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php index a97d4cd885..1b16cc25bc 100644 --- a/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php +++ b/app/Database/Migrations/2020-09-29-150000_add_podcasts_categories.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddPodcastsCategories Creates podcasts_categories table in database * @@ -27,8 +29,8 @@ class AddPodcastsCategories extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'category_id']); - $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('category_id', 'categories', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('category_id', 'categories', 'id', '', 'CASCADE'); $this->forge->createTable('podcasts_categories'); } diff --git a/app/Database/Migrations/2020-12-25-120000_add_persons.php b/app/Database/Migrations/2020-12-25-120000_add_persons.php index c795301022..3067905bcf 100644 --- a/app/Database/Migrations/2020-12-25-120000_add_persons.php +++ b/app/Database/Migrations/2020-12-25-120000_add_persons.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class Persons Creates persons table in database * diff --git a/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php b/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php index b05fe6c687..6b758dc3b9 100644 --- a/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php +++ b/app/Database/Migrations/2020-12-25-130000_add_podcasts_persons.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddPodcastsPersons Creates podcasts_persons table in database * @@ -41,8 +43,8 @@ class AddPodcastsPersons extends Migration ]); $this->forge->addKey('id', true); $this->forge->addUniqueKey(['podcast_id', 'person_id', 'person_group', 'person_role']); - $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE'); $this->forge->createTable('podcasts_persons'); } diff --git a/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php b/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php index 74ef6bcaa7..c52f8c15b4 100644 --- a/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php +++ b/app/Database/Migrations/2020-12-25-140000_add_episodes_persons.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddEpisodesPersons Creates episodes_persons table in database * @@ -45,9 +47,9 @@ class AddEpisodesPersons extends Migration ]); $this->forge->addPrimaryKey('id'); $this->forge->addUniqueKey(['podcast_id', 'episode_id', 'person_id', 'person_group', 'person_role']); - $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE'); $this->forge->createTable('episodes_persons'); } diff --git a/app/Database/Migrations/2020-12-25-150000_add_credit_view.php b/app/Database/Migrations/2020-12-25-150000_add_credit_view.php index ee61e0f2a2..11029be264 100644 --- a/app/Database/Migrations/2020-12-25-150000_add_credit_view.php +++ b/app/Database/Migrations/2020-12-25-150000_add_credit_view.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddCreditView Creates Credit View in database * diff --git a/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php b/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php index 466fa6d196..958b011904 100644 --- a/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php +++ b/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddEpisodeIdToNotes Adds episode_id field to activitypub_notes table in database * @@ -28,7 +30,7 @@ class AddEpisodeIdToNotes extends Migration public function down(): void { - $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_episode_id_foreign',); + $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_episode_id_foreign'); $this->forge->dropColumn('activitypub_notes', 'episode_id'); } } diff --git a/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php b/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php index 035a2b57ea..496bf90236 100644 --- a/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php +++ b/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddCreatedByToNotes Adds created_by field to activitypub_notes table in database * @@ -28,7 +30,7 @@ class AddCreatedByToNotes extends Migration public function down(): void { - $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_created_by_foreign',); + $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_created_by_foreign'); $this->forge->dropColumn('activitypub_notes', 'created_by'); } } diff --git a/app/Database/Seeds/AppSeeder.php b/app/Database/Seeds/AppSeeder.php index 0e32cc8316..5101c8e24b 100644 --- a/app/Database/Seeds/AppSeeder.php +++ b/app/Database/Seeds/AppSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AppSeeder Calls all required seeders for castopod to work properly * diff --git a/app/Database/Seeds/AuthSeeder.php b/app/Database/Seeds/AuthSeeder.php index 56859c7d71..3905e55d6a 100644 --- a/app/Database/Seeds/AuthSeeder.php +++ b/app/Database/Seeds/AuthSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class PermissionSeeder Inserts permissions * diff --git a/app/Database/Seeds/CategorySeeder.php b/app/Database/Seeds/CategorySeeder.php index ba0699c804..f511754210 100644 --- a/app/Database/Seeds/CategorySeeder.php +++ b/app/Database/Seeds/CategorySeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class CategorySeeder Inserts values in categories table in database * diff --git a/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php b/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php index 15c71043ae..d5a63f4235 100644 --- a/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php +++ b/app/Database/Seeds/FakePodcastsAnalyticsSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class FakePodcastsAnalyticsSeeder Inserts Fake Analytics in the database * @@ -61,7 +63,7 @@ class FakePodcastsAnalyticsSeeder extends Seeder ->where('`published_at` <= NOW()', null, false) ->findAll(); foreach ($episodes as $episode) { - $age = floor(($date - strtotime($episode->published_at)) / 86400,); + $age = floor(($date - strtotime($episode->published_at)) / 86400); $probability1 = (int) floor(exp(3 - $age / 40)) + 1; for ( @@ -95,7 +97,7 @@ class FakePodcastsAnalyticsSeeder extends Seeder '.' . rand(0, 255); - $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb',); + $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb'); $countryCode = 'N/A'; $regionCode = 'N/A'; diff --git a/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php b/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php index ac10549829..6dc97eea52 100644 --- a/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php +++ b/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class FakeWebsiteAnalyticsSeeder Inserts Fake Analytics in the database * @@ -200,7 +202,7 @@ class FakeWebsiteAnalyticsSeeder extends Seeder ->where('`published_at` <= NOW()', null, false) ->findAll(); foreach ($episodes as $episode) { - $age = floor(($date - strtotime($episode->published_at)) / 86400,); + $age = floor(($date - strtotime($episode->published_at)) / 86400); $probability1 = (int) floor(exp(3 - $age / 40)) + 1; for ( diff --git a/app/Database/Seeds/LanguageSeeder.php b/app/Database/Seeds/LanguageSeeder.php index eefa2dedaf..b4080f970a 100644 --- a/app/Database/Seeds/LanguageSeeder.php +++ b/app/Database/Seeds/LanguageSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class LanguageSeeder Inserts values in languages table in database * diff --git a/app/Database/Seeds/PlatformSeeder.php b/app/Database/Seeds/PlatformSeeder.php index 0af60c65de..fbeb8f6274 100644 --- a/app/Database/Seeds/PlatformSeeder.php +++ b/app/Database/Seeds/PlatformSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class PlatformsSeeder Inserts values in platforms table in database * diff --git a/app/Database/Seeds/TestSeeder.php b/app/Database/Seeds/TestSeeder.php index ed171a5fe2..c9c682ec5d 100644 --- a/app/Database/Seeds/TestSeeder.php +++ b/app/Database/Seeds/TestSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class TestSeeder Inserts a superadmin user in the database * diff --git a/app/Entities/Actor.php b/app/Entities/Actor.php index 7cf06d6c38..9bbdc93fd4 100644 --- a/app/Entities/Actor.php +++ b/app/Entities/Actor.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -20,21 +22,21 @@ class Actor extends ActivityPubActor { protected ?Podcast $podcast = null; - protected bool $is_podcast; + protected bool $is_podcast = false; public function getIsPodcast(): bool { - return $this->podcast !== null; + return $this->getPodcast() !== null; } public function getPodcast(): ?Podcast { if ($this->id === null) { - throw new RuntimeException('Podcast id must be set before getting associated podcast.',); + throw new RuntimeException('Podcast id must be set before getting associated podcast.'); } if ($this->podcast === null) { - $this->podcast = (new PodcastModel())->getPodcastByActorId($this->id,); + $this->podcast = (new PodcastModel())->getPodcastByActorId($this->id); } return $this->podcast; diff --git a/app/Entities/Category.php b/app/Entities/Category.php index e3d9ceaddc..c29e37d243 100644 --- a/app/Entities/Category.php +++ b/app/Entities/Category.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Entities/Credit.php b/app/Entities/Credit.php index bb8f4b497b..5eddd9d658 100644 --- a/app/Entities/Credit.php +++ b/app/Entities/Credit.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -54,11 +56,11 @@ class Credit extends Entity public function getPerson(): ?Person { if ($this->person_id === null) { - throw new RuntimeException('Credit must have person_id before getting person.',); + throw new RuntimeException('Credit must have person_id before getting person.'); } if ($this->person === null) { - $this->person = (new PersonModel())->getPersonById($this->person_id,); + $this->person = (new PersonModel())->getPersonById($this->person_id); } return $this->person; @@ -67,11 +69,11 @@ class Credit extends Entity public function getPodcast(): ?Podcast { if ($this->podcast_id === null) { - throw new RuntimeException('Credit must have podcast_id before getting podcast.',); + throw new RuntimeException('Credit must have podcast_id before getting podcast.'); } if ($this->podcast === null) { - $this->podcast = (new PodcastModel())->getPodcastById($this->podcast_id,); + $this->podcast = (new PodcastModel())->getPodcastById($this->podcast_id); } return $this->podcast; @@ -80,11 +82,11 @@ class Credit extends Entity public function getEpisode(): ?Episode { if ($this->episode_id === null) { - throw new RuntimeException('Credit must have episode_id before getting episode.',); + throw new RuntimeException('Credit must have episode_id before getting episode.'); } if ($this->episode === null) { - $this->episode = (new EpisodeModel())->getPublishedEpisodeById($this->podcast_id, $this->episode_id,); + $this->episode = (new EpisodeModel())->getPublishedEpisodeById($this->podcast_id, $this->episode_id); } return $this->episode; @@ -109,6 +111,6 @@ class Credit extends Entity return ''; } - return lang("PersonsTaxonomy.persons.{$this->person_group}.roles.{$this->person_role}.label",); + return lang("PersonsTaxonomy.persons.{$this->person_group}.roles.{$this->person_role}.label"); } } diff --git a/app/Entities/Episode.php b/app/Entities/Episode.php index b54c4376e8..4b4b63d378 100644 --- a/app/Entities/Episode.php +++ b/app/Entities/Episode.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -178,7 +180,7 @@ class Episode extends Entity } // Save image - $image->saveImage('podcasts/' . $this->getPodcast()->name, $this->attributes['slug'],); + $image->saveImage('podcasts/' . $this->getPodcast()->name, $this->attributes['slug']); $this->attributes['image_mimetype'] = $image->mimetype; $this->attributes['image_path'] = $image->path; @@ -189,7 +191,7 @@ class Episode extends Entity public function getImage(): Image { if ($imagePath = $this->attributes['image_path']) { - return new Image(null, $imagePath, $this->attributes['image_mimetype'],); + return new Image(null, $imagePath, $this->attributes['image_mimetype']); } return $this->getPodcast() @@ -266,7 +268,7 @@ class Episode extends Entity if ($this->attributes['transcript_file_path']) { helper('media'); - return new File(media_path($this->attributes['transcript_file_path']),); + return new File(media_path($this->attributes['transcript_file_path'])); } return null; @@ -277,7 +279,7 @@ class Episode extends Entity if ($this->attributes['chapters_file_path']) { helper('media'); - return new File(media_path($this->attributes['chapters_file_path']),); + return new File(media_path($this->attributes['chapters_file_path'])); } return null; @@ -348,11 +350,11 @@ class Episode extends Entity public function getPersons(): array { if ($this->id === null) { - throw new RuntimeException('Episode must be created before getting persons.',); + throw new RuntimeException('Episode must be created before getting persons.'); } if ($this->persons === null) { - $this->persons = (new PersonModel())->getEpisodePersons($this->podcast_id, $this->id,); + $this->persons = (new PersonModel())->getEpisodePersons($this->podcast_id, $this->id); } return $this->persons; @@ -366,11 +368,11 @@ class Episode extends Entity public function getSoundbites(): array { if ($this->id === null) { - throw new RuntimeException('Episode must be created before getting soundbites.',); + throw new RuntimeException('Episode must be created before getting soundbites.'); } if ($this->soundbites === null) { - $this->soundbites = (new SoundbiteModel())->getEpisodeSoundbites($this->getPodcast() ->id, $this->id,); + $this->soundbites = (new SoundbiteModel())->getEpisodeSoundbites($this->getPodcast() ->id, $this->id); } return $this->soundbites; @@ -382,7 +384,7 @@ class Episode extends Entity public function getNotes(): array { if ($this->id === null) { - throw new RuntimeException('Episode must be created before getting soundbites.',); + throw new RuntimeException('Episode must be created before getting soundbites.'); } if ($this->notes === null) { @@ -394,7 +396,7 @@ class Episode extends Entity public function getLink(): string { - return base_url(route_to('episode', $this->getPodcast() ->name, $this->attributes['slug'],),); + return base_url(route_to('episode', $this->getPodcast() ->name, $this->attributes['slug'],)); } public function getEmbeddablePlayerUrl(string $theme = null): string @@ -421,7 +423,7 @@ class Episode extends Entity public function getPodcast(): ?Podcast { - return (new PodcastModel())->getPodcastById($this->attributes['podcast_id'],); + return (new PodcastModel())->getPodcastById($this->podcast_id); } public function setDescriptionMarkdown(string $descriptionMarkdown): static @@ -432,7 +434,7 @@ class Episode extends Entity ]); $this->attributes['description_markdown'] = $descriptionMarkdown; - $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown,); + $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown); return $this; } @@ -525,7 +527,7 @@ class Episode extends Entity } if ($this->location === null) { - $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm,); + $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm); } return $this->location; @@ -549,7 +551,7 @@ class Episode extends Entity ->addChild('item'); array_to_rss([ 'elements' => $this->custom_rss, - ], $xmlNode,); + ], $xmlNode); return str_replace(['<item>', '</item>'], '', $xmlNode->asXML()); } @@ -573,7 +575,7 @@ class Episode extends Entity )['elements'][0]['elements'][0]; if (array_key_exists('elements', $customRssArray)) { - $this->attributes['custom_rss'] = json_encode($customRssArray['elements'],); + $this->attributes['custom_rss'] = json_encode($customRssArray['elements']); } else { $this->attributes['custom_rss'] = null; } diff --git a/app/Entities/Image.php b/app/Entities/Image.php index 5997ac41ae..799840c8ea 100644 --- a/app/Entities/Image.php +++ b/app/Entities/Image.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -48,7 +50,7 @@ class Image extends Entity public function __construct(?File $file, string $path = '', string $mimetype = '') { if ($file === null && $path === '') { - throw new RuntimeException('File or path must be set to create an Image.',); + throw new RuntimeException('File or path must be set to create an Image.'); } $this->config = config('Images'); diff --git a/app/Entities/Language.php b/app/Entities/Language.php index d42814b41e..f8cf6dafd5 100644 --- a/app/Entities/Language.php +++ b/app/Entities/Language.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Entities/Location.php b/app/Entities/Location.php index 0eb3b66de5..19fe3aa184 100644 --- a/app/Entities/Location.php +++ b/app/Entities/Location.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -84,7 +86,7 @@ class Location extends Entity ], ); - $places = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR,); + $places = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR); if ($places === []) { return $this; diff --git a/app/Entities/Note.php b/app/Entities/Note.php index 4fa60d10e0..68d39c4fbe 100644 --- a/app/Entities/Note.php +++ b/app/Entities/Note.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -47,11 +49,11 @@ class Note extends ActivityPubNote public function getEpisode(): ?Episode { if ($this->episode_id === null) { - throw new RuntimeException('Note must have an episode_id before getting episode.',); + throw new RuntimeException('Note must have an episode_id before getting episode.'); } if ($this->episode === null) { - $this->episode = (new EpisodeModel())->getEpisodeById($this->episode_id,); + $this->episode = (new EpisodeModel())->getEpisodeById($this->episode_id); } return $this->episode; diff --git a/app/Entities/Page.php b/app/Entities/Page.php index 85f60d190d..7cf868a010 100644 --- a/app/Entities/Page.php +++ b/app/Entities/Page.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -53,7 +55,7 @@ class Page extends Entity ]); $this->attributes['content_markdown'] = $contentMarkdown; - $this->attributes['content_html'] = $converter->convertToHtml($contentMarkdown,); + $this->attributes['content_html'] = $converter->convertToHtml($contentMarkdown); return $this; } diff --git a/app/Entities/Person.php b/app/Entities/Person.php index 3e298f4d73..5f7f0f22aa 100644 --- a/app/Entities/Person.php +++ b/app/Entities/Person.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -71,7 +73,7 @@ class Person extends Entity public function getImage(): Image { - return new Image(null, $this->attributes['image_path'], $this->attributes['image_mimetype'],); + return new Image(null, $this->attributes['image_path'], $this->attributes['image_mimetype']); } /** @@ -80,14 +82,14 @@ class Person extends Entity public function getRoles(): array { if ($this->attributes['podcast_id'] === null) { - throw new RuntimeException('Person must have a podcast_id before getting roles.',); + throw new RuntimeException('Person must have a podcast_id before getting roles.'); } if ($this->roles === null) { $this->roles = (new PersonModel())->getPersonRoles( $this->id, - $this->attributes['podcast_id'], - $this->attributes['episode_id'] ?? null + (int) $this->attributes['podcast_id'], + array_key_exists('episode_id', $this->attributes) ? (int) $this->attributes['episode_id'] : null ); } diff --git a/app/Entities/Platform.php b/app/Entities/Platform.php index cfa50a52e9..34965c9432 100644 --- a/app/Entities/Platform.php +++ b/app/Entities/Platform.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Entities/Podcast.php b/app/Entities/Podcast.php index ed77127075..bf1b92b6d1 100644 --- a/app/Entities/Podcast.php +++ b/app/Entities/Podcast.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -172,7 +174,7 @@ class Podcast extends Entity public function getActor(): Actor { if ($this->actor_id === 0) { - throw new RuntimeException('Podcast must have an actor_id before getting actor.',); + throw new RuntimeException('Podcast must have an actor_id before getting actor.'); } if ($this->actor === null) { @@ -220,11 +222,11 @@ class Podcast extends Entity public function getEpisodes(): array { if ($this->id === null) { - throw new RuntimeException('Podcast must be created before getting episodes.',); + throw new RuntimeException('Podcast must be created before getting episodes.'); } if ($this->episodes === null) { - $this->episodes = (new EpisodeModel())->getPodcastEpisodes($this->id, $this->type,); + $this->episodes = (new EpisodeModel())->getPodcastEpisodes($this->id, $this->type); } return $this->episodes; @@ -238,7 +240,7 @@ class Podcast extends Entity public function getPersons(): array { if ($this->id === null) { - throw new RuntimeException('Podcast must be created before getting persons.',); + throw new RuntimeException('Podcast must be created before getting persons.'); } if ($this->persons === null) { @@ -254,11 +256,11 @@ class Podcast extends Entity public function getCategory(): ?Category { if ($this->id === null) { - throw new RuntimeException('Podcast must be created before getting category.',); + throw new RuntimeException('Podcast must be created before getting category.'); } if ($this->category === null) { - $this->category = (new CategoryModel())->getCategoryById($this->category_id,); + $this->category = (new CategoryModel())->getCategoryById($this->category_id); } return $this->category; @@ -272,11 +274,11 @@ class Podcast extends Entity public function getContributors(): array { if ($this->id === null) { - throw new RuntimeException('Podcasts must be created before getting contributors.',); + throw new RuntimeException('Podcasts must be created before getting contributors.'); } if ($this->contributors === null) { - $this->contributors = (new UserModel())->getPodcastContributors($this->id,); + $this->contributors = (new UserModel())->getPodcastContributors($this->id); } return $this->contributors; @@ -290,7 +292,7 @@ class Podcast extends Entity ]); $this->attributes['description_markdown'] = $descriptionMarkdown; - $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown,); + $this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown); return $this; } @@ -333,11 +335,11 @@ class Podcast extends Entity public function getPodcastingPlatforms(): array { if ($this->id === null) { - throw new RuntimeException('Podcast must be created before getting podcasting platform links.',); + throw new RuntimeException('Podcast must be created before getting podcasting platform links.'); } if ($this->podcasting_platforms === null) { - $this->podcasting_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'podcasting',); + $this->podcasting_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'podcasting'); } return $this->podcasting_platforms; @@ -351,11 +353,11 @@ class Podcast extends Entity public function getSocialPlatforms(): array { if ($this->id === null) { - throw new RuntimeException('Podcast must be created before getting social platform links.',); + throw new RuntimeException('Podcast must be created before getting social platform links.'); } if ($this->social_platforms === null) { - $this->social_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'social',); + $this->social_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'social'); } return $this->social_platforms; @@ -369,11 +371,11 @@ class Podcast extends Entity public function getFundingPlatforms(): array { if ($this->id === null) { - throw new RuntimeException('Podcast must be created before getting funding platform links.',); + throw new RuntimeException('Podcast must be created before getting funding platform links.'); } if ($this->funding_platforms === null) { - $this->funding_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'funding',); + $this->funding_platforms = (new PlatformModel())->getPodcastPlatforms($this->id, 'funding'); } return $this->funding_platforms; @@ -385,11 +387,11 @@ class Podcast extends Entity public function getOtherCategories(): array { if ($this->id === null) { - throw new RuntimeException('Podcast must be created before getting other categories.',); + throw new RuntimeException('Podcast must be created before getting other categories.'); } if ($this->other_categories === null) { - $this->other_categories = (new CategoryModel())->getPodcastCategories($this->id,); + $this->other_categories = (new CategoryModel())->getPodcastCategories($this->id); } return $this->other_categories; @@ -401,7 +403,7 @@ class Podcast extends Entity public function getOtherCategoriesIds(): array { if ($this->other_categories_ids === null) { - $this->other_categories_ids = array_column($this->getOtherCategories(), 'id',); + $this->other_categories_ids = array_column($this->getOtherCategories(), 'id'); } return $this->other_categories_ids; @@ -441,7 +443,7 @@ class Podcast extends Entity } if ($this->location === null) { - $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm,); + $this->location = new Location($this->location_name, $this->location_geo, $this->location_osm); } return $this->location; @@ -463,7 +465,7 @@ class Podcast extends Entity ))->addChild('channel'); array_to_rss([ 'elements' => $this->custom_rss, - ], $xmlNode,); + ], $xmlNode); return str_replace(['<channel>', '</channel>'], '', $xmlNode->asXML()); } @@ -487,7 +489,7 @@ class Podcast extends Entity )['elements'][0]; if (array_key_exists('elements', $customRssArray)) { - $this->attributes['custom_rss'] = json_encode($customRssArray['elements'],); + $this->attributes['custom_rss'] = json_encode($customRssArray['elements']); } else { $this->attributes['custom_rss'] = null; } diff --git a/app/Entities/Soundbite.php b/app/Entities/Soundbite.php index 081cb1a600..f6e85cfd60 100644 --- a/app/Entities/Soundbite.php +++ b/app/Entities/Soundbite.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Entities/User.php b/app/Entities/User.php index 7ea83d1c3c..f2b018c3d7 100644 --- a/app/Entities/User.php +++ b/app/Entities/User.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -52,7 +54,7 @@ class User extends MythAuthUser public function getPodcasts(): array { if ($this->id === null) { - throw new RuntimeException('Users must be created before getting podcasts.',); + throw new RuntimeException('Users must be created before getting podcasts.'); } if ($this->podcasts === null) { diff --git a/app/Filters/PermissionFilter.php b/app/Filters/PermissionFilter.php index cb3893439e..5a338c345d 100644 --- a/app/Filters/PermissionFilter.php +++ b/app/Filters/PermissionFilter.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace App\Filters; use App\Models\PodcastModel; diff --git a/app/Helpers/auth_helper.php b/app/Helpers/auth_helper.php index 88fe1817ed..31842fbbba 100644 --- a/app/Helpers/auth_helper.php +++ b/app/Helpers/auth_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -73,7 +75,7 @@ if (! function_exists('interact_as_actor')) { $session = session(); if ($session->has('interact_as_actor_id')) { - return model('ActorModel')->getActorById($session->get('interact_as_actor_id'),); + return model('ActorModel')->getActorById($session->get('interact_as_actor_id')); } return false; diff --git a/app/Helpers/breadcrumb_helper.php b/app/Helpers/breadcrumb_helper.php index 6de3e85564..4e9b6a2e48 100644 --- a/app/Helpers/breadcrumb_helper.php +++ b/app/Helpers/breadcrumb_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Helpers/components_helper.php b/app/Helpers/components_helper.php index 5a869b2f28..5cb29ff2fe 100644 --- a/app/Helpers/components_helper.php +++ b/app/Helpers/components_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -94,13 +96,13 @@ if (! function_exists('button')) { if ($uri !== '') { return anchor($uri, $label, array_merge([ 'class' => $buttonClass, - ], $customAttributes,),); + ], $customAttributes,)); } $defaultButtonAttributes = [ 'type' => 'button', ]; - $attributes = stringify_attributes(array_merge($defaultButtonAttributes, $customAttributes),); + $attributes = stringify_attributes(array_merge($defaultButtonAttributes, $customAttributes)); return <<<CODE_SAMPLE <button class="{$buttonClass}" {$attributes}> @@ -258,7 +260,7 @@ if (! function_exists('publication_pill')) { '</time>', ]; - $label = lang('Episode.publication_status.' . $publicationStatus, $langOptions,); + $label = lang('Episode.publication_status.' . $publicationStatus, $langOptions); return '<span class="px-1 font-semibold border ' . $class . @@ -290,7 +292,7 @@ if (! function_exists('publication_button')) { break; case 'scheduled': $label = lang('Episode.publish_edit'); - $route = route_to('episode-publish_edit', $podcastId, $episodeId,); + $route = route_to('episode-publish_edit', $podcastId, $episodeId); $variant = 'accent'; $iconLeft = 'upload-cloud'; break; diff --git a/app/Helpers/form_helper.php b/app/Helpers/form_helper.php index 85e59e8055..2111845a55 100644 --- a/app/Helpers/form_helper.php +++ b/app/Helpers/form_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Helpers/id3_helper.php b/app/Helpers/id3_helper.php index 4195d3f762..e7232a1611 100644 --- a/app/Helpers/id3_helper.php +++ b/app/Helpers/id3_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -20,7 +22,7 @@ if (! function_exists('get_file_tags')) { function get_file_tags(File $file): array { $getID3 = new GetID3(); - $FileInfo = $getID3->analyze($file); + $FileInfo = $getID3->analyze((string) $file); return [ 'filesize' => $FileInfo['filesize'], diff --git a/app/Helpers/media_helper.php b/app/Helpers/media_helper.php index 17df25714a..4e8ddd3f3d 100644 --- a/app/Helpers/media_helper.php +++ b/app/Helpers/media_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Helpers/misc_helper.php b/app/Helpers/misc_helper.php index 70b4067100..68404ba104 100644 --- a/app/Helpers/misc_helper.php +++ b/app/Helpers/misc_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Helpers/page_helper.php b/app/Helpers/page_helper.php index 4197229fd5..7177f7cc16 100644 --- a/app/Helpers/page_helper.php +++ b/app/Helpers/page_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Helpers/rss_helper.php b/app/Helpers/rss_helper.php index 0c221d6e10..4b95ecf3fb 100644 --- a/app/Helpers/rss_helper.php +++ b/app/Helpers/rss_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -19,7 +21,7 @@ if (! function_exists('get_rss_feed')) { * @param string $serviceSlug The name of the service that fetches the RSS feed for future reference when the audio file is eventually downloaded * @return string rss feed as xml */ - function get_rss_feed(Podcast $podcast, ?string $serviceSlug = null): string + function get_rss_feed(Podcast $podcast, string $serviceSlug = ''): string { $episodes = $podcast->episodes; @@ -34,18 +36,18 @@ if (! function_exists('get_rss_feed')) { $channel = $rss->addChild('channel'); - $atomLink = $channel->addChild('atom:link', null, 'http://www.w3.org/2005/Atom',); + $atomLink = $channel->addChild('atom:link', null, 'http://www.w3.org/2005/Atom'); $atomLink->addAttribute('href', $podcast->feed_url); $atomLink->addAttribute('rel', 'self'); $atomLink->addAttribute('type', 'application/rss+xml'); if ($podcast->new_feed_url !== null) { - $channel->addChild('new-feed-url', $podcast->new_feed_url, $itunesNamespace,); + $channel->addChild('new-feed-url', $podcast->new_feed_url, $itunesNamespace); } // the last build date corresponds to the creation of the feed.xml cache - $channel->addChild('lastBuildDate', (new Time('now'))->format(DATE_RFC1123),); - $channel->addChild('generator', 'Castopod Host - https://castopod.org/',); + $channel->addChild('lastBuildDate', (new Time('now'))->format(DATE_RFC1123)); + $channel->addChild('generator', 'Castopod Host - https://castopod.org/'); $channel->addChild('docs', 'https://cyber.harvard.edu/rss/rss.html'); $channel->addChild('title', $podcast->title); @@ -71,31 +73,31 @@ if (! function_exists('get_rss_feed')) { } } if ($podcast->payment_pointer !== null) { - $valueElement = $channel->addChild('value', null, $podcastNamespace,); + $valueElement = $channel->addChild('value', null, $podcastNamespace); $valueElement->addAttribute('type', 'webmonetization'); $valueElement->addAttribute('method', ''); $valueElement->addAttribute('suggested', ''); - $recipientElement = $valueElement->addChild('valueRecipient', null, $podcastNamespace,); + $recipientElement = $valueElement->addChild('valueRecipient', null, $podcastNamespace); $recipientElement->addAttribute('name', $podcast->owner_name); $recipientElement->addAttribute('type', 'ILP'); - $recipientElement->addAttribute('address', $podcast->payment_pointer,); + $recipientElement->addAttribute('address', $podcast->payment_pointer); $recipientElement->addAttribute('split', '100'); } $channel ->addChild('locked', $podcast->is_locked ? 'yes' : 'no', $podcastNamespace,) ->addAttribute('owner', $podcast->owner_email); if ($podcast->imported_feed_url !== null) { - $channel->addChild('previousUrl', $podcast->imported_feed_url, $podcastNamespace,); + $channel->addChild('previousUrl', $podcast->imported_feed_url, $podcastNamespace); } foreach ($podcast->podcasting_platforms as $podcastingPlatform) { - $podcastingPlatformElement = $channel->addChild('id', null, $podcastNamespace,); - $podcastingPlatformElement->addAttribute('platform', $podcastingPlatform->slug,); + $podcastingPlatformElement = $channel->addChild('id', null, $podcastNamespace); + $podcastingPlatformElement->addAttribute('platform', $podcastingPlatform->slug); if ($podcastingPlatform->link_content !== null) { - $podcastingPlatformElement->addAttribute('id', $podcastingPlatform->link_content,); + $podcastingPlatformElement->addAttribute('id', $podcastingPlatform->link_content); } if ($podcastingPlatform->link_url !== null) { - $podcastingPlatformElement->addAttribute('url', htmlspecialchars($podcastingPlatform->link_url),); + $podcastingPlatformElement->addAttribute('url', htmlspecialchars($podcastingPlatform->link_url)); } } @@ -105,9 +107,9 @@ if (! function_exists('get_rss_feed')) { $socialPlatform->link_content, $podcastNamespace, ); - $socialPlatformElement->addAttribute('platform', $socialPlatform->slug,); + $socialPlatformElement->addAttribute('platform', $socialPlatform->slug); if ($socialPlatform->link_url !== null) { - $socialPlatformElement->addAttribute('url', htmlspecialchars($socialPlatform->link_url),); + $socialPlatformElement->addAttribute('url', htmlspecialchars($socialPlatform->link_url)); } } @@ -117,9 +119,9 @@ if (! function_exists('get_rss_feed')) { $fundingPlatform->link_content, $podcastNamespace, ); - $fundingPlatformElement->addAttribute('platform', $fundingPlatform->slug,); + $fundingPlatformElement->addAttribute('platform', $fundingPlatform->slug); if ($fundingPlatform->link_url !== null) { - $fundingPlatformElement->addAttribute('url', htmlspecialchars($fundingPlatform->link_url),); + $fundingPlatformElement->addAttribute('url', htmlspecialchars($fundingPlatform->link_url)); } } @@ -134,7 +136,7 @@ if (! function_exists('get_rss_feed')) { $personElement->addAttribute('img', $person->image->large_url); if ($person->information_url !== null) { - $personElement->addAttribute('href', $person->information_url,); + $personElement->addAttribute('href', $person->information_url); } $personElement->addAttribute( @@ -192,7 +194,7 @@ if (! function_exists('get_rss_feed')) { if ($podcast->custom_rss !== null) { array_to_rss([ 'elements' => $podcast->custom_rss, - ], $channel,); + ], $channel); } foreach ($episodes as $episode) { @@ -207,11 +209,11 @@ if (! function_exists('get_rss_feed')) { ? '' : '?_from=' . urlencode($serviceSlug)), ); - $enclosure->addAttribute('length', $episode->audio_file_size); + $enclosure->addAttribute('length', (string) $episode->audio_file_size); $enclosure->addAttribute('type', $episode->audio_file_mimetype); $item->addChild('guid', $episode->guid); - $item->addChild('pubDate', $episode->published_at->format(DATE_RFC1123),); + $item->addChild('pubDate', $episode->published_at->format(DATE_RFC1123)); if ($episode->location !== null) { $locationElement = $item->addChild( 'location', @@ -219,17 +221,17 @@ if (! function_exists('get_rss_feed')) { $podcastNamespace, ); if ($episode->location->geo !== null) { - $locationElement->addAttribute('geo', $episode->location->geo,); + $locationElement->addAttribute('geo', $episode->location->geo); } if ($episode->location->osm !== null) { - $locationElement->addAttribute('osm', $episode->location->osm,); + $locationElement->addAttribute('osm', $episode->location->osm); } } - $item->addChildWithCDATA('description', $episode->getDescriptionHtml($serviceSlug),); - $item->addChild('duration', $episode->audio_file_duration, $itunesNamespace,); + $item->addChildWithCDATA('description', $episode->getDescriptionHtml($serviceSlug)); + $item->addChild('duration', $episode->audio_file_duration, $itunesNamespace); $item->addChild('link', $episode->link); - $episodeItunesImage = $item->addChild('image', null, $itunesNamespace,); - $episodeItunesImage->addAttribute('href', $episode->image->feed_url,); + $episodeItunesImage = $item->addChild('image', null, $itunesNamespace); + $episodeItunesImage->addAttribute('href', $episode->image->feed_url); $episode->parental_advisory && $item->addChild( @@ -243,29 +245,29 @@ if (! function_exists('get_rss_feed')) { $episode->number && $item->addChild('episode', $episode->number, $itunesNamespace); $episode->season_number && - $item->addChild('season', $episode->season_number, $itunesNamespace,); + $item->addChild('season', $episode->season_number, $itunesNamespace); $item->addChild('episodeType', $episode->type, $itunesNamespace); if ($episode->transcript_file_url) { - $transcriptElement = $item->addChild('transcript', null, $podcastNamespace,); - $transcriptElement->addAttribute('url', $episode->transcript_file_url,); + $transcriptElement = $item->addChild('transcript', null, $podcastNamespace); + $transcriptElement->addAttribute('url', $episode->transcript_file_url); $transcriptElement->addAttribute( 'type', Mimes::guessTypeFromExtension(pathinfo($episode->transcript_file_url, PATHINFO_EXTENSION,),), ); - $transcriptElement->addAttribute('language', $podcast->language_code,); + $transcriptElement->addAttribute('language', $podcast->language_code); } if ($episode->chapters_file_url) { - $chaptersElement = $item->addChild('chapters', null, $podcastNamespace,); - $chaptersElement->addAttribute('url', $episode->chapters_file_url,); - $chaptersElement->addAttribute('type', 'application/json+chapters',); + $chaptersElement = $item->addChild('chapters', null, $podcastNamespace); + $chaptersElement->addAttribute('url', $episode->chapters_file_url); + $chaptersElement->addAttribute('type', 'application/json+chapters'); } foreach ($episode->soundbites as $soundbite) { - $soundbiteElement = $item->addChild('soundbite', $soundbite->label, $podcastNamespace,); - $soundbiteElement->addAttribute('start_time', $soundbite->start_time,); - $soundbiteElement->addAttribute('duration', $soundbite->duration,); + $soundbiteElement = $item->addChild('soundbite', $soundbite->label, $podcastNamespace); + $soundbiteElement->addAttribute('start_time', $soundbite->start_time); + $soundbiteElement->addAttribute('duration', $soundbite->duration); } foreach ($episode->persons as $person) { @@ -288,10 +290,10 @@ if (! function_exists('get_rss_feed')) { htmlspecialchars(lang("PersonsTaxonomy.persons.{$role->group}.label", [], 'en',),), ); - $personElement->addAttribute('img', $person->image->large_url,); + $personElement->addAttribute('img', $person->image->large_url); if ($person->information_url !== null) { - $personElement->addAttribute('href', $person->information_url,); + $personElement->addAttribute('href', $person->information_url); } } } @@ -302,7 +304,7 @@ if (! function_exists('get_rss_feed')) { if ($episode->custom_rss !== null) { array_to_rss([ 'elements' => $episode->custom_rss, - ], $item,); + ], $item); } } @@ -327,8 +329,8 @@ if (! function_exists('add_category_tag')) { ); if ($category->parent !== null) { - $itunesCategoryChild = $itunesCategory->addChild('category', '', $itunesNamespace,); - $itunesCategoryChild->addAttribute('text', $category->apple_category,); + $itunesCategoryChild = $itunesCategory->addChild('category', '', $itunesNamespace); + $itunesCategoryChild->addAttribute('text', $category->apple_category); $node->addChild('category', $category->parent->apple_category); } $node->addChild('category', $category->apple_category); @@ -393,7 +395,7 @@ if (! function_exists('array_to_rss')) { $childArrayNode['attributes'] as $attributeKey => $attributeValue ) { - $childXmlNode->addAttribute($attributeKey, $attributeValue,); + $childXmlNode->addAttribute($attributeKey, $attributeValue); } } array_to_rss($childArrayNode, $childXmlNode); diff --git a/app/Helpers/svg_helper.php b/app/Helpers/svg_helper.php index a911e5ea3f..a187e40011 100644 --- a/app/Helpers/svg_helper.php +++ b/app/Helpers/svg_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -18,7 +20,7 @@ if (! function_exists('icon')) { { $svgContents = file_get_contents('assets/icons/' . $name . '.svg'); if ($class !== '') { - $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents,); + $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents); } return $svgContents; @@ -37,7 +39,7 @@ if (! function_exists('svg')) { { $svgContents = file_get_contents('assets/images/' . $name . '.svg'); if ($class) { - $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents,); + $svgContents = str_replace('<svg', '<svg class="' . $class . '"', $svgContents); } return $svgContents; } diff --git a/app/Helpers/url_helper.php b/app/Helpers/url_helper.php index e72246aee5..b655ad705c 100644 --- a/app/Helpers/url_helper.php +++ b/app/Helpers/url_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/ActivityPub.php b/app/Language/en/ActivityPub.php index 62a78d8164..1c64c6183e 100644 --- a/app/Language/en/ActivityPub.php +++ b/app/Language/en/ActivityPub.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Admin.php b/app/Language/en/Admin.php index 5585b4ff2f..944e7af2b6 100644 --- a/app/Language/en/Admin.php +++ b/app/Language/en/Admin.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/AdminNavigation.php b/app/Language/en/AdminNavigation.php index 820767f4dd..f5ca5aeab3 100644 --- a/app/Language/en/AdminNavigation.php +++ b/app/Language/en/AdminNavigation.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Breadcrumb.php b/app/Language/en/Breadcrumb.php index 3dc3967ab8..b3a7e3bb21 100644 --- a/app/Language/en/Breadcrumb.php +++ b/app/Language/en/Breadcrumb.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Charts.php b/app/Language/en/Charts.php index 0b6078d1a1..2bc933ef28 100644 --- a/app/Language/en/Charts.php +++ b/app/Language/en/Charts.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Common.php b/app/Language/en/Common.php index da350b4322..b406878cc8 100644 --- a/app/Language/en/Common.php +++ b/app/Language/en/Common.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Contributor.php b/app/Language/en/Contributor.php index 629d44910f..e2e5002684 100644 --- a/app/Language/en/Contributor.php +++ b/app/Language/en/Contributor.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Countries.php b/app/Language/en/Countries.php index d0d7e6464a..b682d306f7 100644 --- a/app/Language/en/Countries.php +++ b/app/Language/en/Countries.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * ISO 3166 country codes * diff --git a/app/Language/en/Episode.php b/app/Language/en/Episode.php index 44a817fba7..0226b6eaa8 100644 --- a/app/Language/en/Episode.php +++ b/app/Language/en/Episode.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Fediverse.php b/app/Language/en/Fediverse.php index 17cd0d0b76..a445724791 100644 --- a/app/Language/en/Fediverse.php +++ b/app/Language/en/Fediverse.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Home.php b/app/Language/en/Home.php index ee18880595..eda08142ef 100644 --- a/app/Language/en/Home.php +++ b/app/Language/en/Home.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Install.php b/app/Language/en/Install.php index df78956d49..c70faf69a5 100644 --- a/app/Language/en/Install.php +++ b/app/Language/en/Install.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/MyAccount.php b/app/Language/en/MyAccount.php index ccdced98be..68e79e82d9 100644 --- a/app/Language/en/MyAccount.php +++ b/app/Language/en/MyAccount.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Note.php b/app/Language/en/Note.php index 7c4daaa8f0..7a6cca3c01 100644 --- a/app/Language/en/Note.php +++ b/app/Language/en/Note.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Page.php b/app/Language/en/Page.php index cafd882084..7981e9d4fa 100644 --- a/app/Language/en/Page.php +++ b/app/Language/en/Page.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Pager.php b/app/Language/en/Pager.php index d18f15edbf..3b6fb25355 100644 --- a/app/Language/en/Pager.php +++ b/app/Language/en/Pager.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Person.php b/app/Language/en/Person.php index 1c7ce78eb2..d6b0050d07 100644 --- a/app/Language/en/Person.php +++ b/app/Language/en/Person.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Platforms.php b/app/Language/en/Platforms.php index c1890482cb..27582cdad8 100644 --- a/app/Language/en/Platforms.php +++ b/app/Language/en/Platforms.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Podcast.php b/app/Language/en/Podcast.php index bad2860811..03e857a4af 100644 --- a/app/Language/en/Podcast.php +++ b/app/Language/en/Podcast.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/PodcastImport.php b/app/Language/en/PodcastImport.php index 1ce609d3d3..a19eb43561 100644 --- a/app/Language/en/PodcastImport.php +++ b/app/Language/en/PodcastImport.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/PodcastNavigation.php b/app/Language/en/PodcastNavigation.php index f577326d4d..147eebb6a6 100644 --- a/app/Language/en/PodcastNavigation.php +++ b/app/Language/en/PodcastNavigation.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/User.php b/app/Language/en/User.php index 493b3fe65c..97cfe2f73c 100644 --- a/app/Language/en/User.php +++ b/app/Language/en/User.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/en/Validation.php b/app/Language/en/Validation.php index fb27793e14..ae627c4b21 100644 --- a/app/Language/en/Validation.php +++ b/app/Language/en/Validation.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/ActivityPub.php b/app/Language/fr/ActivityPub.php index b60d822d96..54c2d1868d 100644 --- a/app/Language/fr/ActivityPub.php +++ b/app/Language/fr/ActivityPub.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Admin.php b/app/Language/fr/Admin.php index 4a54b1bc22..5c0d82e17b 100644 --- a/app/Language/fr/Admin.php +++ b/app/Language/fr/Admin.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/AdminNavigation.php b/app/Language/fr/AdminNavigation.php index 011880451a..357b64ffab 100644 --- a/app/Language/fr/AdminNavigation.php +++ b/app/Language/fr/AdminNavigation.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Breadcrumb.php b/app/Language/fr/Breadcrumb.php index 9c235352a7..81c1e17c19 100644 --- a/app/Language/fr/Breadcrumb.php +++ b/app/Language/fr/Breadcrumb.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Charts.php b/app/Language/fr/Charts.php index 1b72c51b44..071918ae78 100644 --- a/app/Language/fr/Charts.php +++ b/app/Language/fr/Charts.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Common.php b/app/Language/fr/Common.php index 8d466bf28d..668a160735 100644 --- a/app/Language/fr/Common.php +++ b/app/Language/fr/Common.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Contributor.php b/app/Language/fr/Contributor.php index 1e59c0c652..4ed4799ad7 100644 --- a/app/Language/fr/Contributor.php +++ b/app/Language/fr/Contributor.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Countries.php b/app/Language/fr/Countries.php index f5af074c8e..f1974eee7d 100644 --- a/app/Language/fr/Countries.php +++ b/app/Language/fr/Countries.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * ISO 3166 country codes * diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php index 39e860e578..9e360cbe69 100644 --- a/app/Language/fr/Episode.php +++ b/app/Language/fr/Episode.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Fediverse.php b/app/Language/fr/Fediverse.php index 3d7da1af9e..fa6b48972c 100644 --- a/app/Language/fr/Fediverse.php +++ b/app/Language/fr/Fediverse.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Home.php b/app/Language/fr/Home.php index b8b7c4911a..ab847e8f41 100644 --- a/app/Language/fr/Home.php +++ b/app/Language/fr/Home.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Install.php b/app/Language/fr/Install.php index 9264032032..64eebae164 100644 --- a/app/Language/fr/Install.php +++ b/app/Language/fr/Install.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/MyAccount.php b/app/Language/fr/MyAccount.php index 3d75c589dc..837b04f460 100644 --- a/app/Language/fr/MyAccount.php +++ b/app/Language/fr/MyAccount.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Note.php b/app/Language/fr/Note.php index fe97031c05..682686f1ac 100644 --- a/app/Language/fr/Note.php +++ b/app/Language/fr/Note.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Page.php b/app/Language/fr/Page.php index 0514060255..fb71fa5636 100644 --- a/app/Language/fr/Page.php +++ b/app/Language/fr/Page.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Pager.php b/app/Language/fr/Pager.php index 181a18e30f..4dcbffa71a 100644 --- a/app/Language/fr/Pager.php +++ b/app/Language/fr/Pager.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Person.php b/app/Language/fr/Person.php index aef667f0ac..1e0e9bd45c 100644 --- a/app/Language/fr/Person.php +++ b/app/Language/fr/Person.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Platforms.php b/app/Language/fr/Platforms.php index 4a4fdc5d88..1a5a59c4d4 100644 --- a/app/Language/fr/Platforms.php +++ b/app/Language/fr/Platforms.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Podcast.php b/app/Language/fr/Podcast.php index 7d390a00ff..f01fc101dd 100644 --- a/app/Language/fr/Podcast.php +++ b/app/Language/fr/Podcast.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/PodcastImport.php b/app/Language/fr/PodcastImport.php index 371185a142..b04e264848 100644 --- a/app/Language/fr/PodcastImport.php +++ b/app/Language/fr/PodcastImport.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/PodcastNavigation.php b/app/Language/fr/PodcastNavigation.php index cc8bea6410..6939725432 100644 --- a/app/Language/fr/PodcastNavigation.php +++ b/app/Language/fr/PodcastNavigation.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/User.php b/app/Language/fr/User.php index 69fda7b175..ccb262b158 100644 --- a/app/Language/fr/User.php +++ b/app/Language/fr/User.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Language/fr/Validation.php b/app/Language/fr/Validation.php index 519fbe9a03..12b45319f9 100644 --- a/app/Language/fr/Validation.php +++ b/app/Language/fr/Validation.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Activities/AcceptActivity.php b/app/Libraries/ActivityPub/Activities/AcceptActivity.php index 9d139fa939..9dd1e04918 100644 --- a/app/Libraries/ActivityPub/Activities/AcceptActivity.php +++ b/app/Libraries/ActivityPub/Activities/AcceptActivity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/Activities/AnnounceActivity.php b/app/Libraries/ActivityPub/Activities/AnnounceActivity.php index 644b58cdda..d258c46a31 100644 --- a/app/Libraries/ActivityPub/Activities/AnnounceActivity.php +++ b/app/Libraries/ActivityPub/Activities/AnnounceActivity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/Activities/CreateActivity.php b/app/Libraries/ActivityPub/Activities/CreateActivity.php index 9fe680edce..42bc4d5460 100644 --- a/app/Libraries/ActivityPub/Activities/CreateActivity.php +++ b/app/Libraries/ActivityPub/Activities/CreateActivity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/Activities/DeleteActivity.php b/app/Libraries/ActivityPub/Activities/DeleteActivity.php index 06c153b44f..015b5310a2 100644 --- a/app/Libraries/ActivityPub/Activities/DeleteActivity.php +++ b/app/Libraries/ActivityPub/Activities/DeleteActivity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/Activities/FollowActivity.php b/app/Libraries/ActivityPub/Activities/FollowActivity.php index 65b3edddd8..ee8f7b4baf 100644 --- a/app/Libraries/ActivityPub/Activities/FollowActivity.php +++ b/app/Libraries/ActivityPub/Activities/FollowActivity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/Activities/LikeActivity.php b/app/Libraries/ActivityPub/Activities/LikeActivity.php index bda97846a3..ce5634294a 100644 --- a/app/Libraries/ActivityPub/Activities/LikeActivity.php +++ b/app/Libraries/ActivityPub/Activities/LikeActivity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/Activities/UndoActivity.php b/app/Libraries/ActivityPub/Activities/UndoActivity.php index 234d141f47..222b164ba0 100644 --- a/app/Libraries/ActivityPub/Activities/UndoActivity.php +++ b/app/Libraries/ActivityPub/Activities/UndoActivity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/ActivityRequest.php b/app/Libraries/ActivityPub/ActivityRequest.php index e59a361b3e..729c03e6f4 100644 --- a/app/Libraries/ActivityPub/ActivityRequest.php +++ b/app/Libraries/ActivityPub/ActivityRequest.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -22,7 +24,7 @@ class ActivityRequest protected URI $uri; - protected ?Activity $activity; + protected ?Activity $activity = null; /** * @var array<string, string[]> @@ -49,12 +51,12 @@ class ActivityRequest public function post(): void { // send Message to Fediverse instance - $this->request->post($this->uri, $this->options); + $this->request->post((string) $this->uri, $this->options); } public function get(): ResponseInterface { - return $this->request->get($this->uri, $this->options); + return $this->request->get((string) $this->uri, $this->options); } public function getDomain(): string diff --git a/app/Libraries/ActivityPub/Config/ActivityPub.php b/app/Libraries/ActivityPub/Config/ActivityPub.php index 45f63fb6af..28e38bcfbb 100644 --- a/app/Libraries/ActivityPub/Config/ActivityPub.php +++ b/app/Libraries/ActivityPub/Config/ActivityPub.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Config/Routes.php b/app/Libraries/ActivityPub/Config/Routes.php index 8856e08e2b..fede909495 100644 --- a/app/Libraries/ActivityPub/Config/Routes.php +++ b/app/Libraries/ActivityPub/Config/Routes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Controllers/ActorController.php b/app/Libraries/ActivityPub/Controllers/ActorController.php index 88b4dbd62a..7e68c63516 100644 --- a/app/Libraries/ActivityPub/Controllers/ActorController.php +++ b/app/Libraries/ActivityPub/Controllers/ActorController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -9,10 +11,10 @@ namespace ActivityPub\Controllers; use ActivityPub\Config\ActivityPub; +use ActivityPub\Entities\Actor; use ActivityPub\Entities\Note; use ActivityPub\Objects\OrderedCollectionObject; use ActivityPub\Objects\OrderedCollectionPage; -use App\Entities\Actor; use CodeIgniter\Controller; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\RedirectResponse; @@ -93,26 +95,34 @@ class ActorController extends Controller return $this->response->setStatusCode(501) ->setJSON([]); } + $replyToNote = model('NoteModel') - ->getNoteByUri($payload->object->inReplyTo,); - // TODO: strip content from html to retrieve message - // remove all html tags and reconstruct message with mentions? - extract_text_from_html($payload->object->content); - $reply = new Note([ - 'uri' => $payload->object->id, - 'actor_id' => $payloadActor->id, - 'in_reply_to_id' => $replyToNote->id, - 'message' => $payload->object->content, - 'published_at' => Time::parse($payload->object->published,), - ]); - $noteId = model('NoteModel') - ->addReply($reply, true, false); - model('ActivityModel') - ->update($activityId, [ - 'note_id' => service('uuid') - ->fromBytes($noteId) - ->getString(), + ->getNoteByUri($payload->object->inReplyTo); + + $reply = null; + if ($replyToNote !== null) { + // TODO: strip content from html to retrieve message + // remove all html tags and reconstruct message with mentions? + extract_text_from_html($payload->object->content); + $reply = new Note([ + 'uri' => $payload->object->id, + 'actor_id' => $payloadActor->id, + 'in_reply_to_id' => $replyToNote->id, + 'message' => $payload->object->content, + 'published_at' => Time::parse($payload->object->published,), ]); + } + + if ($reply !== null) { + $noteId = model('NoteModel') + ->addReply($reply, true, false); + + model('ActivityModel') + ->update($activityId, [ + 'note_id' => $noteId, + ]); + } + return $this->response->setStatusCode(200) ->setJSON([]); } @@ -121,17 +131,19 @@ class ActorController extends Controller ->setJSON([]); case 'Delete': $noteToDelete = model('NoteModel') - ->getNoteByUri($payload->object->id,); + ->getNoteByUri($payload->object->id); - model('NoteModel') - ->removeNote($noteToDelete, false); + if ($noteToDelete !== null) { + model('NoteModel') + ->removeNote($noteToDelete, false); + } return $this->response->setStatusCode(200) ->setJSON([]); case 'Follow': // add to followers table model('FollowModel') - ->addFollower($payloadActor, $this->actor, false,); + ->addFollower($payloadActor, $this->actor, false); // Automatically accept follow by returning accept activity accept_follow($this->actor, $payloadActor, $payload->id); @@ -145,14 +157,16 @@ class ActorController extends Controller $note = model('NoteModel') ->getNoteByUri($payload->object); - // Like side-effect - model('FavouriteModel') - ->addFavourite($payloadActor, $note, false,); + if ($note !== null) { + // Like side-effect + model('FavouriteModel') + ->addFavourite($payloadActor, $note, false); - model('ActivityModel') - ->update($activityId, [ - 'note_id' => $note->id, - ]); + model('ActivityModel') + ->update($activityId, [ + 'note_id' => $note->id, + ]); + } return $this->response->setStatusCode(200) ->setJSON([]); @@ -160,13 +174,15 @@ class ActorController extends Controller $note = model('NoteModel') ->getNoteByUri($payload->object); - model('ActivityModel') - ->update($activityId, [ - 'note_id' => $note->id, - ]); + if ($note !== null) { + model('ActivityModel') + ->update($activityId, [ + 'note_id' => $note->id, + ]); - model('NoteModel') - ->reblog($payloadActor, $note, false); + model('NoteModel') + ->reblog($payloadActor, $note, false); + } return $this->response->setStatusCode(200) ->setJSON([]); @@ -177,46 +193,53 @@ class ActorController extends Controller case 'Follow': // revert side-effect by removing follow from database model('FollowModel') - ->removeFollower($payloadActor, $this->actor, false,); + ->removeFollower($payloadActor, $this->actor, false); // TODO: undo has been accepted! (202 - Accepted) return $this->response->setStatusCode(202) ->setJSON([]); case 'Like': $note = model('NoteModel') - ->getNoteByUri($payload->object->object,); + ->getNoteByUri($payload->object->object); - // revert side-effect by removing favourite from database - model('FavouriteModel') - ->removeFavourite($payloadActor, $note, false,); + if ($note !== null) { + // revert side-effect by removing favourite from database + model('FavouriteModel') + ->removeFavourite($payloadActor, $note, false); - model('ActivityModel') - ->update($activityId, [ - 'note_id' => $note->id, - ]); + model('ActivityModel') + ->update($activityId, [ + 'note_id' => $note->id, + ]); + } return $this->response->setStatusCode(200) ->setJSON([]); case 'Announce': $note = model('NoteModel') - ->getNoteByUri($payload->object->object,); - - $reblogNote = model('NoteModel') - ->where([ - 'actor_id' => $payloadActor->id, - 'reblog_of_id' => service('uuid') - ->fromString($note->id) - ->getBytes(), - ]) - ->first(); - - model('NoteModel') - ->undoReblog($reblogNote, false); - - model('ActivityModel') - ->update($activityId, [ - 'note_id' => $note->id, - ]); + ->getNoteByUri($payload->object->object); + + $reblogNote = null; + if ($note !== null) { + $reblogNote = model('NoteModel') + ->where([ + 'actor_id' => $payloadActor->id, + 'reblog_of_id' => service('uuid') + ->fromString($note->id) + ->getBytes(), + ]) + ->first(); + } + + if ($reblogNote !== null) { + model('NoteModel') + ->undoReblog($reblogNote, false); + + model('ActivityModel') + ->update($activityId, [ + 'note_id' => $note->id, + ]); + } return $this->response->setStatusCode(200) ->setJSON([]); @@ -251,7 +274,7 @@ class ActorController extends Controller $pager = $actorActivity->pager; $collection = new OrderedCollectionObject(null, $pager); } else { - $paginatedActivity = $actorActivity->paginate(12, 'default', $pageNumber,); + $paginatedActivity = $actorActivity->paginate(12, 'default', $pageNumber); $pager = $actorActivity->pager; $orderedItems = []; foreach ($paginatedActivity as $activity) { @@ -283,14 +306,14 @@ class ActorController extends Controller $pager = $followers->pager; $followersCollection = new OrderedCollectionObject(null, $pager); } else { - $paginatedFollowers = $followers->paginate(12, 'default', $pageNumber,); + $paginatedFollowers = $followers->paginate(12, 'default', $pageNumber); $pager = $followers->pager; $orderedItems = []; foreach ($paginatedFollowers as $follower) { $orderedItems[] = $follower->uri; } - $followersCollection = new OrderedCollectionPage($pager, $orderedItems,); + $followersCollection = new OrderedCollectionPage($pager, $orderedItems); } return $this->response diff --git a/app/Libraries/ActivityPub/Controllers/BlockController.php b/app/Libraries/ActivityPub/Controllers/BlockController.php index c3006993d4..9c0fcafda1 100644 --- a/app/Libraries/ActivityPub/Controllers/BlockController.php +++ b/app/Libraries/ActivityPub/Controllers/BlockController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -64,7 +66,7 @@ class BlockController extends Controller } model('BlockedDomainModel') - ->blockDomain($this->request->getPost('domain'),); + ->blockDomain($this->request->getPost('domain')); return redirect()->back(); } @@ -102,7 +104,7 @@ class BlockController extends Controller } model('BlockedDomainModel') - ->unblockDomain($this->request->getPost('domain'),); + ->unblockDomain($this->request->getPost('domain')); return redirect()->back(); } diff --git a/app/Libraries/ActivityPub/Controllers/NoteController.php b/app/Libraries/ActivityPub/Controllers/NoteController.php index c5e26fa536..017d709c04 100644 --- a/app/Libraries/ActivityPub/Controllers/NoteController.php +++ b/app/Libraries/ActivityPub/Controllers/NoteController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -15,6 +17,7 @@ use ActivityPub\Objects\OrderedCollectionPage; use CodeIgniter\Controller; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\RedirectResponse; +use CodeIgniter\HTTP\Response; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\I18n\Time; @@ -44,7 +47,10 @@ class NoteController extends Controller return $this->{$method}(...$params); } - public function index(): RedirectResponse + /** + * @noRector ReturnTypeDeclarationRector + */ + public function index(): Response { $noteObjectClass = $this->config->noteObject; $noteObject = new $noteObjectClass($this->note); @@ -54,7 +60,10 @@ class NoteController extends Controller ->setBody($noteObject->toJSON()); } - public function replies(): RedirectResponse + /** + * @noRector ReturnTypeDeclarationRector + */ + public function replies(): Response { /** * get note replies @@ -71,7 +80,7 @@ class NoteController extends Controller $pager = $noteReplies->pager; $collection = new OrderedCollectionObject(null, $pager); } else { - $paginatedReplies = $noteReplies->paginate(12, 'default', $pageNumber,); + $paginatedReplies = $noteReplies->paginate(12, 'default', $pageNumber); $pager = $noteReplies->pager; $orderedItems = []; @@ -138,7 +147,7 @@ class NoteController extends Controller } $actor = model('ActorModel') - ->getActorById($this->request->getPost('actor_id'),); + ->getActorById($this->request->getPost('actor_id')); model('FavouriteModel') ->toggleFavourite($actor, $this->note->id); @@ -160,7 +169,7 @@ class NoteController extends Controller } $actor = model('ActorModel') - ->getActorById($this->request->getPost('actor_id'),); + ->getActorById($this->request->getPost('actor_id')); model('NoteModel') ->toggleReblog($actor, $this->note); diff --git a/app/Libraries/ActivityPub/Controllers/SchedulerController.php b/app/Libraries/ActivityPub/Controllers/SchedulerController.php index 4ed00bb4fb..22abde21ac 100644 --- a/app/Libraries/ActivityPub/Controllers/SchedulerController.php +++ b/app/Libraries/ActivityPub/Controllers/SchedulerController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Controllers/WebFingerController.php b/app/Libraries/ActivityPub/Controllers/WebFingerController.php index bbdf395582..7e6adab046 100644 --- a/app/Libraries/ActivityPub/Controllers/WebFingerController.php +++ b/app/Libraries/ActivityPub/Controllers/WebFingerController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Core/AbstractObject.php b/app/Libraries/ActivityPub/Core/AbstractObject.php index ca1edd1f9b..97e761ecbd 100644 --- a/app/Libraries/ActivityPub/Core/AbstractObject.php +++ b/app/Libraries/ActivityPub/Core/AbstractObject.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * This class defines the Object which is the primary base type for the Activity Streams vocabulary. * diff --git a/app/Libraries/ActivityPub/Core/Activity.php b/app/Libraries/ActivityPub/Core/Activity.php index 42c148731d..4bc5de4adb 100644 --- a/app/Libraries/ActivityPub/Core/Activity.php +++ b/app/Libraries/ActivityPub/Core/Activity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Activity objects are specializations of the base Object type that provide information about actions that have either * already occurred, are in the process of occurring, or may occur in the future. diff --git a/app/Libraries/ActivityPub/Core/ObjectType.php b/app/Libraries/ActivityPub/Core/ObjectType.php index 2d87340060..dbe77da2df 100644 --- a/app/Libraries/ActivityPub/Core/ObjectType.php +++ b/app/Libraries/ActivityPub/Core/ObjectType.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * This class defines the Object which is the primary base type for the Activity Streams vocabulary. * diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php index afa4a8b1f9..23183a0d2c 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddActors Creates activitypub_actors table in database * diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php index 044bcbc766..8ef29e060b 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddNotes Creates activitypub_notes table in database * @@ -76,9 +78,9 @@ class AddNotes extends Migration $this->forge->addUniqueKey('uri'); // FIXME: an actor must reblog a note only once // $this->forge->addUniqueKey(['actor_id', 'reblog_of_id']); - $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('in_reply_to_id', 'activitypub_notes', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('reblog_of_id', 'activitypub_notes', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('in_reply_to_id', 'activitypub_notes', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('reblog_of_id', 'activitypub_notes', 'id', '', 'CASCADE'); $this->forge->createTable('activitypub_notes'); } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php index c16ff3dd06..a20bafb53c 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddActivities Creates activitypub_activities table in database * @@ -58,9 +60,9 @@ class AddActivities extends Migration ], ]); $this->forge->addPrimaryKey('id'); - $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE'); $this->forge->createTable('activitypub_activities'); } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php index a1cf21a77b..d3ff03a96f 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddFavourites Creates activitypub_favourites table in database * @@ -26,10 +28,10 @@ class AddFavourites extends Migration 'constraint' => 16, ], ]); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addPrimaryKey(['actor_id', 'note_id']); - $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE'); $this->forge->createTable('activitypub_favourites'); } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php index 83e72f7efe..0d7550d07f 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_follows.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddFollowers Creates activitypub_followers table in database * @@ -28,10 +30,10 @@ class AddFollowers extends Migration 'comment' => 'Actor that is followed', ], ]); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addPrimaryKey(['actor_id', 'target_actor_id']); - $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); $this->forge->createTable('activitypub_follows'); } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php index b9d102269a..0eeb77fe88 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_preview_cards.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddPreviewCards Creates activitypub_preview_cards table in database * diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php index 8baed0f132..4c3829eb3d 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddNotePreviewCards Creates activitypub_notes_preview_cards table in database * @@ -28,8 +30,8 @@ class AddNotesPreviewCards extends Migration ]); $this->forge->addPrimaryKey(['note_id', 'preview_card_id']); - $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE',); - $this->forge->addForeignKey('preview_card_id', 'activitypub_preview_cards', 'id', '', 'CASCADE',); + $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('preview_card_id', 'activitypub_preview_cards', 'id', '', 'CASCADE'); $this->forge->createTable('activitypub_notes_preview_cards'); } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php index d4324ccc53..b7b0b49a20 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-120000_add_blocked_domains.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddBlockedDomains Creates activitypub_blocked_domains table in database * diff --git a/app/Libraries/ActivityPub/Entities/Activity.php b/app/Libraries/ActivityPub/Entities/Activity.php index 5d4ab368ac..967e48a595 100644 --- a/app/Libraries/ActivityPub/Entities/Activity.php +++ b/app/Libraries/ActivityPub/Entities/Activity.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -27,11 +29,11 @@ use RuntimeException; */ class Activity extends UuidEntity { - protected ?Actor $actor; + protected ?Actor $actor = null; - protected ?Actor $target_actor; + protected ?Actor $target_actor = null; - protected ?Note $note; + protected ?Note $note = null; /** * @var string[] @@ -59,7 +61,7 @@ class Activity extends UuidEntity public function getActor(): Actor { if ($this->actor_id === null) { - throw new RuntimeException('Activity must have an actor_id before getting the actor.',); + throw new RuntimeException('Activity must have an actor_id before getting the actor.'); } if ($this->actor === null) { @@ -73,12 +75,12 @@ class Activity extends UuidEntity public function getTargetActor(): Actor { if ($this->target_actor_id === null) { - throw new RuntimeException('Activity must have a target_actor_id before getting the target actor.',); + throw new RuntimeException('Activity must have a target_actor_id before getting the target actor.'); } if ($this->target_actor === null) { $this->target_actor = model('ActorModel') - ->getActorById($this->target_actor_id,); + ->getActorById($this->target_actor_id); } return $this->target_actor; @@ -87,7 +89,7 @@ class Activity extends UuidEntity public function getNote(): Note { if ($this->note_id === null) { - throw new RuntimeException('Activity must have a note_id before getting note.',); + throw new RuntimeException('Activity must have a note_id before getting note.'); } if ($this->note === null) { diff --git a/app/Libraries/ActivityPub/Entities/Actor.php b/app/Libraries/ActivityPub/Entities/Actor.php index 300cd77c1f..d55b21136c 100644 --- a/app/Libraries/ActivityPub/Entities/Actor.php +++ b/app/Libraries/ActivityPub/Entities/Actor.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -95,12 +97,12 @@ class Actor extends Entity public function getFollowers(): array { if ($this->id === null) { - throw new RuntimeException('Actor must be created before getting followers.',); + throw new RuntimeException('Actor must be created before getting followers.'); } if ($this->followers === null) { $this->followers = (array) model('ActorModel') - ->getFollowers($this->id,); + ->getFollowers($this->id); } return $this->followers; diff --git a/app/Libraries/ActivityPub/Entities/BlockedDomain.php b/app/Libraries/ActivityPub/Entities/BlockedDomain.php index 9d0009a538..ca49556904 100644 --- a/app/Libraries/ActivityPub/Entities/BlockedDomain.php +++ b/app/Libraries/ActivityPub/Entities/BlockedDomain.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Entities/Favourite.php b/app/Libraries/ActivityPub/Entities/Favourite.php index 6bc1a52e67..4ba92256fe 100644 --- a/app/Libraries/ActivityPub/Entities/Favourite.php +++ b/app/Libraries/ActivityPub/Entities/Favourite.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Entities/Follow.php b/app/Libraries/ActivityPub/Entities/Follow.php index cb5ff36474..5eb57258e7 100644 --- a/app/Libraries/ActivityPub/Entities/Follow.php +++ b/app/Libraries/ActivityPub/Entities/Follow.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Entities/Note.php b/app/Libraries/ActivityPub/Entities/Note.php index c0a0c9e51c..2491c7021c 100644 --- a/app/Libraries/ActivityPub/Entities/Note.php +++ b/app/Libraries/ActivityPub/Entities/Note.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -16,7 +18,7 @@ use RuntimeException; * @property string $id * @property string $uri * @property int $actor_id - * @property Actor $actor + * @property Actor|null $actor * @property string|null $in_reply_to_id * @property bool $is_reply * @property Note|null $reply_to_note @@ -95,10 +97,10 @@ class Note extends UuidEntity /** * Returns the note's actor */ - public function getActor(): Actor + public function getActor(): ?Actor { if ($this->actor_id === null) { - throw new RuntimeException('Note must have an actor_id before getting actor.',); + throw new RuntimeException('Note must have an actor_id before getting actor.'); } if ($this->actor === null) { @@ -112,12 +114,12 @@ class Note extends UuidEntity public function getPreviewCard(): ?PreviewCard { if ($this->id === null) { - throw new RuntimeException('Note must be created before getting preview_card.',); + throw new RuntimeException('Note must be created before getting preview_card.'); } if ($this->preview_card === null) { $this->preview_card = model('PreviewCardModel') - ->getNotePreviewCard($this->id,); + ->getNotePreviewCard($this->id); } return $this->preview_card; @@ -130,9 +132,7 @@ class Note extends UuidEntity public function getIsReply(): bool { - $this->is_reply = $this->in_reply_to_id !== null; - - return $this->is_reply; + return $this->in_reply_to_id && ($this->getReplyToNote() !== null); } /** @@ -141,12 +141,12 @@ class Note extends UuidEntity public function getReplies(): array { if ($this->id === null) { - throw new RuntimeException('Note must be created before getting replies.',); + throw new RuntimeException('Note must be created before getting replies.'); } if ($this->replies === null) { $this->replies = (array) model('NoteModel') - ->getNoteReplies($this->id,); + ->getNoteReplies($this->id); } return $this->replies; @@ -157,7 +157,7 @@ class Note extends UuidEntity return $this->getReplies() !== null; } - public function getReplyToNote(): self + public function getReplyToNote(): ?self { if ($this->in_reply_to_id === null) { throw new RuntimeException('Note is not a reply.'); @@ -165,7 +165,7 @@ class Note extends UuidEntity if ($this->reply_to_note === null) { $this->reply_to_note = model('NoteModel') - ->getNoteById($this->in_reply_to_id,); + ->getNoteById($this->in_reply_to_id); } return $this->reply_to_note; @@ -177,12 +177,12 @@ class Note extends UuidEntity public function getReblogs(): array { if ($this->id === null) { - throw new RuntimeException('Note must be created before getting reblogs.',); + throw new RuntimeException('Note must be created before getting reblogs.'); } if ($this->reblogs === null) { $this->reblogs = (array) model('NoteModel') - ->getNoteReblogs($this->id,); + ->getNoteReblogs($this->id); } return $this->reblogs; @@ -193,7 +193,7 @@ class Note extends UuidEntity return $this->reblog_of_id !== null; } - public function getReblogOfNote(): self + public function getReblogOfNote(): ?self { if ($this->reblog_of_id === null) { throw new RuntimeException('Note is not a reblog.'); @@ -201,7 +201,7 @@ class Note extends UuidEntity if ($this->reblog_of_note === null) { $this->reblog_of_note = model('NoteModel') - ->getNoteById($this->reblog_of_id,); + ->getNoteById($this->reblog_of_id); } return $this->reblog_of_note; @@ -214,7 +214,7 @@ class Note extends UuidEntity $messageWithoutTags = strip_tags($message); $this->attributes['message'] = $messageWithoutTags; - $this->attributes['message_html'] = str_replace("\n", '<br />', linkify($messageWithoutTags),); + $this->attributes['message_html'] = str_replace("\n", '<br />', linkify($messageWithoutTags)); return $this; } diff --git a/app/Libraries/ActivityPub/Entities/PreviewCard.php b/app/Libraries/ActivityPub/Entities/PreviewCard.php index 35cb197330..a2fe1537a1 100644 --- a/app/Libraries/ActivityPub/Entities/PreviewCard.php +++ b/app/Libraries/ActivityPub/Entities/PreviewCard.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php b/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php index 3c035704f4..370d6884f1 100644 --- a/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php +++ b/app/Libraries/ActivityPub/Filters/ActivityPubFilter.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace ActivityPub\Filters; use ActivityPub\HttpSignature; diff --git a/app/Libraries/ActivityPub/Helpers/activitypub_helper.php b/app/Libraries/ActivityPub/Helpers/activitypub_helper.php index c56f444e4c..8c3b214b26 100644 --- a/app/Libraries/ActivityPub/Helpers/activitypub_helper.php +++ b/app/Libraries/ActivityPub/Helpers/activitypub_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -27,10 +29,10 @@ if (! function_exists('get_webfinger_data')) { $webfingerUri->setPath('/.well-known/webfinger'); $webfingerUri->setQuery("resource=acct:{$username}@{$domain}"); - $webfingerRequest = new ActivityRequest($webfingerUri); + $webfingerRequest = new ActivityRequest((string) $webfingerUri); $webfingerResponse = $webfingerRequest->get(); - return json_decode($webfingerResponse->getBody(), false, 512, JSON_THROW_ON_ERROR,); + return json_decode($webfingerResponse->getBody(), false, 512, JSON_THROW_ON_ERROR); } } @@ -77,14 +79,14 @@ if (! function_exists('accept_follow')) { $acceptActivity->toJSON(), ); - $acceptActivity->set('id', url_to('activity', $actor->username, $activityId),); + $acceptActivity->set('id', url_to('activity', $actor->username, $activityId)); $activityModel->update($activityId, [ 'payload' => $acceptActivity->toJSON(), ]); try { - $acceptRequest = new ActivityRequest($targetActor->inbox_url, $acceptActivity->toJSON(),); + $acceptRequest = new ActivityRequest($targetActor->inbox_url, $acceptActivity->toJSON()); $acceptRequest->sign($actor->public_key_id, $actor->private_key); $acceptRequest->post(); } catch (Exception) { @@ -103,12 +105,12 @@ if (! function_exists('send_activity_to_followers')) { { foreach ($actor->followers as $follower) { try { - $acceptRequest = new ActivityRequest($follower->inbox_url, $activityPayload,); - $acceptRequest->sign($actor->public_key_id, $actor->private_key,); + $acceptRequest = new ActivityRequest($follower->inbox_url, $activityPayload); + $acceptRequest->sign($actor->public_key_id, $actor->private_key); $acceptRequest->post(); } catch (Exception $exception) { // log error - log_message('critical', $exception); + log_message('critical', $exception->getMessage()); } } } @@ -122,7 +124,7 @@ if (! function_exists('extract_urls_from_message')) { */ function extract_urls_from_message(string $message): array { - preg_match_all('~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i', $message, $match,); + preg_match_all('~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i', $message, $match); return $match[0]; } @@ -236,7 +238,7 @@ if (! function_exists('get_or_create_actor')) { // get actorUri with webfinger request $webfingerData = get_webfinger_data($username, $domain); - $actorUriKey = array_search('self', array_column($webfingerData->links, 'rel'), true,); + $actorUriKey = array_search('self', array_column($webfingerData->links, 'rel'), true); return create_actor_from_uri($webfingerData->links[$actorUriKey]->href); } @@ -250,7 +252,7 @@ if (! function_exists('create_actor_from_uri')) { { $activityRequest = new ActivityRequest($actorUri); $actorResponse = $activityRequest->get(); - $actorPayload = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR,); + $actorPayload = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR); $newActor = new Actor(); $newActor->uri = $actorUri; @@ -331,7 +333,7 @@ if (! function_exists('linkify')) { helper('text'); - $link = preg_replace('~^www\.(.+\.)~i', '$1', $link,); + $link = preg_replace('~^www\.(.+\.)~i', '$1', $link); return '<' . array_push( @@ -374,7 +376,7 @@ if (! function_exists('linkify')) { } try { - $actor = get_or_create_actor($match['username'], $match['domain'],); + $actor = get_or_create_actor($match['username'], $match['domain']); return '<' . array_push( $links, diff --git a/app/Libraries/ActivityPub/HttpSignature.php b/app/Libraries/ActivityPub/HttpSignature.php index aa6af720d3..046a1cf62d 100644 --- a/app/Libraries/ActivityPub/HttpSignature.php +++ b/app/Libraries/ActivityPub/HttpSignature.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * This file is based on the HttpSignature file from the ActivityPhp package. It is adapted to work with CodeIgniter4 * @@ -37,10 +39,7 @@ class HttpSignature signature="(?P<signature>[\w+\/]+={0,2})" /x'; - /** - * @var IncomingRequest - */ - protected ?IncomingRequest $request; + protected ?IncomingRequest $request = null; public function __construct(IncomingRequest $request = null) { @@ -64,7 +63,7 @@ class HttpSignature // verify that request has been made within the last hour $currentTime = Time::now(); - $requestTime = Time::createFromFormat('D, d M Y H:i:s T', $dateHeader->getValue(),); + $requestTime = Time::createFromFormat('D, d M Y H:i:s T', $dateHeader->getValue()); $diff = $requestTime->difference($currentTime); if ($diff->getSeconds() > 3600) { @@ -101,7 +100,7 @@ class HttpSignature // Fetch the public key linked from keyId $actorRequest = new ActivityRequest($keyId); $actorResponse = $actorRequest->get(); - $actor = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR,); + $actor = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR); $publicKeyPem = $actor->publicKey->publicKeyPem; diff --git a/app/Libraries/ActivityPub/Models/ActivityModel.php b/app/Libraries/ActivityPub/Models/ActivityModel.php index 92654d7af8..3b00d9dbf5 100644 --- a/app/Libraries/ActivityPub/Models/ActivityModel.php +++ b/app/Libraries/ActivityPub/Models/ActivityModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Models/ActorModel.php b/app/Libraries/ActivityPub/Models/ActorModel.php index 789714f519..ff5b7e3a05 100644 --- a/app/Libraries/ActivityPub/Models/ActorModel.php +++ b/app/Libraries/ActivityPub/Models/ActorModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -58,7 +60,7 @@ class ActorModel extends Model */ protected $useTimestamps = true; - public function getActorById(int $id): Actor + public function getActorById(int $id): ?Actor { $cacheName = config('ActivityPub') ->cachePrefix . "actor#{$id}"; @@ -179,11 +181,11 @@ class ActorModel extends Model cache() ->deleteMatching($prefix . '*replies'); - Events::trigger('on_block_actor', $actorId); - $this->update($actorId, [ 'is_blocked' => 1, ]); + + Events::trigger('on_block_actor', $actorId); } public function unblockActor(int $actorId): void @@ -195,10 +197,25 @@ class ActorModel extends Model cache() ->deleteMatching($prefix . '*replies'); - Events::trigger('on_unblock_actor', $actorId); - $this->update($actorId, [ 'is_blocked' => 0, ]); + + Events::trigger('on_unblock_actor', $actorId); + } + + public function clearCache(Actor $actor): void + { + $cachePrefix = config('ActivityPub') + ->cachePrefix; + $hashedActorUri = md5($actor->uri); + $cacheDomain = str_replace(':', '', $actor->domain); + + cache() + ->delete($cachePrefix . "actor-{$actor->username}-{$cacheDomain}"); + cache() + ->delete($cachePrefix . "actor-{$hashedActorUri}"); + cache() + ->deleteMatching($cachePrefix . "actor#{$actor->id}*"); } } diff --git a/app/Libraries/ActivityPub/Models/BlockedDomainModel.php b/app/Libraries/ActivityPub/Models/BlockedDomainModel.php index 910af9d0ea..ff9bee5e36 100644 --- a/app/Libraries/ActivityPub/Models/BlockedDomainModel.php +++ b/app/Libraries/ActivityPub/Models/BlockedDomainModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -95,8 +97,6 @@ class BlockedDomainModel extends Model cache() ->deleteMatching($prefix . '*replies'); - Events::trigger('on_block_domain', $name); - $this->db->transStart(); // set all actors from the domain as blocked @@ -109,6 +109,8 @@ class BlockedDomainModel extends Model 'name' => $name, ]); + Events::trigger('on_block_domain', $name); + $this->db->transComplete(); return $result; @@ -127,8 +129,6 @@ class BlockedDomainModel extends Model cache() ->deleteMatching($prefix . '*replies'); - Events::trigger('on_unblock_domain', $name); - $this->db->transStart(); // unblock all actors from the domain model('ActorModel') @@ -138,6 +138,8 @@ class BlockedDomainModel extends Model $result = $this->delete($name); + Events::trigger('on_unblock_domain', $name); + $this->db->transComplete(); return $result; diff --git a/app/Libraries/ActivityPub/Models/FavouriteModel.php b/app/Libraries/ActivityPub/Models/FavouriteModel.php index 57ba1b92b1..84d375713a 100644 --- a/app/Libraries/ActivityPub/Models/FavouriteModel.php +++ b/app/Libraries/ActivityPub/Models/FavouriteModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -58,24 +60,6 @@ class FavouriteModel extends UuidModel ->where('id', service('uuid') ->fromString($note->id) ->getBytes(),) ->increment('favourites_count'); - $prefix = config('ActivityPub') - ->cachePrefix; - $hashedNoteUri = md5($note->uri); - cache() - ->delete($prefix . "note#{$note->id}"); - cache() - ->delete($prefix . "note-{$hashedNoteUri}"); - cache() - ->delete($prefix . "actor#{$actor->id}_published_notes"); - - if ($note->in_reply_to_id) { - cache()->delete($prefix . "note#{$note->in_reply_to_id}_replies"); - cache() - ->delete($prefix . "note#{$note->in_reply_to_id}_replies_withBlocked",); - } - - Events::trigger('on_note_favourite', $actor, $note); - if ($registerActivity) { $likeActivity = new LikeActivity(); $likeActivity->set('actor', $actor->uri) @@ -92,7 +76,7 @@ class FavouriteModel extends UuidModel 'queued', ); - $likeActivity->set('id', url_to('activity', $actor->username, $activityId),); + $likeActivity->set('id', url_to('activity', $actor->username, $activityId)); model('ActivityModel') ->update($activityId, [ @@ -100,6 +84,11 @@ class FavouriteModel extends UuidModel ]); } + Events::trigger('on_note_favourite', $actor, $note); + + model('NoteModel') + ->clearCache($note); + $this->db->transComplete(); } @@ -111,22 +100,6 @@ class FavouriteModel extends UuidModel ->where('id', service('uuid') ->fromString($note->id) ->getBytes(),) ->decrement('favourites_count'); - $prefix = config('ActivityPub') - ->cachePrefix; - $hashedNoteUri = md5($note->uri); - cache() - ->delete($prefix . "note#{$note->id}"); - cache() - ->delete($prefix . "note-{$hashedNoteUri}"); - cache() - ->delete($prefix . "actor#{$actor->id}_published_notes"); - - if ($note->in_reply_to_id) { - cache()->delete($prefix . "note#{$note->in_reply_to_id}_replies"); - cache() - ->delete($prefix . "note#{$note->in_reply_to_id}_replies_withBlocked",); - } - $this->db ->table('activitypub_favourites') ->where([ @@ -137,8 +110,6 @@ class FavouriteModel extends UuidModel ]) ->delete(); - Events::trigger('on_note_undo_favourite', $actor, $note); - if ($registerActivity) { $undoActivity = new UndoActivity(); // get like activity @@ -173,7 +144,7 @@ class FavouriteModel extends UuidModel 'queued', ); - $undoActivity->set('id', url_to('activity', $actor->username, $activityId),); + $undoActivity->set('id', url_to('activity', $actor->username, $activityId)); model('ActivityModel') ->update($activityId, [ @@ -181,6 +152,11 @@ class FavouriteModel extends UuidModel ]); } + Events::trigger('on_note_undo_favourite', $actor, $note); + + model('NoteModel') + ->clearCache($note); + $this->db->transComplete(); } diff --git a/app/Libraries/ActivityPub/Models/FollowModel.php b/app/Libraries/ActivityPub/Models/FollowModel.php index 047def6466..b54069b59c 100644 --- a/app/Libraries/ActivityPub/Models/FollowModel.php +++ b/app/Libraries/ActivityPub/Models/FollowModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -13,6 +15,7 @@ use ActivityPub\Activities\UndoActivity; use ActivityPub\Entities\Actor; use ActivityPub\Entities\Follow; use CodeIgniter\Database\Exceptions\DatabaseException; +use CodeIgniter\Events\Events; use CodeIgniter\I18n\Time; use CodeIgniter\Model; use Exception; @@ -62,11 +65,6 @@ class FollowModel extends Model ->where('id', $targetActor->id) ->increment('followers_count'); - cache() - ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}",); - cache() - ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}_followers",); - if ($registerActivity) { $followActivity = new FollowActivity(); @@ -85,7 +83,7 @@ class FollowModel extends Model 'queued', ); - $followActivity->set('id', base_url(route_to('activity', $actor->username, $activityId),),); + $followActivity->set('id', base_url(route_to('activity', $actor->username, $activityId),)); model('ActivityModel') ->update($activityId, [ @@ -93,6 +91,11 @@ class FollowModel extends Model ]); } + Events::trigger('on_follow', $actor, $targetActor); + + model('ActorModel') + ->clearCache($targetActor); + $this->db->transComplete(); } catch (Exception) { // follow already exists, do nothing @@ -119,11 +122,6 @@ class FollowModel extends Model ->where('id', $targetActor->id) ->decrement('followers_count'); - cache() - ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}",); - cache() - ->delete(config('ActivityPub') ->cachePrefix . "actor#{$targetActor->id}_followers",); - if ($registerActivity) { $undoActivity = new UndoActivity(); // get follow activity from database @@ -150,7 +148,7 @@ class FollowModel extends Model 'queued', ); - $undoActivity->set('id', url_to('activity', $actor->username, $activityId),); + $undoActivity->set('id', url_to('activity', $actor->username, $activityId)); model('ActivityModel') ->update($activityId, [ @@ -158,6 +156,11 @@ class FollowModel extends Model ]); } + Events::trigger('on_undo_follow', $actor, $targetActor); + + model('ActorModel') + ->clearCache($targetActor); + $this->db->transComplete(); } } diff --git a/app/Libraries/ActivityPub/Models/NoteModel.php b/app/Libraries/ActivityPub/Models/NoteModel.php index 8eca3d44f8..2da2fdc536 100644 --- a/app/Libraries/ActivityPub/Models/NoteModel.php +++ b/app/Libraries/ActivityPub/Models/NoteModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -138,10 +140,10 @@ class NoteModel extends UuidModel ->orderBy('published_at', 'DESC') ->findAll(); - $secondsToNextUnpublishedNote = $this->getSecondsToNextUnpublishedNote($actorId,); + $secondsToNextUnpublishedNote = $this->getSecondsToNextUnpublishedNote($actorId); cache() - ->save($cacheName, $found, $secondsToNextUnpublishedNote ? $secondsToNextUnpublishedNote : DECADE,); + ->save($cacheName, $found, $secondsToNextUnpublishedNote ? $secondsToNextUnpublishedNote : DECADE); } return $found; @@ -273,19 +275,10 @@ class NoteModel extends UuidModel ->where('id', $note->actor_id) ->increment('notes_count'); - $cachePrefix = config('ActivityPub') - ->cachePrefix; - cache() - ->delete($cachePrefix . "actor#{$note->actor_id}"); - cache() - ->delete($cachePrefix . "actor#{$note->actor_id}_published_notes",); - - Events::trigger('on_note_add', $note); - if ($registerActivity) { // set note id and uri to construct NoteObject $note->id = $newNoteId; - $note->uri = base_url(route_to('note', $note->actor->username, $newNoteId),); + $note->uri = base_url(route_to('note', $note->actor->username, $newNoteId)); $createActivity = new CreateActivity(); $noteObjectClass = config('ActivityPub') @@ -305,7 +298,7 @@ class NoteModel extends UuidModel 'queued', ); - $createActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),),); + $createActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),)); model('ActivityModel') ->update($activityId, [ @@ -313,6 +306,10 @@ class NoteModel extends UuidModel ]); } + Events::trigger('on_note_add', $note); + + $this->clearCache($note); + $this->db->transComplete(); return $newNoteId; @@ -334,7 +331,7 @@ class NoteModel extends UuidModel // update published date in payload $newPayload = $scheduledActivity->payload; - $newPayload->object->published = $updatedNote->published_at->format(DATE_W3C,); + $newPayload->object->published = $updatedNote->published_at->format(DATE_W3C); model('ActivityModel') ->update($scheduledActivity->id, [ 'payload' => json_encode($newPayload, JSON_THROW_ON_ERROR), @@ -344,14 +341,9 @@ class NoteModel extends UuidModel // update note $updateResult = $this->update($updatedNote->id, $updatedNote); - // Clear note cache - $prefix = config('ActivityPub') - ->cachePrefix; - $hashedNoteUri = md5($updatedNote->uri); - cache() - ->delete($prefix . "note#{$updatedNote->id}"); - cache() - ->delete($prefix . "note-{$hashedNoteUri}"); + Events::trigger('on_note_edit', $updatedNote); + + $this->clearCache($updatedNote); $this->db->transComplete(); @@ -365,33 +357,16 @@ class NoteModel extends UuidModel { $this->db->transStart(); - $cachePrefix = config('ActivityPub') - ->cachePrefix; - model('ActorModel') ->where('id', $note->actor_id) ->decrement('notes_count'); - cache() - ->delete($cachePrefix . "actor#{$note->actor_id}"); - cache() - ->delete($cachePrefix . "actor#{$note->actor_id}_published_notes",); - if ($note->in_reply_to_id) { + if ($note->is_reply) { // Note to remove is a reply model('NoteModel') ->where('id', $this->uuid->fromString($note->in_reply_to_id) ->getBytes(),) ->decrement('replies_count'); - $replyToNote = $note->reply_to_note; - cache() - ->delete($cachePrefix . "note#{$replyToNote->id}"); - cache() - ->delete($cachePrefix . "note-{$replyToNote->uri}"); - cache() - ->delete($cachePrefix . "note#{$replyToNote->id}_replies"); - cache() - ->delete($cachePrefix . "note#{$replyToNote->id}_replies_withBlocked",); - Events::trigger('on_reply_remove', $note); } @@ -405,7 +380,7 @@ class NoteModel extends UuidModel $this->removeNote($reply); } - // check that preview card in no longer used elsewhere before deleting it + // check that preview card is no longer used elsewhere before deleting it if ( $note->preview_card && $this->db @@ -413,11 +388,9 @@ class NoteModel extends UuidModel ->where('preview_card_id', $note->preview_card->id) ->countAll() <= 1 ) { - model('PreviewCardModel')->deletePreviewCard($note->preview_card->id, $note->preview_card->url,); + model('PreviewCardModel')->deletePreviewCard($note->preview_card->id, $note->preview_card->url); } - Events::trigger('on_note_remove', $note); - if ($registerActivity) { $deleteActivity = new DeleteActivity(); $tombstoneObject = new TombstoneObject(); @@ -437,7 +410,7 @@ class NoteModel extends UuidModel 'queued', ); - $deleteActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),),); + $deleteActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),)); model('ActivityModel') ->update($activityId, [ @@ -445,24 +418,13 @@ class NoteModel extends UuidModel ]); } - // clear note + replies / reblogs + actor and its published notes - $hashedNoteUri = md5($note->uri); - cache() - ->delete($cachePrefix . "note#{$note->id}"); - cache() - ->delete($cachePrefix . "note-{$hashedNoteUri}"); - cache() - ->delete($cachePrefix . "note#{$note->id}_replies"); - cache() - ->delete($cachePrefix . "note#{$note->id}_replies_withBlocked"); - cache() - ->delete($cachePrefix . "note#{$note->id}_reblogs"); - cache() - ->delete($cachePrefix . "note#{$note->id}_preview_card"); - $result = model('NoteModel', false) ->delete($note->id); + Events::trigger('on_note_remove', $note); + + $this->clearCache($note); + $this->db->transComplete(); return $result; @@ -485,20 +447,10 @@ class NoteModel extends UuidModel ->where('id', $this->uuid->fromString($reply->in_reply_to_id) ->getBytes(),) ->increment('replies_count'); - $prefix = config('ActivityPub') - ->cachePrefix; - $hashedNoteUri = md5($reply->reply_to_note->uri); - cache() - ->delete($prefix . "note#{$reply->in_reply_to_id}"); - cache() - ->delete($prefix . "note-{$hashedNoteUri}"); - cache() - ->delete($prefix . "note#{$reply->in_reply_to_id}_replies"); - cache() - ->delete($prefix . "note#{$reply->in_reply_to_id}_replies_withBlocked",); - Events::trigger('on_note_reply', $reply); + $this->clearCache($reply); + $this->db->transComplete(); return $noteId; @@ -521,27 +473,10 @@ class NoteModel extends UuidModel ->where('id', $actor->id) ->increment('notes_count'); - $prefix = config('ActivityPub') - ->cachePrefix; - cache() - ->delete($prefix . "actor#{$note->actor_id}"); - cache() - ->delete($prefix . "actor#{$note->actor_id}_published_notes"); - model('NoteModel') ->where('id', $this->uuid->fromString($note->id)->getBytes()) ->increment('reblogs_count'); - $hashedNoteUri = md5($note->uri); - cache() - ->delete($prefix . "note#{$note->id}"); - cache() - ->delete($prefix . "note-{$hashedNoteUri}"); - cache() - ->delete($prefix . "note#{$note->id}_reblogs"); - - Events::trigger('on_note_reblog', $actor, $note); - if ($registerActivity) { $announceActivity = new AnnounceActivity($reblog); @@ -556,7 +491,7 @@ class NoteModel extends UuidModel 'queued', ); - $announceActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),),); + $announceActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId),)); model('ActivityModel') ->update($activityId, [ @@ -564,6 +499,10 @@ class NoteModel extends UuidModel ]); } + Events::trigger('on_note_reblog', $actor, $note); + + $this->clearCache($note); + $this->db->transComplete(); return $reblogId; @@ -577,30 +516,10 @@ class NoteModel extends UuidModel ->where('id', $reblogNote->actor_id) ->decrement('notes_count'); - $cachePrefix = config('ActivityPub') - ->cachePrefix; - cache() - ->delete($cachePrefix . "actor#{$reblogNote->actor_id}"); - cache() - ->delete($cachePrefix . "actor#{$reblogNote->actor_id}_published_notes",); - model('NoteModel') ->where('id', $this->uuid->fromString($reblogNote->reblog_of_id) ->getBytes(),) ->decrement('reblogs_count'); - $hashedReblogNoteUri = md5($reblogNote->uri); - $hashedNoteUri = md5($reblogNote->reblog_of_note->uri); - cache() - ->delete($cachePrefix . "note#{$reblogNote->id}"); - cache() - ->delete($cachePrefix . "note-{$hashedReblogNoteUri}"); - cache() - ->delete($cachePrefix . "note#{$reblogNote->reblog_of_id}"); - cache() - ->delete($cachePrefix . "note-{$hashedNoteUri}"); - - Events::trigger('on_note_undo_reblog', $reblogNote); - if ($registerActivity) { $undoActivity = new UndoActivity(); // get like activity @@ -649,6 +568,10 @@ class NoteModel extends UuidModel $result = model('NoteModel', false) ->delete($reblogNote->id); + Events::trigger('on_note_undo_reblog', $reblogNote); + + $this->clearCache($reblogNote); + $this->db->transComplete(); return $result; @@ -670,6 +593,29 @@ class NoteModel extends UuidModel } } + public function clearCache(Note $note): void + { + $cachePrefix = config('ActivityPub') + ->cachePrefix; + + $hashedNoteUri = md5($note->uri); + + model('ActorModel') + ->clearCache($note->actor); + cache() + ->deleteMatching($cachePrefix . "note#{$note->id}*"); + cache() + ->deleteMatching($cachePrefix . "note-{$hashedNoteUri}*"); + + if ($note->is_reply) { + $this->clearCache($note->reply_to_note); + } + + if ($note->is_reblog) { + $this->clearCache($note->reblog_of_note); + } + } + /** * @param array<string, array<string|int, mixed>> $data * @return array<string, array<string|int, mixed>> @@ -681,9 +627,9 @@ class NoteModel extends UuidModel if (! isset($data['data']['uri'])) { $actor = model('ActorModel') - ->getActorById($data['data']['actor_id'],); + ->getActorById($data['data']['actor_id']); - $data['data']['uri'] = base_url(route_to('note', $actor->username, $uuid4->toString()),); + $data['data']['uri'] = base_url(route_to('note', $actor->username, $uuid4->toString())); } return $data; diff --git a/app/Libraries/ActivityPub/Models/PreviewCardModel.php b/app/Libraries/ActivityPub/Models/PreviewCardModel.php index 2c4c09ba7a..90c404eb83 100644 --- a/app/Libraries/ActivityPub/Models/PreviewCardModel.php +++ b/app/Libraries/ActivityPub/Models/PreviewCardModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -93,7 +95,7 @@ class PreviewCardModel extends Model { $hashedPreviewCardUrl = md5($url); cache() - ->delete(config('ActivityPub') ->cachePrefix . "preview_card-{$hashedPreviewCardUrl}",); + ->delete(config('ActivityPub') ->cachePrefix . "preview_card-{$hashedPreviewCardUrl}"); return $this->delete($id); } diff --git a/app/Libraries/ActivityPub/Objects/ActorObject.php b/app/Libraries/ActivityPub/Objects/ActorObject.php index ac134f651f..b3280650f4 100644 --- a/app/Libraries/ActivityPub/Objects/ActorObject.php +++ b/app/Libraries/ActivityPub/Objects/ActorObject.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/Objects/NoteObject.php b/app/Libraries/ActivityPub/Objects/NoteObject.php index 80b1a3e717..e308706241 100644 --- a/app/Libraries/ActivityPub/Objects/NoteObject.php +++ b/app/Libraries/ActivityPub/Objects/NoteObject.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * This class defines the Object which is the primary base type for the Activity Streams vocabulary. * @@ -37,7 +39,7 @@ class NoteObject extends ObjectType $this->inReplyTo = $note->reply_to_note->uri; } - $this->replies = base_url(route_to('note-replies', $note->actor->username, $note->id),); + $this->replies = base_url(route_to('note-replies', $note->actor->username, $note->id)); $this->cc = [$note->actor->followers_url]; } diff --git a/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php b/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php index e68c1935f0..1b2d288862 100644 --- a/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php +++ b/app/Libraries/ActivityPub/Objects/OrderedCollectionObject.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * This class defines a Paginated OrderedCollection based on CodeIgniter4 Pager to get the pagination metadata * @@ -19,11 +21,11 @@ class OrderedCollectionObject extends ObjectType protected int $totalItems; - protected ?string $first; + protected ?string $first = null; - protected ?string $current; + protected ?string $current = null; - protected ?string $last; + protected ?string $last = null; /** * @param ObjectType[] $orderedItems diff --git a/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php b/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php index 3053ee904e..de177ebd56 100644 --- a/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php +++ b/app/Libraries/ActivityPub/Objects/OrderedCollectionPage.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * This class defines a Paginated OrderedCollection based on CodeIgniter4 Pager to get the pagination metadata * @@ -18,9 +20,9 @@ class OrderedCollectionPage extends OrderedCollectionObject protected string $partOf; - protected ?string $prev; + protected ?string $prev = null; - protected ?string $next; + protected ?string $next = null; public function __construct(Pager $pager, ?array $orderedItems = null) { diff --git a/app/Libraries/ActivityPub/Objects/TombstoneObject.php b/app/Libraries/ActivityPub/Objects/TombstoneObject.php index 5f4a5ea640..aca1ac1e7f 100644 --- a/app/Libraries/ActivityPub/Objects/TombstoneObject.php +++ b/app/Libraries/ActivityPub/Objects/TombstoneObject.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/ActivityPub/WebFinger.php b/app/Libraries/ActivityPub/WebFinger.php index 882e7d1333..f81779adf0 100644 --- a/app/Libraries/ActivityPub/WebFinger.php +++ b/app/Libraries/ActivityPub/WebFinger.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/Analytics/AnalyticsTrait.php b/app/Libraries/Analytics/AnalyticsTrait.php index d2561ffa20..6aa3cd5d50 100644 --- a/app/Libraries/Analytics/AnalyticsTrait.php +++ b/app/Libraries/Analytics/AnalyticsTrait.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -33,7 +35,7 @@ trait AnalyticsTrait parse_url($referer, PHP_URL_HOST) === null ? '- Direct -' : parse_url($referer, PHP_URL_HOST); - parse_str(parse_url($referer, PHP_URL_QUERY), $queries); + parse_str((string) parse_url($referer, PHP_URL_QUERY), $queries); $keywords = $queries['q'] ?? null; $procedureName = $db->prefixTable('analytics_website'); diff --git a/app/Libraries/Analytics/Config/Analytics.php b/app/Libraries/Analytics/Config/Analytics.php index 84842d57a2..08f7a901e1 100644 --- a/app/Libraries/Analytics/Config/Analytics.php +++ b/app/Libraries/Analytics/Config/Analytics.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Analytics\Config; use CodeIgniter\Config\BaseConfig; diff --git a/app/Libraries/Analytics/Config/Routes.php b/app/Libraries/Analytics/Config/Routes.php index 4a57aec13f..7fe14863ed 100644 --- a/app/Libraries/Analytics/Config/Routes.php +++ b/app/Libraries/Analytics/Config/Routes.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -69,4 +71,4 @@ $routes->group('', [ // Show the Unknown UserAgents $routes->get('.well-known/unknown-useragents', 'UnknownUserAgentsController'); -$routes->get('.well-known/unknown-useragents/(:num)', 'UnknownUserAgentsController/$1',); +$routes->get('.well-known/unknown-useragents/(:num)', 'UnknownUserAgentsController/$1'); diff --git a/app/Libraries/Analytics/Controllers/AnalyticsController.php b/app/Libraries/Analytics/Controllers/AnalyticsController.php index f6fa8d70ce..e0ed21af62 100644 --- a/app/Libraries/Analytics/Controllers/AnalyticsController.php +++ b/app/Libraries/Analytics/Controllers/AnalyticsController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -29,8 +31,8 @@ class AnalyticsController extends Controller $this->methodName = 'getData' . (count($params) >= 3 ? $params[2] : ''); return $this->{$method}( - $params[0], - count($params) >= 4 ? $params[3] : null, + (int) $params[0], + count($params) >= 4 ? (int) $params[3] : null, ); } @@ -39,9 +41,9 @@ class AnalyticsController extends Controller $methodName = $this->methodName; if ($episodeId === null) { - return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId),); + return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId)); } - return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId, $episodeId),); + return $this->response->setJSON($this->analyticsModel->{$methodName}($podcastId, $episodeId)); } } diff --git a/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php b/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php index 1d1141848c..05ae1462d0 100644 --- a/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php +++ b/app/Libraries/Analytics/Controllers/EpisodeAnalyticsController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/Analytics/Controllers/EpisodeController.php b/app/Libraries/Analytics/Controllers/EpisodeController.php index 96c1289414..f94fb386c8 100644 --- a/app/Libraries/Analytics/Controllers/EpisodeController.php +++ b/app/Libraries/Analytics/Controllers/EpisodeController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -100,7 +102,7 @@ class EpisodeController extends BaseController $session = Services::session(); $session->start(); if (isset($_SERVER['HTTP_REFERER'])) { - $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST),); + $session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)); } $locale = service('request') @@ -159,7 +161,7 @@ class EpisodeController extends BaseController public function oembedXML(): ResponseInterface { - $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>",); + $oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>"); $oembed->addChild('type', 'rich'); $oembed->addChild('version', '1.0'); @@ -182,6 +184,6 @@ class EpisodeController extends BaseController $oembed->addChild('width', '600'); $oembed->addChild('height', '200'); - return $this->response->setXML($oembed); + return $this->response->setXML((string) $oembed); } } diff --git a/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php b/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php index 2830818622..0747f6edfc 100644 --- a/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php +++ b/app/Libraries/Analytics/Controllers/UnknownUserAgentsController.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php index e80887ea4d..8a4914f200 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-120000_add_analytics_podcasts.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsPodcasts Creates analytics_podcasts table in database * @@ -44,7 +46,7 @@ class AddAnalyticsPodcasts extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php index a00f5eaa20..27e0412618 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_episode.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsPodcastsByEpisode Creates analytics_episodes_by_episode table in database * @@ -40,7 +42,7 @@ class AddAnalyticsPodcastsByEpisode extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'episode_id']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php index 412b75f6ae..ad4ee5c5ff 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-130000_add_analytics_podcasts_by_hour.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsPodcastsByHour Creates analytics_podcasts_by_hour table in database * @@ -35,7 +37,7 @@ class AddAnalyticsPodcastsByHour extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'hour']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php index d93270f4e3..09e4386d45 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-140000_add_analytics_podcasts_by_player.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsPodcastsByPlayer Creates analytics_podcasts_by_player table in database * @@ -52,7 +54,7 @@ class AddAnalyticsPodcastsByPlayer extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'service', 'app', 'device', 'os', 'is_bot']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php index e7eb3597db..069302794d 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-150000_add_analytics_podcasts_by_country.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsPodcastsByCountry Creates analytics_podcasts_by_country table in database * @@ -36,7 +38,7 @@ class AddAnalyticsPodcastsByCountry extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'country_code']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php index 8747fed8d0..57ee57b31a 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-160000_add_analytics_podcasts_by_region.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsPodcastsByRegion Creates analytics_podcasts_by_region table in database * @@ -49,7 +51,7 @@ class AddAnalyticsPodcastsByRegion extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'country_code', 'region_code']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php index 209a792feb..bea21b0694 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-170000_add_analytics_website_by_browser.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsWebsiteByBrowser Creates analytics_website_by_browser table in database * @@ -36,7 +38,7 @@ class AddAnalyticsWebsiteByBrowser extends Migration ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'browser']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php index 8972455246..c43005da1d 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-180000_add_analytics_website_by_referer.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsWebsiteByReferer Creates analytics_website_by_referer table in database * @@ -46,7 +48,7 @@ class AddAnalyticsWebsiteByReferer extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'referer_url']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php index c8f5324249..d83cbba3c4 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-190000_add_analytics_website_by_entry_page.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsWebsiteByEntryPage Creates analytics_website_by_entry_page table in database * @@ -35,7 +37,7 @@ class AddAnalyticsWebsiteByEntryPage extends Migration ], ]); $this->forge->addPrimaryKey(['podcast_id', 'date', 'entry_page_url']); - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php index 6372a03272..801cd9638e 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-200000_add_analytics_unknown_useragents.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsUnknownUseragents Creates analytics_unknown_useragents table in database * @@ -36,7 +38,7 @@ class AddAnalyticsUnknownUseragents extends Migration $this->forge->addPrimaryKey('id'); // `created_at` and `updated_at` are created with SQL because Model class won’t be used for insertion (Procedure will be used instead) - $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()',); + $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); $this->forge->addField( '`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()', ); diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php index 0750c4a382..b04b4e08b0 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsPodcastsProcedure Creates analytics_podcasts procedure in database * @@ -79,6 +81,6 @@ class AddAnalyticsPodcastsProcedure extends Migration public function down(): void { $prefix = $this->db->getPrefix(); - $this->db->query("DROP PROCEDURE IF EXISTS `{$prefix}analytics_podcasts`",); + $this->db->query("DROP PROCEDURE IF EXISTS `{$prefix}analytics_podcasts`"); } } diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php index 396bd45d4e..918fa96097 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsUnknownUseragentsProcedure Creates analytics_unknown_useragents procedure in database * diff --git a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php index fea2bd588b..6f91cdddbf 100644 --- a/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php +++ b/app/Libraries/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AddAnalyticsWebsiteProcedure Creates analytics_website stored procedure in database * diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php b/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php index 3a97fbeb0a..3912b72931 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php +++ b/app/Libraries/Analytics/Entities/AnalyticsPodcasts.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcasts Entity for AnalyticsPodcasts * diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php index ee7f8d8132..ca9ed80ecf 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php +++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByCountry.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastsByCountry Entity for AnalyticsPodcastsByCountry * diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php index 2bcbe3f547..07dd696726 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php +++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByEpisode.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastsByEpisode Entity for AnalyticsPodcastsByEpisode * diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php index 3c70d2fb7c..8885602065 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php +++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByHour.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastsByHour Entity for AnalyticsPodcastsByHour * diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php index 2e386171bd..b35435877b 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php +++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByPlayer.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastsByPlayer Entity for AnalyticsPodcastsByPlayer * diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php index 0cc95d809e..f193f3cfd8 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php +++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByRegion.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastsByRegion Entity for AnalyticsPodcastsByRegion * diff --git a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php index 18109a32f8..6604820f67 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php +++ b/app/Libraries/Analytics/Entities/AnalyticsPodcastsByService.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastsByService Entity for AnalyticsPodcastsByService * diff --git a/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php b/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php index af22085d69..b5d460e819 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php +++ b/app/Libraries/Analytics/Entities/AnalyticsUnknownUserAgent.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsUnknownUseragents Entity for AnalyticsUnknownUseragents * diff --git a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php index 2ff0c0cc01..0dcb8e3413 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php +++ b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByBrowser.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsWebsiteByBrowser Entity for AnalyticsWebsiteByBrowser * diff --git a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php index 4d88372ad6..4e59db25d9 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php +++ b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByEntryPage.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsWebsiteByEntryPage Entity for AnalyticsWebsiteByEntryPage * diff --git a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php index af05447bc6..570fad0de9 100644 --- a/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php +++ b/app/Libraries/Analytics/Entities/AnalyticsWebsiteByReferer.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class class AnalyticsWebsiteByReferer Entity for AnalyticsWebsiteByReferer * diff --git a/app/Libraries/Analytics/Helpers/analytics_helper.php b/app/Libraries/Analytics/Helpers/analytics_helper.php index c028ffe01e..838ad78e60 100644 --- a/app/Libraries/Analytics/Helpers/analytics_helper.php +++ b/app/Libraries/Analytics/Helpers/analytics_helper.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + use CodeIgniter\Router\Exceptions\RouterException; use Config\Database; use Config\Services; @@ -65,7 +67,7 @@ if (! function_exists('generate_episode_analytics_url')) { floor((($audioFileSize - $audioFileHeaderSize) / $audioFileDuration) * 60,), $audioFileSize, $audioFileDuration, - strtotime($publicationDate), + $publicationDate->getTimestamp(), ), ), $audioFilePath, @@ -83,7 +85,7 @@ if (! function_exists('set_user_session_deny_list_ip')) { $session->start(); if (! $session->has('denyListIp')) { - $session->set('denyListIp', IpDb::find($_SERVER['REMOTE_ADDR']) !== null,); + $session->set('denyListIp', IpDb::find($_SERVER['REMOTE_ADDR']) !== null); } } } @@ -107,7 +109,7 @@ if (! function_exists('set_user_session_location')) { // Finds location: if (! $session->has('location')) { try { - $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb',); + $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb'); $city = $cityReader->city($_SERVER['REMOTE_ADDR']); $location = [ @@ -158,8 +160,8 @@ if (! function_exists('set_user_session_player')) { // Add to unknown list try { $db = Database::connect(); - $procedureNameAnalyticsUnknownUseragents = $db->prefixTable('analytics_unknown_useragents',); - $db->query("CALL {$procedureNameAnalyticsUnknownUseragents}(?)", [$userAgent],); + $procedureNameAnalyticsUnknownUseragents = $db->prefixTable('analytics_unknown_useragents'); + $db->query("CALL {$procedureNameAnalyticsUnknownUseragents}(?)", [$userAgent]); // If things go wrong the show must go on and the user must be able to download the file } catch (Exception) { } @@ -280,7 +282,7 @@ if (! function_exists('podcast_hit')) { // We create a sha1 hash for this IP_Address+User_Agent+Episode_ID (used to count only once multiple episode downloads): $episodeHashId = '_IpUaEp_' . - sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $episodeId,); + sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $episodeId); // Was this episode downloaded in the past 24h: $downloadedBytes = cache($episodeHashId); // Rolling window is 24 hours (86400 seconds): @@ -327,7 +329,7 @@ if (! function_exists('podcast_hit')) { // We create a sha1 hash for this IP_Address+User_Agent+Podcast_ID (used to count unique listeners): $listenerHashId = '_IpUaPo_' . - sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $podcastId,); + sha1($_SERVER['REMOTE_ADDR'] . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $podcastId); $newListener = 1; // Has this listener already downloaded an episode today: $downloadsByUser = cache($listenerHashId); @@ -342,7 +344,7 @@ if (! function_exists('podcast_hit')) { $midnightTTL = strtotime('tomorrow') - time(); // We save the download count for this user until midnight: cache() - ->save($listenerHashId, $downloadsByUser, $midnightTTL,); + ->save($listenerHashId, $downloadsByUser, $midnightTTL); $db->query( "CALL {$procedureName}(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);", @@ -368,7 +370,7 @@ if (! function_exists('podcast_hit')) { } } catch (Exception $exception) { // If things go wrong the show must go on and the user must be able to download the file - log_message('critical', $exception); + log_message('critical', $exception->getMessage()); } } } diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php index c84196772a..0b65fffc3b 100644 --- a/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByCountryModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastByCountryModel Model for analytics_podcasts_by_country table in database * @@ -57,7 +59,7 @@ class AnalyticsPodcastByCountryModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_by_country_weekly", $found, 600,); + ->save("{$podcastId}_analytics_podcast_by_country_weekly", $found, 600); } return $found; @@ -85,7 +87,7 @@ class AnalyticsPodcastByCountryModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_by_country_yearly", $found, 600,); + ->save("{$podcastId}_analytics_podcast_by_country_yearly", $found, 600); } return $found; } diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php index ad654c26cb..a3fc88df5b 100644 --- a/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByEpisodeModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastByEpisodeModel Model for analytics_podcasts_by_episodes table in database * @@ -55,7 +57,7 @@ class AnalyticsPodcastByEpisodeModel extends Model ->findAll(); cache() - ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_day", $found, 600,); + ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_day", $found, 600); } return $found; @@ -80,7 +82,7 @@ class AnalyticsPodcastByEpisodeModel extends Model ->findAll(); cache() - ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_month", $found, 600,); + ->save("{$podcastId}_{$episodeId}_analytics_podcast_by_episode_by_month", $found, 600); } return $found; diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php index afd8ebbc53..d582f77a30 100644 --- a/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByHourModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastByHour Model for analytics_podcasts_by_hour table in database * @@ -54,7 +56,7 @@ class AnalyticsPodcastByHourModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_hour", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_hour", $found, 600); } return $found; diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php index 66f258bc42..b8b8f32acd 100644 --- a/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByPlayerModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastByPlayerModel Model for analytics_podcasts_by_player table in database * @@ -58,7 +60,7 @@ class AnalyticsPodcastByPlayerModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_player_by_app_weekly", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_player_by_app_weekly", $found, 600); } return $found; } @@ -86,7 +88,7 @@ class AnalyticsPodcastByPlayerModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_player_by_app_yearly", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_player_by_app_yearly", $found, 600); } return $found; } @@ -115,7 +117,7 @@ class AnalyticsPodcastByPlayerModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_player_by_os_weekly", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_player_by_os_weekly", $found, 600); } return $found; } @@ -143,7 +145,7 @@ class AnalyticsPodcastByPlayerModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_player_by_device_weekly", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_player_by_device_weekly", $found, 600); } return $found; } @@ -171,7 +173,7 @@ class AnalyticsPodcastByPlayerModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_player_bots", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_player_bots", $found, 600); } return $found; } diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php index 27d1216096..be9b5af347 100644 --- a/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByRegionModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastByRegionModel Model for analytics_podcasts_by_region table in database * @@ -60,7 +62,7 @@ class AnalyticsPodcastByRegionModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_by_region_{$locale}", $found, 600,); + ->save("{$podcastId}_analytics_podcast_by_region_{$locale}", $found, 600); } return $found; } diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php index 298fbf72b1..b0519119b4 100644 --- a/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsPodcastByServiceModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastByServiceModel Model for analytics_podcasts_by_player table in database * @@ -58,7 +60,7 @@ class AnalyticsPodcastByServiceModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_service_weekly", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_service_weekly", $found, 600); } return $found; } diff --git a/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php b/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php index 807bdca0b9..630c7c4133 100644 --- a/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsPodcastModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsPodcastModel Model for analytics_podcasts table in database * @@ -76,7 +78,7 @@ class AnalyticsPodcastModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcasts_by_weekday", $found, 600,); + ->save("{$podcastId}_analytics_podcasts_by_weekday", $found, 600); } return $found; } @@ -98,7 +100,7 @@ class AnalyticsPodcastModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_by_bandwidth", $found, 600,); + ->save("{$podcastId}_analytics_podcast_by_bandwidth", $found, 600); } return $found; } @@ -121,7 +123,7 @@ class AnalyticsPodcastModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_by_month", $found, 600,); + ->save("{$podcastId}_analytics_podcast_by_month", $found, 600); } return $found; } @@ -145,7 +147,7 @@ class AnalyticsPodcastModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_unique_listeners_by_day", $found, 600,); + ->save("{$podcastId}_analytics_podcast_unique_listeners_by_day", $found, 600); } return $found; } @@ -170,7 +172,7 @@ class AnalyticsPodcastModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_unique_listeners_by_month", $found, 600,); + ->save("{$podcastId}_analytics_podcast_unique_listeners_by_month", $found, 600); } return $found; } @@ -196,7 +198,7 @@ class AnalyticsPodcastModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_listening_time_by_day", $found, 600,); + ->save("{$podcastId}_analytics_podcast_listening_time_by_day", $found, 600); } return $found; } @@ -221,7 +223,7 @@ class AnalyticsPodcastModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_podcast_listening_time_by_month", $found, 600,); + ->save("{$podcastId}_analytics_podcast_listening_time_by_month", $found, 600); } return $found; } diff --git a/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php b/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php index 8b4ba41434..f3230eaad9 100644 --- a/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsUnknownUseragentsModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsUnknownUseragentsModel Model for analytics_unknown_useragents table in database * diff --git a/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php b/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php index ec4817c95f..438beda401 100644 --- a/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsWebsiteByBrowserModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsWebsiteByBrowserModel Model for analytics_website_by_browser table in database * @@ -55,7 +57,7 @@ class AnalyticsWebsiteByBrowserModel extends Model ->findAll(); cache() - ->save("{$podcastId}_analytics_website_by_browser", $found, 600,); + ->save("{$podcastId}_analytics_website_by_browser", $found, 600); } return $found; } diff --git a/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php b/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php index f0bdf89d36..fa425e8dc5 100644 --- a/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsWebsiteByEntryPageModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsWebsiteByEntryPageModel Model for analytics_website_by_entry_page table in database * @@ -54,7 +56,7 @@ class AnalyticsWebsiteByEntryPageModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_website_by_entry_page", $found, 600,); + ->save("{$podcastId}_analytics_website_by_entry_page", $found, 600); } return $found; } diff --git a/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php b/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php index a0b0a9cc6c..fd4ff8185d 100644 --- a/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php +++ b/app/Libraries/Analytics/Models/AnalyticsWebsiteByRefererModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class AnalyticsWebsiteByRefererModel Model for analytics_website_by_referer table in database * @@ -54,7 +56,7 @@ class AnalyticsWebsiteByRefererModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_website_by_referer", $found, 600,); + ->save("{$podcastId}_analytics_website_by_referer", $found, 600); } return $found; } @@ -80,7 +82,7 @@ class AnalyticsWebsiteByRefererModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_website_by_domain_weekly", $found, 600,); + ->save("{$podcastId}_analytics_website_by_domain_weekly", $found, 600); } return $found; } @@ -106,7 +108,7 @@ class AnalyticsWebsiteByRefererModel extends Model ->orderBy('values', 'DESC') ->findAll(); cache() - ->save("{$podcastId}_analytics_website_by_domain_yearly", $found, 600,); + ->save("{$podcastId}_analytics_website_by_domain_yearly", $found, 600); } return $found; } diff --git a/app/Libraries/Breadcrumb.php b/app/Libraries/Breadcrumb.php index 00fa6659d8..1aa69dc8d7 100644 --- a/app/Libraries/Breadcrumb.php +++ b/app/Libraries/Breadcrumb.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Generates and renders a breadcrumb based on the current url segments * diff --git a/app/Libraries/Negotiate.php b/app/Libraries/Negotiate.php index 16923866eb..19717daef2 100644 --- a/app/Libraries/Negotiate.php +++ b/app/Libraries/Negotiate.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace App\Libraries; use CodeIgniter\HTTP\Negotiate as CodeIgniterHTTPNegotiate; diff --git a/app/Libraries/NoteObject.php b/app/Libraries/NoteObject.php index 48905df67c..feabd9f6ca 100644 --- a/app/Libraries/NoteObject.php +++ b/app/Libraries/NoteObject.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -13,7 +15,10 @@ use App\Entities\Note; class NoteObject extends ActivityPubNoteObject { - public function __construct(Note $note) + /** + * @param Note $note + */ + public function __construct($note) { parent::__construct($note); diff --git a/app/Libraries/PodcastActor.php b/app/Libraries/PodcastActor.php index 1ae3991468..bde1736960 100644 --- a/app/Libraries/PodcastActor.php +++ b/app/Libraries/PodcastActor.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Libraries/Router.php b/app/Libraries/Router.php index 8d428528d9..368c64f5db 100644 --- a/app/Libraries/Router.php +++ b/app/Libraries/Router.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * This file extends the Router class from the CodeIgniter 4 framework. * @@ -30,7 +32,7 @@ class Router extends CodeIgniterRouter protected function checkRoutes(string $uri): bool { /** @noRector RemoveExtraParametersRector */ - $routes = $this->collection->getRoutes($this->collection->getHTTPVerb(),); + $routes = $this->collection->getRoutes($this->collection->getHTTPVerb()); // Don't waste any time if ($routes === []) { @@ -64,7 +66,7 @@ class Router extends CodeIgniterRouter // Does the RegEx match? if (preg_match('#^' . $key . '$#u', $uri, $matches)) { - $this->matchedRouteOptions = $this->collection->getRoutesOptions($matchedKey,); + $this->matchedRouteOptions = $this->collection->getRoutesOptions($matchedKey); // Is this route supposed to redirect to another? if ($this->collection->isRedirect($key)) { @@ -112,7 +114,7 @@ class Router extends CodeIgniterRouter ->getValue(); $parsedHeader = $negotiate->parseHeader($acceptHeader); - $supported = array_keys($this->matchedRouteOptions['alternate-content'],); + $supported = array_keys($this->matchedRouteOptions['alternate-content']); $expectedContentType = $parsedHeader[0]; foreach ($supported as $available) { @@ -157,7 +159,7 @@ class Router extends CodeIgniterRouter ) { $replacekey = str_replace('/(.*)', '', $key); $val = preg_replace('#^' . $key . '$#u', $val, $uri); - $val = str_replace($replacekey, str_replace('/', '\\', $replacekey), $val,); + $val = str_replace($replacekey, str_replace('/', '\\', $replacekey), $val); } elseif (str_contains($val, '$') && str_contains($key, '(')) { $val = preg_replace('#^' . $key . '$#u', $val, $uri); } elseif (str_contains($val, '/')) { diff --git a/app/Libraries/SimpleRSSElement.php b/app/Libraries/SimpleRSSElement.php index b4d4b454b8..84944700ce 100644 --- a/app/Libraries/SimpleRSSElement.php +++ b/app/Libraries/SimpleRSSElement.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -51,7 +53,7 @@ class SimpleRSSElement extends SimpleXMLElement if ($newChild !== null) { $node = dom_import_simplexml($newChild); $no = $node->ownerDocument; - $node->appendChild($no->createTextNode(esc($value))); + $node->appendChild($no->createTextNode((string) esc($value))); } return $newChild; diff --git a/app/Models/ActorModel.php b/app/Models/ActorModel.php index b58b095578..8191299ae4 100644 --- a/app/Models/ActorModel.php +++ b/app/Models/ActorModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Models/CategoryModel.php b/app/Models/CategoryModel.php index 1c8e9cd501..fe91ac4f4f 100644 --- a/app/Models/CategoryModel.php +++ b/app/Models/CategoryModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -63,7 +65,7 @@ class CategoryModel extends Model $options = array_reduce( $categories, function (array $result, Category $category): array { - $result[$category->id] = lang('Podcast.category_options.' . $category->code,); + $result[$category->id] = lang('Podcast.category_options.' . $category->code); return $result; }, [], diff --git a/app/Models/CreditModel.php b/app/Models/CreditModel.php index dfded4b217..b8b73fddd8 100644 --- a/app/Models/CreditModel.php +++ b/app/Models/CreditModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php index 225c1889bc..b3bff1275f 100644 --- a/app/Models/EpisodeModel.php +++ b/app/Models/EpisodeModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -240,7 +242,7 @@ class EpisodeModel extends Model ->findAll(); } - $secondsToNextUnpublishedEpisode = $this->getSecondsToNextUnpublishedEpisode($podcastId,); + $secondsToNextUnpublishedEpisode = $this->getSecondsToNextUnpublishedEpisode($podcastId); cache() ->save( @@ -284,7 +286,7 @@ class EpisodeModel extends Model */ public function clearCache(array $data): array { - $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id'],); + $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']); // delete podcast cache cache() @@ -310,7 +312,7 @@ class EpisodeModel extends Model { helper('id3'); - $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id'],); + $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']); write_audio_file_tags($episode); diff --git a/app/Models/LanguageModel.php b/app/Models/LanguageModel.php index ee5853b476..83e68e59c3 100644 --- a/app/Models/LanguageModel.php +++ b/app/Models/LanguageModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Models/NoteModel.php b/app/Models/NoteModel.php index 5abca34fcb..5e8833decb 100644 --- a/app/Models/NoteModel.php +++ b/app/Models/NoteModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Models/PageModel.php b/app/Models/PageModel.php index 809489a58d..cb32877bbe 100644 --- a/app/Models/PageModel.php +++ b/app/Models/PageModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Models/PersonModel.php b/app/Models/PersonModel.php index 07b2cea575..20eed991bb 100644 --- a/app/Models/PersonModel.php +++ b/app/Models/PersonModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Models/PlatformModel.php b/app/Models/PlatformModel.php index a1bc89d14b..ab7f1f5a3a 100644 --- a/app/Models/PlatformModel.php +++ b/app/Models/PlatformModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class PlatformModel Model for platforms table in database * @@ -111,7 +113,7 @@ class PlatformModel extends Model ->findAll(); cache() - ->save("podcast#{$podcastId}_platforms_{$platformType}_withLinks", $found, DECADE,); + ->save("podcast#{$podcastId}_platforms_{$platformType}_withLinks", $found, DECADE); } return $found; diff --git a/app/Models/PodcastModel.php b/app/Models/PodcastModel.php index 66a81d9d3c..05e200bccf 100644 --- a/app/Models/PodcastModel.php +++ b/app/Models/PodcastModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -253,7 +255,7 @@ class PodcastModel extends Model } return count($userPodcast) > 0 - ? $userPodcast[0]->group_id + ? (int) $userPodcast[0]->group_id : false; } @@ -278,7 +280,7 @@ class PodcastModel extends Model ->get() ->getResultArray(); - $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId,); + $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId); cache() ->save( @@ -314,7 +316,7 @@ class PodcastModel extends Model ->get() ->getResultArray(); - $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId,); + $secondsToNextUnpublishedEpisode = $episodeModel->getSecondsToNextUnpublishedEpisode($podcastId); cache() ->save( @@ -367,21 +369,23 @@ class PodcastModel extends Model */ public function clearCache(array $data): array { - $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id'],); + $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id']); - // delete cache all podcast pages - cache() - ->deleteMatching("page_podcast#{$podcast->id}*"); + if ($podcast !== null) { + // delete cache all podcast pages + cache() + ->deleteMatching("page_podcast#{$podcast->id}*"); - // delete all cache for podcast actor - cache() - ->deleteMatching(config('ActivityPub') ->cachePrefix . "actor#{$podcast->actor_id}*",); + // delete all cache for podcast actor + cache() + ->deleteMatching(config('ActivityPub') ->cachePrefix . "actor#{$podcast->actor_id}*"); - // delete model requests cache, includes feed / query / episode lists, etc. - cache() - ->deleteMatching("podcast#{$podcast->id}*"); - cache() - ->delete("podcast-{$podcast->name}"); + // delete model requests cache, includes feed / query / episode lists, etc. + cache() + ->deleteMatching("podcast#{$podcast->id}*"); + cache() + ->delete("podcast-{$podcast->name}"); + } // clear cache for every credit page cache() @@ -440,7 +444,7 @@ class PodcastModel extends Model */ protected function setActorAvatar(array $data): array { - $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id'],); + $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id']); $podcastActor = (new ActorModel())->find($podcast->actor_id); @@ -459,19 +463,21 @@ class PodcastModel extends Model */ protected function updatePodcastActor(array $data): array { - $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id'],); + $podcast = (new self())->getPodcastById(is_array($data['id']) ? $data['id'][0] : $data['id']); - $actorModel = new ActorModel(); - $actor = $actorModel->getActorById($podcast->actor_id); + if ($podcast !== null) { + $actorModel = new ActorModel(); + $actor = $actorModel->getActorById($podcast->actor_id); - // update values - $actor->display_name = $podcast->title; - $actor->summary = $podcast->description_html; - $actor->avatar_image_url = $podcast->image->thumbnail_url; - $actor->avatar_image_mimetype = $podcast->image_mimetype; + // update values + $actor->display_name = $podcast->title; + $actor->summary = $podcast->description_html; + $actor->avatar_image_url = $podcast->image->thumbnail_url; + $actor->avatar_image_mimetype = $podcast->image_mimetype; - if ($actor->hasChanged()) { - $actorModel->update($actor->id, $actor); + if ($actor->hasChanged()) { + $actorModel->update($actor->id, $actor); + } } return $data; diff --git a/app/Models/SoundbiteModel.php b/app/Models/SoundbiteModel.php index 9211d73ee9..e17140b0a7 100644 --- a/app/Models/SoundbiteModel.php +++ b/app/Models/SoundbiteModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * Class SoundbiteModel Model for podcasts_soundbites table in database * @@ -112,14 +114,14 @@ class SoundbiteModel extends Model ); cache() - ->delete("podcast#{$episode->podcast_id}_episode#{$episode->id}_soundbites",); + ->delete("podcast#{$episode->podcast_id}_episode#{$episode->id}_soundbites"); // delete cache for rss feed cache() ->deleteMatching("podcast#{$episode->podcast_id}_feed*"); cache() - ->deleteMatching("page_podcast#{$episode->podcast_id}_episode#{$episode->id}_*",); + ->deleteMatching("page_podcast#{$episode->podcast_id}_episode#{$episode->id}_*"); return $data; } diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php index cfb3d7953f..e228622a98 100644 --- a/app/Models/UserModel.php +++ b/app/Models/UserModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Validation/FileRules.php b/app/Validation/FileRules.php index b236a49c0a..6b6ed3f31f 100644 --- a/app/Validation/FileRules.php +++ b/app/Validation/FileRules.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Validation/Rules.php b/app/Validation/Rules.php index fd978700a9..eab37ce853 100644 --- a/app/Validation/Rules.php +++ b/app/Validation/Rules.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 diff --git a/app/Views/admin/_layout.php b/app/Views/admin/_layout.php index 3ca4c951ba..66b3a947a4 100644 --- a/app/Views/admin/_layout.php +++ b/app/Views/admin/_layout.php @@ -46,7 +46,7 @@ <footer class="px-2 py-2 mx-auto text-xs text-right holy-grail-footer"> <?= lang('Common.powered_by', [ 'castopod' => - '<a class="underline hover:no-underline" href="https://castopod.org/" target="_blank" rel="noreferrer noopener">Castopod</a> v' . + '<a class="underline hover:no-underline" href="https://castopod.org/" target="_blank" rel="noreferrer noopener">Castopod</a> ' . CP_VERSION, ]) ?> </footer> diff --git a/composer.lock b/composer.lock index 0a81d96eca..3895ee087d 100644 --- a/composer.lock +++ b/composer.lock @@ -1,6701 +1,7379 @@ { - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "371c6aac9ca489338bf3b3fa06ffdb21", - "packages": [ - { - "name": "brick/math", - "version": "0.9.2", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.3.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" - } - ], - "time": "2021-01-20T22:51:39+00:00" - }, - { - "name": "codeigniter4/codeigniter4", - "version": "dev-develop", - "source": { - "type": "git", - "url": "https://github.com/codeigniter4/CodeIgniter4.git", - "reference": "7eef1f708750fe11089e5eb056e7c817a691d0fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/codeigniter4/CodeIgniter4/zipball/7eef1f708750fe11089e5eb056e7c817a691d0fa", - "reference": "7eef1f708750fe11089e5eb056e7c817a691d0fa", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-intl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "kint-php/kint": "^3.3", - "laminas/laminas-escaper": "^2.6", - "php": "^7.3 || ^8.0", - "psr/log": "^1.1" - }, - "require-dev": { - "codeigniter4/codeigniter4-standard": "^1.0", - "fakerphp/faker": "^1.9", - "mikey179/vfsstream": "^1.6", - "nexusphp/tachycardia": "^1.0", - "phpstan/phpstan": "0.12.86", - "phpunit/phpunit": "^9.1", - "predis/predis": "^1.1", - "rector/rector": "0.11.2", - "squizlabs/php_codesniffer": "^3.3", - "symplify/package-builder": "^9.3" - }, - "suggest": { - "ext-fileinfo": "Improves mime type detection for files" - }, - "default-branch": true, - "type": "project", - "extra": { - "branch-alias": { - "dev-develop": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "CodeIgniter\\": "system/" - }, - "exclude-from-classmap": ["**/Database/Migrations/**"] - }, - "autoload-dev": { - "psr-4": { - "CodeIgniter\\": "tests/system/", - "Utils\\": "utils/" - } - }, - "scripts": { - "post-update-cmd": [ - "CodeIgniter\\ComposerScripts::postUpdate", - "bash -c \"if [ -f admin/setup.sh ]; then bash admin/setup.sh; fi\"" - ], - "analyze": ["phpstan analyze"], - "test": ["phpunit"] - }, - "license": ["MIT"], - "description": "The CodeIgniter framework v4", - "homepage": "https://codeigniter.com", - "support": { - "forum": "http://forum.codeigniter.com/", - "source": "https://github.com/codeigniter4/CodeIgniter4", - "slack": "https://codeigniterchat.slack.com", - "issues": "https://github.com/codeigniter4/CodeIgniter4/issues" - }, - "time": "2021-05-19T15:17:22+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.2.9", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5", - "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": ["cabundle", "cacert", "certificate", "ssl", "tls"], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.2.9" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-01-12T12:10:35+00:00" - }, - { - "name": "essence/dom", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/essence/dom.git", - "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/essence/dom/zipball/e5776d2286f4ccbd048d160c28ac77ccc6d68f3a", - "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Essence\\Dom\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Félix Girault", - "email": "felix.girault@gmail.com", - "homepage": "http://www.felix-girault.fr", - "role": "Developer" - } - ], - "description": "Essence's DOM parser.", - "homepage": "http://github.com/essence/dom", - "keywords": ["dom", "parser"], - "support": { - "issues": "https://github.com/essence/dom/issues", - "source": "https://github.com/essence/dom/tree/1.0.0" - }, - "time": "2015-07-23T20:33:17+00:00" - }, - { - "name": "essence/essence", - "version": "3.5.4", - "source": { - "type": "git", - "url": "https://github.com/essence/essence.git", - "reference": "81e889a87603840dadd04b317a51487df1d45933" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/essence/essence/zipball/81e889a87603840dadd04b317a51487df1d45933", - "reference": "81e889a87603840dadd04b317a51487df1d45933", - "shasum": "" - }, - "require": { - "essence/dom": "~1.0.0", - "essence/http": "~1.0.0", - "fg/parkour": "~1.1.0", - "php": ">=5.5.0" - }, - "suggest": { - "ext-curl": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Essence\\": "lib/Essence" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-2-Clause"], - "authors": [ - { - "name": "Félix Girault", - "email": "felix.girault@gmail.com", - "homepage": "http://www.felix-girault.fr", - "role": "Developer" - } - ], - "description": "Extracts information about medias on the web, like youtube videos, twitter statuses or blog articles.", - "homepage": "http://github.com/essence/essence", - "keywords": ["embed", "media", "oembed", "opengraph"], - "support": { - "issues": "https://github.com/essence/essence/issues", - "source": "https://github.com/essence/essence/tree/3.5.4" - }, - "time": "2021-01-21T09:58:10+00:00" - }, - { - "name": "essence/http", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/essence/http.git", - "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/essence/http/zipball/ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2", - "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2", - "shasum": "" - }, - "suggest": { - "ext-curl": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Essence\\Http\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Félix Girault", - "email": "felix.girault@gmail.com", - "homepage": "http://www.felix-girault.fr", - "role": "Developer" - } - ], - "description": "Essence's HTTP client.", - "homepage": "http://github.com/essence/http", - "keywords": ["client", "http"], - "support": { - "issues": "https://github.com/essence/http/issues", - "source": "https://github.com/essence/http/tree/1.0.0" - }, - "time": "2015-07-23T20:33:50+00:00" - }, - { - "name": "fg/parkour", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/felixgirault/parkour.git", - "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixgirault/parkour/zipball/f837eb640fc4aac81b11fe50d2fa04fb4ec71496", - "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "4.3.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Parkour\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-2-Clause"], - "authors": [ - { - "name": "Félix Girault", - "email": "felix.girault@gmail.com", - "homepage": "http://www.felix-girault.fr", - "role": "Developer" - } - ], - "description": "A collection of utilities to manipulate arrays.", - "homepage": "http://github.com/felixgirault/parkour", - "keywords": ["array", "manipulation", "traversing"], - "support": { - "issues": "https://github.com/felixgirault/parkour/issues", - "source": "https://github.com/felixgirault/parkour/tree/1.1.1" - }, - "time": "2015-10-03T10:39:22+00:00" - }, - { - "name": "geoip2/geoip2", - "version": "v2.11.0", - "source": { - "type": "git", - "url": "https://github.com/maxmind/GeoIP2-php.git", - "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/d01be5894a5c1a3381c58c9b1795cd07f96c30f7", - "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7", - "shasum": "" - }, - "require": { - "ext-json": "*", - "maxmind-db/reader": "~1.8", - "maxmind/web-service-common": "~0.8", - "php": ">=7.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "2.*", - "phpunit/phpunit": "^8.0 || ^9.0", - "squizlabs/php_codesniffer": "3.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "GeoIp2\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], - "authors": [ - { - "name": "Gregory J. Oschwald", - "email": "goschwald@maxmind.com", - "homepage": "https://www.maxmind.com/" - } - ], - "description": "MaxMind GeoIP2 PHP API", - "homepage": "https://github.com/maxmind/GeoIP2-php", - "keywords": ["IP", "geoip", "geoip2", "geolocation", "maxmind"], - "support": { - "issues": "https://github.com/maxmind/GeoIP2-php/issues", - "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.11.0" - }, - "time": "2020-10-01T18:48:34+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0", - "phpoption/phpoption": "^1.7.3" - }, - "require-dev": { - "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2020-04-13T13:17:36+00:00" - }, - { - "name": "james-heinrich/getid3", - "version": "v2.0.0-beta3", - "source": { - "type": "git", - "url": "https://github.com/JamesHeinrich/getID3.git", - "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/5515a2d24667c3c0ff49fdcbdadc405c0880c7a2", - "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-parallel-lint": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8|^5.0" - }, - "suggest": { - "ext-SimpleXML": "SimpleXML extension is required to analyze RIFF/WAV/BWF audio files (also requires `ext-libxml`).", - "ext-com_dotnet": "COM extension is required when loading files larger than 2GB on Windows.", - "ext-ctype": "ctype extension is required when loading files larger than 2GB on 32-bit PHP (also on 64-bit PHP on Windows) or executing `getid3_lib::CopyTagsToComments`.", - "ext-dba": "DBA extension is required to use the DBA database as a cache storage.", - "ext-exif": "EXIF extension is required for graphic modules.", - "ext-iconv": "iconv extension is required to work with different character sets (when `ext-mbstring` is not available).", - "ext-json": "JSON extension is required to analyze Apple Quicktime videos.", - "ext-libxml": "libxml extension is required to analyze RIFF/WAV/BWF audio files.", - "ext-mbstring": "mbstring extension is required to work with different character sets.", - "ext-mysql": "MySQL extension is required to use the MySQL database as a cache storage (deprecated in PHP 5.5, removed in PHP >= 7.0, use `ext-mysqli` instead).", - "ext-mysqli": "MySQLi extension is required to use the MySQL database as a cache storage.", - "ext-rar": "RAR extension is required for RAR archive module.", - "ext-sqlite3": "SQLite3 extension is required to use the SQLite3 database as a cache storage.", - "ext-xml": "XML extension is required for graphic modules to analyze the XML metadata.", - "ext-zlib": "Zlib extension is required for archive modules and compressed metadata." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JamesHeinrich\\GetID3\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["GPL-1.0-or-later", "LGPL-3.0-only", "MPL-2.0"], - "authors": [ - { - "name": "James Heinrich", - "email": "info@getid3.org", - "homepage": "https://github.com/JamesHeinrich", - "role": "Developer" - }, - { - "name": "Craig Duncan", - "email": "git@duncanc.co.uk", - "homepage": "https://github.com/duncan3dc", - "role": "Developer" - } - ], - "description": "Extract and write useful information to/from popular multimedia file formats", - "homepage": "https://www.getid3.org/", - "keywords": ["audio", "codecs", "id3", "metadata", "tags", "video"], - "support": { - "issues": "https://github.com/JamesHeinrich/getID3/issues", - "source": "https://github.com/JamesHeinrich/getID3/tree/2.0" - }, - "time": "2020-07-21T08:15:44+00:00" - }, - { - "name": "kint-php/kint", - "version": "3.3", - "source": { - "type": "git", - "url": "https://github.com/kint-php/kint.git", - "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kint-php/kint/zipball/335ac1bcaf04d87df70d8aa51e8887ba2c6d203b", - "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b", - "shasum": "" - }, - "require": { - "php": ">=5.3.6" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "phpunit/phpunit": "^4.0", - "seld/phar-utils": "^1.0", - "symfony/finder": "^2.0 || ^3.0 || ^4.0", - "vimeo/psalm": "^3.0" - }, - "suggest": { - "ext-ctype": "Simple data type tests", - "ext-iconv": "Provides fallback detection for ambiguous legacy string encodings such as the Windows and ISO 8859 code pages", - "ext-mbstring": "Provides string encoding detection", - "kint-php/kint-js": "Provides a simplified dump to console.log()", - "kint-php/kint-twig": "Provides d() and s() functions in twig templates", - "symfony/polyfill-ctype": "Replacement for ext-ctype if missing", - "symfony/polyfill-iconv": "Replacement for ext-iconv if missing", - "symfony/polyfill-mbstring": "Replacement for ext-mbstring if missing" - }, - "type": "library", - "autoload": { - "files": ["init.php"], - "psr-4": { - "Kint\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Jonathan Vollebregt", - "homepage": "https://github.com/jnvsor" - }, - { - "name": "Rokas Å leinius", - "homepage": "https://github.com/raveren" - }, - { - "name": "Contributors", - "homepage": "https://github.com/kint-php/kint/graphs/contributors" - } - ], - "description": "Kint - debugging tool for PHP developers", - "homepage": "https://kint-php.github.io/kint/", - "keywords": ["debug", "kint", "php"], - "support": { - "issues": "https://github.com/kint-php/kint/issues", - "source": "https://github.com/kint-php/kint/tree/master" - }, - "time": "2019-10-17T18:05:24+00:00" - }, - { - "name": "laminas/laminas-escaper", - "version": "2.7.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/5e04bc5ae5990b17159d79d331055e2c645e5cc5", - "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ~8.0.0" - }, - "replace": { - "zendframework/zend-escaper": "^2.6.1" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpunit/phpunit": "^9.3", - "psalm/plugin-phpunit": "^0.12.2", - "vimeo/psalm": "^3.16" - }, - "suggest": { - "ext-iconv": "*", - "ext-mbstring": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": ["escaper", "laminas"], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-escaper/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-escaper/issues", - "rss": "https://github.com/laminas/laminas-escaper/releases.atom", - "source": "https://github.com/laminas/laminas-escaper" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2020-11-17T21:26:43+00:00" - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6cccbddfcfc742eb02158d6137ca5687d92cee32", - "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", - "psalm/plugin-phpunit": "^0.15.1", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.6" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "autoload": { - "files": ["src/autoload.php"], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": ["ZendFramework", "autoloading", "laminas", "zf"], - "support": { - "forum": "https://discourse.laminas.dev/", - "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", - "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", - "source": "https://github.com/laminas/laminas-zendframework-bridge" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2021-02-25T21:54:58+00:00" - }, - { - "name": "league/commonmark", - "version": "1.6.2", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7d70d2f19c84bcc16275ea47edabee24747352eb", - "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" - }, - "require-dev": { - "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.2", - "erusev/parsedown": "~1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", - "scrutinizer/ocular": "^1.5", - "symfony/finder": "^4.2" - }, - "bin": ["bin/commonmark"], - "type": "library", - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", - "type": "custom" - }, - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2021-05-12T11:39:41+00:00" - }, - { - "name": "league/html-to-markdown", - "version": "4.10.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/html-to-markdown.git", - "reference": "0868ae7a552e809e5cd8f93ba022071640408e88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/0868ae7a552e809e5cd8f93ba022071640408e88", - "reference": "0868ae7a552e809e5cd8f93ba022071640408e88", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xml": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "mikehaertl/php-shellcommand": "~1.1.0", - "phpunit/phpunit": "^4.8|^5.7", - "scrutinizer/ocular": "~1.1" - }, - "bin": ["bin/html-to-markdown"], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.10-dev" - } - }, - "autoload": { - "psr-4": { - "League\\HTMLToMarkdown\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - }, - { - "name": "Nick Cernis", - "email": "nick@cern.is", - "homepage": "http://modernnerd.net", - "role": "Original Author" - } - ], - "description": "An HTML-to-markdown conversion helper for PHP", - "homepage": "https://github.com/thephpleague/html-to-markdown", - "keywords": ["html", "markdown"], - "support": { - "issues": "https://github.com/thephpleague/html-to-markdown/issues", - "source": "https://github.com/thephpleague/html-to-markdown/tree/4.10.0" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - } - ], - "time": "2020-07-01T00:34:03+00:00" - }, - { - "name": "maxmind-db/reader", - "version": "v1.10.1", - "source": { - "type": "git", - "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git", - "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/569bd44d97d30a4ec12c7793a33004a76d4caf18", - "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "conflict": { - "ext-maxminddb": "<1.10.1,>=2.0.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "php-coveralls/php-coveralls": "^2.1", - "phpstan/phpstan": "*", - "phpunit/phpcov": ">=6.0.0", - "phpunit/phpunit": ">=8.0.0,<10.0.0", - "squizlabs/php_codesniffer": "3.*" - }, - "suggest": { - "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", - "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", - "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups" - }, - "type": "library", - "autoload": { - "psr-4": { - "MaxMind\\Db\\": "src/MaxMind/Db" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], - "authors": [ - { - "name": "Gregory J. Oschwald", - "email": "goschwald@maxmind.com", - "homepage": "https://www.maxmind.com/" - } - ], - "description": "MaxMind DB Reader API", - "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php", - "keywords": ["database", "geoip", "geoip2", "geolocation", "maxmind"], - "support": { - "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues", - "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.10.1" - }, - "time": "2021-04-14T17:49:35+00:00" - }, - { - "name": "maxmind/web-service-common", - "version": "v0.8.1", - "source": { - "type": "git", - "url": "https://github.com/maxmind/web-service-common-php.git", - "reference": "32f274051c543fc865e5a84d3a2c703913641ea8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/32f274051c543fc865e5a84d3a2c703913641ea8", - "reference": "32f274051c543fc865e5a84d3a2c703913641ea8", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0.3", - "ext-curl": "*", - "ext-json": "*", - "php": ">=7.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "2.*", - "phpunit/phpunit": "^8.0 || ^9.0", - "squizlabs/php_codesniffer": "3.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "MaxMind\\Exception\\": "src/Exception", - "MaxMind\\WebService\\": "src/WebService" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], - "authors": [ - { - "name": "Gregory Oschwald", - "email": "goschwald@maxmind.com" - } - ], - "description": "Internal MaxMind Web Service API", - "homepage": "https://github.com/maxmind/web-service-common-php", - "support": { - "issues": "https://github.com/maxmind/web-service-common-php/issues", - "source": "https://github.com/maxmind/web-service-common-php/tree/v0.8.1" - }, - "time": "2020-11-02T17:00:53+00:00" - }, - { - "name": "michalsn/codeigniter4-uuid", - "version": "dev-develop", - "source": { - "type": "git", - "url": "https://github.com/michalsn/codeigniter4-uuid.git", - "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/michalsn/codeigniter4-uuid/zipball/b26512ac4f3f0c772fbfa2c3317346d3c17e2d44", - "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "ramsey/uuid": "^4.0" - }, - "require-dev": { - "codeigniter4/codeigniter4": "dev-develop", - "phpunit/phpunit": "8.5.*" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Michalsn\\Uuid\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "michalsn", - "homepage": "https://github.com/michalsn", - "role": "Developer" - } - ], - "description": "UUID package for CodeIgniter 4 with support for Model and Entity.", - "homepage": "https://github.com/michalsn/codeigniter4-uuid", - "keywords": ["codeigniter4", "entity", "model", "uuid"], - "support": { - "issues": "https://github.com/michalsn/codeigniter4-uuid/issues", - "source": "https://github.com/michalsn/codeigniter4-uuid/tree/develop" - }, - "time": "2021-05-10T16:28:01+00:00" - }, - { - "name": "myth/auth", - "version": "dev-develop", - "source": { - "type": "git", - "url": "https://github.com/lonnieezell/myth-auth.git", - "reference": "d3df41fb24b19c1362a163da4167b07efcff69e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lonnieezell/myth-auth/zipball/d3df41fb24b19c1362a163da4167b07efcff69e4", - "reference": "d3df41fb24b19c1362a163da4167b07efcff69e4", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "provide": { - "codeigniter4/authentication-implementation": "1.0" - }, - "require-dev": { - "codeigniter4/codeigniter4": "dev-develop", - "codeigniter4/codeigniter4-standard": "^1.0", - "fakerphp/faker": "^1.9", - "mockery/mockery": "^1.0", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^9.2", - "squizlabs/php_codesniffer": "^3.5" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Myth\\Auth\\": "src" - }, - "exclude-from-classmap": ["**/Database/Migrations/**"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Lonnie Ezell", - "email": "lonnieje@gmail.com", - "homepage": "http://newmythmedia.com", - "role": "Developer" - } - ], - "description": "Flexible authentication/authorization system for CodeIgniter 4.", - "homepage": "https://github.com/lonnieezell/myth-auth", - "keywords": ["Authentication", "authorization", "codeigniter"], - "support": { - "issues": "https://github.com/lonnieezell/myth-auth/issues", - "source": "https://github.com/lonnieezell/myth-auth/tree/develop" - }, - "funding": [ - { - "url": "https://github.com/lonnieezell", - "type": "github" - }, - { - "url": "https://www.patreon.com/lonnieezell", - "type": "patreon" - } - ], - "time": "2021-05-15T03:29:54+00:00" - }, - { - "name": "opawg/user-agents-php", - "version": "v1.0", - "source": { - "type": "git", - "url": "https://github.com/opawg/user-agents-php.git", - "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opawg/user-agents-php/zipball/e22c7be05f475b44d0e6ecd76acf1617a2efef85", - "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Opawg\\UserAgentsPhp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Benjamin Bellamy", - "email": "ben@podlibre.org", - "homepage": "https://podlibre.org/" - } - ], - "description": "PHP implementation for opawg/user-agents.", - "homepage": "https://github.com/opawg/user-agents-php", - "support": { - "source": "https://github.com/opawg/user-agents-php/tree/v1.0" - }, - "time": "2020-11-28T10:54:05+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.7.5", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["Apache-2.0"], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Option Type for PHP", - "keywords": ["language", "option", "php", "type"], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2020-07-20T17:29:33+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": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "support": { - "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.31" - }, - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], - "time": "2021-04-06T13:56:45+00:00" - }, - { - "name": "podlibre/ipcat", - "version": "v1.0", - "source": { - "type": "git", - "url": "https://github.com/podlibre/ipcat.git", - "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/podlibre/ipcat/zipball/1adfc821be508ddc8a742f6a5d5e6e42fdf28e86", - "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Podlibre\\Ipcat\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["GPL-3.0-only"], - "authors": [ - { - "name": "Benjamin Bellamy", - "email": "ben@podlibre.org", - "homepage": "https://podlibre.org/" - } - ], - "description": "Categorization of IP Addresses forked from https://github.com/client9/ipcat", - "homepage": "https://github.com/podlibre/ipcat", - "support": { - "source": "https://github.com/podlibre/ipcat/tree/v1.0" - }, - "time": "2020-10-05T17:15:07+00:00" - }, - { - "name": "podlibre/podcast-namespace", - "version": "v1.0.6", - "source": { - "type": "git", - "url": "https://code.podlibre.org/podlibre/podcastnamespace", - "reference": "4525c06ee9dd95bb745ee875d55b64a053c74cd6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Podlibre\\PodcastNamespace\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Benjamin Bellamy", - "email": "ben@podlibre.org", - "homepage": "https://podlibre.org/" - } - ], - "description": "PHP implementation for the Podcast Namespace.", - "homepage": "https://code.podlibre.org/podlibre/podcastnamespace", - "time": "2021-01-14T15:47:06+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": ["cache", "psr", "psr-6"], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": ["log", "psr", "psr-3"], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "ramsey/collection", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8" - }, - "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP 7.2+ library for representing and manipulating collections.", - "keywords": ["array", "collection", "hash", "map", "queue", "set"], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.3" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2021-01-21T17:40:04+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.1.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "cd4032040a750077205918c86049aa0f43d22947" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", - "reference": "cd4032040a750077205918c86049aa0f43d22947", - "shasum": "" - }, - "require": { - "brick/math": "^0.8 || ^0.9", - "ext-json": "*", - "php": "^7.2 || ^8", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "codeception/aspect-mock": "^3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", - "doctrine/annotations": "^1.8", - "goaop/framework": "^2", - "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock-mockery": "^1.3", - "php-mock/php-mock-phpunit": "^2.5", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^0.17.1", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5", - "psy/psysh": "^0.10.0", - "slevomat/coding-standard": "^6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "3.9.4" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, - "files": ["src/functions.php"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "homepage": "https://github.com/ramsey/uuid", - "keywords": ["guid", "identifier", "uuid"], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - } - ], - "time": "2020-08-18T17:17:46+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": ["bootstrap.php"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": ["compatibility", "ctype", "polyfill", "portable"], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" - }, - "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-01-07T16:49:33+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": ["bootstrap.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": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": ["compatibility", "mbstring", "polyfill", "portable", "shim"], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" - }, - "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-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-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.22.1" - }, - "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-01-07T16:49:33+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.3.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.1", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.7.4", - "symfony/polyfill-ctype": "^1.17", - "symfony/polyfill-mbstring": "^1.17", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.3-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": ["dotenv", "env", "environment"], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2021-01-20T15:23:13+00:00" - }, - { - "name": "whichbrowser/parser", - "version": "v2.1.2", - "source": { - "type": "git", - "url": "https://github.com/WhichBrowser/Parser-PHP.git", - "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/WhichBrowser/Parser-PHP/zipball/bcf642a1891032de16a5ab976fd352753dd7f9a0", - "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/cache": "^1.0" - }, - "require-dev": { - "cache/array-adapter": "^1.1", - "icomefromthenet/reverse-regex": "0.0.6.3", - "php-coveralls/php-coveralls": "^2.0", - "phpunit/php-code-coverage": "^5.0 || ^7.0", - "phpunit/phpunit": "^6.0 || ^8.0", - "squizlabs/php_codesniffer": "^3.5", - "symfony/yaml": "~3.4 || ~4.0" - }, - "suggest": { - "cache/array-adapter": "Allows testing of the caching functionality" - }, - "type": "library", - "autoload": { - "psr-4": { - "WhichBrowser\\": ["src/", "tests/src/"] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Niels Leenheer", - "email": "niels@leenheer.nl", - "role": "Developer" - } - ], - "description": "Useragent sniffing library for PHP", - "homepage": "http://whichbrowser.net", - "keywords": ["browser", "sniffing", "ua", "useragent"], - "support": { - "issues": "https://github.com/WhichBrowser/Parser-PHP/issues", - "source": "https://github.com/WhichBrowser/Parser-PHP/tree/v2.1.2" - }, - "time": "2021-05-10T10:18:11+00:00" - } - ], - "packages-dev": [ - { - "name": "captainhook/captainhook", - "version": "5.10.0", - "source": { - "type": "git", - "url": "https://github.com/captainhookphp/captainhook.git", - "reference": "2ee0cc1e356b95b3482be304bb31c68fe72d8ad6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/captainhookphp/captainhook/zipball/2ee0cc1e356b95b3482be304bb31c68fe72d8ad6", - "reference": "2ee0cc1e356b95b3482be304bb31c68fe72d8ad6", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-spl": "*", - "ext-xml": "*", - "php": ">=7.2", - "sebastianfeldmann/camino": "^0.9.2", - "sebastianfeldmann/cli": "^3.3", - "sebastianfeldmann/git": "^3.7", - "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" - }, - "replace": { - "sebastianfeldmann/captainhook": "*" - }, - "require-dev": { - "composer/composer": "~1", - "mikey179/vfsstream": "~1" - }, - "bin": ["bin/captainhook"], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0.x-dev" - }, - "captainhook": { - "config": "captainhook.json" - } - }, - "autoload": { - "psr-4": { - "CaptainHook\\App\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" - } - ], - "description": "PHP git hook manager", - "homepage": "https://github.com/captainhookphp/captainhook", - "keywords": [ - "commit-msg", - "git", - "hooks", - "post-merge", - "pre-commit", - "pre-push", - "prepare-commit-msg" - ], - "support": { - "issues": "https://github.com/captainhookphp/captainhook/issues", - "source": "https://github.com/captainhookphp/captainhook/tree/5.10.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/sebastianfeldmann", - "type": "github" - } - ], - "time": "2021-05-15T12:39:06+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "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" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": ["constructor", "instantiate"], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "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" - }, - { - "name": "mikey179/vfsstream", - "version": "v1.6.8", - "source": { - "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe", - "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" - } - ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" - }, - "time": "2019-10-30T15:31:00+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": ["src/DeepCopy/deep_copy.php"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Create deep copies (clones) of your objects", - "keywords": ["clone", "copy", "duplicate", "object", "object graph"], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "nette/neon", - "version": "v3.2.2", - "source": { - "type": "git", - "url": "https://github.com/nette/neon.git", - "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/neon/zipball/e4ca6f4669121ca6876b1d048c612480e39a28d5", - "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=7.1" - }, - "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🸠Nette NEON: encodes and decodes NEON file format.", - "homepage": "https://ne-on.org", - "keywords": ["export", "import", "neon", "nette", "yaml"], - "support": { - "issues": "https://github.com/nette/neon/issues", - "source": "https://github.com/nette/neon/tree/v3.2.2" - }, - "time": "2021-02-28T12:30:32+00:00" - }, - { - "name": "nette/utils", - "version": "v3.2.2", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c", - "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c", - "shasum": "" - }, - "require": { - "php": ">=7.2 <8.1" - }, - "conflict": { - "nette/di": "<3.0.6" - }, - "require-dev": { - "nette/tester": "~2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.2" - }, - "time": "2021-03-03T22:53:25+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.10.5", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": ["bin/php-parse"], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": ["parser", "php"], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" - }, - "time": "2021-05-03T19:11:20+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "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" - }, - { - "name": "phar-io/version", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "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" - }, - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "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" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Mike van Riel", - "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" - }, - "time": "2020-09-17T18:55:26+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", - "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" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": ["Double", "Dummy", "fake", "mock", "spy", "stub"], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" - }, - "time": "2021-03-17T13:42:18+00:00" - }, - { - "name": "phpstan/extension-installer", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/extension-installer.git", - "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/66c7adc9dfa38b6b5838a9fb728b68a7d8348051", - "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1 || ^2.0", - "php": "^7.1 || ^8.0", - "phpstan/phpstan": ">=0.11.6" - }, - "require-dev": { - "composer/composer": "^1.8", - "phing/phing": "^2.16.3", - "php-parallel-lint/php-parallel-lint": "^1.2.0", - "phpstan/phpstan-strict-rules": "^0.11 || ^0.12" - }, - "type": "composer-plugin", - "extra": { - "class": "PHPStan\\ExtensionInstaller\\Plugin" - }, - "autoload": { - "psr-4": { - "PHPStan\\ExtensionInstaller\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Composer plugin for automatic installation of PHPStan extensions", - "support": { - "issues": "https://github.com/phpstan/extension-installer/issues", - "source": "https://github.com/phpstan/extension-installer/tree/1.1.0" - }, - "time": "2020-12-13T13:06:13+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "0.5.4", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e352d065af1ae9b41c12d1dfd309e90f7b1f55c9", - "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phing/phing": "^2.16.3", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.60", - "phpstan/phpstan-strict-rules": "^0.12.5", - "phpunit/phpunit": "^7.5.20", - "symfony/process": "^5.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5-dev" - } - }, - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": ["src/"] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/0.5.4" - }, - "time": "2021-04-03T14:46:19+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "0.12.86", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "a84fdc53ecca7643dbc89ef8880d8b393a6c155a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a84fdc53ecca7643dbc89ef8880d8b393a6c155a", - "reference": "a84fdc53ecca7643dbc89ef8880d8b393a6c155a", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": ["phpstan", "phpstan.phar"], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - } - }, - "autoload": { - "files": ["bootstrap.php"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "PHPStan - PHP Static Analysis Tool", - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.86" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2021-05-08T11:29:01+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-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": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": ["coverage", "testing", "xunit"], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-03-28T07:26:59+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": ["filesystem", "iterator"], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:57:25+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.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": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": ["process"], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": ["template"], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-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": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": ["timer"], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": ["phpunit"], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": ["src/"], - "files": ["src/Framework/Assert/Functions.php"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": ["phpunit", "testing", "xunit"], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4" - }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-03-23T07:16:29+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": ["events", "psr", "psr-14"], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "rector/rector", - "version": "0.11.5", - "source": { - "type": "git", - "url": "https://github.com/rectorphp/rector.git", - "reference": "270eaef34d0f34b49ad0fc3e44cff377b9aa04ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/270eaef34d0f34b49ad0fc3e44cff377b9aa04ce", - "reference": "270eaef34d0f34b49ad0fc3e44cff377b9aa04ce", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0", - "phpstan/phpstan": "0.12.86" - }, - "conflict": { - "phpstan/phpdoc-parser": "<=0.5.3", - "phpstan/phpstan": "<=0.12.82", - "rector/rector-cakephp": "*", - "rector/rector-doctrine": "*", - "rector/rector-nette": "*", - "rector/rector-nette-to-symfony": "*", - "rector/rector-phpunit": "*", - "rector/rector-prefixed": "*", - "rector/rector-symfony": "*" - }, - "bin": ["bin/rector"], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.10-dev" - } - }, - "autoload": { - "files": ["bootstrap.php"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Prefixed and PHP 7.1 downgraded version of rector/rector", - "support": { - "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/0.11.5" - }, - "funding": [ - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-18T13:45:09+00:00" - }, - { - "name": "rector/rector-phpstan-rules", - "version": "0.2.12", - "source": { - "type": "git", - "url": "https://github.com/rectorphp/phpstan-rules.git", - "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rectorphp/phpstan-rules/zipball/84b2034aab951be7e86dc6cc7e141ee92a3d115b", - "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "php": ">=7.3", - "phpstan/phpstan": "^0.12.86", - "symplify/phpstan-rules": "^9.3.5" - }, - "require-dev": { - "phpstan/extension-installer": "^1.1", - "phpunit/phpunit": "^9.5", - "symplify/easy-coding-standard": "^9.3", - "symplify/phpstan-extensions": "^9.3" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": ["config/config.neon"] - } - }, - "autoload": { - "psr-4": { - "Rector\\PHPStanRules\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "PHPStan rules for Rector projects - with focus on static reflection, constant re-use and Rector design patterns", - "support": { - "issues": "https://github.com/rectorphp/phpstan-rules/issues", - "source": "https://github.com/rectorphp/phpstan-rules/tree/0.2.12" - }, - "time": "2021-05-20T22:31:19+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-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": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-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 PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "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/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": ["comparator", "compare", "equality"], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": ["diff", "udiff", "unidiff", "unified diff"], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": ["Xdebug", "environment", "hhvm"], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": ["export", "exporter"], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": ["global state"], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:55:19+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-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": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "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/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "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/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "2.3.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-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/2.3.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:18:59+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "sebastianfeldmann/camino", - "version": "0.9.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianfeldmann/camino.git", - "reference": "3b611368e22e8565c3a6504613136402ed9e6f69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/camino/zipball/3b611368e22e8565c3a6504613136402ed9e6f69", - "reference": "3b611368e22e8565c3a6504613136402ed9e6f69", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "SebastianFeldmann\\Camino\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" - } - ], - "description": "Path management the OO way", - "homepage": "https://github.com/sebastianfeldmann/camino", - "keywords": ["file system", "path"], - "support": { - "issues": "https://github.com/sebastianfeldmann/camino/issues", - "source": "https://github.com/sebastianfeldmann/camino/tree/0.9.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianfeldmann", - "type": "github" - } - ], - "time": "2020-12-08T09:25:24+00:00" - }, - { - "name": "sebastianfeldmann/cli", - "version": "3.3.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianfeldmann/cli.git", - "reference": "490a6ba01d62e56d597b4d3377024feb87871f6f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/490a6ba01d62e56d597b4d3377024feb87871f6f", - "reference": "490a6ba01d62e56d597b4d3377024feb87871f6f", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "require-dev": { - "symfony/process": "^4.3 | ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } - }, - "autoload": { - "psr-4": { - "SebastianFeldmann\\Cli\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" - } - ], - "description": "PHP cli helper classes", - "homepage": "https://github.com/sebastianfeldmann/cli", - "keywords": ["cli"], - "support": { - "issues": "https://github.com/sebastianfeldmann/cli/issues", - "source": "https://github.com/sebastianfeldmann/cli/tree/3.3.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianfeldmann", - "type": "github" - } - ], - "time": "2020-12-08T09:20:06+00:00" - }, - { - "name": "sebastianfeldmann/git", - "version": "3.7.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianfeldmann/git.git", - "reference": "ca827dc741a90043ee46e59a96b1ca88b9ed5264" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/ca827dc741a90043ee46e59a96b1ca88b9ed5264", - "reference": "ca827dc741a90043ee46e59a96b1ca88b9ed5264", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-xml": "*", - "php": ">=7.2", - "sebastianfeldmann/cli": "^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "SebastianFeldmann\\Git\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" - } - ], - "description": "PHP git wrapper", - "homepage": "https://github.com/sebastianfeldmann/git", - "keywords": ["git"], - "support": { - "issues": "https://github.com/sebastianfeldmann/git/issues", - "source": "https://github.com/sebastianfeldmann/git/tree/3.7.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianfeldmann", - "type": "github" - } - ], - "time": "2021-04-10T08:31:02+00:00" - }, - { - "name": "symfony/config", - "version": "v5.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "8dfa5f8adea9cd5155920069224beb04f11d6b7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8dfa5f8adea9cd5155920069224beb04f11d6b7e", - "reference": "8dfa5f8adea9cd5155920069224beb04f11d6b7e", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/filesystem": "^4.4|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/finder": "<4.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v5.2.8" - }, - "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-07T13:41:16+00:00" - }, - { - "name": "symfony/console", - "version": "v5.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "864568fdc0208b3eba3638b6000b69d2386e6768" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/864568fdc0208b3eba3638b6000b69d2386e6768", - "reference": "864568fdc0208b3eba3638b6000b69d2386e6768", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "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" - }, - "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" - }, - "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.2.8" - }, - "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-11T15:45:21+00:00" - }, - { - "name": "symfony/dependency-injection", - "version": "v5.2.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "2761ca2f7e2f41af3a45951e1ce8c01f121245eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2761ca2f7e2f41af3a45951e1ce8c01f121245eb", - "reference": "2761ca2f7e2f41af3a45951e1ce8c01f121245eb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.0", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1.6|^2" - }, - "conflict": { - "symfony/config": "<5.1", - "symfony/finder": "<4.4", - "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4" - }, - "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0|2.0" - }, - "require-dev": { - "symfony/config": "^5.1", - "symfony/expression-language": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "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": "Allows you to standardize and centralize the way objects are constructed in your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.2.9" - }, - "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-16T13:07:46+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", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-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/error-handler", - "version": "v5.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "1416bc16317a8188aabde251afef7618bf4687ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1416bc16317a8188aabde251afef7618bf4687ac", - "reference": "1416bc16317a8188aabde251afef7618bf4687ac", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/log": "^1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/var-dumper": "^4.4|^5.0" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.1", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "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": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.2.8" - }, - "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-07T13:42:21+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v5.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d08d6ec121a425897951900ab692b612a61d6240" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240", - "reference": "d08d6ec121a425897951900ab692b612a61d6240", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.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" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.4" - }, - "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-18T17:12:37+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "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" - } - ], - "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/filesystem", - "version": "v5.2.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/056e92acc21d977c37e6ea8e97374b2a6c8551b0", - "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "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": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.7" - }, - "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-04-01T10:42:13+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.2.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ccccb9d48ca42757dd12f2ca4bf857a4e217d90d", - "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "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": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.9" - }, - "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-16T13:07:46+00:00" - }, - { - "name": "symfony/http-client-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "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\\HttpClient\\": "" - } - }, - "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": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-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-04-11T23:07:08+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v5.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "e8fbbab7c4a71592985019477532629cb2e142dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8fbbab7c4a71592985019477532629cb2e142dc", - "reference": "e8fbbab7c4a71592985019477532629cb2e142dc", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "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": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.2.8" - }, - "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-07T13:41:16+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v5.2.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eb540ef6870dbf33c92e372cfb869ebf9649e6cb", - "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/log": "~1.0", - "symfony/deprecation-contracts": "^2.1", - "symfony/error-handler": "^4.4|^5.0", - "symfony/event-dispatcher": "^5.0", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/browser-kit": "<4.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.1.8", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/config": "^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^5.1.8", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/translation": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "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": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.2.9" - }, - "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-19T12:23:45+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": ["bootstrap.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": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" - }, - "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-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": ["bootstrap.php"], - "classmap": ["Resources/stubs"] - }, - "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": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" - }, - "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-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.22.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": ["bootstrap.php"], - "classmap": ["Resources/stubs"] - }, - "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": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": ["compatibility", "polyfill", "portable", "shim"], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" - }, - "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-01-07T16:49:33+00:00" - }, - { - "name": "symfony/process", - "version": "v5.2.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e", - "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "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": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.3.0-BETA1" - }, - "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-04-08T10:27:02+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "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\\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" - } - ], - "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/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-04-01T10:43:52+00:00" - }, - { - "name": "symfony/string", - "version": "v5.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db", - "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db", - "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\\": "" - }, - "files": ["Resources/functions.php"], - "exclude-from-classmap": ["/Tests/"] - }, - "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": ["grapheme", "i18n", "string", "unicode", "utf-8", "utf8"], - "support": { - "source": "https://github.com/symfony/string/tree/v5.2.8" - }, - "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-10T14:56:10+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v5.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d693200a73fae179d27f8f1b16b4faf3e8569eba", - "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": ["Resources/bin/var-dump-server"], - "type": "library", - "autoload": { - "files": ["Resources/functions/dump.php"], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": ["/Tests/"] - }, - "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": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": ["debug", "dump"], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.2.8" - }, - "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-07T13:42:21+00:00" - }, - { - "name": "symplify/astral", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/astral.git", - "reference": "8b704cb02702e8519a404aa775ef4d53c4c74037" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/astral/zipball/8b704cb02702e8519a404aa775ef4d53c4c74037", - "reference": "8b704cb02702e8519a404aa775ef4d53c4c74037", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "nikic/php-parser": "4.10.5", - "php": ">=7.3", - "symfony/dependency-injection": "^5.2", - "symfony/http-kernel": "^4.4|^5.2", - "symplify/autowire-array-parameter": "^9.3.12", - "symplify/package-builder": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5", - "symplify/easy-testing": "^9.3.12" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\Astral\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Toolking for smart daily work with AST", - "support": { - "source": "https://github.com/symplify/astral/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:14+00:00" - }, - { - "name": "symplify/autowire-array-parameter", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/autowire-array-parameter.git", - "reference": "7fb6af895aacb9dbd48eaa24c0d9dc3294a82068" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/7fb6af895aacb9dbd48eaa24c0d9dc3294a82068", - "reference": "7fb6af895aacb9dbd48eaa24c0d9dc3294a82068", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "php": ">=7.3", - "symfony/dependency-injection": "^5.2", - "symplify/package-builder": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\AutowireArrayParameter\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Autowire array parameters for your Symfony applications", - "support": { - "source": "https://github.com/symplify/autowire-array-parameter/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:14+00:00" - }, - { - "name": "symplify/coding-standard", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/coding-standard.git", - "reference": "bea1cb8577d3bd391bc2c04a98d727ce8fcbc642" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/coding-standard/zipball/bea1cb8577d3bd391bc2c04a98d727ce8fcbc642", - "reference": "bea1cb8577d3bd391bc2c04a98d727ce8fcbc642", - "shasum": "" - }, - "require": { - "friendsofphp/php-cs-fixer": "^3.0", - "nette/utils": "^3.2", - "php": ">=7.3", - "symplify/autowire-array-parameter": "^9.3.12", - "symplify/package-builder": "^9.3.12", - "symplify/rule-doc-generator-contracts": "^9.3.12", - "symplify/symplify-kernel": "^9.3.12" - }, - "require-dev": { - "doctrine/orm": "^2.7", - "nette/application": "^3.1", - "nette/bootstrap": "^3.1", - "phpunit/phpunit": "^9.5", - "symfony/framework-bundle": "^4.4|^5.2", - "symfony/http-kernel": "^4.4|^5.2", - "symplify/easy-coding-standard-tester": "^9.3.12", - "symplify/php-config-printer": "^9.3.12", - "symplify/rule-doc-generator": "^9.3.12", - "symplify/smart-file-system": "^9.3.12" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\CodingStandard\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Set of Symplify rules for PHP_CodeSniffer and PHP CS Fixer.", - "support": { - "source": "https://github.com/symplify/coding-standard/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:17+00:00" - }, - { - "name": "symplify/composer-json-manipulator", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/composer-json-manipulator.git", - "reference": "932727993137ac6be539cb637590b0b487111924" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/932727993137ac6be539cb637590b0b487111924", - "reference": "932727993137ac6be539cb637590b0b487111924", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "php": ">=7.3", - "symfony/config": "^4.4|^5.2", - "symfony/dependency-injection": "^5.2", - "symfony/filesystem": "^4.4|^5.2", - "symfony/http-kernel": "^4.4|^5.2", - "symplify/package-builder": "^9.3.12", - "symplify/smart-file-system": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\ComposerJsonManipulator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Package to load, merge and save composer.json file(s)", - "support": { - "source": "https://github.com/symplify/composer-json-manipulator/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:16+00:00" - }, - { - "name": "symplify/console-package-builder", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/console-package-builder.git", - "reference": "f6c964c83de064b5c4fd6fc238bec75fbcd20221" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/console-package-builder/zipball/f6c964c83de064b5c4fd6fc238bec75fbcd20221", - "reference": "f6c964c83de064b5c4fd6fc238bec75fbcd20221", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "symfony/console": "^4.4|^5.2", - "symfony/dependency-injection": "^5.2", - "symplify/symplify-kernel": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5", - "symfony/http-kernel": "^4.4|^5.2", - "symplify/package-builder": "^9.3.12" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\ConsolePackageBuilder\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Package to speed up building command line applications", - "support": { - "source": "https://github.com/symplify/console-package-builder/tree/v9.3.12" - }, - "time": "2021-05-17T20:54:15+00:00" - }, - { - "name": "symplify/easy-coding-standard", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/easy-coding-standard.git", - "reference": "5fa2935c28e572e6a0f8f448dd9ca4f17f5324ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/easy-coding-standard/zipball/5fa2935c28e572e6a0f8f448dd9ca4f17f5324ad", - "reference": "5fa2935c28e572e6a0f8f448dd9ca4f17f5324ad", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "conflict": { - "friendsofphp/php-cs-fixer": "<3.0", - "squizlabs/php_codesniffer": "<3.6" - }, - "replace": { - "friendsofphp/php-cs-fixer": "^3.0", - "squizlabs/php_codesniffer": "^3.6" - }, - "bin": ["bin/ecs"], - "type": "library", - "autoload": { - "files": ["bootstrap.php"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Prefixed scoped version of ECS package", - "support": { - "source": "https://github.com/symplify/easy-coding-standard/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:57:41+00:00" - }, - { - "name": "symplify/easy-testing", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/easy-testing.git", - "reference": "f2a0e79a3893920b56dce110fb684c1760db8a74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/easy-testing/zipball/f2a0e79a3893920b56dce110fb684c1760db8a74", - "reference": "f2a0e79a3893920b56dce110fb684c1760db8a74", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "php": ">=7.3", - "symfony/console": "^4.4|^5.2", - "symfony/dependency-injection": "^5.2", - "symfony/finder": "^4.4|^5.2", - "symfony/http-kernel": "^4.4|^5.2", - "symplify/console-package-builder": "^9.3.12", - "symplify/package-builder": "^9.3.12", - "symplify/smart-file-system": "^9.3.12", - "symplify/symplify-kernel": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "bin": ["bin/easy-testing"], - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\EasyTesting\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Testing made easy", - "support": { - "source": "https://github.com/symplify/easy-testing/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:29+00:00" - }, - { - "name": "symplify/package-builder", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/package-builder.git", - "reference": "748eade6acc32798013e41203ab362f6ce77a024" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/package-builder/zipball/748eade6acc32798013e41203ab362f6ce77a024", - "reference": "748eade6acc32798013e41203ab362f6ce77a024", - "shasum": "" - }, - "require": { - "nette/neon": "^3.2", - "nette/utils": "^3.2", - "php": ">=7.3", - "symfony/config": "^4.4|^5.2", - "symfony/console": "^4.4|^5.2", - "symfony/dependency-injection": "^5.2", - "symfony/finder": "^4.4|^5.2", - "symfony/http-kernel": "^4.4|^5.2", - "symplify/easy-testing": "^9.3.12", - "symplify/symplify-kernel": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\PackageBuilder\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.", - "support": { - "source": "https://github.com/symplify/package-builder/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:52+00:00" - }, - { - "name": "symplify/phpstan-extensions", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/phpstan-extensions.git", - "reference": "21a5766407aba2013b65da53020dfc7fdc7fb495" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/phpstan-extensions/zipball/21a5766407aba2013b65da53020dfc7fdc7fb495", - "reference": "21a5766407aba2013b65da53020dfc7fdc7fb495", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "phpstan/phpstan": "0.12.86", - "symplify/astral": "^9.3.12", - "symplify/package-builder": "^9.3.12", - "symplify/smart-file-system": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - }, - "phpstan": { - "includes": ["config/config.neon"] - } - }, - "autoload": { - "psr-4": { - "Symplify\\PHPStanExtensions\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Pre-escaped error messages in 'symplify' error format, container aware test case and other useful extensions for PHPStan", - "support": { - "source": "https://github.com/symplify/phpstan-extensions/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:58+00:00" - }, - { - "name": "symplify/phpstan-rules", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/phpstan-rules.git", - "reference": "420dd5876ce7374e403f0a8b1d798ea22676e601" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/phpstan-rules/zipball/420dd5876ce7374e403f0a8b1d798ea22676e601", - "reference": "420dd5876ce7374e403f0a8b1d798ea22676e601", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "nikic/php-parser": "4.10.5", - "php": ">=7.3", - "phpstan/phpdoc-parser": "^0.5", - "phpstan/phpstan": "0.12.86", - "symplify/astral": "^9.3.12", - "symplify/composer-json-manipulator": "^9.3.12", - "symplify/package-builder": "^9.3.12", - "symplify/rule-doc-generator-contracts": "^9.3.12", - "symplify/smart-file-system": "^9.3.12", - "webmozart/assert": "^1.9" - }, - "require-dev": { - "nette/application": "^3.1", - "nette/forms": "^3.1", - "phpunit/phpunit": "^9.5", - "symfony/framework-bundle": "^4.4|^5.2", - "symplify/easy-testing": "^9.3.12", - "symplify/phpstan-extensions": "^9.3.12", - "symplify/rule-doc-generator": "^9.3.12" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - }, - "phpstan": { - "includes": [ - "config/services/services.neon", - "packages/cognitive-complexity/config/cognitive-complexity-services.neon", - "packages/object-calisthenics/config/object-calisthenics-services.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Symplify\\PHPStanRules\\": "src", - "Symplify\\PHPStanRules\\CognitiveComplexity\\": "packages/cognitive-complexity/src", - "Symplify\\PHPStanRules\\ObjectCalisthenics\\": "packages/object-calisthenics/src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Set of Symplify rules for PHPStan", - "support": { - "source": "https://github.com/symplify/phpstan-rules/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-17T20:54:27+00:00" - }, - { - "name": "symplify/rule-doc-generator-contracts", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/rule-doc-generator-contracts.git", - "reference": "06f23a3bfe1426030c4032e99665472a229d5b43" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/rule-doc-generator-contracts/zipball/06f23a3bfe1426030c4032e99665472a229d5b43", - "reference": "06f23a3bfe1426030c4032e99665472a229d5b43", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\RuleDocGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Contracts for production code of RuleDocGenerator", - "support": { - "source": "https://github.com/symplify/rule-doc-generator-contracts/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-11T13:31:15+00:00" - }, - { - "name": "symplify/smart-file-system", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/smart-file-system.git", - "reference": "aafc000f17d9f4b2d1274115095e3cbc2c32d63d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/aafc000f17d9f4b2d1274115095e3cbc2c32d63d", - "reference": "aafc000f17d9f4b2d1274115095e3cbc2c32d63d", - "shasum": "" - }, - "require": { - "nette/utils": "^3.2", - "php": ">=7.3", - "symfony/filesystem": "^4.4|^5.2", - "symfony/finder": "^4.4|^5.2" - }, - "require-dev": { - "nette/finder": "^2.5", - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\SmartFileSystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Sanitized FileInfo with safe getRealPath() and other handy methods", - "support": { - "source": "https://github.com/symplify/smart-file-system/tree/v9.3.12" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2021-05-11T13:30:32+00:00" - }, - { - "name": "symplify/symplify-kernel", - "version": "v9.3.12", - "source": { - "type": "git", - "url": "https://github.com/symplify/symplify-kernel.git", - "reference": "213455059541e8a707b716c5759982876e4e1118" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/213455059541e8a707b716c5759982876e4e1118", - "reference": "213455059541e8a707b716c5759982876e4e1118", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "symfony/console": "^4.4|^5.2", - "symfony/dependency-injection": "^5.2", - "symfony/http-kernel": "^4.4|^5.2", - "symplify/autowire-array-parameter": "^9.3.12", - "symplify/composer-json-manipulator": "^9.3.12", - "symplify/package-builder": "^9.3.12", - "symplify/smart-file-system": "^9.3.12" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\SymplifyKernel\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "description": "Internal Kernel for Symplify packages", - "support": { - "source": "https://github.com/symplify/symplify-kernel/tree/v9.3.12" - }, - "time": "2021-05-17T20:54:52+00:00" + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "371c6aac9ca489338bf3b3fa06ffdb21", + "packages": [ + { + "name": "brick/math", + "version": "0.9.2", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2021-01-20T22:51:39+00:00" + }, + { + "name": "codeigniter4/codeigniter4", + "version": "dev-develop", + "source": { + "type": "git", + "url": "https://github.com/codeigniter4/CodeIgniter4.git", + "reference": "67e6f3d9eaff82d003ad30058857f37536ea4252" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codeigniter4/CodeIgniter4/zipball/67e6f3d9eaff82d003ad30058857f37536ea4252", + "reference": "67e6f3d9eaff82d003ad30058857f37536ea4252", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-intl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "kint-php/kint": "^3.3", + "laminas/laminas-escaper": "^2.6", + "php": "^7.3 || ^8.0", + "psr/log": "^1.1" + }, + "require-dev": { + "fakerphp/faker": "^1.9", + "friendsofphp/php-cs-fixer": "^3.0", + "mikey179/vfsstream": "^1.6", + "nexusphp/cs-config": "^3.1", + "nexusphp/tachycardia": "^1.0", + "phpstan/phpstan": "0.12.88", + "phpunit/phpunit": "^9.1", + "predis/predis": "^1.1", + "rector/rector": "0.11.14", + "symplify/package-builder": "^9.3" + }, + "suggest": { + "ext-fileinfo": "Improves mime type detection for files" + }, + "default-branch": true, + "type": "project", + "extra": { + "branch-alias": { + "dev-develop": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "CodeIgniter\\": "system/" + }, + "exclude-from-classmap": [ + "**/Database/Migrations/**" + ] + }, + "autoload-dev": { + "psr-4": { + "CodeIgniter\\": "tests/system/", + "Utils\\": "utils/" + } + }, + "scripts": { + "post-update-cmd": [ + "CodeIgniter\\ComposerScripts::postUpdate", + "bash -c \"if [ -f admin/setup.sh ]; then bash admin/setup.sh; fi\"" + ], + "analyze": [ + "phpstan analyse" + ], + "test": [ + "phpunit" + ] + }, + "license": [ + "MIT" + ], + "description": "The CodeIgniter framework v4", + "homepage": "https://codeigniter.com", + "support": { + "forum": "http://forum.codeigniter.com/", + "source": "https://github.com/codeigniter4/CodeIgniter4", + "slack": "https://codeigniterchat.slack.com", + "issues": "https://github.com/codeigniter4/CodeIgniter4/issues" + }, + "time": "2021-06-07T06:25:13+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.2.9", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5", + "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "psr/log": "^1.0", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.2.9" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-01-12T12:10:35+00:00" + }, + { + "name": "essence/dom", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/essence/dom.git", + "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/essence/dom/zipball/e5776d2286f4ccbd048d160c28ac77ccc6d68f3a", + "reference": "e5776d2286f4ccbd048d160c28ac77ccc6d68f3a", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Essence\\Dom\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Félix Girault", + "email": "felix.girault@gmail.com", + "homepage": "http://www.felix-girault.fr", + "role": "Developer" + } + ], + "description": "Essence's DOM parser.", + "homepage": "http://github.com/essence/dom", + "keywords": [ + "dom", + "parser" + ], + "support": { + "issues": "https://github.com/essence/dom/issues", + "source": "https://github.com/essence/dom/tree/1.0.0" + }, + "time": "2015-07-23T20:33:17+00:00" + }, + { + "name": "essence/essence", + "version": "3.5.4", + "source": { + "type": "git", + "url": "https://github.com/essence/essence.git", + "reference": "81e889a87603840dadd04b317a51487df1d45933" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/essence/essence/zipball/81e889a87603840dadd04b317a51487df1d45933", + "reference": "81e889a87603840dadd04b317a51487df1d45933", + "shasum": "" + }, + "require": { + "essence/dom": "~1.0.0", + "essence/http": "~1.0.0", + "fg/parkour": "~1.1.0", + "php": ">=5.5.0" + }, + "suggest": { + "ext-curl": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Essence\\": "lib/Essence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Félix Girault", + "email": "felix.girault@gmail.com", + "homepage": "http://www.felix-girault.fr", + "role": "Developer" + } + ], + "description": "Extracts information about medias on the web, like youtube videos, twitter statuses or blog articles.", + "homepage": "http://github.com/essence/essence", + "keywords": [ + "embed", + "media", + "oembed", + "opengraph" + ], + "support": { + "issues": "https://github.com/essence/essence/issues", + "source": "https://github.com/essence/essence/tree/3.5.4" + }, + "time": "2021-01-21T09:58:10+00:00" + }, + { + "name": "essence/http", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/essence/http.git", + "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/essence/http/zipball/ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2", + "reference": "ce0e52e0c0f2ed894ce2922ab2fd598dcaac91d2", + "shasum": "" + }, + "suggest": { + "ext-curl": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Essence\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Félix Girault", + "email": "felix.girault@gmail.com", + "homepage": "http://www.felix-girault.fr", + "role": "Developer" + } + ], + "description": "Essence's HTTP client.", + "homepage": "http://github.com/essence/http", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/essence/http/issues", + "source": "https://github.com/essence/http/tree/1.0.0" + }, + "time": "2015-07-23T20:33:50+00:00" + }, + { + "name": "fg/parkour", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/felixgirault/parkour.git", + "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixgirault/parkour/zipball/f837eb640fc4aac81b11fe50d2fa04fb4ec71496", + "reference": "f837eb640fc4aac81b11fe50d2fa04fb4ec71496", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "4.3.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Parkour\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Félix Girault", + "email": "felix.girault@gmail.com", + "homepage": "http://www.felix-girault.fr", + "role": "Developer" + } + ], + "description": "A collection of utilities to manipulate arrays.", + "homepage": "http://github.com/felixgirault/parkour", + "keywords": [ + "array", + "manipulation", + "traversing" + ], + "support": { + "issues": "https://github.com/felixgirault/parkour/issues", + "source": "https://github.com/felixgirault/parkour/tree/1.1.1" + }, + "time": "2015-10-03T10:39:22+00:00" + }, + { + "name": "geoip2/geoip2", + "version": "v2.11.0", + "source": { + "type": "git", + "url": "https://github.com/maxmind/GeoIP2-php.git", + "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/d01be5894a5c1a3381c58c9b1795cd07f96c30f7", + "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "maxmind-db/reader": "~1.8", + "maxmind/web-service-common": "~0.8", + "php": ">=7.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "^8.0 || ^9.0", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "GeoIp2\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "https://www.maxmind.com/" + } + ], + "description": "MaxMind GeoIP2 PHP API", + "homepage": "https://github.com/maxmind/GeoIP2-php", + "keywords": [ + "IP", + "geoip", + "geoip2", + "geolocation", + "maxmind" + ], + "support": { + "issues": "https://github.com/maxmind/GeoIP2-php/issues", + "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.11.0" + }, + "time": "2020-10-01T18:48:34+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "phpoption/phpoption": "^1.7.3" + }, + "require-dev": { + "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2020-04-13T13:17:36+00:00" + }, + { + "name": "james-heinrich/getid3", + "version": "v2.0.0-beta3", + "source": { + "type": "git", + "url": "https://github.com/JamesHeinrich/getID3.git", + "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/5515a2d24667c3c0ff49fdcbdadc405c0880c7a2", + "reference": "5515a2d24667c3c0ff49fdcbdadc405c0880c7a2", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8|^5.0" + }, + "suggest": { + "ext-SimpleXML": "SimpleXML extension is required to analyze RIFF/WAV/BWF audio files (also requires `ext-libxml`).", + "ext-com_dotnet": "COM extension is required when loading files larger than 2GB on Windows.", + "ext-ctype": "ctype extension is required when loading files larger than 2GB on 32-bit PHP (also on 64-bit PHP on Windows) or executing `getid3_lib::CopyTagsToComments`.", + "ext-dba": "DBA extension is required to use the DBA database as a cache storage.", + "ext-exif": "EXIF extension is required for graphic modules.", + "ext-iconv": "iconv extension is required to work with different character sets (when `ext-mbstring` is not available).", + "ext-json": "JSON extension is required to analyze Apple Quicktime videos.", + "ext-libxml": "libxml extension is required to analyze RIFF/WAV/BWF audio files.", + "ext-mbstring": "mbstring extension is required to work with different character sets.", + "ext-mysql": "MySQL extension is required to use the MySQL database as a cache storage (deprecated in PHP 5.5, removed in PHP >= 7.0, use `ext-mysqli` instead).", + "ext-mysqli": "MySQLi extension is required to use the MySQL database as a cache storage.", + "ext-rar": "RAR extension is required for RAR archive module.", + "ext-sqlite3": "SQLite3 extension is required to use the SQLite3 database as a cache storage.", + "ext-xml": "XML extension is required for graphic modules to analyze the XML metadata.", + "ext-zlib": "Zlib extension is required for archive modules and compressed metadata." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JamesHeinrich\\GetID3\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-1.0-or-later", + "LGPL-3.0-only", + "MPL-2.0" + ], + "authors": [ + { + "name": "James Heinrich", + "email": "info@getid3.org", + "homepage": "https://github.com/JamesHeinrich", + "role": "Developer" + }, + { + "name": "Craig Duncan", + "email": "git@duncanc.co.uk", + "homepage": "https://github.com/duncan3dc", + "role": "Developer" + } + ], + "description": "Extract and write useful information to/from popular multimedia file formats", + "homepage": "https://www.getid3.org/", + "keywords": [ + "audio", + "codecs", + "id3", + "metadata", + "tags", + "video" + ], + "support": { + "issues": "https://github.com/JamesHeinrich/getID3/issues", + "source": "https://github.com/JamesHeinrich/getID3/tree/2.0" + }, + "time": "2020-07-21T08:15:44+00:00" + }, + { + "name": "kint-php/kint", + "version": "3.3", + "source": { + "type": "git", + "url": "https://github.com/kint-php/kint.git", + "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kint-php/kint/zipball/335ac1bcaf04d87df70d8aa51e8887ba2c6d203b", + "reference": "335ac1bcaf04d87df70d8aa51e8887ba2c6d203b", + "shasum": "" + }, + "require": { + "php": ">=5.3.6" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpunit/phpunit": "^4.0", + "seld/phar-utils": "^1.0", + "symfony/finder": "^2.0 || ^3.0 || ^4.0", + "vimeo/psalm": "^3.0" + }, + "suggest": { + "ext-ctype": "Simple data type tests", + "ext-iconv": "Provides fallback detection for ambiguous legacy string encodings such as the Windows and ISO 8859 code pages", + "ext-mbstring": "Provides string encoding detection", + "kint-php/kint-js": "Provides a simplified dump to console.log()", + "kint-php/kint-twig": "Provides d() and s() functions in twig templates", + "symfony/polyfill-ctype": "Replacement for ext-ctype if missing", + "symfony/polyfill-iconv": "Replacement for ext-iconv if missing", + "symfony/polyfill-mbstring": "Replacement for ext-mbstring if missing" + }, + "type": "library", + "autoload": { + "files": [ + "init.php" + ], + "psr-4": { + "Kint\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Vollebregt", + "homepage": "https://github.com/jnvsor" + }, + { + "name": "Rokas Å leinius", + "homepage": "https://github.com/raveren" + }, + { + "name": "Contributors", + "homepage": "https://github.com/kint-php/kint/graphs/contributors" + } + ], + "description": "Kint - debugging tool for PHP developers", + "homepage": "https://kint-php.github.io/kint/", + "keywords": [ + "debug", + "kint", + "php" + ], + "support": { + "issues": "https://github.com/kint-php/kint/issues", + "source": "https://github.com/kint-php/kint/tree/master" + }, + "time": "2019-10-17T18:05:24+00:00" + }, + { + "name": "laminas/laminas-escaper", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/5e04bc5ae5990b17159d79d331055e2c645e5cc5", + "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-escaper": "^2.6.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.12.2", + "vimeo/psalm": "^3.16" + }, + "suggest": { + "ext-iconv": "*", + "ext-mbstring": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-11-17T21:26:43+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6cccbddfcfc742eb02158d6137ca5687d92cee32", + "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "psalm/plugin-phpunit": "^0.15.1", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.6" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-25T21:54:58+00:00" + }, + { + "name": "league/commonmark", + "version": "1.6.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7d70d2f19c84bcc16275ea47edabee24747352eb", + "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.2", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "bin": [ + "bin/commonmark" + ], + "type": "library", + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2021-05-12T11:39:41+00:00" + }, + { + "name": "league/html-to-markdown", + "version": "4.10.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/html-to-markdown.git", + "reference": "0868ae7a552e809e5cd8f93ba022071640408e88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/0868ae7a552e809e5cd8f93ba022071640408e88", + "reference": "0868ae7a552e809e5cd8f93ba022071640408e88", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xml": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "mikehaertl/php-shellcommand": "~1.1.0", + "phpunit/phpunit": "^4.8|^5.7", + "scrutinizer/ocular": "~1.1" + }, + "bin": [ + "bin/html-to-markdown" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.10-dev" + } + }, + "autoload": { + "psr-4": { + "League\\HTMLToMarkdown\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + }, + { + "name": "Nick Cernis", + "email": "nick@cern.is", + "homepage": "http://modernnerd.net", + "role": "Original Author" + } + ], + "description": "An HTML-to-markdown conversion helper for PHP", + "homepage": "https://github.com/thephpleague/html-to-markdown", + "keywords": [ + "html", + "markdown" + ], + "support": { + "issues": "https://github.com/thephpleague/html-to-markdown/issues", + "source": "https://github.com/thephpleague/html-to-markdown/tree/4.10.0" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + } + ], + "time": "2020-07-01T00:34:03+00:00" + }, + { + "name": "maxmind-db/reader", + "version": "v1.10.1", + "source": { + "type": "git", + "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git", + "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/569bd44d97d30a4ec12c7793a33004a76d4caf18", + "reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "conflict": { + "ext-maxminddb": "<1.10.1,>=2.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "php-coveralls/php-coveralls": "^2.1", + "phpstan/phpstan": "*", + "phpunit/phpcov": ">=6.0.0", + "phpunit/phpunit": ">=8.0.0,<10.0.0", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups" + }, + "type": "library", + "autoload": { + "psr-4": { + "MaxMind\\Db\\": "src/MaxMind/Db" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "https://www.maxmind.com/" + } + ], + "description": "MaxMind DB Reader API", + "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php", + "keywords": [ + "database", + "geoip", + "geoip2", + "geolocation", + "maxmind" + ], + "support": { + "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues", + "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.10.1" + }, + "time": "2021-04-14T17:49:35+00:00" + }, + { + "name": "maxmind/web-service-common", + "version": "v0.8.1", + "source": { + "type": "git", + "url": "https://github.com/maxmind/web-service-common-php.git", + "reference": "32f274051c543fc865e5a84d3a2c703913641ea8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/32f274051c543fc865e5a84d3a2c703913641ea8", + "reference": "32f274051c543fc865e5a84d3a2c703913641ea8", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0.3", + "ext-curl": "*", + "ext-json": "*", + "php": ">=7.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "^8.0 || ^9.0", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "MaxMind\\Exception\\": "src/Exception", + "MaxMind\\WebService\\": "src/WebService" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory Oschwald", + "email": "goschwald@maxmind.com" + } + ], + "description": "Internal MaxMind Web Service API", + "homepage": "https://github.com/maxmind/web-service-common-php", + "support": { + "issues": "https://github.com/maxmind/web-service-common-php/issues", + "source": "https://github.com/maxmind/web-service-common-php/tree/v0.8.1" + }, + "time": "2020-11-02T17:00:53+00:00" + }, + { + "name": "michalsn/codeigniter4-uuid", + "version": "dev-develop", + "source": { + "type": "git", + "url": "https://github.com/michalsn/codeigniter4-uuid.git", + "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/michalsn/codeigniter4-uuid/zipball/b26512ac4f3f0c772fbfa2c3317346d3c17e2d44", + "reference": "b26512ac4f3f0c772fbfa2c3317346d3c17e2d44", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "ramsey/uuid": "^4.0" + }, + "require-dev": { + "codeigniter4/codeigniter4": "dev-develop", + "phpunit/phpunit": "8.5.*" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Michalsn\\Uuid\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "michalsn", + "homepage": "https://github.com/michalsn", + "role": "Developer" + } + ], + "description": "UUID package for CodeIgniter 4 with support for Model and Entity.", + "homepage": "https://github.com/michalsn/codeigniter4-uuid", + "keywords": [ + "codeigniter4", + "entity", + "model", + "uuid" + ], + "support": { + "issues": "https://github.com/michalsn/codeigniter4-uuid/issues", + "source": "https://github.com/michalsn/codeigniter4-uuid/tree/develop" + }, + "time": "2021-05-10T16:28:01+00:00" + }, + { + "name": "myth/auth", + "version": "dev-develop", + "source": { + "type": "git", + "url": "https://github.com/lonnieezell/myth-auth.git", + "reference": "fb0c8b8cae5b796d4f6d89e74ce6cab07966cdc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lonnieezell/myth-auth/zipball/fb0c8b8cae5b796d4f6d89e74ce6cab07966cdc1", + "reference": "fb0c8b8cae5b796d4f6d89e74ce6cab07966cdc1", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "provide": { + "codeigniter4/authentication-implementation": "1.0" + }, + "require-dev": { + "codeigniter4/codeigniter4": "dev-develop", + "codeigniter4/codeigniter4-standard": "^1.0", + "fakerphp/faker": "^1.9", + "mockery/mockery": "^1.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^9.2", + "squizlabs/php_codesniffer": "^3.5" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Myth\\Auth\\": "src" + }, + "exclude-from-classmap": [ + "**/Database/Migrations/**" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lonnie Ezell", + "email": "lonnieje@gmail.com", + "homepage": "http://newmythmedia.com", + "role": "Developer" + } + ], + "description": "Flexible authentication/authorization system for CodeIgniter 4.", + "homepage": "https://github.com/lonnieezell/myth-auth", + "keywords": [ + "Authentication", + "authorization", + "codeigniter" + ], + "support": { + "issues": "https://github.com/lonnieezell/myth-auth/issues", + "source": "https://github.com/lonnieezell/myth-auth/tree/develop" + }, + "funding": [ + { + "url": "https://github.com/lonnieezell", + "type": "github" + }, + { + "url": "https://www.patreon.com/lonnieezell", + "type": "patreon" + } + ], + "time": "2021-06-04T13:20:03+00:00" + }, + { + "name": "opawg/user-agents-php", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/opawg/user-agents-php.git", + "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opawg/user-agents-php/zipball/e22c7be05f475b44d0e6ecd76acf1617a2efef85", + "reference": "e22c7be05f475b44d0e6ecd76acf1617a2efef85", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Opawg\\UserAgentsPhp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Bellamy", + "email": "ben@podlibre.org", + "homepage": "https://podlibre.org/" + } + ], + "description": "PHP implementation for opawg/user-agents.", + "homepage": "https://github.com/opawg/user-agents-php", + "support": { + "source": "https://github.com/opawg/user-agents-php/tree/v1.0" + }, + "time": "2020-11-28T10:54:05+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2020-07-20T17:29:33+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": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.31" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2021-04-06T13:56:45+00:00" + }, + { + "name": "podlibre/ipcat", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/podlibre/ipcat.git", + "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/podlibre/ipcat/zipball/1adfc821be508ddc8a742f6a5d5e6e42fdf28e86", + "reference": "1adfc821be508ddc8a742f6a5d5e6e42fdf28e86", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Podlibre\\Ipcat\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-only" + ], + "authors": [ + { + "name": "Benjamin Bellamy", + "email": "ben@podlibre.org", + "homepage": "https://podlibre.org/" + } + ], + "description": "Categorization of IP Addresses forked from https://github.com/client9/ipcat", + "homepage": "https://github.com/podlibre/ipcat", + "support": { + "source": "https://github.com/podlibre/ipcat/tree/v1.0" + }, + "time": "2020-10-05T17:15:07+00:00" + }, + { + "name": "podlibre/podcast-namespace", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://code.podlibre.org/podlibre/podcastnamespace", + "reference": "4525c06ee9dd95bb745ee875d55b64a053c74cd6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Podlibre\\PodcastNamespace\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Bellamy", + "email": "ben@podlibre.org", + "homepage": "https://podlibre.org/" + } + ], + "description": "PHP implementation for the Podcast Namespace.", + "homepage": "https://code.podlibre.org/podlibre/podcastnamespace", + "time": "2021-01-14T15:47:06+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.1.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-01-21T17:40:04+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "cd4032040a750077205918c86049aa0f43d22947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", + "reference": "cd4032040a750077205918c86049aa0f43d22947", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^0.17.1", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "time": "2020-08-18T17:17:46+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "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\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/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-mbstring", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "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\\Mbstring\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/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-05-27T09:27: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": "vlucas/phpdotenv", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.1", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.7.4", + "symfony/polyfill-ctype": "^1.17", + "symfony/polyfill-mbstring": "^1.17", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-01-20T15:23:13+00:00" + }, + { + "name": "whichbrowser/parser", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/WhichBrowser/Parser-PHP.git", + "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WhichBrowser/Parser-PHP/zipball/bcf642a1891032de16a5ab976fd352753dd7f9a0", + "reference": "bcf642a1891032de16a5ab976fd352753dd7f9a0", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/cache": "^1.0" + }, + "require-dev": { + "cache/array-adapter": "^1.1", + "icomefromthenet/reverse-regex": "0.0.6.3", + "php-coveralls/php-coveralls": "^2.0", + "phpunit/php-code-coverage": "^5.0 || ^7.0", + "phpunit/phpunit": "^6.0 || ^8.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/yaml": "~3.4 || ~4.0" + }, + "suggest": { + "cache/array-adapter": "Allows testing of the caching functionality" + }, + "type": "library", + "autoload": { + "psr-4": { + "WhichBrowser\\": [ + "src/", + "tests/src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niels Leenheer", + "email": "niels@leenheer.nl", + "role": "Developer" + } + ], + "description": "Useragent sniffing library for PHP", + "homepage": "http://whichbrowser.net", + "keywords": [ + "browser", + "sniffing", + "ua", + "useragent" + ], + "support": { + "issues": "https://github.com/WhichBrowser/Parser-PHP/issues", + "source": "https://github.com/WhichBrowser/Parser-PHP/tree/v2.1.2" + }, + "time": "2021-05-10T10:18:11+00:00" + } + ], + "packages-dev": [ + { + "name": "captainhook/captainhook", + "version": "5.10.1", + "source": { + "type": "git", + "url": "https://github.com/captainhookphp/captainhook.git", + "reference": "03f31d3c6bdec50c831381f27ecad48c73840726" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/captainhookphp/captainhook/zipball/03f31d3c6bdec50c831381f27ecad48c73840726", + "reference": "03f31d3c6bdec50c831381f27ecad48c73840726", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-spl": "*", + "ext-xml": "*", + "php": ">=7.2", + "sebastianfeldmann/camino": "^0.9.2", + "sebastianfeldmann/cli": "^3.3", + "sebastianfeldmann/git": "^3.7", + "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" + }, + "replace": { + "sebastianfeldmann/captainhook": "*" + }, + "require-dev": { + "composer/composer": "~1", + "mikey179/vfsstream": "~1" + }, + "bin": [ + "bin/captainhook" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0.x-dev" + }, + "captainhook": { + "config": "captainhook.json" + } + }, + "autoload": { + "psr-4": { + "CaptainHook\\App\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" + } + ], + "description": "PHP git hook manager", + "homepage": "https://github.com/captainhookphp/captainhook", + "keywords": [ + "commit-msg", + "git", + "hooks", + "post-merge", + "pre-commit", + "pre-push", + "prepare-commit-msg" + ], + "support": { + "issues": "https://github.com/captainhookphp/captainhook/issues", + "source": "https://github.com/captainhookphp/captainhook/tree/5.10.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/sebastianfeldmann", + "type": "github" + } + ], + "time": "2021-05-25T21:21:59+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "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" + }, + { + "name": "mikey179/vfsstream", + "version": "v1.6.8", + "source": { + "type": "git", + "url": "https://github.com/bovigo/vfsStream.git", + "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe", + "reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" + } + ], + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", + "support": { + "issues": "https://github.com/bovigo/vfsStream/issues", + "source": "https://github.com/bovigo/vfsStream/tree/master", + "wiki": "https://github.com/bovigo/vfsStream/wiki" + }, + "time": "2019-10-30T15:31:00+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "nette/neon", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/nette/neon.git", + "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/neon/zipball/e4ca6f4669121ca6876b1d048c612480e39a28d5", + "reference": "e4ca6f4669121ca6876b1d048c612480e39a28d5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🸠Nette NEON: encodes and decodes NEON file format.", + "homepage": "https://ne-on.org", + "keywords": [ + "export", + "import", + "neon", + "nette", + "yaml" + ], + "support": { + "issues": "https://github.com/nette/neon/issues", + "source": "https://github.com/nette/neon/tree/v3.2.2" + }, + "time": "2021-02-28T12:30:32+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.1" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.2" + }, + "time": "2021-03-03T22:53:25+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.5", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" + }, + "time": "2021-05-03T19:11:20+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "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" + }, + { + "name": "phar-io/version", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "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" + }, + "time": "2021-02-23T14:00:09+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "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" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "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" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "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" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + }, + "time": "2021-03-17T13:42:18+00:00" + }, + { + "name": "phpstan/extension-installer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/66c7adc9dfa38b6b5838a9fb728b68a7d8348051", + "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2.0", + "php": "^7.1 || ^8.0", + "phpstan/phpstan": ">=0.11.6" + }, + "require-dev": { + "composer/composer": "^1.8", + "phing/phing": "^2.16.3", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.1.0" + }, + "time": "2020-12-13T13:06:13+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "0.5.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e352d065af1ae9b41c12d1dfd309e90f7b1f55c9", + "reference": "e352d065af1ae9b41c12d1dfd309e90f7b1f55c9", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phing/phing": "^2.16.3", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.60", + "phpstan/phpstan-strict-rules": "^0.12.5", + "phpunit/phpunit": "^7.5.20", + "symfony/process": "^5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.5-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/0.5.4" + }, + "time": "2021-04-03T14:46:19+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "0.12.88", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "464d1a81af49409c41074aa6640ed0c4cbd9bb68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/464d1a81af49409c41074aa6640ed0c4cbd9bb68", + "reference": "464d1a81af49409c41074aa6640ed0c4cbd9bb68", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/0.12.88" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2021-05-17T12:24:49+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f6293e1b30a2354e8428e004689671b83871edde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-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": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-03-28T07:26:59+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.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": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-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": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/89ff45ea9d70e35522fb6654a2ebc221158de276", + "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3.2", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.5" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-05T04:49:07+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "rector/rector", + "version": "0.11.14", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "49dd2ff88bd67d5126557db91c446c322f5bbcef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/49dd2ff88bd67d5126557db91c446c322f5bbcef", + "reference": "49dd2ff88bd67d5126557db91c446c322f5bbcef", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0", + "phpstan/phpstan": ">=0.12.86 <=0.12.88" + }, + "conflict": { + "phpstan/phpdoc-parser": "<=0.5.3", + "phpstan/phpstan": "<=0.12.82", + "rector/rector-cakephp": "*", + "rector/rector-doctrine": "*", + "rector/rector-nette": "*", + "rector/rector-nette-to-symfony": "*", + "rector/rector-phpunit": "*", + "rector/rector-prefixed": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.10-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Prefixed and PHP 7.1 downgraded version of rector/rector", + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.11.14" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T21:48:47+00:00" + }, + { + "name": "rector/rector-phpstan-rules", + "version": "0.2.12", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/phpstan-rules.git", + "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/phpstan-rules/zipball/84b2034aab951be7e86dc6cc7e141ee92a3d115b", + "reference": "84b2034aab951be7e86dc6cc7e141ee92a3d115b", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "php": ">=7.3", + "phpstan/phpstan": "^0.12.86", + "symplify/phpstan-rules": "^9.3.5" + }, + "require-dev": { + "phpstan/extension-installer": "^1.1", + "phpunit/phpunit": "^9.5", + "symplify/easy-coding-standard": "^9.3", + "symplify/phpstan-extensions": "^9.3" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "config/config.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Rector\\PHPStanRules\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan rules for Rector projects - with focus on static reflection, constant re-use and Rector design patterns", + "support": { + "issues": "https://github.com/rectorphp/phpstan-rules/issues", + "source": "https://github.com/rectorphp/phpstan-rules/tree/0.2.12" + }, + "time": "2021-05-20T22:31:19+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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 PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "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/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-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": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:55:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-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": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "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/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "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/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "0d1c587401514d17e8f9258a27e23527cb1b06c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0d1c587401514d17e8f9258a27e23527cb1b06c1", + "reference": "0d1c587401514d17e8f9258a27e23527cb1b06c1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-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/2.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-04T13:02:07+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "sebastianfeldmann/camino", + "version": "0.9.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianfeldmann/camino.git", + "reference": "3b611368e22e8565c3a6504613136402ed9e6f69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianfeldmann/camino/zipball/3b611368e22e8565c3a6504613136402ed9e6f69", + "reference": "3b611368e22e8565c3a6504613136402ed9e6f69", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "SebastianFeldmann\\Camino\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" + } + ], + "description": "Path management the OO way", + "homepage": "https://github.com/sebastianfeldmann/camino", + "keywords": [ + "file system", + "path" + ], + "support": { + "issues": "https://github.com/sebastianfeldmann/camino/issues", + "source": "https://github.com/sebastianfeldmann/camino/tree/0.9.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianfeldmann", + "type": "github" + } + ], + "time": "2020-12-08T09:25:24+00:00" + }, + { + "name": "sebastianfeldmann/cli", + "version": "3.3.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianfeldmann/cli.git", + "reference": "c4a677f229976c88cc8f50b1477ab15244a4f6d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianfeldmann/cli/zipball/c4a677f229976c88cc8f50b1477ab15244a4f6d8", + "reference": "c4a677f229976c88cc8f50b1477ab15244a4f6d8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "symfony/process": "^4.3 | ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "SebastianFeldmann\\Cli\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" + } + ], + "description": "PHP cli helper classes", + "homepage": "https://github.com/sebastianfeldmann/cli", + "keywords": [ + "cli" + ], + "support": { + "issues": "https://github.com/sebastianfeldmann/cli/issues", + "source": "https://github.com/sebastianfeldmann/cli/tree/3.3.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianfeldmann", + "type": "github" + } + ], + "time": "2021-06-03T16:02:45+00:00" + }, + { + "name": "sebastianfeldmann/git", + "version": "3.7.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianfeldmann/git.git", + "reference": "406b98e09c37249ce586be8ed5766bf0ca389490" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/406b98e09c37249ce586be8ed5766bf0ca389490", + "reference": "406b98e09c37249ce586be8ed5766bf0ca389490", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-xml": "*", + "php": ">=7.2", + "sebastianfeldmann/cli": "^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "SebastianFeldmann\\Git\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" + } + ], + "description": "PHP git wrapper", + "homepage": "https://github.com/sebastianfeldmann/git", + "keywords": [ + "git" + ], + "support": { + "issues": "https://github.com/sebastianfeldmann/git/issues", + "source": "https://github.com/sebastianfeldmann/git/tree/3.7.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianfeldmann", + "type": "github" + } + ], + "time": "2021-05-29T12:47:08+00:00" + }, + { + "name": "symfony/config", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "9f4a448c2d7fd2c90882dfff930b627ddbe16810" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/9f4a448c2d7fd2c90882dfff930b627ddbe16810", + "reference": "9f4a448c2d7fd2c90882dfff930b627ddbe16810", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php81": "^1.22" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/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:43:10+00:00" + }, + { + "name": "symfony/console", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "058553870f7809087fa80fa734704a21b9bcaeb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/058553870f7809087fa80fa734704a21b9bcaeb2", + "reference": "058553870f7809087fa80fa734704a21b9bcaeb2", + "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" + }, + "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" + }, + "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.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:43:10+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "94d973cb742d8c5c5dcf9534220e6b73b09af1d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/94d973cb742d8c5c5dcf9534220e6b73b09af1d4", + "reference": "94d973cb742d8c5c5dcf9534220e6b73b09af1d4", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1.1", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<5.3", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" + }, + "require-dev": { + "symfony/config": "^5.3", + "symfony/expression-language": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "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": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/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:57:12+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", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-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/error-handler", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0e6768b8c0dcef26df087df2bbbaa143867a59b2", + "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "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": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/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:43:10+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.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" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/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:43:10+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "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" + } + ], + "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/filesystem", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "348116319d7fb7d1faa781d26a48922428013eb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2", + "reference": "348116319d7fb7d1faa781d26a48922428013eb2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/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:43:10+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\\": "" + }, + "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": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/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-26T12:52:38+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "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\\HttpClient\\": "" + } + }, + "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": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-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-04-11T23:07:08+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "8827b90cf8806e467124ad476acd15216c2fceb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8827b90cf8806e467124ad476acd15216c2fceb6", + "reference": "8827b90cf8806e467124ad476acd15216c2fceb6", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.3.1" + }, + "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-06-02T09:32:00+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "74eb022e3bac36b3d3a897951a98759f2b32b864" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/74eb022e3bac36b3d3a897951a98759f2b32b864", + "reference": "74eb022e3bac36b3d3a897951a98759f2b32b864", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "~1.0", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^5.3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.3", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "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": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.3.1" + }, + "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-06-02T10:07:12+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", + "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "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\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/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-05-27T09:17:38+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "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\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/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-php73", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "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\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/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-php81", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "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\\Php81\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/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-05-21T13:25:03+00:00" + }, + { + "name": "symfony/process", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "53e36cb1c160505cdaf1ef201501669c4c317191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/53e36cb1c160505cdaf1ef201501669c4c317191", + "reference": "53e36cb1c160505cdaf1ef201501669c4c317191", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "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": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/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-26T12:52:38+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "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\\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" + } + ], + "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/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-04-01T10:43:52+00:00" + }, + { + "name": "symfony/string", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "a9a0f8b6aafc5d2d1c116dcccd1573a95153515b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/a9a0f8b6aafc5d2d1c116dcccd1573a95153515b", + "reference": "a9a0f8b6aafc5d2d1c116dcccd1573a95153515b", + "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\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/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:43:10+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "1d3953e627fe4b5f6df503f356b6545ada6351f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1d3953e627fe4b5f6df503f356b6545ada6351f3", + "reference": "1d3953e627fe4b5f6df503f356b6545ada6351f3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/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-27T12:28:50+00:00" + }, + { + "name": "symplify/astral", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/astral.git", + "reference": "5a1f3cbd56d75e7a7c7ee7a8ce61fddba31aa44d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/astral/zipball/5a1f3cbd56d75e7a7c7ee7a8ce61fddba31aa44d", + "reference": "5a1f3cbd56d75e7a7c7ee7a8ce61fddba31aa44d", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "nikic/php-parser": "4.10.5", + "php": ">=7.3", + "symfony/dependency-injection": "^5.2", + "symfony/http-kernel": "^4.4|^5.2", + "symplify/autowire-array-parameter": "^9.3.20", + "symplify/package-builder": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "symplify/easy-testing": "^9.3.20" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\Astral\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Toolking for smart daily work with AST", + "support": { + "source": "https://github.com/symplify/astral/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:49:44+00:00" + }, + { + "name": "symplify/autowire-array-parameter", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/autowire-array-parameter.git", + "reference": "a557f4dba14d291d648a3fa863e9d887686d46d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/a557f4dba14d291d648a3fa863e9d887686d46d3", + "reference": "a557f4dba14d291d648a3fa863e9d887686d46d3", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "php": ">=7.3", + "symfony/dependency-injection": "^5.2", + "symplify/package-builder": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\AutowireArrayParameter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Autowire array parameters for your Symfony applications", + "support": { + "source": "https://github.com/symplify/autowire-array-parameter/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:49:46+00:00" + }, + { + "name": "symplify/coding-standard", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/coding-standard.git", + "reference": "40bffb20e222b9dfcbf5f6d93abd2867bd2dc935" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/coding-standard/zipball/40bffb20e222b9dfcbf5f6d93abd2867bd2dc935", + "reference": "40bffb20e222b9dfcbf5f6d93abd2867bd2dc935", + "shasum": "" + }, + "require": { + "friendsofphp/php-cs-fixer": "^3.0", + "nette/utils": "^3.2", + "php": ">=7.3", + "symplify/autowire-array-parameter": "^9.3.20", + "symplify/package-builder": "^9.3.20", + "symplify/rule-doc-generator-contracts": "^9.3.20", + "symplify/symplify-kernel": "^9.3.20" + }, + "require-dev": { + "doctrine/orm": "^2.7", + "nette/application": "^3.1", + "nette/bootstrap": "^3.1", + "phpunit/phpunit": "^9.5", + "symfony/framework-bundle": "^4.4|^5.2", + "symfony/http-kernel": "^4.4|^5.2", + "symplify/easy-coding-standard-tester": "^9.3.20", + "symplify/php-config-printer": "^9.3.20", + "symplify/rule-doc-generator": "^9.3.20", + "symplify/smart-file-system": "^9.3.20" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\CodingStandard\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Set of Symplify rules for PHP_CodeSniffer and PHP CS Fixer.", + "support": { + "source": "https://github.com/symplify/coding-standard/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:49:48+00:00" + }, + { + "name": "symplify/composer-json-manipulator", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/composer-json-manipulator.git", + "reference": "39dffab1eef2b8f04baf0ecae0f42d8f4751b485" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/39dffab1eef2b8f04baf0ecae0f42d8f4751b485", + "reference": "39dffab1eef2b8f04baf0ecae0f42d8f4751b485", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "php": ">=7.3", + "symfony/config": "^4.4|^5.2", + "symfony/dependency-injection": "^5.2", + "symfony/filesystem": "^4.4|^5.2", + "symfony/http-kernel": "^4.4|^5.2", + "symplify/package-builder": "^9.3.20", + "symplify/smart-file-system": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\ComposerJsonManipulator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Package to load, merge and save composer.json file(s)", + "support": { + "source": "https://github.com/symplify/composer-json-manipulator/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:49:47+00:00" + }, + { + "name": "symplify/console-package-builder", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/console-package-builder.git", + "reference": "95c88f29bd2dacdce5645af1521cfd3e13396d02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/console-package-builder/zipball/95c88f29bd2dacdce5645af1521cfd3e13396d02", + "reference": "95c88f29bd2dacdce5645af1521cfd3e13396d02", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "symfony/console": "^4.4|^5.2", + "symfony/dependency-injection": "^5.2", + "symplify/symplify-kernel": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "symfony/http-kernel": "^4.4|^5.2", + "symplify/package-builder": "^9.3.20" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\ConsolePackageBuilder\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Package to speed up building command line applications", + "support": { + "source": "https://github.com/symplify/console-package-builder/tree/v9.3.20" + }, + "time": "2021-06-05T15:50:03+00:00" + }, + { + "name": "symplify/easy-coding-standard", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/easy-coding-standard.git", + "reference": "0a2700ce5b4cd4054261b5f4b95d4b6563401918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/easy-coding-standard/zipball/0a2700ce5b4cd4054261b5f4b95d4b6563401918", + "reference": "0a2700ce5b4cd4054261b5f4b95d4b6563401918", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "conflict": { + "friendsofphp/php-cs-fixer": "<3.0", + "squizlabs/php_codesniffer": "<3.6" + }, + "replace": { + "friendsofphp/php-cs-fixer": "^3.0", + "squizlabs/php_codesniffer": "^3.6" + }, + "bin": [ + "bin/ecs" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Prefixed scoped version of ECS package", + "support": { + "source": "https://github.com/symplify/easy-coding-standard/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:51:56+00:00" + }, + { + "name": "symplify/easy-testing", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/easy-testing.git", + "reference": "e7306f997146e33895602739c9e93931b7a2227d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/easy-testing/zipball/e7306f997146e33895602739c9e93931b7a2227d", + "reference": "e7306f997146e33895602739c9e93931b7a2227d", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "php": ">=7.3", + "symfony/console": "^4.4|^5.2", + "symfony/dependency-injection": "^5.2", + "symfony/finder": "^4.4|^5.2", + "symfony/http-kernel": "^4.4|^5.2", + "symplify/console-package-builder": "^9.3.20", + "symplify/package-builder": "^9.3.20", + "symplify/smart-file-system": "^9.3.20", + "symplify/symplify-kernel": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "bin": [ + "bin/easy-testing" + ], + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\EasyTesting\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Testing made easy", + "support": { + "source": "https://github.com/symplify/easy-testing/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:50:09+00:00" + }, + { + "name": "symplify/package-builder", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/package-builder.git", + "reference": "22254c8ad54e3672e91a4a390f85110d639a9167" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/package-builder/zipball/22254c8ad54e3672e91a4a390f85110d639a9167", + "reference": "22254c8ad54e3672e91a4a390f85110d639a9167", + "shasum": "" + }, + "require": { + "nette/neon": "^3.2", + "nette/utils": "^3.2", + "php": ">=7.3", + "symfony/config": "^4.4|^5.2", + "symfony/console": "^4.4|^5.2", + "symfony/dependency-injection": "^5.2", + "symfony/finder": "^4.4|^5.2", + "symfony/http-kernel": "^4.4|^5.2", + "symplify/easy-testing": "^9.3.20", + "symplify/symplify-kernel": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\PackageBuilder\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.", + "support": { + "source": "https://github.com/symplify/package-builder/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:50:27+00:00" + }, + { + "name": "symplify/phpstan-extensions", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/phpstan-extensions.git", + "reference": "5bd71787c21b0dc2191a2d9a76012c525c09a900" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/phpstan-extensions/zipball/5bd71787c21b0dc2191a2d9a76012c525c09a900", + "reference": "5bd71787c21b0dc2191a2d9a76012c525c09a900", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "phpstan/phpstan": "^0.12.88", + "symplify/astral": "^9.3.20", + "symplify/package-builder": "^9.3.20", + "symplify/smart-file-system": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + }, + "phpstan": { + "includes": [ + "config/config.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Symplify\\PHPStanExtensions\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Pre-escaped error messages in 'symplify' error format, container aware test case and other useful extensions for PHPStan", + "support": { + "source": "https://github.com/symplify/phpstan-extensions/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:50:25+00:00" + }, + { + "name": "symplify/phpstan-rules", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/phpstan-rules.git", + "reference": "5fd5875093bdcec1118c86ae8d7a36d1335a30b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/phpstan-rules/zipball/5fd5875093bdcec1118c86ae8d7a36d1335a30b0", + "reference": "5fd5875093bdcec1118c86ae8d7a36d1335a30b0", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "nikic/php-parser": "4.10.5", + "php": ">=7.3", + "phpstan/phpdoc-parser": "^0.5", + "phpstan/phpstan": "^0.12.88", + "symplify/astral": "^9.3.20", + "symplify/composer-json-manipulator": "^9.3.20", + "symplify/package-builder": "^9.3.20", + "symplify/rule-doc-generator-contracts": "^9.3.20", + "symplify/smart-file-system": "^9.3.20", + "webmozart/assert": "^1.9" + }, + "require-dev": { + "nette/application": "^3.1", + "nette/forms": "^3.1", + "phpunit/phpunit": "^9.5", + "symfony/framework-bundle": "^4.4|^5.2", + "symplify/easy-testing": "^9.3.20", + "symplify/phpstan-extensions": "^9.3.20", + "symplify/rule-doc-generator": "^9.3.20" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + }, + "phpstan": { + "includes": [ + "config/services/services.neon", + "packages/cognitive-complexity/config/cognitive-complexity-services.neon", + "packages/object-calisthenics/config/object-calisthenics-services.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Symplify\\PHPStanRules\\": "src", + "Symplify\\PHPStanRules\\CognitiveComplexity\\": "packages/cognitive-complexity/src", + "Symplify\\PHPStanRules\\ObjectCalisthenics\\": "packages/object-calisthenics/src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Set of Symplify rules for PHPStan", + "support": { + "source": "https://github.com/symplify/phpstan-rules/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-06-05T15:50:31+00:00" + }, + { + "name": "symplify/rule-doc-generator-contracts", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/rule-doc-generator-contracts.git", + "reference": "75bda667533565fe72ddee131234851f1893e091" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/rule-doc-generator-contracts/zipball/75bda667533565fe72ddee131234851f1893e091", + "reference": "75bda667533565fe72ddee131234851f1893e091", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\RuleDocGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Contracts for production code of RuleDocGenerator", + "support": { + "source": "https://github.com/symplify/rule-doc-generator-contracts/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-05-20T20:17:13+00:00" + }, + { + "name": "symplify/smart-file-system", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/smart-file-system.git", + "reference": "a2a8d39fe46b01ead8d2af7368b0b36b68fac979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/a2a8d39fe46b01ead8d2af7368b0b36b68fac979", + "reference": "a2a8d39fe46b01ead8d2af7368b0b36b68fac979", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2", + "php": ">=7.3", + "symfony/filesystem": "^4.4|^5.2", + "symfony/finder": "^4.4|^5.2" + }, + "require-dev": { + "nette/finder": "^2.5", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\SmartFileSystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Sanitized FileInfo with safe getRealPath() and other handy methods", + "support": { + "source": "https://github.com/symplify/smart-file-system/tree/v9.3.20" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2021-05-20T20:16:49+00:00" + }, + { + "name": "symplify/symplify-kernel", + "version": "v9.3.20", + "source": { + "type": "git", + "url": "https://github.com/symplify/symplify-kernel.git", + "reference": "af78940e82ea73334d2c7b6f15afaace600f98c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/af78940e82ea73334d2c7b6f15afaace600f98c6", + "reference": "af78940e82ea73334d2c7b6f15afaace600f98c6", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "symfony/console": "^4.4|^5.2", + "symfony/dependency-injection": "^5.2", + "symfony/http-kernel": "^4.4|^5.2", + "symplify/autowire-array-parameter": "^9.3.20", + "symplify/composer-json-manipulator": "^9.3.20", + "symplify/package-builder": "^9.3.20", + "symplify/smart-file-system": "^9.3.20" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\SymplifyKernel\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Internal Kernel for Symplify packages", + "support": { + "source": "https://github.com/symplify/symplify-kernel/tree/v9.3.20" + }, + "time": "2021-06-05T15:51:05+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "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" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "james-heinrich/getid3": 20, + "myth/auth": 20, + "codeigniter4/codeigniter4": 20, + "michalsn/codeigniter4-uuid": 20 }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": ["src/"] - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "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" + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.0" }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": ["assert", "check", "validate"], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "james-heinrich/getid3": 20, - "myth/auth": 20, - "codeigniter4/codeigniter4": 20, - "michalsn/codeigniter4-uuid": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^8.0" - }, - "platform-dev": [], - "plugin-api-version": "2.0.0" + "platform-dev": [], + "plugin-api-version": "2.0.0" } diff --git a/docs/setup-development.md b/docs/setup-development.md index 838b9e7506..63617d7d24 100644 --- a/docs/setup-development.md +++ b/docs/setup-development.md @@ -213,6 +213,11 @@ You do not wish to use the VSCode devcontainer? No problem! ## Initialize and populate database +> **Note:** +> +> You may skip this section if you go through the install wizard (go to +> `/cp-install`). + 1. Build the database with the migrate command: ```bash diff --git a/public/index.php b/public/index.php index 752c63dbde..4d04f8a58b 100644 --- a/public/index.php +++ b/public/index.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + use Config\Paths; // Path to the front controller (this file) @@ -19,7 +21,9 @@ chdir(__DIR__); // Load our paths config file // This is the line that might need to be changed, depending on your folder structure. -require realpath(FCPATH . '../app/Config/Paths.php') ?: FCPATH . '../app/Config/Paths.php'; +$pathsConfig = FCPATH . '../app/Config/Paths.php'; +// ^^^ Change this if you move your application folder +require realpath($pathsConfig) ?: $pathsConfig; $paths = new Paths(); diff --git a/spark b/spark index c4ad645a36..f62aeddb29 100644 --- a/spark +++ b/spark @@ -33,8 +33,9 @@ if (strpos(PHP_SAPI, 'cgi') === 0) define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR); // Load our paths config file -require realpath('app/Config/Paths.php') ?: 'app/Config/Paths.php'; +$pathsConfig = 'app/Config/Paths.php'; // ^^^ Change this line if you move your application folder +require realpath($pathsConfig) ?: $pathsConfig; $paths = new Config\Paths(); diff --git a/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php b/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php index 2a5d623249..243f4682ec 100644 --- a/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php +++ b/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Support\Database\Migrations; use CodeIgniter\Database\Migration; diff --git a/tests/_support/Database/Seeds/ExampleSeeder.php b/tests/_support/Database/Seeds/ExampleSeeder.php index 4d8a3154fe..e519a9132d 100644 --- a/tests/_support/Database/Seeds/ExampleSeeder.php +++ b/tests/_support/Database/Seeds/ExampleSeeder.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Support\Database\Seeds; use CodeIgniter\Database\Seeder; diff --git a/tests/_support/DatabaseTestCase.php b/tests/_support/DatabaseTestCase.php index ad81dd3441..76b8b72112 100644 --- a/tests/_support/DatabaseTestCase.php +++ b/tests/_support/DatabaseTestCase.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Support; use CodeIgniter\Test\CIUnitTestCase; diff --git a/tests/_support/Libraries/ConfigReader.php b/tests/_support/Libraries/ConfigReader.php index ae751047e4..b6b85d4536 100644 --- a/tests/_support/Libraries/ConfigReader.php +++ b/tests/_support/Libraries/ConfigReader.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + /** * CodeIgniter * diff --git a/tests/_support/Models/ExampleModel.php b/tests/_support/Models/ExampleModel.php index 446a425bf6..aedcdd94a0 100644 --- a/tests/_support/Models/ExampleModel.php +++ b/tests/_support/Models/ExampleModel.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Support\Models; use CodeIgniter\Model; diff --git a/tests/_support/SessionTestCase.php b/tests/_support/SessionTestCase.php index e5bdca84c9..19e18bfd11 100644 --- a/tests/_support/SessionTestCase.php +++ b/tests/_support/SessionTestCase.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Support; use CodeIgniter\Session\Handlers\ArrayHandler; diff --git a/tests/database/ExampleDatabaseTest.php b/tests/database/ExampleDatabaseTest.php index 072cb0815a..00b2709797 100644 --- a/tests/database/ExampleDatabaseTest.php +++ b/tests/database/ExampleDatabaseTest.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Database; use Tests\Support\DatabaseTestCase; diff --git a/tests/session/ExampleSessionTest.php b/tests/session/ExampleSessionTest.php index ce1623fb43..63adeb2c34 100644 --- a/tests/session/ExampleSessionTest.php +++ b/tests/session/ExampleSessionTest.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Session; use Tests\Support\SessionTestCase; diff --git a/tests/unit/HealthTest.php b/tests/unit/HealthTest.php index d8672bf12f..0095448df3 100644 --- a/tests/unit/HealthTest.php +++ b/tests/unit/HealthTest.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace Tests\Unit; use CodeIgniter\Test\CIUnitTestCase; -- GitLab