diff --git a/.gitignore b/.gitignore index 5f0f4a3b128..a8d0a81ef3f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ lib/components tests/.phpunit.result.cache .php-cs-fixer.cache styles/tinymce +tests/.phpunit.cache diff --git a/classes/core/DataObject.php b/classes/core/DataObject.php index 87a67049fbe..62408c3052c 100644 --- a/classes/core/DataObject.php +++ b/classes/core/DataObject.php @@ -19,6 +19,7 @@ namespace PKP\core; use APP\core\Application; +use Exception; use PKP\db\DAO; use PKP\db\DAORegistry; use PKP\facades\Locale; diff --git a/classes/core/PKPApplication.php b/classes/core/PKPApplication.php index be7e9ecba42..e02dd22d551 100644 --- a/classes/core/PKPApplication.php +++ b/classes/core/PKPApplication.php @@ -25,6 +25,8 @@ use GuzzleHttp\Client; use Illuminate\Database\Events\QueryExecuted; use Illuminate\Database\MySqlConnection; +use Illuminate\Database\MariaDbConnection; +use Illuminate\Database\PostgresConnection; use Illuminate\Support\Facades\DB; use PKP\config\Config; use PKP\db\DAORegistry; @@ -76,7 +78,7 @@ public static function getContextAssocType(); abstract class PKPApplication implements iPKPApplicationInfoProvider { - public const PHP_REQUIRED_VERSION = '8.0.2'; + public const PHP_REQUIRED_VERSION = '8.2.0'; // Constant used to distinguish between editorial and author workflows public const WORKFLOW_TYPE_EDITORIAL = 'editorial'; @@ -272,9 +274,13 @@ protected function initializeTimeZone(): void if (Application::isInstalled()) { // Retrieve the current offset $offset = (new DateTime())->format('P'); - $statement = DB::connection() instanceof MySqlConnection - ? "SET time_zone = '{$offset}'" - : "SET TIME ZONE INTERVAL '{$offset}' HOUR TO MINUTE"; + $statement = match (true) { + DB::connection() instanceof MySqlConnection, + DB::connection() instanceof MariaDbConnection + => "SET time_zone = '{$offset}'", + DB::connection() instanceof PostgresConnection + => "SET TIME ZONE INTERVAL '{$offset}' HOUR TO MINUTE" + }; DB::statement($statement); } } diff --git a/classes/core/PKPContainer.php b/classes/core/PKPContainer.php index d6cf6cc7a95..26f798f3a98 100644 --- a/classes/core/PKPContainer.php +++ b/classes/core/PKPContainer.php @@ -41,12 +41,12 @@ class PKPContainer extends Container { /** - * @var string The base path of the application, needed for base_path helper + * The base path of the application, needed for base_path helper */ - protected $basePath; + protected string $basePath; /** - * @brief Create own container instance, initialize bindings + * Create own container instance, initialize bindings */ public function __construct() { @@ -57,10 +57,27 @@ public function __construct() } /** - * @brief Bind the current container and set it globally + * Get the proper database driver + */ + public static function getDatabaseDriverName(?string $driver = null): string + { + $driver ??= Config::getVar('database', 'driver'); + + if (substr(strtolower($driver), 0, 8) === 'postgres') { + return 'pgsql'; + } + + return match ($driver) { + 'mysql', 'mysqli' => 'mysql', + 'mariadb' => 'mariadb' + }; + } + + /** + * Bind the current container and set it globally * let helpers, facades and services know to which container refer to */ - protected function registerBaseBindings() + protected function registerBaseBindings(): void { static::setInstance($this); $this->instance('app', $this); @@ -134,9 +151,9 @@ public function renderForConsole($output, Throwable $exception) } /** - * @brief Register used service providers within the container + * Register used service providers within the container */ - public function registerConfiguredProviders() + public function registerConfiguredProviders(): void { // Load main settings, this should be done before registering services, e.g., it's used by Database Service $this->loadConfiguration(); @@ -165,9 +182,9 @@ public function registerConfiguredProviders() } /** - * @brief Simplified service registration + * Simplified service registration */ - public function register(\Illuminate\Support\ServiceProvider $provider) + public function register(\Illuminate\Support\ServiceProvider $provider): void { $provider->register(); @@ -199,9 +216,9 @@ public function register(\Illuminate\Support\ServiceProvider $provider) } /** - * @brief Bind aliases with contracts + * Bind aliases with contracts */ - public function registerCoreContainerAliases() + public function registerCoreContainerAliases(): void { foreach ([ 'auth' => [ @@ -234,9 +251,6 @@ public function registerCoreContainerAliases() \Illuminate\Contracts\Cache\Repository::class, \Psr\SimpleCache\CacheInterface::class ], - 'cache.psr6' => [ - \Psr\Cache\CacheItemPoolInterface::class - ], 'db' => [ \Illuminate\Database\DatabaseManager::class, \Illuminate\Database\ConnectionResolverInterface::class @@ -319,10 +333,10 @@ public function registerCoreContainerAliases() } /** - * @brief Bind and load container configurations + * Bind and load container configurations * usage from Facade, see Illuminate\Support\Facades\Config */ - protected function loadConfiguration() + protected function loadConfiguration(): void { $items = []; $_request = Application::get()->getRequest(); @@ -336,12 +350,7 @@ protected function loadConfiguration() ]; // Database connection - $driver = 'mysql'; - - if (substr(strtolower(Config::getVar('database', 'driver')), 0, 8) === 'postgres') { - $driver = 'pgsql'; - } - + $driver = static::getDatabaseDriverName(); $items['database']['default'] = $driver; $items['database']['connections'][$driver] = [ 'driver' => $driver, @@ -453,21 +462,17 @@ protected function loadConfiguration() } /** - * @param string $path appended to the base path - * - * @brief see Illuminate\Foundation\Application::basePath + * @see Illuminate\Foundation\Application::basePath */ - public function basePath($path = '') + public function basePath(string $path = ''): string { return $this->basePath . ($path ? "/{$path}" : $path); } /** - * @param string $path appended to the path - * - * @brief alias of basePath(), Laravel app path differs from installation path + * Alias of basePath(), Laravel app path differs from installation path */ - public function path($path = '') + public function path(string $path = ''): string { return $this->basePath($path); } @@ -536,20 +541,16 @@ protected function settingProxyForStreamContext(): void /** * Override Laravel method; always false. * Prevents the undefined method error when the Log Manager tries to determine the driver - * - * @return bool */ - public function runningUnitTests() + public function runningUnitTests(): bool { return false; } /** * Determine if the application is currently down for maintenance. - * - * @return bool */ - public function isDownForMaintenance() + public function isDownForMaintenance(): bool { return Application::isUnderMaintenance(); } @@ -574,6 +575,8 @@ public function runningInConsole(?string $scriptPath = null): bool if (mb_stripos($_SERVER['SCRIPT_FILENAME'] ?? '', $scriptPath) !== false) { return true; } + + return false; } /** diff --git a/classes/core/PKPSessionGuard.php b/classes/core/PKPSessionGuard.php index aab5306713e..e521d0451b0 100644 --- a/classes/core/PKPSessionGuard.php +++ b/classes/core/PKPSessionGuard.php @@ -269,9 +269,9 @@ public function removeAllSession(): void } /** - * @copydoc \Illuminate\Auth\SessionGuard::rehashUserPassword($password, $attribute) + * @copydoc \Illuminate\Auth\SessionGuard::rehashUserPasswordForDeviceLogout */ - protected function rehashUserPassword($password, $attribute) + protected function rehashUserPasswordForDeviceLogout($password) { $rehash = null; diff --git a/classes/core/PKPUserProvider.php b/classes/core/PKPUserProvider.php index 489a09b96b9..4b31210a251 100755 --- a/classes/core/PKPUserProvider.php +++ b/classes/core/PKPUserProvider.php @@ -15,7 +15,9 @@ namespace PKP\core; use PKP\user\User; +use APP\core\Application; use APP\facades\Repo; +use PKP\security\Validation; use PKP\validation\ValidatorFactory; use Illuminate\Contracts\Auth\UserProvider; use Illuminate\Database\ConnectionInterface; @@ -150,6 +152,26 @@ public function validateCredentials(UserContract $user, array $credentials) return $this->hasher->check($plain, $user->getAuthPassword()); } + /** + * Rehash the user's password if required and supported. + * + * @param \Illuminate\Contracts\Auth\Authenticatable|\PKP\user\User $user + * @param array $credentials + * @param bool $force + * @return void + */ + public function rehashPasswordIfRequired(UserContract $user, #[\SensitiveParameter] array $credentials, bool $force = false) + { + if (!$this->hasher->needsRehash($user->getAuthPassword()) && !$force) { + return; + } + + $rehash = Validation::encryptCredentials($user->getUsername(), $credentials['password']); + $user->setPassword($rehash); + + Repo::user()->edit($user); + } + /** * Create a new instance of the \PKP\user\User * diff --git a/classes/db/DBDataXMLParser.php b/classes/db/DBDataXMLParser.php index 95042036b1e..62160a83cbf 100644 --- a/classes/db/DBDataXMLParser.php +++ b/classes/db/DBDataXMLParser.php @@ -54,8 +54,6 @@ public function parseData($file) return []; } - $allTables = DB::getDoctrineSchemaManager()->listTableNames(); - foreach ($tree->getChildren() as $type) { switch ($type->getName()) { case 'table': @@ -133,8 +131,7 @@ public function parseData($file) throw new Exception('dropindex called without table or index'); } - $schemaManager = DB::getDoctrineSchemaManager(); - if ($child->getAttribute('ifexists') && !in_array($index, array_keys($schemaManager->listTableIndexes($table)))) { + if ($child->getAttribute('ifexists') && !Schema::hasIndex($table, $index)) { break; } $this->sql = array_merge($this->sql, array_column(DB::pretend(function () use ($table, $index) { diff --git a/classes/install/Installer.php b/classes/install/Installer.php index 1add7d25841..213f8ceef74 100644 --- a/classes/install/Installer.php +++ b/classes/install/Installer.php @@ -851,41 +851,6 @@ public function installFilterConfig($filterConfigFile) return true; } - /** - * Check to see whether a column exists. - * Used in installer XML in conditional checks on nodes. - * - * @param string $tableName - * @param string $columnName - * - * @return bool - */ - public function columnExists($tableName, $columnName) - { - $schema = DB::getDoctrineSchemaManager(); - // Make sure the table exists - $tables = $schema->listTableNames(); - if (!in_array($tableName, $tables)) { - return false; - } - - return Schema::hasColumn($tableName, $columnName); - } - - /** - * Check to see whether a table exists. - * Used in installer XML in conditional checks on nodes. - * - * @param string $tableName - * - * @return bool - */ - public function tableExists($tableName) - { - $tables = DB::getDoctrineSchemaManager()->listTableNames(); - return in_array($tableName, $tables); - } - /** * Insert or update plugin data in versions * and plugin_settings tables. diff --git a/classes/install/PKPInstall.php b/classes/install/PKPInstall.php index 741475c6295..eb39b49e6c0 100644 --- a/classes/install/PKPInstall.php +++ b/classes/install/PKPInstall.php @@ -33,6 +33,7 @@ use Illuminate\Support\Facades\Config as FacadesConfig; use PKP\config\Config; use PKP\core\Core; +use PKP\core\PKPContainer; use PKP\core\PKPString; use PKP\db\DAORegistry; use PKP\facades\Locale; @@ -77,12 +78,7 @@ public function preInstall() } // Map valid config options to Illuminate database drivers - $driver = strtolower($this->getParam('databaseDriver')); - if (substr($driver, 0, 8) === 'postgres') { - $driver = 'pgsql'; - } else { - $driver = 'mysql'; - } + $driver = PKPContainer::getDatabaseDriverName(strtolower($this->getParam('databaseDriver'))); $config = FacadesConfig::get('database'); $config['default'] = $driver; diff --git a/classes/install/form/InstallForm.php b/classes/install/form/InstallForm.php index f918a4de949..bff98c20d53 100644 --- a/classes/install/form/InstallForm.php +++ b/classes/install/form/InstallForm.php @@ -44,7 +44,8 @@ class InstallForm extends MaintenanceForm // => array(, ) 'mysqli' => ['mysqli', 'MySQLi'], 'postgres9' => ['pgsql', 'PostgreSQL'], - 'mysql' => ['mysql', 'MySQL'] + 'mysql' => ['mysql', 'MySQL'], + 'mariadb' => ['mysqli', 'MariaDB'], ]; /** diff --git a/classes/migration/Migration.php b/classes/migration/Migration.php index b28246e38e2..d5ef08a1237 100644 --- a/classes/migration/Migration.php +++ b/classes/migration/Migration.php @@ -15,6 +15,7 @@ namespace PKP\migration; use PKP\install\Installer; +use Illuminate\Support\Facades\Schema; abstract class Migration extends \Illuminate\Database\Migrations\Migration { @@ -30,6 +31,16 @@ public function __construct(Installer $installer, array $attributes) $this->_installer = $installer; } + /** + * Check if the given key is set as a foreign in the given table + */ + public function hasForeignKey(string $tableName, string $keyName): bool + { + return collect(Schema::getForeignKeys($tableName)) + ->pluck('name') + ->contains($keyName); + } + /** * Run the migrations. */ diff --git a/classes/migration/install/CommonMigration.php b/classes/migration/install/CommonMigration.php index efd6f29307e..19642b104bf 100644 --- a/classes/migration/install/CommonMigration.php +++ b/classes/migration/install/CommonMigration.php @@ -15,6 +15,7 @@ namespace PKP\migration\install; use APP\core\Application; +use Exception; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; @@ -96,6 +97,7 @@ public function up(): void switch (DB::getDriverName()) { case 'mysql': + case 'mariadb': Schema::table('users', function (Blueprint $table) { $table->unique(['username'], 'users_username'); $table->unique(['email'], 'users_email'); @@ -105,6 +107,7 @@ public function up(): void DB::unprepared('CREATE UNIQUE INDEX users_username on users (LOWER(username));'); DB::unprepared('CREATE UNIQUE INDEX users_email on users (LOWER(email));'); break; + default: throw new Exception('Unexpected database driver!'); } Schema::create('user_settings', function (Blueprint $table) { diff --git a/classes/migration/install/ControlledVocabMigration.php b/classes/migration/install/ControlledVocabMigration.php index a5fe646f618..e94aec660b4 100644 --- a/classes/migration/install/ControlledVocabMigration.php +++ b/classes/migration/install/ControlledVocabMigration.php @@ -43,7 +43,7 @@ public function up(): void $table->foreign('controlled_vocab_id')->references('controlled_vocab_id')->on('controlled_vocabs')->onDelete('cascade'); $table->index(['controlled_vocab_id'], 'controlled_vocab_entries_controlled_vocab_id'); - $table->float('seq', 8, 2)->nullable(); + $table->float('seq')->nullable(); $table->index(['controlled_vocab_id', 'seq'], 'controlled_vocab_entries_cv_id'); }); diff --git a/classes/migration/install/LogMigration.php b/classes/migration/install/LogMigration.php index fcbb7461ef8..1a1f98cce19 100644 --- a/classes/migration/install/LogMigration.php +++ b/classes/migration/install/LogMigration.php @@ -56,12 +56,12 @@ public function up(): void }); // Add partial index (DBMS-specific) - switch (DB::getDriverName()) { - case 'mysql': DB::unprepared('CREATE INDEX event_log_settings_name_value ON event_log_settings (setting_name(50), setting_value(150))'); - break; - case 'pgsql': DB::unprepared("CREATE INDEX event_log_settings_name_value ON event_log_settings (setting_name, setting_value) WHERE setting_name IN ('fileId', 'submissionId')"); - break; - } + match (DB::getDriverName()) { + 'mysql', 'mariadb' => + DB::unprepared('CREATE INDEX event_log_settings_name_value ON event_log_settings (setting_name(50), setting_value(150))'), + 'pgsql' => + DB::unprepared("CREATE INDEX event_log_settings_name_value ON event_log_settings (setting_name, setting_value) WHERE setting_name IN ('fileId', 'submissionId')") + }; Schema::create('email_log', function (Blueprint $table) { $table->comment('A record of email messages that are sent in relation to an associated entity, such as a submission.'); diff --git a/classes/migration/install/ReviewFormsMigration.php b/classes/migration/install/ReviewFormsMigration.php index 90ab8fcbac3..47a8bdb80b3 100644 --- a/classes/migration/install/ReviewFormsMigration.php +++ b/classes/migration/install/ReviewFormsMigration.php @@ -31,7 +31,7 @@ public function up(): void $table->bigInteger('review_form_id')->autoIncrement(); $table->bigInteger('assoc_type'); $table->bigInteger('assoc_id'); - $table->float('seq', 8, 2)->nullable(); + $table->float('seq')->nullable(); $table->smallInteger('is_active')->nullable(); }); } @@ -64,7 +64,7 @@ public function up(): void $table->foreign('review_form_id', 'review_form_elements_review_form_id')->references('review_form_id')->on('review_forms')->onDelete('cascade'); $table->index(['review_form_id'], 'review_form_elements_review_form_id'); - $table->float('seq', 8, 2)->nullable(); + $table->float('seq')->nullable(); $table->bigInteger('element_type')->nullable(); $table->smallInteger('required')->nullable(); $table->smallInteger('included')->nullable(); diff --git a/classes/migration/install/SubmissionsMigration.php b/classes/migration/install/SubmissionsMigration.php index ce70e50ae9b..543597271f2 100644 --- a/classes/migration/install/SubmissionsMigration.php +++ b/classes/migration/install/SubmissionsMigration.php @@ -88,12 +88,12 @@ public function up(): void $table->unique(['publication_id', 'locale', 'setting_name'], 'publication_settings_unique'); }); // Add partial index (DBMS-specific) - switch (DB::getDriverName()) { - case 'mysql': DB::unprepared('CREATE INDEX publication_settings_name_value ON publication_settings (setting_name(50), setting_value(150))'); - break; - case 'pgsql': DB::unprepared("CREATE INDEX publication_settings_name_value ON publication_settings (setting_name, setting_value) WHERE setting_name IN ('indexingState', 'medra::registeredDoi', 'datacite::registeredDoi', 'pub-id::publisher-id')"); - break; - } + match (DB::getDriverName()) { + 'mysql', 'mariadb' => + DB::unprepared('CREATE INDEX publication_settings_name_value ON publication_settings (setting_name(50), setting_value(150))'), + 'pgsql' => + DB::unprepared("CREATE INDEX publication_settings_name_value ON publication_settings (setting_name, setting_value) WHERE setting_name IN ('indexingState', 'medra::registeredDoi', 'datacite::registeredDoi', 'pub-id::publisher-id')") + }; // Authors for submissions. Schema::create('authors', function (Blueprint $table) { @@ -105,7 +105,7 @@ public function up(): void // The foreign key relationship on this table is defined with the publications table. $table->bigInteger('publication_id'); - $table->float('seq', 8, 2)->default(0); + $table->float('seq')->default(0); $table->bigInteger('user_group_id')->nullable(); $table->foreign('user_group_id')->references('user_group_id')->on('user_groups')->onDelete('cascade'); @@ -205,7 +205,7 @@ public function up(): void $table->bigInteger('assoc_type'); $table->bigInteger('assoc_id'); $table->smallInteger('stage_id'); - $table->float('seq', 8, 2)->default(0); + $table->float('seq')->default(0); $table->datetime('date_posted')->nullable(); $table->datetime('date_modified')->nullable(); $table->smallInteger('closed')->default(0); diff --git a/classes/migration/upgrade/PKPv3_3_0UpgradeMigration.php b/classes/migration/upgrade/PKPv3_3_0UpgradeMigration.php index 5544a767a0a..4b108474946 100755 --- a/classes/migration/upgrade/PKPv3_3_0UpgradeMigration.php +++ b/classes/migration/upgrade/PKPv3_3_0UpgradeMigration.php @@ -100,13 +100,13 @@ public function up(): void // pkp/pkp-lib#6301: Indexes may be missing that affect search performance. // (These are added for 3.2.1-2 so may or may not be present for this upgrade code.) - $schemaManager = DB::getDoctrineSchemaManager(); - if (!in_array('submissions_publication_id', array_keys($schemaManager->listTableIndexes('submissions')))) { + if (!Schema::hasIndex('submissions', 'submissions_publication_id')) { Schema::table('submissions', function (Blueprint $table) { $table->index(['submission_id'], 'submissions_publication_id'); }); } - if (!in_array('submission_search_object_submission', array_keys($schemaManager->listTableIndexes('submission_search_objects')))) { + + if (!Schema::hasIndex('submission_search_objects', 'submission_search_object_submission')) { Schema::table('submission_search_objects', function (Blueprint $table) { $table->index(['submission_id'], 'submission_search_object_submission'); }); @@ -608,8 +608,7 @@ function (Builder $q) use ($row, $lastInsertedFileId) { $table->primary('submission_file_id'); }); // pkp/pkp-lib#5804 - $schemaManager = DB::getDoctrineSchemaManager(); - if (!in_array('submission_files_stage_assoc', array_keys($schemaManager->listTableIndexes('submission_files')))) { + if (!Schema::hasIndex('submission_files', 'submission_files_stage_assoc')) { Schema::table('submission_files', function (Blueprint $table) { $table->index(['file_stage', 'assoc_type', 'assoc_id'], 'submission_files_stage_assoc'); }); @@ -802,7 +801,7 @@ private function _settingsAsJSON() } // Convert settings where only setting_type column is available - $tables = DB::getDoctrineSchemaManager()->listTableNames(); + $tables = collect(Schema::getTables())->pluck('name')->toArray(); foreach ($tables as $tableName) { if (substr($tableName, -9) !== '_settings' || in_array($tableName, $processedTables)) { continue; @@ -876,18 +875,10 @@ private function _toJSON($row, $tableName, $searchBy, $valueToConvert) $newValue = json_encode($oldValue, JSON_UNESCAPED_UNICODE); // don't convert utf-8 characters to unicode escaped code // Ensure ID fields are included on the filter to avoid updating similar rows - $tableDetails = DB::connection()->getDoctrineSchemaManager()->listTableDetails($tableName); - $primaryKeys = []; - try { - $primaryKeys = $tableDetails->getPrimaryKeyColumns(); - } catch (Exception $e) { - foreach ($tableDetails->getIndexes() as $index) { - if ($index->isPrimary() || $index->isUnique()) { - $primaryKeys = $index->getColumns(); - break; - } - } - } + $primaryKeys = collect(Schema::getIndexes($tableName)) + ->filter(fn($index) => $index['primary'] || $index['unique']) + ->flatMap(fn($index) => $index['columns']) + ->toArray(); if (!count($primaryKeys)) { foreach (array_keys(get_object_vars($row)) as $column) { diff --git a/classes/migration/upgrade/v3_4_0/I3573_AddPrimaryKeys.php b/classes/migration/upgrade/v3_4_0/I3573_AddPrimaryKeys.php index a7c65d3be0a..209054442a1 100644 --- a/classes/migration/upgrade/v3_4_0/I3573_AddPrimaryKeys.php +++ b/classes/migration/upgrade/v3_4_0/I3573_AddPrimaryKeys.php @@ -33,7 +33,7 @@ public function up(): void continue; } - if (DB::getDoctrineSchemaManager()->introspectTable($tableName)->hasIndex($oldIndexName)) { + if (Schema::hasIndex($tableName, $oldIndexName)) { // Depending on whether the schema was created with ADODB or Laravel schema management, user_settings_pkey // will either be a constraint or an index. See https://github.com/pkp/pkp-lib/issues/7670. try { diff --git a/classes/migration/upgrade/v3_4_0/I6093_AddForeignKeys.php b/classes/migration/upgrade/v3_4_0/I6093_AddForeignKeys.php index 23923ec3691..292cfecbcbe 100755 --- a/classes/migration/upgrade/v3_4_0/I6093_AddForeignKeys.php +++ b/classes/migration/upgrade/v3_4_0/I6093_AddForeignKeys.php @@ -206,8 +206,7 @@ public function up(): void }); } // The submissions_publication_id index was created for <3.3.0 but may be incorrect. - $schemaManager = DB::getDoctrineSchemaManager(); - if (in_array('submissions_publication_id', array_keys($schemaManager->listTableIndexes('submissions')))) { + if (Schema::hasIndex('submissions', 'submissions_publication_id')) { Schema::table('submissions', function (Blueprint $table) { $table->dropIndex('submissions_publication_id'); }); diff --git a/classes/migration/upgrade/v3_4_0/I8073_RemoveNotesWithoutQueriesAndRelatedObjects.php b/classes/migration/upgrade/v3_4_0/I8073_RemoveNotesWithoutQueriesAndRelatedObjects.php index a3680145a50..70cce49281a 100644 --- a/classes/migration/upgrade/v3_4_0/I8073_RemoveNotesWithoutQueriesAndRelatedObjects.php +++ b/classes/migration/upgrade/v3_4_0/I8073_RemoveNotesWithoutQueriesAndRelatedObjects.php @@ -59,7 +59,7 @@ public function up(): void }); // Does have the foreign key reference but not the CASCADE - if (DB::getDoctrineSchemaManager()->introspectTable('submission_files')->hasForeignKey('submission_files_file_id_foreign')) { + if ($this->hasForeignKey('submission_files', 'submission_files_file_id_foreign')) { Schema::table('submission_files', fn (Blueprint $table) => $table->dropForeign('submission_files_file_id_foreign')); } Schema::table('submission_files', function (Blueprint $table) { @@ -68,7 +68,7 @@ public function up(): void // Does have the foreign key reference but not the CASCADE foreach (['submission_file_revisions_submission_file_id_foreign', 'submission_file_revisions_file_id_foreign'] as $foreignKeyName) { - if (DB::getDoctrineSchemaManager()->introspectTable('submission_file_revisions')->hasForeignKey($foreignKeyName)) { + if ($this->hasForeignKey('submission_file_revisions', $foreignKeyName)) { Schema::table('submission_file_revisions', fn (Blueprint $table) => $table->dropForeign($foreignKeyName)); } } @@ -84,7 +84,7 @@ public function up(): void }); // Does have the foreign key reference but not the CASCADE - if (DB::getDoctrineSchemaManager()->introspectTable('review_files')->hasForeignKey('review_files_submission_file_id_foreign')) { + if ($this->hasForeignKey('review_files', 'review_files_submission_file_id_foreign')) { Schema::table('review_files', fn (Blueprint $table) => $table->dropForeign('review_files_submission_file_id_foreign')); } Schema::table('review_files', function (Blueprint $table) { @@ -93,7 +93,7 @@ public function up(): void }); // Does have the foreign key reference but not the CASCADE - if (DB::getDoctrineSchemaManager()->introspectTable('review_round_files')->hasForeignKey('review_round_files_submission_file_id_foreign')) { + if ($this->hasForeignKey('review_round_files', 'review_round_files_submission_file_id_foreign')) { Schema::table('review_round_files', fn (Blueprint $table) => $table->dropForeign('review_round_files_submission_file_id_foreign')); } Schema::table('review_round_files', function (Blueprint $table) { diff --git a/classes/migration/upgrade/v3_4_0/I8866_DispatchRegionCodesFixingJobs.php b/classes/migration/upgrade/v3_4_0/I8866_DispatchRegionCodesFixingJobs.php index 8f5fafaec69..5367454d1c2 100644 --- a/classes/migration/upgrade/v3_4_0/I8866_DispatchRegionCodesFixingJobs.php +++ b/classes/migration/upgrade/v3_4_0/I8866_DispatchRegionCodesFixingJobs.php @@ -44,16 +44,12 @@ public function up(): void // temporary create index on the column country and region, in order to be able to update the region codes in a reasonable time Schema::table('metrics_submission_geo_daily', function (Blueprint $table) { - $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $indexesFound = $sm->listTableIndexes('metrics_submission_geo_daily'); - if (!array_key_exists('metrics_submission_geo_daily_tmp_index', $indexesFound)) { + if (!Schema::hasIndex('metrics_submission_geo_daily', 'metrics_submission_geo_daily_tmp_index')) { $table->index(['country', 'region'], 'metrics_submission_geo_daily_tmp_index'); } }); Schema::table('metrics_submission_geo_monthly', function (Blueprint $table) { - $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $indexesFound = $sm->listTableIndexes('metrics_submission_geo_monthly'); - if (!array_key_exists('metrics_submission_geo_monthly_tmp_index', $indexesFound)) { + if (!Schema::hasIndex('metrics_submission_geo_monthly', 'metrics_submission_geo_monthly_tmp_index')) { $table->index(['country', 'region'], 'metrics_submission_geo_monthly_tmp_index'); } }); @@ -69,16 +65,12 @@ public function up(): void ->then(function (Batch $batch) { // drop the temporary index Schema::table('metrics_submission_geo_daily', function (Blueprint $table) { - $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $indexesFound = $sm->listTableIndexes('metrics_submission_geo_daily'); - if (array_key_exists('metrics_submission_geo_daily_tmp_index', $indexesFound)) { + if (Schema::hasIndex('metrics_submission_geo_daily', 'metrics_submission_geo_daily_tmp_index')) { $table->dropIndex(['tmp']); } }); Schema::table('metrics_submission_geo_monthly', function (Blueprint $table) { - $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $indexesFound = $sm->listTableIndexes('metrics_submission_geo_monthly'); - if (array_key_exists('metrics_submission_geo_monthly_tmp_index', $indexesFound)) { + if (Schema::hasIndex('metrics_submission_geo_monthly', 'metrics_submission_geo_monthly_tmp_index')) { $table->dropIndex(['tmp']); } }); diff --git a/classes/migration/upgrade/v3_4_0/I9627_AddUsageStatsTemporaryTablesIndexes.php b/classes/migration/upgrade/v3_4_0/I9627_AddUsageStatsTemporaryTablesIndexes.php index 1bf5e910632..2a3eb1cca10 100644 --- a/classes/migration/upgrade/v3_4_0/I9627_AddUsageStatsTemporaryTablesIndexes.php +++ b/classes/migration/upgrade/v3_4_0/I9627_AddUsageStatsTemporaryTablesIndexes.php @@ -39,22 +39,20 @@ public function up(): void }); } - $sm = Schema::getConnection()->getDoctrineSchemaManager(); - Schema::table('usage_stats_total_temporary_records', function (Blueprint $table) use ($sm) { - $indexesFound = $sm->listTableIndexes('usage_stats_total_temporary_records'); - if (!array_key_exists('ust_load_id_context_id_ip', $indexesFound)) { + Schema::table('usage_stats_total_temporary_records', function (Blueprint $table) { + if (!Schema::hasIndex('usage_stats_total_temporary_records', 'ust_load_id_context_id_ip')) { $table->index(['load_id', 'context_id', 'ip'], 'ust_load_id_context_id_ip'); } }); - Schema::table('usage_stats_unique_item_investigations_temporary_records', function (Blueprint $table) use ($sm) { - $indexesFound = $sm->listTableIndexes('usage_stats_unique_item_investigations_temporary_records'); - if (!array_key_exists('usii_load_id_context_id_ip', $indexesFound)) { + + Schema::table('usage_stats_unique_item_investigations_temporary_records', function (Blueprint $table) { + if (!Schema::hasIndex('usage_stats_unique_item_investigations_temporary_records', 'usii_load_id_context_id_ip')) { $table->index(['load_id', 'context_id', 'ip'], 'usii_load_id_context_id_ip'); } }); - Schema::table('usage_stats_unique_item_requests_temporary_records', function (Blueprint $table) use ($sm) { - $indexesFound = $sm->listTableIndexes('usage_stats_unique_item_requests_temporary_records'); - if (!array_key_exists('usir_load_id_context_id_ip', $indexesFound)) { + + Schema::table('usage_stats_unique_item_requests_temporary_records', function (Blueprint $table) { + if (!Schema::hasIndex('usage_stats_unique_item_requests_temporary_records', 'usir_load_id_context_id_ip')) { $table->index(['load_id', 'context_id', 'ip'], 'usir_load_id_context_id_ip'); } }); diff --git a/classes/migration/upgrade/v3_4_0/PreflightCheckMigration.php b/classes/migration/upgrade/v3_4_0/PreflightCheckMigration.php index 5f7cdb7056f..558318d7080 100755 --- a/classes/migration/upgrade/v3_4_0/PreflightCheckMigration.php +++ b/classes/migration/upgrade/v3_4_0/PreflightCheckMigration.php @@ -19,7 +19,6 @@ use APP\statistics\StatisticsHelper; use DateTime; use Exception; -use Illuminate\Database\MySqlConnection; use Illuminate\Database\PostgresConnection; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\JoinClause; @@ -433,9 +432,10 @@ protected function checkSubmissionChecklist(): void protected function checkForeignKeySupport(): void { // Check if database engine supports foreign key constraints - if (!(DB::connection() instanceof MySqlConnection)) { + if (DB::connection() instanceof PostgresConnection) { return; } + $defaultEngine = DB::scalar('SELECT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT = "DEFAULT"'); if (strtolower($defaultEngine) !== 'innodb') { throw new Exception( @@ -1310,20 +1310,20 @@ protected function clearDuplicatedUserSettings(): void */ protected function dropForeignKeys(): void { - if (DB::getDoctrineSchemaManager()->introspectTable('submission_files')->hasForeignKey('submission_files_file_id_foreign')) { + if ($this->hasForeignKey('submission_files', 'submission_files_file_id_foreign')) { Schema::table('submission_files', fn (Blueprint $table) => $table->dropForeign('submission_files_file_id_foreign')); } Schema::table('submission_file_revisions', function (Blueprint $table) { foreach (['submission_file_revisions_submission_file_id_foreign', 'submission_file_revisions_file_id_foreign'] as $foreignKeyName) { - if (DB::getDoctrineSchemaManager()->introspectTable('submission_file_revisions')->hasForeignKey($foreignKeyName)) { + if ($this->hasForeignKey('submission_file_revisions', $foreignKeyName)) { $table->dropForeign($foreignKeyName); } } }); - if (DB::getDoctrineSchemaManager()->introspectTable('review_files')->hasForeignKey('review_files_submission_file_id_foreign')) { + if ($this->hasForeignKey('review_files', 'review_files_submission_file_id_foreign')) { Schema::table('review_files', fn (Blueprint $table) => $table->dropForeign('review_files_submission_file_id_foreign')); } - if (DB::getDoctrineSchemaManager()->introspectTable('review_round_files')->hasForeignKey('review_round_files_submission_file_id_foreign')) { + if ($this->hasForeignKey('review_round_files', 'review_round_files_submission_file_id_foreign')) { Schema::table('review_round_files', fn (Blueprint $table) => $table->dropForeign('review_round_files_submission_file_id_foreign')); } } diff --git a/classes/migration/upgrade/v3_5_0/I8333_AddMissingForeignKeys.php b/classes/migration/upgrade/v3_5_0/I8333_AddMissingForeignKeys.php index 498fc9bfaa6..f45f7857a63 100644 --- a/classes/migration/upgrade/v3_5_0/I8333_AddMissingForeignKeys.php +++ b/classes/migration/upgrade/v3_5_0/I8333_AddMissingForeignKeys.php @@ -214,7 +214,7 @@ protected function setupForeignKeys(): void { Schema::table('filters', function (Blueprint $table) { $table->foreign('parent_filter_id', 'filters_parent_filter_id')->references('filter_id')->on('filters')->onDelete('cascade'); - if (!DB::getDoctrineSchemaManager()->introspectTable('filters')->hasIndex('filters_parent_filter_id')) { + if (!Schema::hasIndex('filters', 'filters_parent_filter_id')) { $table->index(['parent_filter_id'], 'filters_parent_filter_id'); } }); @@ -225,7 +225,7 @@ function (Blueprint $table) { $table->foreign('parent_id', 'navigation_menu_item_assignments_parent_id') ->references('navigation_menu_item_id')->on('navigation_menu_items') ->onDelete('cascade'); - if (!DB::getDoctrineSchemaManager()->introspectTable('navigation_menu_item_assignments')->hasIndex('navigation_menu_item_assignments_parent_id')) { + if (!Schema::hasIndex('navigation_menu_item_assignments', 'navigation_menu_item_assignments_parent_id')) { $table->index(['parent_id'], 'navigation_menu_item_assignments_parent_id'); } } @@ -239,7 +239,7 @@ function (Blueprint $table) use ($tableName) { $table->foreign('context_id', "{$tableName}_context_id") ->references($this->getContextKeyField()) ->on($this->getContextTable())->onDelete('cascade'); - if (!DB::getDoctrineSchemaManager()->introspectTable($tableName)->hasIndex("{$tableName}_context_id")) { + if (!Schema::hasIndex($tableName, "{$tableName}_context_id")) { $table->index(['context_id'], "{$tableName}_context_id"); } } @@ -252,7 +252,7 @@ function (Blueprint $table) { $table->foreign('sender_id', 'email_log_sender_id') ->references('user_id')->on('users') ->onDelete('cascade'); - if (!DB::getDoctrineSchemaManager()->introspectTable('email_log')->hasIndex('email_log_sender_id')) { + if (!Schema::hasIndex('email_log', 'email_log_sender_id')) { $table->index(['sender_id'], 'email_log_sender_id'); } } diff --git a/classes/migration/upgrade/v3_5_0/I9462_UserUserGroupsStartEndDate.php b/classes/migration/upgrade/v3_5_0/I9462_UserUserGroupsStartEndDate.php index 53dd7389d3b..f05acdf395d 100644 --- a/classes/migration/upgrade/v3_5_0/I9462_UserUserGroupsStartEndDate.php +++ b/classes/migration/upgrade/v3_5_0/I9462_UserUserGroupsStartEndDate.php @@ -41,12 +41,12 @@ public function down(): void if (Schema::hasColumn($table->getTable(), 'date_start')) { $table->dropColumn('date_start'); }; + if (Schema::hasColumn($table->getTable(), 'date_end')) { $table->dropColumn('date_end'); }; - $sm = Schema::getConnection()->getDoctrineSchemaManager(); - $indexesFound = $sm->listTableIndexes('user_user_groups'); - if (!array_key_exists('user_user_groups_unique', $indexesFound)) { + + if (!Schema::hasIndex('user_user_groups', 'user_user_groups_unique')) { $table->unique(['user_group_id', 'user_id'], 'user_user_groups_unique'); } }); diff --git a/classes/notification/PKPNotificationManager.php b/classes/notification/PKPNotificationManager.php index 4cb62795d1a..d0835dc5c59 100644 --- a/classes/notification/PKPNotificationManager.php +++ b/classes/notification/PKPNotificationManager.php @@ -70,11 +70,11 @@ public function getNotificationUrl(PKPRequest $request, Notification $notificati $reviewAssignment = Repo::reviewAssignment()->get($notification->assocId); $workflowStageDao = DAORegistry::getDAO('WorkflowStageDAO'); /** @var WorkflowStageDAO $workflowStageDao */ $operation = $reviewAssignment->getStageId() == WORKFLOW_STAGE_ID_INTERNAL_REVIEW ? $workflowStageDao::WORKFLOW_STAGE_PATH_INTERNAL_REVIEW : $workflowStageDao::WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW; - return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'workflow', $operation, $reviewAssignment->getSubmissionId()); + return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'workflow', $operation, [$reviewAssignment->getSubmissionId()]); case Notification::NOTIFICATION_TYPE_REVIEW_ASSIGNMENT: case Notification::NOTIFICATION_TYPE_REVIEW_ASSIGNMENT_UPDATED: $reviewAssignment = Repo::reviewAssignment()->get($notification->assocId); - return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'reviewer', 'submission', $reviewAssignment->getSubmissionId()); + return $dispatcher->url($request, PKPApplication::ROUTE_PAGE, $context->getPath(), 'reviewer', 'submission', [$reviewAssignment->getSubmissionId()]); case Notification::NOTIFICATION_TYPE_NEW_ANNOUNCEMENT: if ($notification->assocType != Application::ASSOC_TYPE_ANNOUNCEMENT) { throw new \Exception('Unexpected assoc type!'); @@ -365,7 +365,7 @@ final public function updateNotification(PKPRequest $request, array $notificatio foreach ($notificationTypes as $type) { $managerDelegate = $this->getMgrDelegate($type, $assocType, $assocId); if (!$managerDelegate) { - throw new Exception('Unable to get manager delegate!'); + throw new \Exception('Unable to get manager delegate!'); } $managerDelegate->updateNotification($request, $userIds, $assocType, $assocId); } diff --git a/classes/services/queryBuilders/PKPStatsEditorialQueryBuilder.php b/classes/services/queryBuilders/PKPStatsEditorialQueryBuilder.php index 92676a3e3bd..ee1ddb84ed0 100644 --- a/classes/services/queryBuilders/PKPStatsEditorialQueryBuilder.php +++ b/classes/services/queryBuilders/PKPStatsEditorialQueryBuilder.php @@ -493,11 +493,9 @@ public function countSkipped(): int */ private function _dateDiff(string $leftDate, string $rightDate) { - switch (Config::getVar('database', 'driver')) { - case 'mysql': - case 'mysqli': - return 'DATEDIFF(' . $leftDate . ',' . $rightDate . ')'; - } - return "DATE_PART('day', " . $leftDate . ' - ' . $rightDate . ')'; + return match (Config::getVar('database', 'driver')) { + 'mysql', 'mysqli', 'mariadb' => 'DATEDIFF(' . $leftDate . ',' . $rightDate . ')', + default => "DATE_PART('day', " . $leftDate . ' - ' . $rightDate . ')' + }; } } diff --git a/classes/task/ProcessQueueJobs.php b/classes/task/ProcessQueueJobs.php index ac1a21eb8a2..7eb78007782 100644 --- a/classes/task/ProcessQueueJobs.php +++ b/classes/task/ProcessQueueJobs.php @@ -53,7 +53,7 @@ public function executeActions(): bool // When processing queue jobs vai schedule task in CLI mode // will process a limited number of jobs at a single time - if (PKPContainer::getInstance()->runningInConsole('runScheduledTasks.php')) { + if (PKPContainer::getInstance()->runningInConsole()) { $maxJobCountToProcess = abs(Config::getVar('queues', 'job_runner_max_jobs', 30)); while ($jobBuilder->count() && $maxJobCountToProcess) { diff --git a/classes/user/Collector.php b/classes/user/Collector.php index ae4a12b1d25..804deb05179 100644 --- a/classes/user/Collector.php +++ b/classes/user/Collector.php @@ -14,8 +14,11 @@ namespace PKP\user; use APP\core\Application; +use Exception; use Carbon\Carbon; use Illuminate\Database\MySqlConnection; +use Illuminate\Database\MariaDbConnection; +use Illuminate\Database\PostgresConnection; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; @@ -654,9 +657,14 @@ protected function buildReviewerStatistics(Builder $query): self } $disableSharedReviewerStatistics = (bool) Application::get()->getRequest()->getSite()->getData('disableSharedReviewerStatistics'); - $dateDiff = fn (string $dateA, string $dateB): string => DB::connection() instanceof MySqlConnection - ? "DATEDIFF({$dateA}, {$dateB})" - : "DATE_PART('day', {$dateA} - {$dateB})"; + + $dateDiff = fn (string $dateA, string $dateB): string => match (true) { + DB::connection() instanceof MySqlConnection, + DB::connection() instanceof MariaDbConnection + => "DATEDIFF({$dateA}, {$dateB})", + DB::connection() instanceof PostgresConnection + => "DATE_PART('day', {$dateA} - {$dateB})" + }; $query->leftJoinSub( fn (Builder $query) => $query->from('review_assignments', 'ra') @@ -748,6 +756,7 @@ protected function buildOrderBy(Builder $query): self ->leftJoin('user_user_groups AS uugob', 'uugob.user_id', '=', 'u.user_id'); switch (DB::getDriverName()) { case 'mysql': + case 'mariadb': $userGroupOrderBy = implode(', ', $this->orderByUserGroupIds); $query->orderByRaw("FIELD(uugob.user_group_id, {$userGroupOrderBy}) ASC"); break; @@ -756,6 +765,7 @@ protected function buildOrderBy(Builder $query): self $userGroupOrderBy = implode(', ', $userGroupOrderBy); $query->orderByRaw("({$userGroupOrderBy}) ASC"); break; + default: throw new Exception('Unexpected database driver!'); } } diff --git a/classes/user/User.php b/classes/user/User.php index 07ea608f475..e0c95930e0b 100644 --- a/classes/user/User.php +++ b/classes/user/User.php @@ -20,7 +20,6 @@ namespace PKP\user; -use Exception; use Illuminate\Contracts\Auth\Authenticatable; use PKP\db\DAORegistry; use PKP\identity\Identity; @@ -458,35 +457,56 @@ public function setRoles($roles, ?int $contextId) $this->_roles[$contextId] = $roles; } + /** + * @copydoc \Illuminate\Contracts\Auth\Authenticatable::getAuthIdentifierName + */ public function getAuthIdentifierName() { return 'user_id'; } + /** + * @copydoc \Illuminate\Contracts\Auth\Authenticatable::getAuthIdentifier + */ public function getAuthIdentifier() { return $this->getId(); } + /** + * @copydoc \Illuminate\Contracts\Auth\Authenticatable::getAuthPassword + */ public function getAuthPassword() { - return $this->getData('password'); + return $this->getPassword(); + } + + /** + * @copydoc \Illuminate\Contracts\Auth\Authenticatable::getAuthPasswordName + */ + public function getAuthPasswordName() + { + return 'password'; } + /** + * @copydoc \Illuminate\Contracts\Auth\Authenticatable::getRememberToken + */ public function getRememberToken() { return $this->getData('rememberToken'); } + /** + * @copydoc \Illuminate\Contracts\Auth\Authenticatable::setRememberToken + */ public function setRememberToken($value) { return $this->setData('rememberToken', $value); } /** - * Get the column name for the "remember me" token. - * - * @return string + * @copydoc \Illuminate\Contracts\Auth\Authenticatable::getRememberTokenName */ public function getRememberTokenName() { diff --git a/composer.json b/composer.json index ace6a6ce232..84c46d11e2c 100644 --- a/composer.json +++ b/composer.json @@ -1,40 +1,40 @@ { "require": { + "php": "^8.2", "components/jquery": "^3.5", "components/jqueryui": "1.*", - "composer/semver": "^3.3", + "composer/semver": "^3.4", "cweagans/composer-patches": "^1.7", "dflydev/base32-crockford": "^1.0", - "doctrine/dbal": "^3.5", "elcobvg/laravel-opcache": "^0.5.0", "ezyang/htmlpurifier": "^4.17", "firebase/php-jwt": "6.*", - "geoip2/geoip2": "~2.0", + "geoip2/geoip2": "~3.0", "gettext/gettext": "5.*", - "gettext/translator": "1.*", + "gettext/translator": "1.2.*", "guzzlehttp/guzzle": "^7.0", "kevinlebrun/colors.php": "^1.0", "kirkbushell/eloquence": "^11.0", - "laravel/framework": "^10.0", + "laravel/framework": "^11.0", "league/flysystem": "^3.0", "league/flysystem-ftp": "^3.0", "league/flysystem-sftp-v3": "^3.0", - "michelf/php-markdown": "1.*", + "michelf/php-markdown": "2.*", "moxiecode/plupload": "2.*", "phpmailer/phpmailer": "6.*", "ralouphie/getallheaders": "*", "smarty/smarty": "4.*", "sokil/php-isocodes": "^4.1", "sokil/php-isocodes-db-i18n": "^4.0", - "symfony/mailer": "^6.0", + "symfony/mailer": "^7.0", "tinymce/tinymce": "^5.7", "wikimedia/less.php": "3.*" }, "require-dev": { - "phpunit/phpunit": "~9", + "phpunit/phpunit": "~11", "psy/psysh": "@stable", "friendsofphp/php-cs-fixer": "^3.8", - "mockery/mockery": "^1.4", + "mockery/mockery": "^1.6", "captainhook/captainhook": "^5.10", "captainhook/plugin-composer": "^5.3" }, diff --git a/composer.lock b/composer.lock index 9f256eea6c5..8fef5392258 100644 --- a/composer.lock +++ b/composer.lock @@ -4,29 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "afd28797158bafb9bc7b00ae6f92cdf6", + "content-hash": "46a40dd4b957f927d4ae301469a462a6", "packages": [ { "name": "brick/math", - "version": "0.11.0", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -46,12 +46,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { @@ -59,7 +64,76 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-11-29T23:19:16+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" }, { "name": "components/jquery", @@ -201,28 +275,28 @@ }, { "name": "composer/ca-bundle", - "version": "1.3.7", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "76e46335014860eec1aa5a724799a00a2e47cc85" + "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85", - "reference": "76e46335014860eec1aa5a724799a00a2e47cc85", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a", + "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a", "shasum": "" }, "require": { "ext-openssl": "*", "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", + "phpstan/phpstan": "^1.10", + "psr/log": "^1.0 || ^2.0 || ^3.0", "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", "extra": { @@ -257,7 +331,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.7" + "source": "https://github.com/composer/ca-bundle/tree/1.5.1" }, "funding": [ { @@ -273,20 +347,20 @@ "type": "tidelift" } ], - "time": "2023-08-30T09:31:38+00:00" + "time": "2024-07-08T15:28:20+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { @@ -338,7 +412,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.2" }, "funding": [ { @@ -354,7 +428,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "cweagans/composer-patches", @@ -466,16 +540,16 @@ }, { "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", "shasum": "" }, "require": { @@ -535,366 +609,22 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" - }, - "time": "2022-10-27T11:44:00+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.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%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, - { - "name": "doctrine/dbal", - "version": "3.7.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "12.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.35", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.13", - "psalm/plugin-phpunit": "0.18.4", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.30.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.1" - }, - "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%2Fdbal", - "type": "tidelift" - } - ], - "time": "2023-10-06T05:06:20+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "time": "2023-09-27T20:04:15+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.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%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:59:15+00:00" + "time": "2024-07-08T12:26:09+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.8", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -956,7 +686,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -972,31 +702,31 @@ "type": "tidelift" } ], - "time": "2023-06-16T13:40:37+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -1033,7 +763,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -1049,7 +779,7 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1303,26 +1033,26 @@ }, { "name": "firebase/php-jwt", - "version": "v6.9.0", + "version": "v6.10.1", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "f03270e63eaccf3019ef0f32849c497385774e11" + "reference": "500501c2ce893c824c801da135d02661199f60c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/f03270e63eaccf3019ef0f32849c497385774e11", - "reference": "f03270e63eaccf3019ef0f32849c497385774e11", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", + "reference": "500501c2ce893c824c801da135d02661199f60c5", "shasum": "" }, "require": { - "php": "^7.4||^8.0" + "php": "^8.0" }, "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", + "guzzlehttp/guzzle": "^7.4", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "psr/cache": "^1.0||^2.0", + "psr/cache": "^2.0||^3.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0" }, @@ -1360,9 +1090,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.9.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" }, - "time": "2023-10-05T00:24:42+00:00" + "time": "2024-05-18T18:05:11+00:00" }, { "name": "fruitcake/php-cors", @@ -1437,28 +1167,28 @@ }, { "name": "geoip2/geoip2", - "version": "v2.13.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/maxmind/GeoIP2-php.git", - "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23" + "reference": "1a802ce9356cdd1c6b681c030fd9563750e11e6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/6a41d8fbd6b90052bc34dff3b4252d0f88067b23", - "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23", + "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/1a802ce9356cdd1c6b681c030fd9563750e11e6a", + "reference": "1a802ce9356cdd1c6b681c030fd9563750e11e6a", "shasum": "" }, "require": { "ext-json": "*", - "maxmind-db/reader": "~1.8", + "maxmind-db/reader": "^1.11.1", "maxmind/web-service-common": "~0.8", - "php": ">=7.2" + "php": ">=8.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "3.*", "phpstan/phpstan": "*", - "phpunit/phpunit": "^8.0 || ^9.0", + "phpunit/phpunit": "^10.0", "squizlabs/php_codesniffer": "3.*" }, "type": "library", @@ -1489,22 +1219,22 @@ ], "support": { "issues": "https://github.com/maxmind/GeoIP2-php/issues", - "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.13.0" + "source": "https://github.com/maxmind/GeoIP2-php/tree/v3.0.0" }, - "time": "2022-08-05T20:32:58+00:00" + "time": "2023-12-04T17:16:34+00:00" }, { "name": "gettext/gettext", - "version": "v5.7.0", + "version": "v5.7.1", "source": { "type": "git", "url": "https://github.com/php-gettext/Gettext.git", - "reference": "8657e580747bb3baacccdcebe69cac094661e404" + "reference": "a9f89e0cc9d9a67b422632b594b5f1afb16eccfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/8657e580747bb3baacccdcebe69cac094661e404", - "reference": "8657e580747bb3baacccdcebe69cac094661e404", + "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/a9f89e0cc9d9a67b422632b594b5f1afb16eccfc", + "reference": "a9f89e0cc9d9a67b422632b594b5f1afb16eccfc", "shasum": "" }, "require": { @@ -1549,7 +1279,7 @@ "support": { "email": "oom@oscarotero.com", "issues": "https://github.com/php-gettext/Gettext/issues", - "source": "https://github.com/php-gettext/Gettext/tree/v5.7.0" + "source": "https://github.com/php-gettext/Gettext/tree/v5.7.1" }, "funding": [ { @@ -1565,7 +1295,7 @@ "type": "patreon" } ], - "time": "2022-07-27T19:54:55+00:00" + "time": "2024-07-24T22:05:18+00:00" }, { "name": "gettext/languages", @@ -1717,24 +1447,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.1", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -1763,7 +1493,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -1775,26 +1505,26 @@ "type": "tidelift" } ], - "time": "2023-02-25T20:23:15+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.0", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1803,11 +1533,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1885,7 +1615,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.0" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -1901,28 +1631,28 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:20:53+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -1968,7 +1698,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.1" + "source": "https://github.com/guzzle/promises/tree/2.0.3" }, "funding": [ { @@ -1984,20 +1714,20 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:11:55+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -2011,9 +1741,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2084,7 +1814,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.1" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -2100,32 +1830,38 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:13:57+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.2", + "version": "v1.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", - "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.17" + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", "uri-template/tests": "1.0.0" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, "autoload": { "psr-4": { "GuzzleHttp\\UriTemplate\\": "src" @@ -2164,7 +1900,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" }, "funding": [ { @@ -2180,7 +1916,7 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:19:19+00:00" + "time": "2023-12-03T19:50:20+00:00" }, { "name": "hanneskod/classtools", @@ -2427,20 +2163,20 @@ }, { "name": "laravel/framework", - "version": "v10.31.0", + "version": "v11.18.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "507ce9b28bce4b5e4140c28943092ca38e9a52e4" + "reference": "35901bbdfe3576f21197d4df4f4b72edbd0cf7a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/507ce9b28bce4b5e4140c28943092ca38e9a52e4", - "reference": "507ce9b28bce4b5e4140c28943092ca38e9a52e4", + "url": "https://api.github.com/repos/laravel/framework/zipball/35901bbdfe3576f21197d4df4f4b72edbd0cf7a9", + "reference": "35901bbdfe3576f21197d4df4f4b72edbd0cf7a9", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", @@ -2452,40 +2188,44 @@ "ext-openssl": "*", "ext-session": "*", "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.9", + "laravel/prompts": "^0.1.18", "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.67", - "nunomaduro/termwind": "^1.13", - "php": "^8.1", + "nesbot/carbon": "^2.72.2|^3.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^6.2", - "symfony/error-handler": "^6.2", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.3", - "symfony/http-kernel": "^6.2", - "symfony/mailer": "^6.2", - "symfony/mime": "^6.2", - "symfony/process": "^6.2", - "symfony/routing": "^6.2", - "symfony/uid": "^6.2", - "symfony/var-dumper": "^6.2", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, "conflict": { + "mockery/mockery": "1.6.8", "tightenco/collect": "<5.5.33" }, "provide": { "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { @@ -2521,36 +2261,35 @@ "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^3.5.1", "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", + "fakerphp/faker": "^1.23", "league/flysystem-aws-s3-v3": "^3.0", "league/flysystem-ftp": "^3.0", "league/flysystem-path-prefixing": "^3.3", "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", + "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.12", - "pda/pheanstalk": "^4.0", - "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^10.0.7", + "orchestra/testbench-core": "^9.1.5", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.11.5", + "phpunit/phpunit": "^10.5|^11.0", "predis/predis": "^2.0.2", - "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4", - "symfony/psr-http-message-bridge": "^2.0" + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -2559,40 +2298,41 @@ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", "league/flysystem-read-only": "Required to use read-only disks (^3.3)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", + "mockery/mockery": "Required to use mocking (^1.6).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", "predis/predis": "Required to use the predis connector (^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "11.x-dev" } }, "autoload": { "files": [ "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], @@ -2625,20 +2365,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-11-07T13:48:30+00:00" + "time": "2024-07-26T06:20:43+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.13", + "version": "v0.1.24", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "e1379d8ead15edd6cc4369c22274345982edc95a" + "reference": "409b0b4305273472f3754826e68f4edbd0150149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/e1379d8ead15edd6cc4369c22274345982edc95a", - "reference": "e1379d8ead15edd6cc4369c22274345982edc95a", + "url": "https://api.github.com/repos/laravel/prompts/zipball/409b0b4305273472f3754826e68f4edbd0150149", + "reference": "409b0b4305273472f3754826e68f4edbd0150149", "shasum": "" }, "require": { @@ -2654,7 +2394,7 @@ "require-dev": { "mockery/mockery": "^1.5", "pestphp/pest": "^2.3", - "phpstan/phpstan": "^1.10", + "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, "suggest": { @@ -2678,24 +2418,25 @@ "license": [ "MIT" ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.13" + "source": "https://github.com/laravel/prompts/tree/v0.1.24" }, - "time": "2023-10-27T13:53:59+00:00" + "time": "2024-06-17T13:58:22+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.2", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c" + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/076fe2cf128bd54b4341cdc6d49b95b34e101e4c", - "reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { @@ -2742,20 +2483,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-10-17T13:38:16+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { "name": "league/commonmark", - "version": "2.4.1", + "version": "2.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + "reference": "ac815920de0eff6de947eac0a6a94e5ed0fb147c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/ac815920de0eff6de947eac0a6a94e5ed0fb147c", + "reference": "ac815920de0eff6de947eac0a6a94e5ed0fb147c", "shasum": "" }, "require": { @@ -2768,8 +2509,8 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", - "commonmark/commonmark.js": "0.30.0", + "commonmark/cmark": "0.31.0", + "commonmark/commonmark.js": "0.31.0", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", "erusev/parsedown": "^1.0", @@ -2778,10 +2519,10 @@ "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -2791,7 +2532,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.6-dev" } }, "autoload": { @@ -2848,7 +2589,7 @@ "type": "tidelift" } ], - "time": "2023-08-30T16:55:00+00:00" + "time": "2024-07-24T12:52:09+00:00" }, { "name": "league/config", @@ -2934,16 +2675,16 @@ }, { "name": "league/flysystem", - "version": "3.19.0", + "version": "3.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "1b2aa10f2326e0351399b8ce68e287d8e9209a83" + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1b2aa10f2326e0351399b8ce68e287d8e9209a83", - "reference": "1b2aa10f2326e0351399b8ce68e287d8e9209a83", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", "shasum": "" }, "require": { @@ -2963,18 +2704,21 @@ "require-dev": { "async-aws/s3": "^1.5 || ^2.0", "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.220.0", + "aws/aws-sdk-php": "^3.295.10", "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", + "ext-mongodb": "^1.3", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.14", + "mongodb/mongodb": "^1.2", + "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.3.1" + "sabre/dav": "^4.6.0" }, "type": "library", "autoload": { @@ -3008,32 +2752,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.19.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-11-07T09:04:28+00:00" + "time": "2024-05-22T10:09:12+00:00" }, { "name": "league/flysystem-ftp", - "version": "3.21.0", + "version": "3.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-ftp.git", - "reference": "61175b8e5b8bcf6f8a3c1d8d4b1a658269cd9f95" + "reference": "6c65e1de3767dca7f2712571a915cb952bae42e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-ftp/zipball/61175b8e5b8bcf6f8a3c1d8d4b1a658269cd9f95", - "reference": "61175b8e5b8bcf6f8a3c1d8d4b1a658269cd9f95", + "url": "https://api.github.com/repos/thephpleague/flysystem-ftp/zipball/6c65e1de3767dca7f2712571a915cb952bae42e0", + "reference": "6c65e1de3767dca7f2712571a915cb952bae42e0", "shasum": "" }, "require": { @@ -3068,32 +2802,22 @@ "ftpd" ], "support": { - "source": "https://github.com/thephpleague/flysystem-ftp/tree/3.21.0" + "source": "https://github.com/thephpleague/flysystem-ftp/tree/3.28.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-11-14T11:54:45+00:00" + "time": "2024-05-06T20:05:52+00:00" }, { "name": "league/flysystem-local", - "version": "3.19.0", + "version": "3.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "8d868217f9eeb4e9a7320db5ccad825e9a7a4076" + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/8d868217f9eeb4e9a7320db5ccad825e9a7a4076", - "reference": "8d868217f9eeb4e9a7320db5ccad825e9a7a4076", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", "shasum": "" }, "require": { @@ -3127,33 +2851,22 @@ "local" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.19.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-11-06T20:35:28+00:00" + "time": "2024-05-06T20:05:52+00:00" }, { "name": "league/flysystem-sftp-v3", - "version": "3.19.0", + "version": "3.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-sftp-v3.git", - "reference": "4d8ceab65755dd83d25f0bf79a00a09cb307db24" + "reference": "abedadd3c64d4f0e276d6ecc796ec8194d136b41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-sftp-v3/zipball/4d8ceab65755dd83d25f0bf79a00a09cb307db24", - "reference": "4d8ceab65755dd83d25f0bf79a00a09cb307db24", + "url": "https://api.github.com/repos/thephpleague/flysystem-sftp-v3/zipball/abedadd3c64d4f0e276d6ecc796ec8194d136b41", + "reference": "abedadd3c64d4f0e276d6ecc796ec8194d136b41", "shasum": "" }, "require": { @@ -3187,33 +2900,22 @@ "sftp" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-sftp-v3/issues", - "source": "https://github.com/thephpleague/flysystem-sftp-v3/tree/3.19.0" + "source": "https://github.com/thephpleague/flysystem-sftp-v3/tree/3.28.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-11-06T20:35:28+00:00" + "time": "2024-05-06T20:05:52+00:00" }, { "name": "league/mime-type-detection", - "version": "1.14.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", "shasum": "" }, "require": { @@ -3244,7 +2946,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" }, "funding": [ { @@ -3256,27 +2958,27 @@ "type": "tidelift" } ], - "time": "2023-10-17T14:13:20+00:00" + "time": "2024-01-28T23:22:08+00:00" }, { "name": "maxmind-db/reader", - "version": "v1.11.0", + "version": "v1.11.1", "source": { "type": "git", "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git", - "reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b" + "reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/b1f3c0699525336d09cc5161a2861268d9f2ae5b", - "reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b", + "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/1e66f73ffcf25e17c7a910a1317e9720a95497c7", + "reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7", "shasum": "" }, "require": { "php": ">=7.2" }, "conflict": { - "ext-maxminddb": "<1.10.1,>=2.0.0" + "ext-maxminddb": "<1.11.1,>=2.0.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "3.*", @@ -3319,9 +3021,9 @@ ], "support": { "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues", - "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.11.0" + "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.11.1" }, - "time": "2021-10-18T15:23:10+00:00" + "time": "2023-12-02T00:09:23+00:00" }, { "name": "maxmind/web-service-common", @@ -3376,23 +3078,26 @@ }, { "name": "michelf/php-markdown", - "version": "1.9.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/michelf/php-markdown.git", - "reference": "5024d623c1a057dcd2d076d25b7d270a1d0d55f3" + "reference": "eb176f173fbac58a045aff78e55f833264b34e71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/5024d623c1a057dcd2d076d25b7d270a1d0d55f3", - "reference": "5024d623c1a057dcd2d076d25b7d270a1d0d55f3", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/eb176f173fbac58a045aff78e55f833264b34e71", + "reference": "eb176f173fbac58a045aff78e55f833264b34e71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.4" }, "require-dev": { - "phpunit/phpunit": ">=4.3 <5.8" + "friendsofphp/php-cs-fixer": "^3.0", + "phpstan/phpstan": ">=1.0", + "phpstan/phpstan-phpunit": ">=1.0", + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -3423,22 +3128,22 @@ ], "support": { "issues": "https://github.com/michelf/php-markdown/issues", - "source": "https://github.com/michelf/php-markdown/tree/1.9.1" + "source": "https://github.com/michelf/php-markdown/tree/2.0.0" }, - "time": "2021-11-24T02:52:38+00:00" + "time": "2022-09-26T12:21:08+00:00" }, { "name": "monolog/monolog", - "version": "3.5.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", - "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", "shasum": "" }, "require": { @@ -3461,7 +3166,7 @@ "phpstan/phpstan": "^1.9", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.1", + "phpunit/phpunit": "^10.5.17", "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", "symfony/mailer": "^5.4 || ^6", @@ -3514,7 +3219,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.5.0" + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" }, "funding": [ { @@ -3526,7 +3231,7 @@ "type": "tidelift" } ], - "time": "2023-10-27T15:32:31+00:00" + "time": "2024-06-28T09:40:51+00:00" }, { "name": "moxiecode/plupload", @@ -3570,41 +3275,41 @@ }, { "name": "nesbot/carbon", - "version": "2.71.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "98276233188583f2ff845a0f992a235472d9466a" + "reference": "cb4374784c87d0a0294e8513a52eb63c0aff3139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/98276233188583f2ff845a0f992a235472d9466a", - "reference": "98276233188583f2ff845a0f992a235472d9466a", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cb4374784c87d0a0294e8513a52eb63c0aff3139", + "reference": "cb4374784c87d0a0294e8513a52eb63c0aff3139", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", - "php": "^7.1.8 || ^8.0", + "php": "^8.1", "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" }, "bin": [ "bin/carbon" @@ -3612,8 +3317,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" }, "laravel": { "providers": [ @@ -3672,35 +3377,35 @@ "type": "tidelift" } ], - "time": "2023-09-25T11:31:05+00:00" + "time": "2024-07-16T22:29:20+00:00" }, { "name": "nette/schema", - "version": "v1.2.5", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", "shasum": "" }, "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": "7.1 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.3" }, "require-dev": { - "nette/tester": "^2.3 || ^2.4", + "nette/tester": "^2.4", "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" + "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -3732,22 +3437,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.5" + "source": "https://github.com/nette/schema/tree/v1.3.0" }, - "time": "2023-10-05T20:37:59+00:00" + "time": "2023-12-11T11:54:22+00:00" }, { "name": "nette/utils", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015" + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015", - "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015", + "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", "shasum": "" }, "require": { @@ -3818,39 +3523,38 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.3" + "source": "https://github.com/nette/utils/tree/v4.0.4" }, - "time": "2023-10-29T21:02:13+00:00" + "time": "2024-01-17T16:50:36+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.2", + "symfony/console": "^7.0.4" }, "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.14.0", + "mockery/mockery": "^1.6.7", + "pestphp/pest": "^2.34.1", + "phpstan/phpstan": "^1.10.59", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -3859,6 +3563,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -3890,7 +3597,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" }, "funding": [ { @@ -3906,28 +3613,28 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-03-06T16:17:14+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v2.6.3", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "58c3f47f650c94ec05a151692652a868995d2938" + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", - "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", "shasum": "" }, "require": { - "php": "^7|^8" + "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" }, "type": "library", "autoload": { @@ -3973,7 +3680,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2022-06-14T06:56:20+00:00" + "time": "2024-05-08T12:36:18+00:00" }, { "name": "paragonie/random_compat", @@ -4027,16 +3734,16 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.8.1", + "version": "v6.9.1", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "e88da8d679acc3824ff231fdc553565b802ac016" + "reference": "039de174cd9c17a8389754d3b877a2ed22743e18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e88da8d679acc3824ff231fdc553565b802ac016", - "reference": "e88da8d679acc3824ff231fdc553565b802ac016", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18", + "reference": "039de174cd9c17a8389754d3b877a2ed22743e18", "shasum": "" }, "require": { @@ -4056,6 +3763,7 @@ "yoast/phpunit-polyfills": "^1.0.4" }, "suggest": { + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", "ext-openssl": "Needed for secure SMTP sending and DKIM signing", "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", @@ -4095,7 +3803,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.1" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1" }, "funding": [ { @@ -4103,20 +3811,20 @@ "type": "github" } ], - "time": "2023-08-29T08:26:30+00:00" + "time": "2023-11-25T22:23:28+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -4124,13 +3832,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -4166,7 +3874,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -4178,24 +3886,24 @@ "type": "tidelift" } ], - "time": "2023-02-25T19:38:58+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "phpseclib/phpseclib", - "version": "3.0.37", + "version": "3.0.39", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8" + "reference": "211ebc399c6e73c225a018435fe5ae209d1d1485" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cfa2013d0f68c062055180dd4328cc8b9d1f30b8", - "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/211ebc399c6e73c225a018435fe5ae209d1d1485", + "reference": "211ebc399c6e73c225a018435fe5ae209d1d1485", "shasum": "" }, "require": { - "paragonie/constant_time_encoding": "^1|^2", + "paragonie/constant_time_encoding": "^1|^2|^3", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", "php": ">=5.6.1" }, @@ -4272,7 +3980,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.37" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.39" }, "funding": [ { @@ -4288,7 +3996,7 @@ "type": "tidelift" } ], - "time": "2024-03-03T02:14:58+00:00" + "time": "2024-06-24T06:27:33+00:00" }, { "name": "psr/cache", @@ -4544,20 +4252,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -4581,7 +4289,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -4593,9 +4301,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -4886,20 +4594,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.5", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -4962,7 +4670,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -4974,7 +4682,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "smarty/smarty", @@ -5105,16 +4813,16 @@ }, { "name": "sokil/php-isocodes-db-i18n", - "version": "4.0.16", + "version": "4.0.22", "source": { "type": "git", "url": "https://github.com/sokil/php-isocodes-db-i18n.git", - "reference": "57171418413135580f954408a7b599b24a4780b7" + "reference": "a10c2b893ec2b66a3335e7d18c25bca0c17e7870" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sokil/php-isocodes-db-i18n/zipball/57171418413135580f954408a7b599b24a4780b7", - "reference": "57171418413135580f954408a7b599b24a4780b7", + "url": "https://api.github.com/repos/sokil/php-isocodes-db-i18n/zipball/a10c2b893ec2b66a3335e7d18c25bca0c17e7870", + "reference": "a10c2b893ec2b66a3335e7d18c25bca0c17e7870", "shasum": "" }, "require": { @@ -5139,49 +4847,126 @@ "description": "Database and internationalisation filed for ISO country, subdivision, language, currency and script definitions and their translations. Based on pythons pycountry and Debian's iso-codes.", "support": { "issues": "https://github.com/sokil/php-isocodes-db-i18n/issues", - "source": "https://github.com/sokil/php-isocodes-db-i18n/tree/4.0.16" + "source": "https://github.com/sokil/php-isocodes-db-i18n/tree/4.0.22" + }, + "time": "2024-05-04T06:55:57+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.1.1" }, - "time": "2023-09-03T17:24:52+00:00" + "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": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "0aa29ca177f432ab68533432db0de059f39c92ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", + "reference": "0aa29ca177f432ab68533432db0de059f39c92ae", "shasum": "" }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "require": { + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5215,7 +5000,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v7.1.2" }, "funding": [ { @@ -5231,24 +5016,24 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2024-06-28T10:03:55+00:00" }, { "name": "symfony/css-selector", - "version": "v6.3.2", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -5280,7 +5065,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.3.2" + "source": "https://github.com/symfony/css-selector/tree/v7.1.1" }, "funding": [ { @@ -5296,20 +5081,20 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { @@ -5318,7 +5103,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -5347,7 +5132,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -5363,34 +5148,35 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/error-handler", - "version": "v6.3.5", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1f69476b64fb47105c06beef757766c376b548c4" + "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1f69476b64fb47105c06beef757766c376b548c4", - "reference": "1f69476b64fb47105c06beef757766c376b548c4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", + "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^6.4|^7.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -5421,7 +5207,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.3.5" + "source": "https://github.com/symfony/error-handler/tree/v7.1.2" }, "funding": [ { @@ -5437,28 +5223,28 @@ "type": "tidelift" } ], - "time": "2023-09-12T06:57:20+00:00" + "time": "2024-06-25T19:55:06+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -5467,13 +5253,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5501,7 +5287,7 @@ "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/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -5517,20 +5303,20 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { @@ -5540,7 +5326,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -5577,7 +5363,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -5593,27 +5379,27 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/finder", - "version": "v6.3.5", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" + "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5641,7 +5427,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.5" + "source": "https://github.com/symfony/finder/tree/v7.1.1" }, "funding": [ { @@ -5657,40 +5443,40 @@ "type": "tidelift" } ], - "time": "2023-09-26T12:56:25+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e" + "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/59d1837d5d992d16c2628cd0d6b76acf8d69b33e", - "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa", + "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5718,7 +5504,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.7" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.1" }, "funding": [ { @@ -5734,76 +5520,77 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:55:27+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.7", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6d4098095f93279d9536a0e9124439560cc764d0" + "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6d4098095f93279d9536a0e9124439560cc764d0", - "reference": "6d4098095f93279d9536a0e9124439560cc764d0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", + "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.3.4", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3.4", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4.5|^6.0.5", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/var-exporter": "^6.2", - "twig/twig": "^2.13|^3.0.4" + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", "autoload": { @@ -5831,7 +5618,7 @@ "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/v6.3.7" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.2" }, "funding": [ { @@ -5847,43 +5634,43 @@ "type": "tidelift" } ], - "time": "2023-10-29T14:31:45+00:00" + "time": "2024-06-28T13:13:31+00:00" }, { "name": "symfony/mailer", - "version": "v6.3.5", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06" + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d89611a7830d51b5e118bca38e390dea92f9ea06", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06", + "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5911,7 +5698,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.3.5" + "source": "https://github.com/symfony/mailer/tree/v7.1.2" }, "funding": [ { @@ -5927,25 +5714,24 @@ "type": "tidelift" } ], - "time": "2023-09-06T09:47:15+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/mime", - "version": "v6.3.5", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" + "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "url": "https://api.github.com/repos/symfony/mime/zipball/26a00b85477e69a4bab63b66c5dce64f18b0cbfc", + "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -5953,17 +5739,18 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "~6.2.13|^6.3.2" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -5995,7 +5782,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.5" + "source": "https://github.com/symfony/mime/tree/v7.1.2" }, "funding": [ { @@ -6011,20 +5798,20 @@ "type": "tidelift" } ], - "time": "2023-09-29T06:59:36+00:00" + "time": "2024-06-28T10:03:55+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { @@ -6038,9 +5825,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6077,7 +5861,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, "funding": [ { @@ -6093,20 +5877,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", "shasum": "" }, "require": { @@ -6117,9 +5901,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6158,7 +5939,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" }, "funding": [ { @@ -6174,20 +5955,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", + "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", "shasum": "" }, "require": { @@ -6200,9 +5981,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6245,7 +6023,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0" }, "funding": [ { @@ -6261,20 +6039,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", "shasum": "" }, "require": { @@ -6285,9 +6063,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6329,7 +6104,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" }, "funding": [ { @@ -6345,20 +6120,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { @@ -6372,9 +6147,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6412,7 +6184,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { @@ -6428,20 +6200,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + "reference": "10112722600777e02d2745716b70c5db4ca70442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", + "reference": "10112722600777e02d2745716b70c5db4ca70442", "shasum": "" }, "require": { @@ -6449,9 +6221,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6488,7 +6257,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" }, "funding": [ { @@ -6504,20 +6273,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { @@ -6525,9 +6294,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6571,7 +6337,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -6587,31 +6353,27 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6651,7 +6413,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" }, "funding": [ { @@ -6667,20 +6429,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2024-06-19T12:35:24+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", + "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", "shasum": "" }, "require": { @@ -6694,9 +6456,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6733,7 +6492,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" }, "funding": [ { @@ -6749,24 +6508,24 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", + "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -6794,7 +6553,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v7.1.1" }, "funding": [ { @@ -6810,40 +6569,38 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/routing", - "version": "v6.3.5", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31" + "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/82616e59acd3e3d9c916bba798326cb7796d7d31", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31", + "url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0", + "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6877,7 +6634,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.5" + "source": "https://github.com/symfony/routing/tree/v7.1.1" }, "funding": [ { @@ -6893,25 +6650,26 @@ "type": "tidelift" } ], - "time": "2023-09-20T16:05:51+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6919,7 +6677,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6959,7 +6717,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -6975,24 +6733,24 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/string", - "version": "v6.3.5", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" + "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", + "url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", + "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -7002,11 +6760,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7045,7 +6804,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.5" + "source": "https://github.com/symfony/string/tree/v7.1.2" }, "funding": [ { @@ -7061,55 +6820,54 @@ "type": "tidelift" } ], - "time": "2023-09-18T10:38:32+00:00" + "time": "2024-06-28T09:27:18+00:00" }, { "name": "symfony/translation", - "version": "v6.3.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499" + "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/30212e7c87dcb79c83f6362b00bde0e0b1213499", - "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499", + "url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", + "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7140,7 +6898,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.7" + "source": "https://github.com/symfony/translation/tree/v7.1.1" }, "funding": [ { @@ -7156,20 +6914,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:11:45+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", "shasum": "" }, "require": { @@ -7178,7 +6936,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -7218,7 +6976,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" }, "funding": [ { @@ -7234,28 +6992,28 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/uid", - "version": "v6.3.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384" + "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/01b0f20b1351d997711c56f1638f7a8c3061e384", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384", + "url": "https://api.github.com/repos/symfony/uid/zipball/bb59febeecc81528ff672fad5dab7f06db8c8277", + "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7292,7 +7050,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.3.0" + "source": "https://github.com/symfony/uid/tree/v7.1.1" }, "funding": [ { @@ -7308,37 +7066,36 @@ "type": "tidelift" } ], - "time": "2023-04-08T07:25:02+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.6", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97" + "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/999ede244507c32b8e43aebaa10e9fce20de7c97", - "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5857c57c6b4b86524c08cf4f4bc95327270a816d", + "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "bin": [ "Resources/bin/var-dump-server" @@ -7376,7 +7133,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.6" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.2" }, "funding": [ { @@ -7392,27 +7149,27 @@ "type": "tidelift" } ], - "time": "2023-10-12T18:45:56+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.6", + "version": "v2.2.7", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" @@ -7443,9 +7200,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" }, - "time": "2023-01-03T09:29:04+00:00" + "time": "2023-12-08T13:03:43+00:00" }, { "name": "tinymce/tinymce", @@ -7506,31 +7263,31 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -7539,10 +7296,10 @@ "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -7574,7 +7331,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" }, "funding": [ { @@ -7586,7 +7343,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2024-07-20T21:52:34+00:00" }, { "name": "voku/portable-ascii", @@ -7799,29 +7556,30 @@ "packages-dev": [ { "name": "captainhook/captainhook", - "version": "5.18.3", + "version": "5.23.3", "source": { "type": "git", "url": "https://github.com/captainhookphp/captainhook.git", - "reference": "b7bc503a40ccfe80ea9638e4921b4697669d725f" + "reference": "c9deaefc098dde7f7093b44482b099195442e70d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/captainhookphp/captainhook/zipball/b7bc503a40ccfe80ea9638e4921b4697669d725f", - "reference": "b7bc503a40ccfe80ea9638e4921b4697669d725f", + "url": "https://api.github.com/repos/captainhookphp/captainhook/zipball/c9deaefc098dde7f7093b44482b099195442e70d", + "reference": "c9deaefc098dde7f7093b44482b099195442e70d", "shasum": "" }, "require": { + "captainhook/secrets": "^0.9.4", "ext-json": "*", "ext-spl": "*", "ext-xml": "*", - "php": ">=7.4", + "php": ">=8.0", "sebastianfeldmann/camino": "^0.9.2", "sebastianfeldmann/cli": "^3.3", - "sebastianfeldmann/git": "^3.9", - "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "sebastianfeldmann/git": "^3.10", + "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "replace": { "sebastianfeldmann/captainhook": "*" @@ -7858,7 +7616,7 @@ } ], "description": "PHP git hook manager", - "homepage": "https://github.com/captainhookphp/captainhook", + "homepage": "http://php.captainhook.info/", "keywords": [ "commit-msg", "git", @@ -7870,7 +7628,7 @@ ], "support": { "issues": "https://github.com/captainhookphp/captainhook/issues", - "source": "https://github.com/captainhookphp/captainhook/tree/5.18.3" + "source": "https://github.com/captainhookphp/captainhook/tree/5.23.3" }, "funding": [ { @@ -7878,7 +7636,7 @@ "type": "github" } ], - "time": "2023-11-05T13:56:19+00:00" + "time": "2024-07-07T19:12:59+00:00" }, { "name": "captainhook/plugin-composer", @@ -7935,6 +7693,62 @@ }, "time": "2022-01-28T04:35:22+00:00" }, + { + "name": "captainhook/secrets", + "version": "0.9.5", + "source": { + "type": "git", + "url": "https://github.com/captainhookphp/secrets.git", + "reference": "8aa90d5b9b7892abd11b9da2fc172a7b32b90cbe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/captainhookphp/secrets/zipball/8aa90d5b9b7892abd11b9da2fc172a7b32b90cbe", + "reference": "8aa90d5b9b7892abd11b9da2fc172a7b32b90cbe", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "CaptainHook\\Secrets\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" + } + ], + "description": "Utility classes to detect secrets", + "keywords": [ + "commit-msg", + "keys", + "passwords", + "post-merge", + "prepare-commit-msg", + "secrets", + "tokens" + ], + "support": { + "issues": "https://github.com/captainhookphp/secrets/issues", + "source": "https://github.com/captainhookphp/secrets/tree/0.9.5" + }, + "funding": [ + { + "url": "https://github.com/sponsors/sebastianfeldmann", + "type": "github" + } + ], + "time": "2023-11-30T18:10:18+00:00" + }, { "name": "clue/ndjson-react", "version": "v1.3.0", @@ -8001,30 +7815,38 @@ }, { "name": "composer/pcre", - "version": "3.1.1", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.8" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.8", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -8052,7 +7874,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" + "source": "https://github.com/composer/pcre/tree/3.2.0" }, "funding": [ { @@ -8068,20 +7890,20 @@ "type": "tidelift" } ], - "time": "2023-10-11T07:11:09+00:00" + "time": "2024-07-25T09:36:02+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -8092,7 +7914,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -8116,9 +7938,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -8134,77 +7956,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "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/2.0.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": "2022-12-30T00:23:10+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "evenement/evenement", @@ -8316,16 +8068,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.58.1", + "version": "v3.60.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff" + "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/04e9424025677a86914b9a4944dbbf4060bb0aff", - "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e595e4e070d17c5d42ed8c4206f630fcc5f401a4", + "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4", "shasum": "" }, "require": { @@ -8355,16 +8107,16 @@ "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.0", - "infection/infection": "^0.27.11", + "facile-it/paraunit": "^1.3 || ^2.3", + "infection/infection": "^0.29.5", "justinrainbow/json-schema": "^5.2", "keradus/cli-executor": "^2.1", "mikey179/vfsstream": "^1.6.11", "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", - "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", + "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2", "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, @@ -8379,7 +8131,10 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8404,7 +8159,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.58.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.60.0" }, "funding": [ { @@ -8412,7 +8167,7 @@ "type": "github" } ], - "time": "2024-05-29T16:39:07+00:00" + "time": "2024-07-25T09:26:51+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -8467,16 +8222,16 @@ }, { "name": "mockery/mockery", - "version": "1.6.6", + "version": "1.6.12", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { @@ -8488,10 +8243,8 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "psalm/plugin-phpunit": "^0.18.4", - "symplify/easy-coding-standard": "^11.5.0", - "vimeo/psalm": "^4.30" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", "autoload": { @@ -8548,20 +8301,20 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-08-09T00:03:52+00:00" + "time": "2024-05-16T03:13:13+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { @@ -8569,11 +8322,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -8599,7 +8353,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { @@ -8607,29 +8361,31 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -8637,7 +8393,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -8661,26 +8417,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -8721,9 +8478,15 @@ "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/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -8778,35 +8541,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.29", + "version": "11.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + "reference": "19b6365ab8b59a64438c0c3f4241feeb480c9861" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/19b6365ab8b59a64438c0c3f4241feeb480c9861", + "reference": "19b6365ab8b59a64438c0c3f4241feeb480c9861", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", - "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", + "nikic/php-parser": "^5.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.0", + "phpunit/php-text-template": "^4.0", + "sebastian/code-unit-reverse-lookup": "^4.0", + "sebastian/complexity": "^4.0", + "sebastian/environment": "^7.0", + "sebastian/lines-of-code": "^3.0", + "sebastian/version": "^5.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -8815,7 +8578,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "11.0-dev" } }, "autoload": { @@ -8844,7 +8607,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.5" }, "funding": [ { @@ -8852,32 +8615,32 @@ "type": "github" } ], - "time": "2023-09-19T04:57:46+00:00" + "time": "2024-07-03T05:05:37+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "6ed896bf50bbbfe4d504a33ed5886278c78e4a26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6ed896bf50bbbfe4d504a33ed5886278c78e4a26", + "reference": "6ed896bf50bbbfe4d504a33ed5886278c78e4a26", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8904,7 +8667,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.0.1" }, "funding": [ { @@ -8912,28 +8676,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2024-07-03T05:06:37+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -8941,7 +8705,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8967,7 +8731,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, "funding": [ { @@ -8975,32 +8740,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9026,7 +8791,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -9034,32 +8800,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -9085,7 +8851,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, "funding": [ { @@ -9093,54 +8860,51 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.13", + "version": "11.2.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" + "reference": "a7a29e8d3113806f18f99d670f580a30e8ffff39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a7a29e8d3113806f18f99d670f580a30e8ffff39", + "reference": "a7a29e8d3113806f18f99d670f580a30e8ffff39", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "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.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.5", + "phpunit/php-file-iterator": "^5.0.1", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.1", + "sebastian/comparator": "^6.0.1", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.1.3", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.0.1", + "sebastian/version": "^5.0.1" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -9148,7 +8912,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "11.2-dev" } }, "autoload": { @@ -9180,7 +8944,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.2.8" }, "funding": [ { @@ -9196,29 +8960,29 @@ "type": "tidelift" } ], - "time": "2023-09-19T05:39:22+00:00" + "time": "2024-07-18T14:56:37+00:00" }, { "name": "psy/psysh", - "version": "v0.11.22", + "version": "v0.12.4", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", - "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" @@ -9229,8 +8993,7 @@ "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ "bin/psysh" @@ -9238,7 +9001,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-0.11": "0.11.x-dev" + "dev-main": "0.12.x-dev" }, "bamarni-bin": { "bin-links": false, @@ -9274,9 +9037,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" }, - "time": "2023-10-14T21:56:36+00:00" + "time": "2024-06-10T01:18:23+00:00" }, { "name": "react/cache", @@ -9431,28 +9194,28 @@ }, { "name": "react/dns", - "version": "v1.12.0", + "version": "v1.13.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", - "reference": "c134600642fa615b46b41237ef243daa65bb64ec" + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/c134600642fa615b46b41237ef243daa65bb64ec", - "reference": "c134600642fa615b46b41237ef243daa65bb64ec", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", "shasum": "" }, "require": { "php": ">=5.3.0", "react/cache": "^1.0 || ^0.6 || ^0.5", "react/event-loop": "^1.2", - "react/promise": "^3.0 || ^2.7 || ^1.2.1" + "react/promise": "^3.2 || ^2.7 || ^1.2.1" }, "require-dev": { "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4 || ^3 || ^2", - "react/promise-timer": "^1.9" + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" }, "type": "library", "autoload": { @@ -9495,7 +9258,7 @@ ], "support": { "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.12.0" + "source": "https://github.com/reactphp/dns/tree/v1.13.0" }, "funding": [ { @@ -9503,7 +9266,7 @@ "type": "open_collective" } ], - "time": "2023-11-29T12:41:06+00:00" + "time": "2024-06-13T14:18:03+00:00" }, { "name": "react/event-loop", @@ -9810,28 +9573,28 @@ }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9854,7 +9617,8 @@ "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" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -9862,32 +9626,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "6bb7d09d6623567178cf54126afa9c2310114268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6bb7d09d6623567178cf54126afa9c2310114268", + "reference": "6bb7d09d6623567178cf54126afa9c2310114268", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9910,7 +9674,8 @@ "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" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.1" }, "funding": [ { @@ -9918,32 +9683,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2024-07-03T04:44:28+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9965,7 +9730,8 @@ "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" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, "funding": [ { @@ -9973,34 +9739,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "131942b86d3587291067a94f295498ab6ac79c20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/131942b86d3587291067a94f295498ab6ac79c20", + "reference": "131942b86d3587291067a94f295498ab6ac79c20", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10039,7 +9807,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.0.1" }, "funding": [ { @@ -10047,33 +9816,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2024-07-03T04:48:07+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10096,7 +9865,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { @@ -10104,33 +9874,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10162,7 +9932,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -10170,27 +9941,27 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-posix": "*" @@ -10198,7 +9969,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -10217,7 +9988,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -10225,7 +9996,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" }, "funding": [ { @@ -10233,34 +10005,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-07-03T04:54:44+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "6.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", + "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -10302,7 +10074,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.1.3" }, "funding": [ { @@ -10310,38 +10083,35 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-07-03T04:56:19+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.6", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -10360,13 +10130,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://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.6" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { @@ -10374,33 +10145,33 @@ "type": "github" } ], - "time": "2023-08-02T09:26:13+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10423,7 +10194,8 @@ "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" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { @@ -10431,34 +10203,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10480,7 +10252,8 @@ "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" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { @@ -10488,32 +10261,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10535,7 +10308,8 @@ "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" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" }, "funding": [ { @@ -10543,32 +10317,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10598,62 +10372,8 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+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" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" }, "funding": [ { @@ -10661,32 +10381,32 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-07-03T05:10:34+00:00" }, { "name": "sebastian/type", - "version": "3.2.1", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb6a6566f9589e86661291d13eba708cce5eb4aa", + "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10709,7 +10429,8 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.0.1" }, "funding": [ { @@ -10717,29 +10438,29 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2024-07-03T05:11:49+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "45c9debb7d039ce9b97de2f749c2cf5832a06ac4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/45c9debb7d039ce9b97de2f749c2cf5832a06ac4", + "reference": "45c9debb7d039ce9b97de2f749c2cf5832a06ac4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10762,7 +10483,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.1" }, "funding": [ { @@ -10770,7 +10492,7 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-07-03T05:13:08+00:00" }, { "name": "sebastianfeldmann/camino", @@ -10888,22 +10610,23 @@ }, { "name": "sebastianfeldmann/git", - "version": "3.9.3", + "version": "3.11.0", "source": { "type": "git", "url": "https://github.com/sebastianfeldmann/git.git", - "reference": "eb2ca84a2b45a461f0bf5d4fd400df805649e83a" + "reference": "5cb1ea94f65c7420419abe8f12c45cc7eb094790" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/eb2ca84a2b45a461f0bf5d4fd400df805649e83a", - "reference": "eb2ca84a2b45a461f0bf5d4fd400df805649e83a", + "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/5cb1ea94f65c7420419abe8f12c45cc7eb094790", + "reference": "5cb1ea94f65c7420419abe8f12c45cc7eb094790", "shasum": "" }, "require": { "ext-json": "*", - "ext-xml": "*", - "php": ">=7.2", + "ext-libxml": "*", + "ext-simplexml": "*", + "php": ">=8.0", "sebastianfeldmann/cli": "^3.0" }, "require-dev": { @@ -10937,7 +10660,7 @@ ], "support": { "issues": "https://github.com/sebastianfeldmann/git/issues", - "source": "https://github.com/sebastianfeldmann/git/tree/3.9.3" + "source": "https://github.com/sebastianfeldmann/git/tree/3.11.0" }, "funding": [ { @@ -10945,27 +10668,30 @@ "type": "github" } ], - "time": "2023-10-13T09:10:48+00:00" + "time": "2024-01-23T09:11:14+00:00" }, { "name": "symfony/filesystem", - "version": "v6.3.1", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", + "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -10992,7 +10718,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" + "source": "https://github.com/symfony/filesystem/tree/v7.1.2" }, "funding": [ { @@ -11008,24 +10734,24 @@ "type": "tidelift" } ], - "time": "2023-06-01T08:30:39+00:00" + "time": "2024-06-28T10:03:55+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.3.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -11059,7 +10785,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" }, "funding": [ { @@ -11075,20 +10801,20 @@ "type": "tidelift" } ], - "time": "2023-05-12T14:21:09+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", "shasum": "" }, "require": { @@ -11096,9 +10822,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -11138,7 +10861,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" }, "funding": [ { @@ -11154,24 +10877,24 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.3.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -11200,7 +10923,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" }, "funding": [ { @@ -11216,20 +10939,20 @@ "type": "tidelift" } ], - "time": "2023-02-16T10:14:28+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -11258,7 +10981,7 @@ "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/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -11266,7 +10989,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], @@ -11276,7 +10999,9 @@ }, "prefer-stable": false, "prefer-lowest": false, - "platform": [], + "platform": { + "php": "^8.2" + }, "platform-dev": [], "platform-overrides": { "php": "8.2.0" diff --git a/tests/PKPTestHelper.php b/tests/PKPTestHelper.php index f210ff376e6..885ac1c4405 100644 --- a/tests/PKPTestHelper.php +++ b/tests/PKPTestHelper.php @@ -16,6 +16,8 @@ namespace PKP\tests; use Illuminate\Database\MySqlConnection; +use Illuminate\Database\MariaDbConnection; +use Illuminate\Database\PostgresConnection; use Illuminate\Support\Facades\DB; use PHPUnit\Framework\TestCase; use PKP\config\Config; @@ -37,16 +39,22 @@ abstract class PKPTestHelper public static function backupTables($tables, $test) { $dao = new DAO(); + foreach ($tables as $table) { - $createLikeSql = DB::getDefaultConnection() instanceof MySqlConnection - ? "CREATE TABLE backup_{$table} LIKE {$table}" - : "CREATE TABLE backup_{$table} (LIKE {$table})"; + $createLikeSql = match (true) { + DB::connection() instanceof MySqlConnection, + DB::connection() instanceof MariaDbConnection + => "CREATE TABLE backup_{$table} LIKE {$table}", + DB::connection() instanceof PostgresConnection + => "CREATE TABLE backup_{$table} (LIKE {$table})" + }; $sqls = [ "DROP TABLE IF EXISTS backup_{$table}", $createLikeSql, "INSERT INTO backup_{$table} SELECT * FROM {$table}" ]; + foreach ($sqls as $sql) { $dao->update($sql, [], true, false); } @@ -80,14 +88,21 @@ public static function restoreTables($tables, $test) public static function restoreDB($test) { $filename = getenv('DATABASEDUMP'); - if (!$filename || !file_exists($filename)) { + + if (!$filename) { $test->fail('Database dump filename needs to be specified in env variable DATABASEDUMP!'); return; } + if (!file_exists($filename)) { + $test->fail("The backup database dump file named {$filename} not found"); + return; + } + $output = $status = null; switch (DB::getDefaultConnection()) { case 'mysql': + case 'mariadb': exec( $cmd = 'zcat ' . escapeshellarg($filename) . diff --git a/tests/classes/citation/CitationListTokenizerFilterTest.php b/tests/classes/citation/CitationListTokenizerFilterTest.php index ff75024e345..dd3e802f5c5 100644 --- a/tests/classes/citation/CitationListTokenizerFilterTest.php +++ b/tests/classes/citation/CitationListTokenizerFilterTest.php @@ -20,12 +20,11 @@ use PKP\citation\CitationListTokenizerFilter; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(CitationListTokenizerFilter::class)] class CitationListTokenizerFilterTest extends PKPTestCase { - /** - * @covers CitationListTokenizerFilter - */ public function testCitationListTokenizerFilter() { $tokenizer = new CitationListTokenizerFilter(); diff --git a/tests/classes/config/ConfigTest.php b/tests/classes/config/ConfigTest.php index 6fd8b179ce7..ff1956163a3 100644 --- a/tests/classes/config/ConfigTest.php +++ b/tests/classes/config/ConfigTest.php @@ -21,7 +21,9 @@ use PKP\config\Config; use PKP\core\Core; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(Config::class)] class ConfigTest extends PKPTestCase { /** @@ -32,27 +34,19 @@ protected function getMockedRegistryKeys(): array return [...parent::getMockedRegistryKeys(), 'configData', 'configFile']; } - /** - * @covers Config::getConfigFileName - */ + public function testGetDefaultConfigFileName() { $expectedResult = Core::getBaseDir() . '/config.inc.php'; self::assertEquals($expectedResult, Config::getConfigFileName()); } - /** - * @covers Config::setConfigFileName - */ public function testSetConfigFileName() { Config::setConfigFileName('some_config'); self::assertEquals('some_config', Config::getConfigFileName()); } - /** - * @covers Config::reloadData - */ public function testReloadDataWithNonExistentConfigFile() { Config::setConfigFileName('some_config'); @@ -60,9 +54,6 @@ public function testReloadDataWithNonExistentConfigFile() Config::reloadData(); } - /** - * @covers Config::reloadData - */ public function testReloadDataAndGetData() { Config::setConfigFileName('lib/pkp/tests/config/config.TEMPLATE.mysql.inc.php'); @@ -88,10 +79,6 @@ public function testReloadDataAndGetData() self::assertEquals($expectedResult, $result['general']); } - /** - * @covers Config::getVar - * @covers Config::getData - */ public function testGetVar() { Config::setConfigFileName('lib/pkp/tests/config/config.TEMPLATE.mysql.inc.php'); @@ -100,13 +87,22 @@ public function testGetVar() self::assertNull(Config::getVar('non-existent-config-section', 'non-existent-config-var')); } - /** - * @covers Config::getVar - * @covers Config::getData - */ public function testGetVarFromOtherConfig() { Config::setConfigFileName('lib/pkp/tests/config/config.TEMPLATE.pgsql.inc.php'); self::assertEquals('pgsql', Config::getVar('database', 'driver')); } + + public function testHasVar() + { + Config::setConfigFileName('lib/pkp/tests/config/config.mysql.inc.php'); + self::assertTrue(Config::hasVar('general', 'installed')); + } + + public function testIsSensitive() + { + Config::setConfigFileName('lib/pkp/tests/config/config.mysql.inc.php'); + self::assertTrue(Config::isSensitive('database', 'password')); + self::assertFalse(Config::isSensitive('database', 'driver')); + } } diff --git a/tests/classes/core/DataObjectTest.php b/tests/classes/core/DataObjectTest.php index 3b86cc8399b..d55ff4e759b 100644 --- a/tests/classes/core/DataObjectTest.php +++ b/tests/classes/core/DataObjectTest.php @@ -20,7 +20,13 @@ use PKP\core\DataObject; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversMethod; +#[CoversMethod(DataObject::class, 'setData')] +#[CoversMethod(DataObject::class, 'getData')] +#[CoversMethod(DataObject::class, 'getAllData')] +#[CoversMethod(DataObject::class, 'setAllData')] +#[CoversMethod(DataObject::class, 'hasData')] class DataObjectTest extends PKPTestCase { protected DataObject $dataObject; @@ -31,11 +37,6 @@ protected function setUp(): void $this->dataObject = new DataObject(); } - /** - * @covers DataObject::setData - * @covers DataObject::getData - * @covers DataObject::getAllData - */ public function testSetGetData() { // Set data with and without locale @@ -107,9 +108,6 @@ public function testSetGetData() self::assertEquals($expectedResult, $result); } - /** - * @covers DataObject::setAllData - */ public function testSetAllData() { $expectedResult = ['someKey' => 'someVal']; @@ -122,9 +120,6 @@ public function testSetAllData() self::assertNotEquals($expectedResult, $result); } - /** - * @covers DataObject::hasData - */ public function testHasData() { $testData = [ diff --git a/tests/classes/core/DispatcherTest.php b/tests/classes/core/DispatcherTest.php index 2cc709893f6..11bdbfb6a38 100644 --- a/tests/classes/core/DispatcherTest.php +++ b/tests/classes/core/DispatcherTest.php @@ -21,12 +21,14 @@ use APP\core\Application; use APP\core\Request; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\Attributes\CoversMethod; use PKP\core\Dispatcher; use PKP\core\PKPApplication; use PKP\core\PKPRequest; use PKP\db\DAORegistry; use PKP\tests\PKPTestCase; +#[CoversMethod(Dispatcher::class, 'url')] class DispatcherTest extends PKPTestCase { public const PATHINFO_ENABLED = true; @@ -59,7 +61,7 @@ protected function setUp(): void // Set up the getContextName() method $mockApplication->expects($this->any()) ->method('getContextName') - ->will($this->returnValue('firstContext')); + ->willReturn('firstContext'); $this->dispatcher = $mockApplication->getDispatcher(); // this also adds the component router $this->dispatcher->addRouterName(\PKP\core\PKPPageRouter::class, 'page'); @@ -67,9 +69,6 @@ protected function setUp(): void $this->request = new Request(); } - /** - * @covers Dispatcher::url - */ public function testUrl() { $this->_setUpMockDAO(); @@ -101,15 +100,15 @@ protected function _setUpMockDAO(): void ->getMock(); $contextObject->expects($this->any()) ->method('getPath') - ->will($this->returnValue('context1')); + ->willReturn('context1'); $contextObject->expects($this->any()) ->method('getSupportedLocales') - ->will($this->returnValue(['en'])); + ->willReturn(['en']); $mockFirstContextDao->expects($this->any()) ->method('getByPath') ->with('context1') - ->will($this->returnValue($contextObject)); + ->willReturn($contextObject); DAORegistry::registerDAO('FirstContextDAO', $mockFirstContextDao); } diff --git a/tests/classes/core/EntityDAOTest.php b/tests/classes/core/EntityDAOTest.php index 68110ae2f5d..55b5754e441 100644 --- a/tests/classes/core/EntityDAOTest.php +++ b/tests/classes/core/EntityDAOTest.php @@ -20,10 +20,13 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; +use PKP\core\EntityDAO; use PKP\core\DataObject; use PKP\plugins\Hook; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversMethod; +#[CoversMethod(EntityDAO::class, '_insert')] class EntityDAOTest extends PKPTestCase { public static function setUpBeforeClass(): void @@ -85,9 +88,6 @@ public static function tearDownAfterClass(): void Schema::dropIfExists('test_entity'); } - /** - * @covers \PKP\core\EntityDAO::_insert - */ public function testCRUD() { $testEntityDao = app(TestEntityDAO::class); diff --git a/tests/classes/core/JSONTest.php b/tests/classes/core/JSONTest.php index 0010b610215..de690811ae0 100644 --- a/tests/classes/core/JSONTest.php +++ b/tests/classes/core/JSONTest.php @@ -20,13 +20,12 @@ use PKP\core\JSONMessage; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; use stdClass; +#[CoversClass(JSONMessage::class)] class JSONTest extends PKPTestCase { - /** - * @covers JSONMessage - */ public function testGetString() { // Create a test object. diff --git a/tests/classes/core/PKPComponentRouterTest.php b/tests/classes/core/PKPComponentRouterTest.php index cc693666ce7..1e40c23e04f 100644 --- a/tests/classes/core/PKPComponentRouterTest.php +++ b/tests/classes/core/PKPComponentRouterTest.php @@ -22,10 +22,23 @@ use PKP\core\Registry; use PKP\db\DAORegistry; use PKP\security\authorization\UserRolesRequiredPolicy; - -/** - * @backupGlobals enabled - */ +use PHPUnit\Framework\Attributes\CoversMethod; +use PHPUnit\Framework\Attributes\BackupGlobals; +use PHPUnit\Framework\Attributes\PreserveGlobalState; +use PHPUnit\Framework\Attributes\RunInSeparateProcess; + +#[BackupGlobals(true)] +#[CoversMethod(PKPComponentRouter::class, 'supports')] +#[CoversMethod(PKPComponentRouter::class, 'route')] +#[CoversMethod(PKPComponentRouter::class, 'getRequestedOp')] +#[CoversMethod(PKPComponentRouter::class, 'getRpcServiceEndpoint')] +#[CoversMethod(PKPComponentRouter::class, '_getValidatedServiceEndpointParts')] +#[CoversMethod(PKPComponentRouter::class, '_retrieveServiceEndpointParts')] +#[CoversMethod(PKPComponentRouter::class, '_validateServiceEndpointParts')] +#[CoversMethod(PKPComponentRouter::class, 'url')] +#[CoversMethod(PKPComponentRouter::class, '_urlGetBaseAndContext')] +#[CoversMethod(PKPComponentRouter::class, '_urlGetAdditionalParameters')] +#[CoversMethod(PKPComponentRouter::class, '_urlFromParts')] class PKPComponentRouterTest extends PKPRouterTestCase { /** @@ -47,13 +60,6 @@ public function testSupports() $this->markTestSkipped('The method PKPRouter::testSupports() is not relevant for component routers'); } - /** - * @covers PKPComponentRouter::supports - * @covers PKPComponentRouter::getRpcServiceEndpoint - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testSupportsWithPathinfoSuccessful() { $mockApplication = $this->_setUpMockEnvironment(); @@ -65,13 +71,6 @@ public function testSupportsWithPathinfoSuccessful() self::assertTrue($this->router->supports($this->request)); } - /** - * @covers PKPComponentRouter::supports - * @covers PKPComponentRouter::getRpcServiceEndpoint - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testSupportsWithPathinfoUnsuccessfulNoComponentNotEnoughPathElements() { $mockApplication = $this->_setUpMockEnvironment(); @@ -84,13 +83,6 @@ public function testSupportsWithPathinfoUnsuccessfulNoComponentNotEnoughPathElem self::assertFalse($this->router->supports($this->request)); } - /** - * @covers PKPComponentRouter::supports - * @covers PKPComponentRouter::getRpcServiceEndpoint - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testSupportsWithPathinfoUnsuccessfulNoComponentNoMarker() { $mockApplication = $this->_setUpMockEnvironment(); @@ -103,13 +95,6 @@ public function testSupportsWithPathinfoUnsuccessfulNoComponentNoMarker() self::assertFalse($this->router->supports($this->request)); } - /** - * @covers PKPComponentRouter::supports - * @covers PKPComponentRouter::getRpcServiceEndpoint - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testSupportsWithPathinfoAndComponentFileDoesNotExist() { $mockApplication = $this->_setUpMockEnvironment(); @@ -123,12 +108,6 @@ public function testSupportsWithPathinfoAndComponentFileDoesNotExist() self::assertTrue($this->router->supports($this->request)); } - /** - * @covers PKPComponentRouter::getRequestedComponent - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testGetRequestedComponentWithPathinfo() { $mockApplication = $this->_setUpMockEnvironment(); @@ -140,12 +119,6 @@ public function testGetRequestedComponentWithPathinfo() self::assertEquals('path.to.SomeComponentHandler', $this->router->getRequestedComponent($this->request)); } - /** - * @covers PKPComponentRouter::getRequestedComponent - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testGetRequestedComponentWithPathinfoAndMalformedComponentString() { $mockApplication = $this->_setUpMockEnvironment(); @@ -157,12 +130,6 @@ public function testGetRequestedComponentWithPathinfoAndMalformedComponentString self::assertEquals('', $this->router->getRequestedComponent($this->request)); } - /** - * @covers PKPComponentRouter::getRequestedOp - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testGetRequestedOpWithPathinfo() { $mockApplication = $this->_setUpMockEnvironment(); @@ -174,12 +141,6 @@ public function testGetRequestedOpWithPathinfo() self::assertEquals('someOp', $this->router->getRequestedOp($this->request)); } - /** - * @covers PKPComponentRouter::getRequestedOp - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - */ public function testGetRequestedOpWithPathinfoAndMalformedOpString() { $mockApplication = $this->_setUpMockEnvironment(); @@ -191,17 +152,8 @@ public function testGetRequestedOpWithPathinfoAndMalformedOpString() self::assertEquals('', $this->router->getRequestedOp($this->request)); } - /** - * @covers PKPComponentRouter::route - * @covers PKPComponentRouter::getRpcServiceEndpoint - * @covers PKPComponentRouter::_getValidatedServiceEndpointParts - * @covers PKPComponentRouter::_retrieveServiceEndpointParts - * @covers PKPComponentRouter::_validateServiceEndpointParts - * - * @runInSeparateProcess - * - * @preserveGlobalState disabled - */ + #[RunInSeparateProcess] + #[PreserveGlobalState(false)] public function testRoute() { $this->setTestConfiguration('mysql'); @@ -245,12 +197,6 @@ public function testRoute() self::assertInstanceOf('Context', $firstContextDao->getByPath('context1')); } - /** - * @covers PKPComponentRouter::url - * @covers PKPComponentRouter::_urlGetBaseAndContext - * @covers PKPComponentRouter::_urlGetAdditionalParameters - * @covers PKPComponentRouter::_urlFromParts - */ public function testUrlWithPathinfo() { $this->setTestConfiguration('request1', 'classes/core/config'); // restful URLs @@ -305,12 +251,6 @@ public function testUrlWithPathinfo() self::assertEquals('http://mydomain.org/index.php/new-context1/$$$call$$$/current/component-class/current-op?key1=val1&key2=val2', $result); } - /** - * @covers PKPComponentRouter::url - * @covers PKPComponentRouter::_urlGetBaseAndContext - * @covers PKPComponentRouter::_urlGetAdditionalParameters - * @covers PKPComponentRouter::_urlFromParts - */ public function testUrlWithPathinfoAndOverriddenBaseUrl() { $this->setTestConfiguration('request1', 'classes/core/config'); // contains overridden context diff --git a/tests/classes/core/PKPPageRouterTest.php b/tests/classes/core/PKPPageRouterTest.php index 9bbaa6c6466..ccf4246d729 100644 --- a/tests/classes/core/PKPPageRouterTest.php +++ b/tests/classes/core/PKPPageRouterTest.php @@ -20,13 +20,20 @@ use Mockery; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\CoversMethod; +use PHPUnit\Framework\Attributes\BackupGlobals; +use PHPUnit\Framework\Attributes\PreserveGlobalState; +use PHPUnit\Framework\Attributes\RunInSeparateProcess; use PKP\core\Core; use PKP\core\PKPPageRouter; use PKP\security\Validation; -/** - * @backupGlobals enabled - */ +#[BackupGlobals(true)] +#[CoversMethod(PKPPageRouter::class, 'isCacheable')] +#[CoversMethod(PKPPageRouter::class, 'getCacheFilename')] +#[CoversMethod(PKPPageRouter::class, 'getRequestedPage')] +#[CoversMethod(PKPPageRouter::class, 'getRequestedOp')] +#[CoversMethod(PKPPageRouter::class, 'url')] class PKPPageRouterTest extends PKPRouterTestCase { protected function setUp(): void @@ -37,12 +44,9 @@ protected function setUp(): void ->getMock(); $this->router->expects($this->any()) ->method('getCacheablePages') - ->will($this->returnValue(['cacheable'])); + ->willReturn(['cacheable']); } - /** - * @covers PKPPageRouter::isCacheable - */ public function testIsCacheableNotInstalled() { $this->setTestConfiguration('request2', 'classes/core/config'); // not installed @@ -50,9 +54,6 @@ public function testIsCacheableNotInstalled() self::assertFalse($this->router->isCacheable($this->request)); } - /** - * @covers PKPPageRouter::isCacheable - */ public function testIsCacheableWithPost() { $this->setTestConfiguration('request1', 'classes/core/config'); // installed @@ -61,9 +62,6 @@ public function testIsCacheableWithPost() self::assertFalse($this->router->isCacheable($this->request)); } - /** - * @covers PKPPageRouter::isCacheable - */ public function testIsCacheableWithPathinfo() { $this->setTestConfiguration('request1', 'classes/core/config'); // installed @@ -79,13 +77,8 @@ public function testIsCacheableWithPathinfo() self::assertFalse($this->router->isCacheable($this->request)); } - /** - * @covers PKPPageRouter::isCacheable - * - * @runInSeparateProcess - * - * @preserveGlobalState disabled - */ + #[RunInSeparateProcess] + #[PreserveGlobalState(false)] public function testIsCacheableWithPathinfoSuccess() { // Creates a mocked Validation only for this test (due to the @runInSeparateProcess) @@ -110,9 +103,6 @@ public function __construct(public bool $isLogged = false) self::assertFalse($this->router->isCacheable($this->request, true)); } - /** - * @covers PKPPageRouter::getCacheFilename - */ public function testGetCacheFilenameWithPathinfo() { $mockApplication = $this->_setUpMockEnvironment(); @@ -124,9 +114,6 @@ public function testGetCacheFilenameWithPathinfo() self::assertEquals(Core::getBaseDir() . '/cache/wc-' . md5($expectedId) . '.html', $this->router->getCacheFilename($this->request)); } - /** - * @covers PKPPageRouter::getRequestedPage - */ public function testGetRequestedPageWithPathinfo() { $mockApplication = $this->_setUpMockEnvironment(); @@ -138,9 +125,6 @@ public function testGetRequestedPageWithPathinfo() self::assertEquals('somepage', $this->router->getRequestedPage($this->request)); } - /** - * @covers PKPPageRouter::getRequestedPage - */ public function testGetRequestedPageWithEmtpyPage() { $mockApplication = $this->_setUpMockEnvironment(); @@ -152,9 +136,6 @@ public function testGetRequestedPageWithEmtpyPage() self::assertEquals('', $this->router->getRequestedPage($this->request)); } - /** - * @covers PKPPageRouter::getRequestedOp - */ public function testGetRequestedOpWithPathinfo() { $mockApplication = $this->_setUpMockEnvironment(); @@ -166,9 +147,6 @@ public function testGetRequestedOpWithPathinfo() self::assertEquals('someop', $this->router->getRequestedOp($this->request)); } - /** - * @covers PKPPageRouter::getRequestedOp - */ public function testGetRequestedOpWithEmptyOp() { $mockApplication = $this->_setUpMockEnvironment(); @@ -180,9 +158,6 @@ public function testGetRequestedOpWithEmptyOp() self::assertEquals('index', $this->router->getRequestedOp($this->request)); } - /** - * @covers PKPPageRouter::url - */ public function testUrlWithPathinfo() { $this->setTestConfiguration('request1', 'classes/core/config'); // restful URLs @@ -254,9 +229,6 @@ public function testUrlWithPathinfo() self::assertEquals('http://mydomain.org/index.php/new-context1?key1=val1&key2=val2', $result); } - /** - * @covers PKPPageRouter::url - */ public function testUrlWithPathinfoAndOverriddenBaseUrl() { $this->setTestConfiguration('request1', 'classes/core/config'); // contains overridden context @@ -273,9 +245,6 @@ public function testUrlWithPathinfoAndOverriddenBaseUrl() self::assertEquals('http://some-domain/xyz-context/current-page/current-op', $result); } - /** - * @covers PKPPageRouter::url - */ public function testUrlWithPathinfoAndOverriddenNewContext() { $this->setTestConfiguration('request1', 'classes/core/config'); // contains overridden context @@ -294,9 +263,6 @@ public function testUrlWithPathinfoAndOverriddenNewContext() self::assertEquals('http://some-domain/xyz-context/new-page', $result); } - /** - * @covers PKPPageRouter::url - */ public function testUrlWithLocale() { $mockApplication = $this->_setUpMockEnvironment(); diff --git a/tests/classes/core/PKPRequestTest.php b/tests/classes/core/PKPRequestTest.php index 774d06b721f..ddb8e51572c 100644 --- a/tests/classes/core/PKPRequestTest.php +++ b/tests/classes/core/PKPRequestTest.php @@ -19,14 +19,24 @@ namespace PKP\tests\classes\core; use APP\core\Request; +use PHPUnit\Framework\Attributes\CoversMethod; +use PHPUnit\Framework\Attributes\BackupGlobals; +use PHPUnit\Framework\Attributes\Depends; use PKP\core\PKPRequest; use PKP\core\Registry; use PKP\plugins\Hook; use PKP\tests\PKPTestCase; -/** - * @backupGlobals enabled - */ +#[BackupGlobals(true)] +#[CoversMethod(PKPRequest::class, 'isRestfulUrlsEnabled')] +#[CoversMethod(PKPRequest::class, 'redirectUrl')] +#[CoversMethod(PKPRequest::class, 'getBaseUrl')] +#[CoversMethod(PKPRequest::class, 'getBasePath')] +#[CoversMethod(PKPRequest::class, 'getRequestPath')] +#[CoversMethod(PKPRequest::class, 'getServerHost')] +#[CoversMethod(PKPRequest::class, 'getProtocol')] +#[CoversMethod(PKPRequest::class, 'getRemoteAddr')] +#[CoversMethod(PKPRequest::class, 'getUserVar')] class PKPRequestTest extends PKPTestCase { protected PKPRequest $request; @@ -52,27 +62,18 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @covers PKPRequest::isRestfulUrlsEnabled - */ public function testIsRestfulUrlsEnabled1() { $this->setTestConfiguration('request1', 'classes/core/config'); self::assertFalse($this->request->isRestfulUrlsEnabled()); } - /** - * @covers PKPRequest::isRestfulUrlsEnabled - */ public function testIsRestfulUrlsEnabled2() { $this->setTestConfiguration('request2', 'classes/core/config'); self::assertTrue($this->request->isRestfulUrlsEnabled()); } - /** - * @covers PKPRequest::redirectUrl - */ public function testRedirectUrl() { Hook::add('Request::redirect', $this->redirectUrlHook(...)); @@ -96,9 +97,6 @@ public function redirectUrlHook($hookName, $args) return true; } - /** - * @covers PKPRequest::getBaseUrl - */ public function testGetBaseUrl() { $this->setTestConfiguration('request1', 'classes/core/config'); // baseurl1 @@ -126,9 +124,6 @@ public function testGetBaseUrl() ); } - /** - * @covers PKPRequest::getBaseUrl - */ public function testGetBaseUrlWithHostDetection() { $this->setTestConfiguration('request1', 'classes/core/config'); @@ -139,9 +134,6 @@ public function testGetBaseUrlWithHostDetection() self::assertEquals('http://hostname/some/base/path', $this->request->getBaseUrl()); } - /** - * @covers PKPRequest::getBasePath - */ public function testGetBasePath() { $_SERVER = [ @@ -165,9 +157,6 @@ public function testGetBasePath() ); } - /** - * @covers PKPRequest::getBasePath - */ public function testGetEmptyBasePath() { $_SERVER = [ @@ -176,9 +165,6 @@ public function testGetEmptyBasePath() self::assertEquals('/main', $this->request->getBasePath()); } - /** - * @covers PKPRequest::getRequestPath - */ public function testGetRequestPath() { $_SERVER = [ @@ -204,9 +190,6 @@ public function testGetRequestPath() ); } - /** - * @covers PKPRequest::getRequestPath - */ public function testGetRequestPathRestful() { $_SERVER = [ @@ -218,9 +201,6 @@ public function testGetRequestPathRestful() } - /** - * @covers PKPRequest::getRequestPath - */ public function testGetRequestPathWithPathinfo() { $_SERVER = [ @@ -232,9 +212,6 @@ public function testGetRequestPathWithPathinfo() self::assertEquals('some/script/name/extra/path', $this->request->getRequestPath()); } - /** - * @covers PKPRequest::getServerHost - */ public function testGetServerHostLocalhost() { // if none of the server variables is set then return the default @@ -244,11 +221,7 @@ public function testGetServerHostLocalhost() self::assertEquals('localhost', $this->request->getServerHost()); } - /** - * @covers PKPRequest::getServerHost - * - * @depends testGetServerHostLocalhost - */ + #[Depends('testGetServerHostLocalhost')] public function testGetServerHostWithHostname() { // if SERVER_NAME is set then return it @@ -259,11 +232,7 @@ public function testGetServerHostWithHostname() self::assertEquals('hostname', $this->request->getServerHost()); } - /** - * @covers PKPRequest::getServerHost - * - * @depends testGetServerHostLocalhost - */ + #[Depends('testGetServerHostLocalhost')] public function testGetServerHostWithServerName() { // if SERVER_NAME is set then return it @@ -274,11 +243,7 @@ public function testGetServerHostWithServerName() self::assertEquals('hostname', $this->request->getServerHost()); } - /** - * @covers PKPRequest::getServerHost - * - * @depends testGetServerHostWithHostname - */ + #[Depends('testGetServerHostWithHostname')] public function testGetServerHostWithHttpHost() { // if HTTP_HOST is set then return it @@ -290,11 +255,7 @@ public function testGetServerHostWithHttpHost() self::assertEquals('http_host', $this->request->getServerHost()); } - /** - * @covers PKPRequest::getServerHost - * - * @depends testGetServerHostWithHttpHost - */ + #[Depends('testGetServerHostWithHttpHost')] public function testGetServerHostWithHttpXForwardedHost() { // if HTTP_X_FORWARDED_HOST is set then return it @@ -307,9 +268,6 @@ public function testGetServerHostWithHttpXForwardedHost() self::assertEquals('x_host', $this->request->getServerHost()); } - /** - * @covers PKPRequest::getProtocol - */ public function testGetProtocolNoHttpsVariable() { $_SERVER = []; @@ -330,9 +288,6 @@ public function testGetProtocolNoHttpsVariable() ); } - /** - * @covers PKPRequest::getProtocol - */ public function testGetProtocolHttpsVariableOff() { $_SERVER = [ @@ -342,9 +297,6 @@ public function testGetProtocolHttpsVariableOff() self::assertEquals('http', $this->request->getProtocol()); } - /** - * @covers PKPRequest::getProtocol - */ public function testGetProtocolHttpsVariableOn() { $_SERVER = [ @@ -354,9 +306,6 @@ public function testGetProtocolHttpsVariableOn() self::assertEquals('https', $this->request->getProtocol()); } - /** - * @covers PKPRequest::getRemoteAddr - */ public function testTrustXForwardedForOn() { [$forwardedIp, $remoteIp] = $this->getRemoteAddrTestPrepare( @@ -365,9 +314,6 @@ public function testTrustXForwardedForOn() self::assertEquals($forwardedIp, $this->request->getRemoteAddr()); } - /** - * @covers PKPRequest::getRemoteAddr - */ public function testTrustXForwardedForOff() { [$forwardedIp, $remoteIp] = $this->getRemoteAddrTestPrepare( @@ -376,9 +322,6 @@ public function testTrustXForwardedForOff() self::assertEquals($remoteIp, $this->request->getRemoteAddr()); } - /** - * @covers PKPRequest::getRemoteAddr - */ public function testTrustXForwardedForNotSet() { [$forwardedIp, $remoteIp] = $this->getRemoteAddrTestPrepare([]); @@ -407,9 +350,6 @@ private function getRemoteAddrTestPrepare($generalConfigData = []) return [$_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['REMOTE_ADDR']]; } - /** - * @covers PKPRequest::getUserVar - */ public function testGetUserVar() { $_GET = [ @@ -426,9 +366,6 @@ public function testGetUserVar() self::assertEquals('val4', $this->request->getUserVar('par4')); } - /** - * @covers PKPRequest::getUserVars - */ public function testGetUserVars() { $_GET = [ diff --git a/tests/classes/core/PKPRouterTestCase.php b/tests/classes/core/PKPRouterTestCase.php index 7b3977c3ccd..7e1328fca13 100644 --- a/tests/classes/core/PKPRouterTestCase.php +++ b/tests/classes/core/PKPRouterTestCase.php @@ -20,6 +20,8 @@ use APP\core\Application; use APP\core\Request; +use PHPUnit\Framework\Attributes\CoversMethod; +use PHPUnit\Framework\Attributes\BackupGlobals; use PHPUnit\Framework\MockObject\MockObject; use PKP\core\PKPComponentRouter; use PKP\core\PKPRequest; @@ -29,9 +31,16 @@ use PKP\plugins\Hook; use PKP\tests\PKPTestCase; -/** - * @backupGlobals enabled - */ +#[BackupGlobals(true)] +#[CoversMethod(PKPRouter::class, 'getApplication')] +#[CoversMethod(PKPRouter::class, 'setApplication')] +#[CoversMethod(PKPRouter::class, 'getDispatcher')] +#[CoversMethod(PKPRouter::class, 'setDispatcher')] +#[CoversMethod(PKPRouter::class, 'supports')] +#[CoversMethod(PKPRouter::class, 'isCacheable')] +#[CoversMethod(PKPRouter::class, 'getRequestedContextPath')] +#[CoversMethod(PKPRouter::class, 'getContext')] +#[CoversMethod(PKPRouter::class, 'getIndexUrl')] class PKPRouterTestCase extends PKPTestCase { protected PKPRouter|MockObject $router; @@ -58,20 +67,12 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @covers PKPRouter::getApplication - * @covers PKPRouter::setApplication - */ public function testGetSetApplication() { $application = $this->_setUpMockEnvironment(); self::assertSame($application, $this->router->getApplication()); } - /** - * @covers PKPRouter::getDispatcher - * @covers PKPRouter::setDispatcher - */ public function testGetSetDispatcher() { $application = $this->_setUpMockEnvironment(); @@ -79,27 +80,18 @@ public function testGetSetDispatcher() self::assertSame($dispatcher, $this->router->getDispatcher()); } - /** - * @covers PKPRouter::supports - */ public function testSupports() { $this->request = new Request(); self::assertTrue($this->router->supports($this->request)); } - /** - * @covers PKPRouter::isCacheable - */ public function testIsCacheable() { $this->request = new Request(); self::assertFalse($this->router->isCacheable($this->request)); } - /** - * @covers PKPRouter::getRequestedContextPath - */ public function testGetRequestedContextPathWithEmptyPathInfo() { $this->_setUpMockEnvironment(); @@ -110,9 +102,6 @@ public function testGetRequestedContextPathWithEmptyPathInfo() ); } - /** - * @covers PKPRouter::getRequestedContextPath - */ public function testGetRequestedContextPathWithFullPathInfo() { $this->_setUpMockEnvironment(); @@ -128,9 +117,6 @@ public function testGetRequestedContextPathWithFullPathInfo() ); } - /** - * @covers PKPRouter::getRequestedContextPath - */ public function testGetRequestedContextPathWithInvalidPathInfo() { $this->_setUpMockEnvironment(); @@ -141,9 +127,6 @@ public function testGetRequestedContextPathWithInvalidPathInfo() ); } - /** - * @covers PKPRouter::getContext - */ public function testGetContext() { // We use a 1-level context @@ -165,15 +148,12 @@ public function testGetContext() $mockDao->expects($this->once()) ->method('getByPath') ->with('contextPath') - ->will($this->returnValue($expectedResult)); + ->willReturn($expectedResult); $result = $this->router->getContext($this->request); self::assertInstanceOf('Context', $result); self::assertEquals($expectedResult, $result); } - /** - * @covers PKPRouter::getContext - */ public function testGetContextForIndex() { // We use a 1-level context @@ -184,9 +164,6 @@ public function testGetContextForIndex() self::assertNull($result); } - /** - * @covers PKPRouter::getIndexUrl - */ public function testGetIndexUrl() { $this->_setUpMockEnvironment(); @@ -220,9 +197,6 @@ public function testGetIndexUrl() ); } - /** - * @covers PKPRouter::getIndexUrl - */ public function testGetIndexUrlRestful() { $this->_setUpMockEnvironment(); @@ -253,7 +227,7 @@ protected function _setUpMockEnvironment(string $contextName = 'firstContext') // Set up the getContextName() method $mockApplication->expects($this->any()) ->method('getContextName') - ->will($this->returnValue($contextName)); + ->willReturn($contextName); $this->router->setApplication($mockApplication); Registry::set('application', $mockApplication); @@ -268,7 +242,7 @@ protected function _setUpMockEnvironment(string $contextName = 'firstContext') ->getMock(); $this->request->expects($this->any()) ->method('getServerHost') - ->will($this->returnValue('mydomain.org')); + ->willReturn('mydomain.org'); $this->request->setRouter($this->router); return $mockApplication; @@ -294,21 +268,21 @@ protected function _setUpMockDAOs(string $firstContextPath = 'current-context1', ->getMock(); $firstContextInstance->expects($this->any()) ->method('getId') - ->will($this->returnValue(1)); + ->willReturn(1); $firstContextInstance->expects($this->any()) ->method('getPath') - ->will($this->returnValue($firstContextPath)); + ->willReturn($firstContextPath); $firstContextInstance->expects($this->any()) ->method('getSetting') - ->will($this->returnValue(null)); + ->willReturn(null); $firstContextInstance->expects($this->any()) ->method('getSupportedLocales') - ->will($this->returnValue($supportedLocales)); + ->willReturn($supportedLocales); $mockFirstContextDao->expects($this->any()) ->method('getByPath') ->with($firstContextPath) - ->will($this->returnValue($firstContextInstance)); + ->willReturn($firstContextInstance); } DAORegistry::registerDAO('FirstContextDAO', $mockFirstContextDao); diff --git a/tests/classes/filter/ClassTypeDescriptionTest.php b/tests/classes/filter/ClassTypeDescriptionTest.php index a741ac237a2..b13bfad4a0e 100644 --- a/tests/classes/filter/ClassTypeDescriptionTest.php +++ b/tests/classes/filter/ClassTypeDescriptionTest.php @@ -20,12 +20,11 @@ use PKP\filter\ClassTypeDescription; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(ClassTypeDescription::class)] class ClassTypeDescriptionTest extends PKPTestCase { - /** - * @covers ClassTypeDescription - */ public function testInstantiateAndCheck() { $typeDescription = new ClassTypeDescription('lib.pkp.tests.classes.filter.TestClass1'); diff --git a/tests/classes/filter/FilterDAOTest.php b/tests/classes/filter/FilterDAOTest.php index 55155005000..3b294b8f43f 100644 --- a/tests/classes/filter/FilterDAOTest.php +++ b/tests/classes/filter/FilterDAOTest.php @@ -25,7 +25,9 @@ use PKP\filter\GenericMultiplexerFilter; use PKP\filter\GenericSequencerFilter; use PKP\tests\DatabaseTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FilterDAO::class)] class FilterDAOTest extends DatabaseTestCase { /** @@ -51,9 +53,6 @@ protected function setUp(): void self::assertTrue(is_integer($filterGroupId = $filterGroupDao->insertObject($someGroup))); } - /** - * @covers FilterDAO - */ public function testFilterCrud() { $filterDao = DAORegistry::getDAO('FilterDAO'); /** @var FilterDAO $filterDao */ diff --git a/tests/classes/filter/FilterGroupDAOTest.php b/tests/classes/filter/FilterGroupDAOTest.php index 6eab3d6bb8c..30eacf4f88b 100644 --- a/tests/classes/filter/FilterGroupDAOTest.php +++ b/tests/classes/filter/FilterGroupDAOTest.php @@ -22,12 +22,11 @@ use PKP\filter\FilterGroup; use PKP\filter\FilterGroupDAO; use PKP\tests\DatabaseTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FilterGroupDAO::class)] class FilterGroupDAOTest extends DatabaseTestCase { - /** - * @covers FilterGroupDAO - */ public function testFilterGroupCrud() { $filterGroupDao = DAORegistry::getDAO('FilterGroupDAO'); /** @var FilterGroupDAO $filterGroupDao */ diff --git a/tests/classes/filter/FilterHelperTest.php b/tests/classes/filter/FilterHelperTest.php index 111645fdea8..83c16b48b6b 100644 --- a/tests/classes/filter/FilterHelperTest.php +++ b/tests/classes/filter/FilterHelperTest.php @@ -22,12 +22,11 @@ use PKP\filter\FilterHelper; use PKP\filter\FilterSetting; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FilterHelper::class)] class FilterHelperTest extends PKPTestCase { - /** - * @covers FilterHelper - */ public function testCompareFilters() { $filterHelper = new FilterHelper(); diff --git a/tests/classes/filter/FilterTest.php b/tests/classes/filter/FilterTest.php index fe24ac16da4..2de6854d281 100644 --- a/tests/classes/filter/FilterTest.php +++ b/tests/classes/filter/FilterTest.php @@ -20,18 +20,17 @@ use PKP\filter\Filter; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(Filter::class)] class FilterTest extends PKPTestCase { - /** - * @covers Filter - */ public function testInstantiationAndExecute() { $mockFilter = $this->getFilterMock(); // Test getters/setters that are not implicitly tested by other tests - self::assertEquals('Mock_Filter_', substr($mockFilter->getDisplayName(), 0, 12)); + self::assertEquals('MockObject_Filter_', substr($mockFilter->getDisplayName(), 0, 18)); $mockFilter->setDisplayName('Some other display name'); self::assertEquals('Some other display name', $mockFilter->getDisplayName()); $mockFilter->setSequence(5); @@ -95,9 +94,6 @@ public function testInstantiationAndExecute() self::assertNull($mockFilter->getLastOutput()); } - /** - * @covers Filter - */ public function testUnsupportedEnvironment() { $mockFilter = $this->getFilterMock(); @@ -149,7 +145,7 @@ private function getFilterMock($outputType = 'class::lib.pkp.tests.classes.filte // Set the filter processor. $mockFilter->expects($this->any()) ->method('process') - ->will($this->returnCallback($this->processCallback(...))); + ->willReturnCallback($this->processCallback(...)); return $mockFilter; } diff --git a/tests/classes/filter/PersistableFilterTest.php b/tests/classes/filter/PersistableFilterTest.php index 3fcee4c012f..c74b70b2f8a 100644 --- a/tests/classes/filter/PersistableFilterTest.php +++ b/tests/classes/filter/PersistableFilterTest.php @@ -22,12 +22,11 @@ use PKP\filter\PersistableFilter; use PKP\filter\TypeDescriptionFactory; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(PersistableFilter::class)] class PersistableFilterTest extends PKPTestCase { - /** - * @covers PersistableFilter - */ public function testInstantiationAndExecute() { $constructorArg = PersistableFilter::tempGroup( diff --git a/tests/classes/filter/PrimitiveTypeDescriptionTest.php b/tests/classes/filter/PrimitiveTypeDescriptionTest.php index 81e48368a0e..53028cfbdd4 100644 --- a/tests/classes/filter/PrimitiveTypeDescriptionTest.php +++ b/tests/classes/filter/PrimitiveTypeDescriptionTest.php @@ -24,16 +24,17 @@ namespace PKP\tests\classes\filter; +use PHPUnit\Framework\Attributes\DataProvider; +use PKP\filter\TypeDescription; use PKP\filter\PrimitiveTypeDescription; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; use stdClass; +#[CoversClass(PrimitiveTypeDescription::class)] +#[CoversClass(TypeDescription::class)] class PrimitiveTypeDescriptionTest extends PKPTestCase { - /** - * @covers PrimitiveTypeDescription - * @covers TypeDescription - */ public function testInstantiateAndCheck() { $typeDescription = new PrimitiveTypeDescription('string'); @@ -72,10 +73,7 @@ public function testInstantiateAndCheck() self::assertFalse($typeDescription->isCompatible(2)); } - /** - * Provides test data - */ - public function typeDescriptorDataProvider(): array + public static function typeDescriptorDataProvider(): array { return [ 'An unknown type name will cause an error' => ['xyz'], @@ -84,12 +82,7 @@ public function typeDescriptorDataProvider(): array ]; } - /** - * @covers PrimitiveTypeDescription - * @covers TypeDescription - * - * @dataProvider typeDescriptorDataProvider - */ + #[DataProvider('typeDescriptorDataProvider')] public function testInstantiateWithInvalidTypeDescriptor(string $type) { $this->expectException(\Exception::class); // Trying to instantiate a "primitive" type description with an invalid type name "$type" diff --git a/tests/classes/filter/TypeDescriptionFactoryTest.php b/tests/classes/filter/TypeDescriptionFactoryTest.php index 4642832a7ce..afa6e02ce8c 100644 --- a/tests/classes/filter/TypeDescriptionFactoryTest.php +++ b/tests/classes/filter/TypeDescriptionFactoryTest.php @@ -20,12 +20,11 @@ use PKP\filter\TypeDescriptionFactory; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(TypeDescriptionFactory::class)] class TypeDescriptionFactoryTest extends PKPTestCase { - /** - * @covers TypeDescriptionFactory - */ public function testInstantiateTypeDescription() { $typeDescriptionFactory = TypeDescriptionFactory::getInstance(); diff --git a/tests/classes/form/validation/FormValidatorArrayCustomTest.php b/tests/classes/form/validation/FormValidatorArrayCustomTest.php index 3bc67d00dab..f4b50ba3dd8 100644 --- a/tests/classes/form/validation/FormValidatorArrayCustomTest.php +++ b/tests/classes/form/validation/FormValidatorArrayCustomTest.php @@ -22,7 +22,12 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorArrayCustom; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversMethod; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidator::class)] +#[CoversClass(FormValidatorArrayCustom::class)] +#[CoversMethod(FormValidatorArrayCustom::class, 'isArray')] class FormValidatorArrayCustomTest extends PKPTestCase { private array $checkedValues = []; @@ -38,10 +43,6 @@ protected function setUp(): void $this->localeFieldValidation = $this->userFunctionForLocaleFields(...); } - /** - * @covers FormValidatorArrayCustom - * @covers FormValidator - */ public function testIsValidOptionalAndEmpty() { // Tests are completely bypassed when the validation type is @@ -73,10 +74,6 @@ public function testIsValidOptionalAndEmpty() self::assertSame([], $this->checkedValues); } - /** - * @covers FormValidatorArrayCustom - * @covers FormValidator - */ public function testIsValidNoArray() { // Field data must be an array, otherwise validation fails @@ -89,9 +86,6 @@ public function testIsValidNoArray() /** * Check all sub-fields (default behavior of isValid) - * - * @covers FormValidatorArrayCustom - * @covers FormValidator */ public function testIsValidCheckAllSubfields() { @@ -135,9 +129,6 @@ public function testIsValidCheckAllSubfields() /** * Check explicitly given sub-sub-fields within all sub-fields - * - * @covers FormValidatorArrayCustom - * @covers FormValidator */ public function testIsValidCheckExplicitSubsubfields() { @@ -201,9 +192,6 @@ public function testIsValidCheckExplicitSubsubfields() /** * Check a few border conditions - * - * @covers FormValidatorArrayCustom - * @covers FormValidator */ public function testIsValidWithBorderConditions() { @@ -241,8 +229,6 @@ public function testIsValidWithBorderConditions() /** * Check explicitly given sub-sub-fields within all sub-fields - * - * @covers FormValidatorArrayCustom::isArray */ public function testIsArray() { diff --git a/tests/classes/form/validation/FormValidatorArrayTest.php b/tests/classes/form/validation/FormValidatorArrayTest.php index 10f79cdc13b..24cf2a69b6b 100644 --- a/tests/classes/form/validation/FormValidatorArrayTest.php +++ b/tests/classes/form/validation/FormValidatorArrayTest.php @@ -22,13 +22,12 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorArray; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidator::class)] +#[CoversClass(FormValidatorArray::class)] class FormValidatorArrayTest extends PKPTestCase { - /** - * @covers FormValidatorArray - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorBooleanTest.php b/tests/classes/form/validation/FormValidatorBooleanTest.php index f1858d98b90..b9acc2075b6 100644 --- a/tests/classes/form/validation/FormValidatorBooleanTest.php +++ b/tests/classes/form/validation/FormValidatorBooleanTest.php @@ -21,13 +21,11 @@ use PKP\form\Form; use PKP\form\validation\FormValidatorBoolean; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorBoolean::class)] class FormValidatorBooleanTest extends PKPTestCase { - /** - * @covers FormValidatorBoolean - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorControlledVocabTest.php b/tests/classes/form/validation/FormValidatorControlledVocabTest.php index 1ebce3e6bf2..f93ac5a062e 100644 --- a/tests/classes/form/validation/FormValidatorControlledVocabTest.php +++ b/tests/classes/form/validation/FormValidatorControlledVocabTest.php @@ -19,7 +19,9 @@ namespace PKP\tests\classes\form\validation; use APP\core\Application; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PKP\form\validation\FormValidatorControlledVocab; use PKP\controlledVocab\ControlledVocab; use PKP\controlledVocab\ControlledVocabDAO; use PKP\db\DAORegistry; @@ -27,6 +29,7 @@ use PKP\form\validation\FormValidator; use PKP\tests\PKPTestCase; +#[CoversClass(FormValidatorControlledVocab::class)] class FormValidatorControlledVocabTest extends PKPTestCase { /** @@ -37,10 +40,6 @@ protected function getMockedDAOs(): array return [...parent::getMockedDAOs(), 'ControlledVocabDAO']; } - /** - * @covers FormValidatorControlledVocab - * @covers FormValidator - */ public function testIsValid() { // Test form @@ -59,7 +58,7 @@ public function testIsValid() // Set up the mock enumerate() method $mockControlledVocab->expects($this->any()) ->method('enumerate') - ->will($this->returnValue([1 => 'vocab1', 2 => 'vocab2'])); + ->willReturn([1 => 'vocab1', 2 => 'vocab2']); // Mock the ControlledVocabDAO $mockControlledVocabDao = $this->getMockBuilder(ControlledVocabDAO::class) @@ -70,7 +69,7 @@ public function testIsValid() $mockControlledVocabDao->expects($this->any()) ->method('getBySymbolic') ->with('testVocab', Application::ASSOC_TYPE_CITATION, 333) - ->will($this->returnValue($mockControlledVocab)); + ->willReturn($mockControlledVocab); DAORegistry::registerDAO('ControlledVocabDAO', $mockControlledVocabDao); diff --git a/tests/classes/form/validation/FormValidatorCustomTest.php b/tests/classes/form/validation/FormValidatorCustomTest.php index e35e34d3e4e..443999d3bbd 100644 --- a/tests/classes/form/validation/FormValidatorCustomTest.php +++ b/tests/classes/form/validation/FormValidatorCustomTest.php @@ -22,15 +22,13 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorCustom; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorCustom::class)] class FormValidatorCustomTest extends PKPTestCase { private ?string $checkedValue = null; - /** - * @covers FormValidatorCustom - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorEmailTest.php b/tests/classes/form/validation/FormValidatorEmailTest.php index cdcb5d07740..ae837a4813d 100644 --- a/tests/classes/form/validation/FormValidatorEmailTest.php +++ b/tests/classes/form/validation/FormValidatorEmailTest.php @@ -22,13 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorEmail; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorEmail::class)] class FormValidatorEmailTest extends PKPTestCase { - /** - * @covers FormValidatorEmail - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorInSetTest.php b/tests/classes/form/validation/FormValidatorInSetTest.php index 7da83fbe015..2a252d58617 100644 --- a/tests/classes/form/validation/FormValidatorInSetTest.php +++ b/tests/classes/form/validation/FormValidatorInSetTest.php @@ -22,13 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorInSet; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorInSet::class)] class FormValidatorInSetTest extends PKPTestCase { - /** - * @covers FormValidatorInSet - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorLengthTest.php b/tests/classes/form/validation/FormValidatorLengthTest.php index 8ec48ad9611..af8ad73d959 100644 --- a/tests/classes/form/validation/FormValidatorLengthTest.php +++ b/tests/classes/form/validation/FormValidatorLengthTest.php @@ -22,13 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorLength; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorLengthTest::class)] class FormValidatorLengthTest extends PKPTestCase { - /** - * @covers FormValidatorLength - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorLocaleEmailTest.php b/tests/classes/form/validation/FormValidatorLocaleEmailTest.php index 32999d84611..92e9ac69c4c 100644 --- a/tests/classes/form/validation/FormValidatorLocaleEmailTest.php +++ b/tests/classes/form/validation/FormValidatorLocaleEmailTest.php @@ -22,14 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorLocaleEmail; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorLocaleEmail::class)] class FormValidatorLocaleEmailTest extends PKPTestCase { - /** - * @covers FormValidatorLocaleEmail - * @covers FormValidatorLocale - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorLocaleTest.php b/tests/classes/form/validation/FormValidatorLocaleTest.php index d6127036573..5a29e739002 100644 --- a/tests/classes/form/validation/FormValidatorLocaleTest.php +++ b/tests/classes/form/validation/FormValidatorLocaleTest.php @@ -22,12 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorLocale; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorLocale::class)] class FormValidatorLocaleTest extends PKPTestCase { - /** - * @covers FormValidatorLocale::getMessage - */ public function testGetMessage() { $form = new Form('some template'); @@ -35,9 +34,6 @@ public function testGetMessage() self::assertSame('##some.message.key## (English)', $formValidator->getMessage()); } - /** - * @covers FormValidatorLocale::getFieldValue - */ public function testGetFieldValue() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorPostTest.php b/tests/classes/form/validation/FormValidatorPostTest.php index 71abe55e304..7ad616d9281 100644 --- a/tests/classes/form/validation/FormValidatorPostTest.php +++ b/tests/classes/form/validation/FormValidatorPostTest.php @@ -24,7 +24,9 @@ use PKP\form\Form; use PKP\form\validation\FormValidatorPost; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorPost::class)] class FormValidatorPostTest extends PKPTestCase { private bool $_isPosted = false; @@ -49,10 +51,6 @@ protected function setUp(): void Registry::set('request', $mock); } - /** - * @covers FormValidatorPost - * @covers FormValidator - */ public function testIsValid() { // Instantiate test validator diff --git a/tests/classes/form/validation/FormValidatorRegExpTest.php b/tests/classes/form/validation/FormValidatorRegExpTest.php index 7c9f7fb6e17..459572d0bf4 100644 --- a/tests/classes/form/validation/FormValidatorRegExpTest.php +++ b/tests/classes/form/validation/FormValidatorRegExpTest.php @@ -22,13 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorRegExp; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorRegExp::class)] class FormValidatorRegExpTest extends PKPTestCase { - /** - * @covers FormValidatorRegExp - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorTest.php b/tests/classes/form/validation/FormValidatorTest.php index ff7f8245f19..62e380001be 100644 --- a/tests/classes/form/validation/FormValidatorTest.php +++ b/tests/classes/form/validation/FormValidatorTest.php @@ -22,7 +22,9 @@ use PKP\form\validation\FormValidator; use PKP\tests\PKPTestCase; use PKP\validation\ValidatorUrl; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidator::class)] class FormValidatorTest extends PKPTestCase { private Form $form; @@ -33,13 +35,6 @@ protected function setUp(): void $this->form = new Form('some template'); } - /** - * @covers FormValidator::__construct - * @covers FormValidator::getField - * @covers FormValidator::getForm - * @covers FormValidator::getValidator - * @covers FormValidator::getType - */ public function testConstructor() { // Instantiate a test validator @@ -60,18 +55,12 @@ public function testConstructor() self::assertSame($validator, $formValidator->getValidator()); } - /** - * @covers FormValidator::getMessage - */ public function testGetMessage() { $formValidator = new FormValidator($this->form, 'testData', FormValidator::FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key'); self::assertSame('##some.message.key##', $formValidator->getMessage()); } - /** - * @covers FormValidator::getFieldValue - */ public function testGetFieldValue() { $formValidator = new FormValidator($this->form, 'testData', FormValidator::FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key'); @@ -98,9 +87,6 @@ public function testGetFieldValue() self::assertSame([' some text '], $formValidator->getFieldValue()); } - /** - * @covers FormValidator::isEmptyAndOptional - */ public function testIsEmptyAndOptional() { // When the validation type is "required" then the method should return @@ -142,9 +128,6 @@ public function testIsEmptyAndOptional() self::assertTrue($formValidator->isEmptyAndOptional()); } - /** - * @covers FormValidator::isValid - */ public function testIsValid() { // We don't need to test the case where a validator is set, this diff --git a/tests/classes/form/validation/FormValidatorUrlTest.php b/tests/classes/form/validation/FormValidatorUrlTest.php index 9ee1952e2f0..bf86796a70d 100644 --- a/tests/classes/form/validation/FormValidatorUrlTest.php +++ b/tests/classes/form/validation/FormValidatorUrlTest.php @@ -22,13 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorUrl; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorUrl::class)] class FormValidatorUrlTest extends PKPTestCase { - /** - * @covers FormValidatorUrl - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/form/validation/FormValidatorUsernameTest.php b/tests/classes/form/validation/FormValidatorUsernameTest.php index ca1435f1716..77d69273121 100644 --- a/tests/classes/form/validation/FormValidatorUsernameTest.php +++ b/tests/classes/form/validation/FormValidatorUsernameTest.php @@ -22,13 +22,11 @@ use PKP\form\validation\FormValidator; use PKP\form\validation\FormValidatorUsername; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(FormValidatorUsername::class)] class FormValidatorUsernameTest extends PKPTestCase { - /** - * @covers FormValidatorUsername - * @covers FormValidator - */ public function testIsValid() { $form = new Form('some template'); diff --git a/tests/classes/i18n/LocaleTest.php b/tests/classes/i18n/LocaleTest.php index 2c476af58d6..d685e3a4fab 100644 --- a/tests/classes/i18n/LocaleTest.php +++ b/tests/classes/i18n/LocaleTest.php @@ -28,7 +28,10 @@ use PKP\i18n\LocaleConversion; use PKP\i18n\LocaleMetadata; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(Locale::class)] +#[CoversClass(LocaleConversion::class)] class LocaleTest extends PKPTestCase { private \PKP\i18n\Locale $_locale; @@ -86,9 +89,6 @@ private function _createMetadataMock(string $locale, bool $isComplete = false): ->getMock(); } - /** - * @covers \PKP\i18n\Locale - */ public function testIsLocaleComplete() { self::assertTrue(Locale::getMetadata('en')->isComplete()); @@ -96,9 +96,6 @@ public function testIsLocaleComplete() self::assertNull(Locale::getMetadata('xx_XX')); } - /** - * @covers \PKP\i18n\Locale - */ public function testGetLocales() { $this->_primaryLocale = 'en_US'; @@ -112,9 +109,6 @@ public function testGetLocales() self::assertEquals($expectedLocales, $locales); } - /** - * @covers \PKP\i18n\Locale - */ public function testGetLocalesWithCountryName() { $expectedLocalesWithCountry = [ @@ -127,9 +121,6 @@ public function testGetLocalesWithCountryName() self::assertEquals($expectedLocalesWithCountry, $locales); } - /** - * @covers \PKP\i18n\LocaleConversion - */ public function testGet3LetterFrom2LetterIsoLanguage() { self::assertEquals('eng', LocaleConversion::get3LetterFrom2LetterIsoLanguage('en')); @@ -138,9 +129,6 @@ public function testGet3LetterFrom2LetterIsoLanguage() self::assertNull(LocaleConversion::get3LetterFrom2LetterIsoLanguage('xx')); } - /** - * @covers \PKP\i18n\LocaleConversion - */ public function testGet2LetterFrom3LetterIsoLanguage() { self::assertEquals('en', LocaleConversion::get2LetterFrom3LetterIsoLanguage('eng')); @@ -149,9 +137,6 @@ public function testGet2LetterFrom3LetterIsoLanguage() self::assertNull(LocaleConversion::get2LetterFrom3LetterIsoLanguage('xxx')); } - /** - * @covers \PKP\i18n\LocaleConversion - */ public function testGet3LetterIsoFromLocale() { self::assertEquals('eng', LocaleConversion::get3LetterIsoFromLocale('en')); @@ -160,9 +145,6 @@ public function testGet3LetterIsoFromLocale() self::assertNull(LocaleConversion::get3LetterIsoFromLocale('xx_XX')); } - /** - * @covers \PKP\i18n\LocaleConversion - */ public function testGetLocaleFrom3LetterIso() { // A locale that does not have to be disambiguated. diff --git a/tests/classes/metadata/MetadataDescriptionTest.php b/tests/classes/metadata/MetadataDescriptionTest.php index ec4f8b74db1..acad4e88769 100644 --- a/tests/classes/metadata/MetadataDescriptionTest.php +++ b/tests/classes/metadata/MetadataDescriptionTest.php @@ -21,7 +21,10 @@ use APP\core\Application; use PKP\metadata\MetadataDescription; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversMethod; +#[CoversMethod(MetadataDescription::class, 'addStatement')] +#[CoversMethod(MetadataDescription::class, 'setStatements')] class MetadataDescriptionTest extends PKPTestCase { private MetadataDescription $metadataDescription; @@ -67,9 +70,6 @@ protected function setUp(): void $this->metadataDescription = new MetadataDescription('lib.pkp.tests.classes.metadata.TestSchema', Application::ASSOC_TYPE_CITATION); } - /** - * @covers MetadataDescription::addStatement - */ public function testAddStatement() { foreach (self::$testStatements as $test) { diff --git a/tests/classes/metadata/MetadataPropertyTest.php b/tests/classes/metadata/MetadataPropertyTest.php index dbd12c3443b..b1c2004909b 100644 --- a/tests/classes/metadata/MetadataPropertyTest.php +++ b/tests/classes/metadata/MetadataPropertyTest.php @@ -26,22 +26,11 @@ use PKP\metadata\MetadataProperty; use PKP\tests\PKPTestCase; use stdClass; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(MetadataProperty::class)] class MetadataPropertyTest extends PKPTestCase { - /** - * @covers MetadataProperty::__construct - * @covers MetadataProperty::getName - * @covers MetadataProperty::getAssocTypes - * @covers MetadataProperty::getAllowedTypes - * @covers MetadataProperty::getTranslated - * @covers MetadataProperty::getCardinality - * @covers MetadataProperty::getDisplayName - * @covers MetadataProperty::getValidationMessage - * @covers MetadataProperty::getMandatory - * @covers MetadataProperty::getId - * @covers MetadataProperty::getSupportedCardinalities - */ public function testMetadataPropertyConstructor() { // test instantiation with non-default values @@ -75,8 +64,6 @@ public function testMetadataPropertyConstructor() /** * Tests special error conditions while setting composite types - * - * @covers MetadataProperty::__construct */ public function testCompositeWithoutParameter() { @@ -86,8 +73,6 @@ public function testCompositeWithoutParameter() /** * Tests special error conditions while setting composite types - * - * @covers MetadataProperty::__construct */ public function testCompositeWithWrongParameter() { @@ -97,8 +82,6 @@ public function testCompositeWithWrongParameter() /** * Tests special error conditions while setting controlled vocab types - * - * @covers MetadataProperty::__construct */ public function testControlledVocabWithoutParameter() { @@ -108,8 +91,6 @@ public function testControlledVocabWithoutParameter() /** * Tests special error conditions while setting controlled vocab types - * - * @covers MetadataProperty::__construct */ public function testControlledVocabWithWrongParameter() { @@ -119,8 +100,6 @@ public function testControlledVocabWithWrongParameter() /** * Tests special error conditions while setting non-parameterized type - * - * @covers MetadataProperty::__construct */ public function testNonParameterizedTypeWithParameter() { @@ -130,8 +109,6 @@ public function testNonParameterizedTypeWithParameter() /** * Tests special error conditions while setting an unsupported type - * - * @covers MetadataProperty::getSupportedTypes */ public function testSetUnsupportedType() { @@ -141,8 +118,6 @@ public function testSetUnsupportedType() /** * Tests special error conditions while setting an unsupported cardinality - * - * @covers MetadataProperty::getSupportedCardinalities */ public function testSetUnsupportedCardinality() { @@ -150,9 +125,6 @@ public function testSetUnsupportedCardinality() $metadataProperty = new MetadataProperty('testElement', [0x001], MetadataProperty::METADATA_PROPERTY_TYPE_COMPOSITE, true, 0x99999999); } - /** - * @covers MetadataProperty::isValid - */ public function testValidateString() { $metadataProperty = new MetadataProperty('testElement'); @@ -162,9 +134,6 @@ public function testValidateString() self::assertFalse($metadataProperty->isValid(['string1', 'string2'])); } - /** - * @covers MetadataProperty::isValid - */ public function testValidateUri() { $metadataProperty = new MetadataProperty('testElement', [], MetadataProperty::METADATA_PROPERTY_TYPE_URI); @@ -175,9 +144,6 @@ public function testValidateUri() self::assertFalse($metadataProperty->isValid(['ftp://some.domain.org/path', 'http://some.domain.org/'])); } - /** - * @covers MetadataProperty::isValid - */ public function testValidateControlledVocabulary() { // Build a test vocabulary. (Assoc type and id are 0 to @@ -204,9 +170,6 @@ public function testValidateControlledVocabulary() $controlledVocabDao->deleteObject($testControlledVocab); } - /** - * @covers MetadataProperty::isValid - */ public function testValidateDate() { $metadataProperty = new MetadataProperty('testElement', [], MetadataProperty::METADATA_PROPERTY_TYPE_DATE); @@ -222,9 +185,6 @@ public function testValidateDate() self::assertFalse($metadataProperty->isValid(['2009-10-25', '2009-10-26'])); } - /** - * @covers MetadataProperty::isValid - */ public function testValidateInteger() { $metadataProperty = new MetadataProperty('testElement', [], MetadataProperty::METADATA_PROPERTY_TYPE_INTEGER); @@ -234,9 +194,6 @@ public function testValidateInteger() self::assertFalse($metadataProperty->isValid([4, 8])); } - /** - * @covers MetadataProperty::isValid - */ public function testValidateComposite() { $metadataProperty = new MetadataProperty('testElement', [], [MetadataProperty::METADATA_PROPERTY_TYPE_COMPOSITE => 0x002], false, MetadataProperty::METADATA_PROPERTY_CARDINALITY_ONE); @@ -256,9 +213,6 @@ public function testValidateComposite() self::assertFalse($metadataProperty->isValid([$metadataDescription, $anotherMetadataDescription])); } - /** - * @covers MetadataProperty::isValid - */ public function testValidateMultitype() { $metadataProperty = new MetadataProperty('testElement', [], [MetadataProperty::METADATA_PROPERTY_TYPE_DATE, MetadataProperty::METADATA_PROPERTY_TYPE_INTEGER], false, MetadataProperty::METADATA_PROPERTY_CARDINALITY_ONE); diff --git a/tests/classes/publication/PublicationTest.php b/tests/classes/publication/PublicationTest.php index d5c2973002b..5e57895f00d 100644 --- a/tests/classes/publication/PublicationTest.php +++ b/tests/classes/publication/PublicationTest.php @@ -18,6 +18,7 @@ namespace PKP\tests\classes\publication; use APP\publication\DAO; +use APP\publication\Publication; use PKP\citation\CitationDAO; use PKP\services\PKPSchemaService; use PKP\submission\SubmissionAgencyDAO; @@ -25,7 +26,9 @@ use PKP\submission\SubmissionKeywordDAO; use PKP\submission\SubmissionSubjectDAO; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(Publication::class)] class PublicationTest extends PKPTestCase { public $publication; @@ -53,12 +56,7 @@ protected function tearDown(): void unset($this->publication); parent::tearDown(); } - // - // Unit tests - // - /** - * @covers publication - */ + public function testPageArray() { $expected = [['i', 'ix'], ['6', '11'], ['19'], ['21']]; @@ -110,9 +108,6 @@ public function testPageArray() $this->assertSame($expected, $pageArray); } - /** - * @covers publication - */ public function testGetStartingPage() { $expected = 'i'; @@ -163,9 +158,6 @@ public function testGetStartingPage() $this->assertSame($expected, $startingPage); } - /** - * @covers publication - */ public function testGetEndingPage() { $expected = '21'; diff --git a/tests/classes/scheduledTask/ScheduledTaskHelperTest.php b/tests/classes/scheduledTask/ScheduledTaskHelperTest.php index 07d8224747a..d5619b3d146 100644 --- a/tests/classes/scheduledTask/ScheduledTaskHelperTest.php +++ b/tests/classes/scheduledTask/ScheduledTaskHelperTest.php @@ -18,6 +18,7 @@ namespace PKP\tests\classes\scheduledTask; +use PHPUnit\Framework\Attributes\DataProvider; use PKP\config\Config; use PKP\mail\Mail; use PKP\mail\Mailable; @@ -34,10 +35,9 @@ class ScheduledTaskHelperTest extends PKPTestCase * @param string $taskName * @param string $message * - * @dataProvider notifyExecutionResultTestsDataProvider - * * @covers ScheduledTaskHelper::notifyExecutionResult */ + #[DataProvider('notifyExecutionResultTestsDataProvider')] public function testNotifyExecutionResultError($taskId, $taskName, $message) { $taskResult = false; @@ -64,11 +64,10 @@ public function testNotifyExecutionResultError($taskId, $taskName, $message) * @param string $taskId * @param string $taskName * @param string $message - * - * @dataProvider notifyExecutionResultTestsDataProvider - * + * * @covers ScheduledTaskHelper::notifyExecutionResult */ + #[DataProvider('notifyExecutionResultTestsDataProvider')] public function testNotifyExecutionResultSuccess($taskId, $taskName, $message) { $taskResult = true; @@ -91,10 +90,8 @@ public function testNotifyExecutionResultSuccess($taskId, $taskName, $message) /** * All notifyExecutionResult tests data provider. - * - * @return array */ - public function notifyExecutionResultTestsDataProvider() + public static function notifyExecutionResultTestsDataProvider(): array { return [['someTaskId', 'TaskName', 'Any message']]; } @@ -119,7 +116,7 @@ private function _getHelper($expectedSubject, $message) ->getMock(); $helperMock->expects($this->any()) ->method('getMessage') - ->will($this->returnValue($message)); + ->willReturn($message); // Helper will use the Mail::send() method. Mock it. $mailMock = $this->getMockBuilder(Mailable::class) diff --git a/tests/classes/security/authorization/AuthorizationDecisionManagerTest.php b/tests/classes/security/authorization/AuthorizationDecisionManagerTest.php index 02dd562e94e..fced0872b55 100644 --- a/tests/classes/security/authorization/AuthorizationDecisionManagerTest.php +++ b/tests/classes/security/authorization/AuthorizationDecisionManagerTest.php @@ -23,7 +23,9 @@ use PKP\security\authorization\AuthorizationDecisionManager; use PKP\security\authorization\AuthorizationPolicy; use PKP\security\authorization\PolicySet; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(AuthorizationDecisionManager::class)] class AuthorizationDecisionManagerTest extends PolicyTestCase { private AuthorizationDecisionManager $decisionManager; @@ -34,9 +36,6 @@ protected function setUp(): void $this->decisionManager = new AuthorizationDecisionManager(); } - /** - * @covers AuthorizationDecisionManager - */ public function testDecideIfNoPolicyApplies() { // Mock a policy that doesn't apply. @@ -45,7 +44,7 @@ public function testDecideIfNoPolicyApplies() ->getMock(); $mockPolicy->expects($this->any()) ->method('applies') - ->will($this->returnValue(false)); + ->willReturn(false); $this->decisionManager->addPolicy($mockPolicy); // The default decision should be "deny". @@ -56,9 +55,6 @@ public function testDecideIfNoPolicyApplies() self::assertEquals(AuthorizationPolicy::AUTHORIZATION_PERMIT, $this->decisionManager->decide()); } - /** - * @covers AuthorizationDecisionManager - */ public function testAuthorizationMessages() { // Create policies that deny access. @@ -72,7 +68,7 @@ public function testAuthorizationMessages() ->getMock(); $permitPolicy->expects($this->any()) ->method('effect') - ->will($this->returnValue(AuthorizationPolicy::AUTHORIZATION_PERMIT)); + ->willReturn(AuthorizationPolicy::AUTHORIZATION_PERMIT); // Create a permit overrides policy set to make sure that // all policies will be tested even if several deny access. @@ -90,9 +86,6 @@ public function testAuthorizationMessages() self::assertEquals(['message 1', 'message 2'], $this->decisionManager->getAuthorizationMessages()); } - /** - * @covers AuthorizationDecisionManager - */ public function testAuthorizationContext() { // Create a test environment that can be used to @@ -107,9 +100,6 @@ public function testAuthorizationContext() self::assertInstanceOf('PKP\userGroup\UserGroup', $this->decisionManager->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_GROUP)); } - /** - * @covers AuthorizationDecisionManager - */ public function testDecide() { // We have to test policies and policy sets @@ -165,9 +155,6 @@ public function testDecide() self::assertEquals(AuthorizationPolicy::AUTHORIZATION_PERMIT, $decisionManager->decide()); } - /** - * @covers AuthorizationDecisionManager - */ public function testCallOnDeny() { // Create a policy with a call-on-deny advice. diff --git a/tests/classes/security/authorization/AuthorizationPolicyTest.php b/tests/classes/security/authorization/AuthorizationPolicyTest.php index c5d1201db89..d654575501a 100644 --- a/tests/classes/security/authorization/AuthorizationPolicyTest.php +++ b/tests/classes/security/authorization/AuthorizationPolicyTest.php @@ -21,12 +21,11 @@ use APP\core\Application; use PKP\security\authorization\AuthorizationPolicy; use PKP\tests\PKPTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(AuthorizationPolicy::class)] class AuthorizationPolicyTest extends PKPTestCase { - /** - * @covers AuthorizationPolicy - */ public function testAuthorizationPolicy() { $policy = new AuthorizationPolicy('some message'); diff --git a/tests/classes/security/authorization/PKPPublicAccessPolicyTest.php b/tests/classes/security/authorization/PKPPublicAccessPolicyTest.php index 009184d4eea..003941b586f 100644 --- a/tests/classes/security/authorization/PKPPublicAccessPolicyTest.php +++ b/tests/classes/security/authorization/PKPPublicAccessPolicyTest.php @@ -18,15 +18,15 @@ namespace PKP\tests\classes\security\authorization; +use PHPUnit\Framework\Attributes\CoversClass; +use PKP\security\authorization\HandlerOperationPolicy; use PKP\security\authorization\AuthorizationPolicy; use PKP\security\authorization\PKPPublicAccessPolicy; +#[CoversClass(PKPPublicAccessPolicy::class)] +#[CoversClass(HandlerOperationPolicy::class)] class PKPPublicAccessPolicyTest extends PolicyTestCase { - /** - * @covers PKPPublicAccessPolicy - * @covers HandlerOperationPolicy - */ public function testPKPPublicAccessPolicy() { // Mock a request to the permitted operation. diff --git a/tests/classes/security/authorization/PolicySetTest.php b/tests/classes/security/authorization/PolicySetTest.php index b6dffe9d9a4..ca09552fca5 100644 --- a/tests/classes/security/authorization/PolicySetTest.php +++ b/tests/classes/security/authorization/PolicySetTest.php @@ -18,15 +18,14 @@ namespace PKP\tests\classes\security\authorization; +use PHPUnit\Framework\Attributes\CoversClass; use PKP\security\authorization\AuthorizationPolicy; use PKP\security\authorization\PolicySet; use PKP\tests\PKPTestCase; +#[CoversClass(PolicySetTest::class)] class PolicySetTest extends PKPTestCase { - /** - * @covers PolicySet - */ public function testPolicySet() { // Test combining algorithm and default effect. diff --git a/tests/classes/security/authorization/PolicyTestCase.php b/tests/classes/security/authorization/PolicyTestCase.php index ab5c4768abd..de216d1f677 100644 --- a/tests/classes/security/authorization/PolicyTestCase.php +++ b/tests/classes/security/authorization/PolicyTestCase.php @@ -137,17 +137,17 @@ protected function getMockRequest($requestedOp, ?Context $context = null, $user $router->expects($this->any()) ->method('getHandler') - ->will($this->returnValue(new PKPHandler())); + ->willReturn(new PKPHandler()); // Mock the getRequestedOp() method. $router->expects($this->any()) ->method('getRequestedOp') - ->will($this->returnValue($requestedOp)); + ->willReturn($requestedOp); // Mock the getContext() method. $router->expects($this->any()) ->method('getContext') - ->will($this->returnValue($context)); + ->willReturn($context); // Put a user into the registry if one has been // passed in. diff --git a/tests/classes/security/authorization/RoleBasedHandlerOperationPolicyTest.php b/tests/classes/security/authorization/RoleBasedHandlerOperationPolicyTest.php index 3ab444fd59c..5f6159286f8 100644 --- a/tests/classes/security/authorization/RoleBasedHandlerOperationPolicyTest.php +++ b/tests/classes/security/authorization/RoleBasedHandlerOperationPolicyTest.php @@ -18,19 +18,18 @@ namespace PKP\tests\classes\security\authorization; +use PHPUnit\Framework\Attributes\CoversClass; use PKP\security\authorization\AuthorizationDecisionManager; use PKP\security\authorization\AuthorizationPolicy; use PKP\security\authorization\PolicySet; use PKP\security\authorization\RoleBasedHandlerOperationPolicy; use PKP\security\Role; +#[CoversClass(RoleBasedHandlerOperationPolicy::class)] class RoleBasedHandlerOperationPolicyTest extends PolicyTestCase { private const ROLE_ID_NON_AUTHORIZED = 0x7777; - /** - * @covers RoleBasedHandlerOperationPolicy - */ public function testRoleAuthorization() { // Construct the user roles array. diff --git a/tests/classes/validation/ValidatorControlledVocabTest.php b/tests/classes/validation/ValidatorControlledVocabTest.php index c1ad3e4541f..a7bed4d5b56 100644 --- a/tests/classes/validation/ValidatorControlledVocabTest.php +++ b/tests/classes/validation/ValidatorControlledVocabTest.php @@ -19,6 +19,7 @@ namespace PKP\tests\classes\validation; use APP\core\Application; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; use PKP\controlledVocab\ControlledVocab; use PKP\controlledVocab\ControlledVocabDAO; @@ -26,6 +27,7 @@ use PKP\tests\PKPTestCase; use PKP\validation\ValidatorControlledVocab; +#[CoversClass(ValidatorControlledVocab::class)] class ValidatorControlledVocabTest extends PKPTestCase { /** @@ -36,9 +38,6 @@ protected function getMockedDAOs(): array return [...parent::getMockedDAOs(), 'ControlledVocabDAO']; } - /** - * @covers ValidatorControlledVocab - */ public function testValidatorControlledVocab() { // Mock a ControlledVocab object @@ -54,7 +53,7 @@ public function testValidatorControlledVocab() // Set up the mock enumerate() method $mockControlledVocab->expects($this->any()) ->method('enumerate') - ->will($this->returnValue([1 => 'vocab1', 2 => 'vocab2'])); + ->willReturn([1 => 'vocab1', 2 => 'vocab2']); // Mock the ControlledVocabDAO $mockControlledVocabDao = $this->getMockBuilder(ControlledVocabDAO::class) @@ -65,7 +64,7 @@ public function testValidatorControlledVocab() $mockControlledVocabDao->expects($this->any()) ->method('getBySymbolic') ->with('testVocab', Application::ASSOC_TYPE_CITATION, 333) - ->will($this->returnValue($mockControlledVocab)); + ->willReturn($mockControlledVocab); DAORegistry::registerDAO('ControlledVocabDAO', $mockControlledVocabDao); diff --git a/tests/classes/validation/ValidatorEmailTest.php b/tests/classes/validation/ValidatorEmailTest.php index 8168bea0d9f..591ffccf567 100644 --- a/tests/classes/validation/ValidatorEmailTest.php +++ b/tests/classes/validation/ValidatorEmailTest.php @@ -20,13 +20,11 @@ use PKP\tests\PKPTestCase; use PKP\validation\ValidatorEmail; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(ValidatorEmail::class)] class ValidatorEmailTest extends PKPTestCase { - /** - * @covers ValidatorEmail - * @covers ValidatorRegExp - */ public function testValidatorEmail() { $validator = new ValidatorEmail(); diff --git a/tests/classes/validation/ValidatorISSNTest.php b/tests/classes/validation/ValidatorISSNTest.php index 5f911201d71..310ef1fdbc7 100644 --- a/tests/classes/validation/ValidatorISSNTest.php +++ b/tests/classes/validation/ValidatorISSNTest.php @@ -20,14 +20,11 @@ use PKP\tests\PKPTestCase; use PKP\validation\ValidatorISSN; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(ValidatorISSN::class)] class ValidatorISSNTest extends PKPTestCase { - /** - * @covers ValidatorISSN - * @covers ValidatorRegExp - * @covers Validator - */ public function testValidatorISSN() { $validator = new ValidatorISSN(); diff --git a/tests/classes/validation/ValidatorORCIDTest.php b/tests/classes/validation/ValidatorORCIDTest.php index 214a9ba4ba1..7020718afc0 100644 --- a/tests/classes/validation/ValidatorORCIDTest.php +++ b/tests/classes/validation/ValidatorORCIDTest.php @@ -20,14 +20,11 @@ use PKP\tests\PKPTestCase; use PKP\validation\ValidatorORCID; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(ValidatorORCID::class)] class ValidatorORCIDTest extends PKPTestCase { - /** - * @covers ValidatorORCID - * @covers ValidatorRegExp - * @covers Validator - */ public function testValidatorORCID() { $validator = new ValidatorORCID(); diff --git a/tests/classes/validation/ValidatorTypeDescriptionTest.php b/tests/classes/validation/ValidatorTypeDescriptionTest.php index b35b1ed4464..ee4815e812d 100644 --- a/tests/classes/validation/ValidatorTypeDescriptionTest.php +++ b/tests/classes/validation/ValidatorTypeDescriptionTest.php @@ -18,15 +18,14 @@ namespace PKP\tests\classes\validation; +use PHPUnit\Framework\Attributes\DataProvider; use PKP\tests\PKPTestCase; use PKP\validation\ValidatorTypeDescription; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(ValidatorTypeDescription::class)] class ValidatorTypeDescriptionTest extends PKPTestCase { - /** - * @covers ValidatorTypeDescription - * @covers TypeDescription - */ public function testInstantiateAndCheck() { $typeDescription = new ValidatorTypeDescription('email'); @@ -34,10 +33,6 @@ public function testInstantiateAndCheck() self::assertFalse($typeDescription->isCompatible('another string')); } - /** - * @covers ValidatorTypeDescription - * @covers TypeDescription - */ public function testInstantiateAndCheckWithParameters() { $typeDescription = new ValidatorTypeDescription('regExp("/123/")'); @@ -47,10 +42,7 @@ public function testInstantiateAndCheckWithParameters() self::assertFalse($typeDescription->checkType('abc')); } - /** - * Provides test data - */ - public function typeDescriptorDataProvider(): array + public static function typeDescriptorDataProvider(): array { return [ 'Invalid name' => ['email(xyz]'], @@ -59,12 +51,7 @@ public function typeDescriptorDataProvider(): array ]; } - /** - * @covers ValidatorTypeDescription - * @covers TypeDescription - * - * @dataProvider typeDescriptorDataProvider - */ + #[DataProvider('typeDescriptorDataProvider')] public function testInstantiateWithInvalidTypeDescriptor(string $type) { $this->expectException(\Exception::class); // Trying to instantiate a "validator" type description with an invalid type name "$type" diff --git a/tests/classes/validation/ValidatorUrlTest.php b/tests/classes/validation/ValidatorUrlTest.php index b45c6cddeef..795e98e9598 100644 --- a/tests/classes/validation/ValidatorUrlTest.php +++ b/tests/classes/validation/ValidatorUrlTest.php @@ -20,14 +20,11 @@ use PKP\tests\PKPTestCase; use PKP\validation\ValidatorUrl; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(ValidatorUrl::class)] class ValidatorUrlTest extends PKPTestCase { - /** - * @covers ValidatorUrl - * @covers ValidatorRegExp - * @covers Validator - */ public function testValidatorUrlAndUri() { $validator = new ValidatorUrl(); diff --git a/tests/classes/xslt/XMLTypeDescriptionTest.php b/tests/classes/xslt/XMLTypeDescriptionTest.php index 42be17a0704..8d71b0d242c 100644 --- a/tests/classes/xslt/XMLTypeDescriptionTest.php +++ b/tests/classes/xslt/XMLTypeDescriptionTest.php @@ -21,7 +21,9 @@ use PKP\tests\PKPTestCase; use PKP\tests\PKPTestHelper; use PKP\xslt\XMLTypeDescription; +use PHPUnit\Framework\Attributes\CoversClass; +#[CoversClass(XMLTypeDescription::class)] class XMLTypeDescriptionTest extends PKPTestCase { /** @@ -33,9 +35,6 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @covers XMLTypeDescription - */ public function testInstantiateAndCheck() { // Xdebug's scream parameter will disable the @ operator @@ -48,13 +47,13 @@ public function testInstantiateAndCheck() $testXmlDom->load(dirname(__FILE__) . '/dtdsample-valid.xml'); self::assertTrue($typeDescription->isCompatible($testXmlDom)); $testXmlDom->load(dirname(__FILE__) . '/dtdsample-invalid.xml'); - /** @var \Throwable $e */ - $exception = null; + + $exception = null; /** @var \Throwable $exception */ try { $typeDescription->isCompatible($testXmlDom); } catch(\Throwable $exception) { + self::assertMatchesRegularExpression('/element collection content does not follow the DTD/i', $exception?->getMessage()); } - self::assertMatchesRegularExpression('/element collection content does not follow the DTD/i', $exception?->getMessage()); // Test with xsd validation $typeDescription = new XMLTypeDescription('schema(' . dirname(__FILE__) . '/xsdsample.xsd)'); diff --git a/tests/phpunit.xml b/tests/phpunit.xml index eca9c0b0c51..d55d5849a99 100755 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -1,20 +1,19 @@ - - + stopOnFailure="true" + cacheDirectory=".phpunit.cache" + backupStaticProperties="false" +> + jobs @@ -35,14 +34,23 @@ + + + + + ./../classes ./../api ./../controllers ./../pages - - - - + + + + diff --git a/tests/plugins/PluginTestCase.php b/tests/plugins/PluginTestCase.php index 18507fde526..daf2c33a694 100644 --- a/tests/plugins/PluginTestCase.php +++ b/tests/plugins/PluginTestCase.php @@ -79,13 +79,14 @@ public function route($request) public function url( PKPRequest $request, ?string $newContext = null, - $handler = null, - $op = null, - $path = null, - $params = null, - $anchor = null, - $escape = false - ) { + ?string $handler = null, + ?string $op = null, + ?array $path = null, + ?array $params = null, + ?string $anchor = null, + bool $escape = false + ): string { + return ''; } public function handleAuthorizationFailure( @@ -97,10 +98,10 @@ public function handleAuthorizationFailure( }; $mockRequest->expects($this->any()) ->method('getRouter') - ->will($this->returnValue($router)); + ->willReturn($router); $mockRequest->expects($this->any()) ->method('getUser') - ->will($this->returnValue(null)); + ->willReturn(null); Registry::set('request', $mockRequest); // Instantiate the installer. diff --git a/tools/runAllTests.sh b/tools/runAllTests.sh index af08d2022fc..4d3be95bdf5 100755 --- a/tools/runAllTests.sh +++ b/tools/runAllTests.sh @@ -71,7 +71,7 @@ while getopts "CPcpdRJj" opt; do ;; esac done -PHPUNIT='php lib/pkp/lib/vendor/phpunit/phpunit/phpunit --configuration lib/pkp/tests/phpunit.xml --testdox --no-interaction' +PHPUNIT='php lib/pkp/lib/vendor/phpunit/phpunit/phpunit --configuration lib/pkp/tests/phpunit.xml --testdox' # Where to look for tests TEST_SUITES='--testsuite ' @@ -103,7 +103,7 @@ if [ "$DO_COVERAGE" -eq 1 ]; then export XDEBUG_MODE=coverage fi -$PHPUNIT $DEBUG -v ${TEST_SUITES%%,} +$PHPUNIT $DEBUG ${TEST_SUITES%%,} if [ "$DO_COVERAGE" -eq 1 ]; then cat lib/pkp/tests/results/coverage.txt