diff --git a/composer.json b/composer.json index 96abe0bed..2f232a488 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "cs:fix": "php-cs-fixer fix", "psalm": "psalm --threads=$(nproc) --no-cache", "psalm:update-baseline": "psalm --threads=$(nproc) --no-cache --update-baseline", - "psalm:fix": "psalm --no-cache --alter --issues=InvalidReturnType,InvalidNullableReturnType,MissingParamType,InvalidFalsableReturnType", + "psalm:fix": "psalm --no-cache --alter --issues=InvalidReturnType,InvalidNullableReturnType,MissingParamType,InvalidFalsableReturnType,MissingOverrideAttribute", "test:unit": "phpunit -c tests/phpunit.xml", "test:unit:coverage": "XDEBUG_MODE=coverage phpunit -c tests/phpunit.xml", "rector": "rector && composer cs:fix", diff --git a/composer.lock b/composer.lock index 755da0444..5523fcaa6 100644 --- a/composer.lock +++ b/composer.lock @@ -71,12 +71,12 @@ "source": { "type": "git", "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "d42bd36d0413b881b7459b220e1328bc57e48b38" + "reference": "2f3e07f61634b2d9bb6d8572e39614971798681a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/d42bd36d0413b881b7459b220e1328bc57e48b38", - "reference": "d42bd36d0413b881b7459b220e1328bc57e48b38", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/2f3e07f61634b2d9bb6d8572e39614971798681a", + "reference": "2f3e07f61634b2d9bb6d8572e39614971798681a", "shasum": "" }, "require": { @@ -112,7 +112,7 @@ "issues": "https://github.com/nextcloud-deps/ocp/issues", "source": "https://github.com/nextcloud-deps/ocp/tree/master" }, - "time": "2025-12-11T00:55:32+00:00" + "time": "2026-01-01T01:02:28+00:00" }, { "name": "psr/clock", diff --git a/cypress/e2e/files/filesUtils.ts b/cypress/e2e/files/filesUtils.ts index d786d1f42..c8fe5e039 100644 --- a/cypress/e2e/files/filesUtils.ts +++ b/cypress/e2e/files/filesUtils.ts @@ -198,9 +198,19 @@ export const navigateToFolder = (dirPath: string) => { } -export const closeSidebar = () => { +/** + * Close the sidebar + */ +export function closeSidebar() { // {force: true} as it might be hidden behind toasts - cy.get('[data-cy-sidebar] .app-sidebar__close').click({ force: true }) + cy.get('[data-cy-sidebar] .app-sidebar__close') + .click({ force: true }) + cy.get('[data-cy-sidebar]') + .should('not.be.visible') + // eslint-disable-next-line cypress/no-unnecessary-waiting -- wait for the animation to finish + cy.wait(500) + cy.url() + .should('not.contain', 'opendetails') } export const clickOnBreadcrumbs = (label: string) => { diff --git a/cypress/e2e/files_versions/filesVersionsUtils.ts b/cypress/e2e/files_versions/filesVersionsUtils.ts index 5f2f2532d..9793500bb 100644 --- a/cypress/e2e/files_versions/filesVersionsUtils.ts +++ b/cypress/e2e/files_versions/filesVersionsUtils.ts @@ -2,10 +2,11 @@ * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -/* eslint-disable jsdoc/require-jsdoc */ import type { User } from '@nextcloud/cypress' + +import { basename } from '@nextcloud/paths' import { addUserToGroup, createGroup, createGroupFolder, PERMISSION_DELETE, PERMISSION_READ, PERMISSION_WRITE } from '../groupfoldersUtils' -import { navigateToFolder } from '../files/filesUtils' +import { navigateToFolder, triggerActionForFile } from '../files/filesUtils' type SetupInfo = { dataSnapshot: string @@ -69,13 +70,15 @@ export const uploadThreeVersions = (user: User, fileName: string) => { export function openVersionsPanel(fileName: string) { // Detect the versions list fetch - cy.intercept({ method: 'PROPFIND', times: 1, url: '**/dav/versions/*/versions/**' }).as('getVersions') - - // Open the versions tab - cy.window().then(win => { - win.OCA.Files.Sidebar.setActiveTab('files_versions') - win.OCA.Files.Sidebar.open(`/${fileName}`) - }) + cy.intercept('PROPFIND', '**/dav/versions/*/versions/**').as('getVersions') + + triggerActionForFile(basename(fileName), 'details') + cy.get('[data-cy-sidebar]') + .as('sidebar') + .should('be.visible') + cy.get('@sidebar') + .find('[aria-controls="tab-files_versions"]') + .click() // Wait for the versions list to be fetched cy.wait('@getVersions') diff --git a/l10n/it.js b/l10n/it.js index aeb59a6ef..8a80ba507 100644 --- a/l10n/it.js +++ b/l10n/it.js @@ -3,6 +3,9 @@ OC.L10N.register( { "You cannot remove your own read permission." : "Non puoi rimuovere il tuo permesso di lettura.", "Team folders" : "Cartelle del team", + "Team Folders" : "Cartelle del team", + "Shared folders managed by admins, accessible to designated teams with configurable permissions and quotas" : "Cartelle condivise gestite dagli amministratori, accessibili ai team designati con autorizzazioni e quote configurabili", + "Team Folders (formerly \"Group Folders\") allows administrators to create and manage shared folders that are accessible\n\t\t\tto selected teams within Nextcloud.\n\n\t\t\tAdmins can configure folders from the Team Folders section in the admin settings, where they can grant access to one\n\t\t\tor more teams, set custom permissions (such as read, write, and sharing rights), and assign storage quotas to each\n\t\t\tfolder.\n\n\t\t\tAs of Hub 10/Nextcloud 31, admins must be members of a team to assign it a Team Folder. The app supports advanced\n\t\t\tfeatures such as quota management, granular access control, and integration with Nextcloud’s trash and versioning\n\t\t\tsystems." : "Le cartelle del team (in precedenza \"Cartelle di gruppo\") consentono agli amministratori di creare e gestire cartelle condivise accessibili\t\t\tai team selezionati all'interno di Nextcloud.\t\t\tGli amministratori possono configurare le cartelle dalla sezione Cartelle del team nelle impostazioni di amministrazione, dove possono concedere l'accesso a una\t\t\to più team, impostare autorizzazioni personalizzate (come diritti di lettura, scrittura e condivisione) e assegnare quote di archiviazione a ciascuna\t\t\tcartella.\t\t\tA partire da Hub 10/Nextcloud 31, gli amministratori devono essere membri di un team per potergli assegnare una cartella di team. L'app supporta funzionalità avanzate\t\t\tfunzionalità quali gestione delle quote, controllo granulare degli accessi e integrazione con il cestino e il controllo delle versioni di sistemi\t\t\tNextcloud.", "Denied (Inherited permission)" : "Negato (autorizzazione ereditata)", "Allowed (Inherited permission)" : "Consentito (autorizzazione ereditata)", "Denied" : "Negato", @@ -14,6 +17,7 @@ OC.L10N.register( "Allow" : "Consenti", "Group" : "Gruppo", "Team" : "Team", + "Advanced permissions for Team folder" : "Autorizzazioni avanzate per la cartella del team", "Team folder" : "Cartella del team", "Read" : "Lettura", "Write" : "Scrittura", @@ -22,6 +26,7 @@ OC.L10N.register( "Share" : "Condivisione", "You" : "Tu", "Remove access rule" : "Rimuovi regola di accesso", + "Add new rule" : "Aggiungi nuova regola", "Select a user or group" : "Seleziona un utente o gruppo", "Open Team folder" : "Apri cartella del team", "Permission denied. User does not have sufficient permissions." : "Permesso negato. L'utente non ha permessi sufficienti.", @@ -35,14 +40,19 @@ OC.L10N.register( "Are you sure you want to delete \"{folderName}\" and all files inside? This operation cannot be undone" : "Vuoi veramente eliminare \"{folderName}\" e i file in essa contenuti? Questa operazione non può essere annullata", "Delete \"{folderName}\"?" : "Vuoi eliminare \"{folderName}\"?", "Team folder admin delegation" : "Delega amministratore cartella team", + "Nextcloud allows you to delegate the administration of Team folders to non-admin users." : "Nextcloud consente di delegare l'amministrazione delle cartelle del team a utenti non amministratori.", + "Specify below the groups that will be allowed to manage Team folders and use its API/REST." : "Specificare di seguito i gruppi a cui sarà consentito gestire le cartelle del team e utilizzare la relativa API/REST.", "They will have access to all Team folders." : "Avranno accesso a tutte le cartelle del team.", + "Specify below the groups that will be allowed to manage Team folders and use its API/REST only." : "Specificare di seguito i gruppi a cui sarà consentito gestire le cartelle del team e utilizzare solo la relativa API/REST.", "They will only have access to Team folders for which they have advanced permissions." : "Avranno accesso solo alle cartelle del team per le quali dispongono di autorizzazioni avanzate.", "Group or team" : "Gruppo o team", "Sort by number of groups or teams that have access to this folder" : "Ordina per numero di gruppi o team che hanno accesso a questa cartella", "Sort by number of groups that have access to this folder" : "Ordina per numero di gruppi che hanno accesso a questa cartella", + "Advanced permissions allows setting permissions on a per-file basis but comes with a performance overhead" : "Le autorizzazioni avanzate consentono di impostare le autorizzazioni per ogni singolo file, ma comportano un sovraccarico di prestazioni", "Folder name" : "Nome della cartella", "Quota" : "Quota", "Advanced Permissions" : "Autorizzazioni avanzate", + "Do not grant any advanced permissions by default" : "Non concedere autorizzazioni avanzate per impostazione predefinita", "Pagination of team folders" : "Impaginazione delle cartelle del team", "Previous" : "Precedente", "Next" : "Successivo", diff --git a/l10n/it.json b/l10n/it.json index 69f5da821..ba3726bd6 100644 --- a/l10n/it.json +++ b/l10n/it.json @@ -1,6 +1,9 @@ { "translations": { "You cannot remove your own read permission." : "Non puoi rimuovere il tuo permesso di lettura.", "Team folders" : "Cartelle del team", + "Team Folders" : "Cartelle del team", + "Shared folders managed by admins, accessible to designated teams with configurable permissions and quotas" : "Cartelle condivise gestite dagli amministratori, accessibili ai team designati con autorizzazioni e quote configurabili", + "Team Folders (formerly \"Group Folders\") allows administrators to create and manage shared folders that are accessible\n\t\t\tto selected teams within Nextcloud.\n\n\t\t\tAdmins can configure folders from the Team Folders section in the admin settings, where they can grant access to one\n\t\t\tor more teams, set custom permissions (such as read, write, and sharing rights), and assign storage quotas to each\n\t\t\tfolder.\n\n\t\t\tAs of Hub 10/Nextcloud 31, admins must be members of a team to assign it a Team Folder. The app supports advanced\n\t\t\tfeatures such as quota management, granular access control, and integration with Nextcloud’s trash and versioning\n\t\t\tsystems." : "Le cartelle del team (in precedenza \"Cartelle di gruppo\") consentono agli amministratori di creare e gestire cartelle condivise accessibili\t\t\tai team selezionati all'interno di Nextcloud.\t\t\tGli amministratori possono configurare le cartelle dalla sezione Cartelle del team nelle impostazioni di amministrazione, dove possono concedere l'accesso a una\t\t\to più team, impostare autorizzazioni personalizzate (come diritti di lettura, scrittura e condivisione) e assegnare quote di archiviazione a ciascuna\t\t\tcartella.\t\t\tA partire da Hub 10/Nextcloud 31, gli amministratori devono essere membri di un team per potergli assegnare una cartella di team. L'app supporta funzionalità avanzate\t\t\tfunzionalità quali gestione delle quote, controllo granulare degli accessi e integrazione con il cestino e il controllo delle versioni di sistemi\t\t\tNextcloud.", "Denied (Inherited permission)" : "Negato (autorizzazione ereditata)", "Allowed (Inherited permission)" : "Consentito (autorizzazione ereditata)", "Denied" : "Negato", @@ -12,6 +15,7 @@ "Allow" : "Consenti", "Group" : "Gruppo", "Team" : "Team", + "Advanced permissions for Team folder" : "Autorizzazioni avanzate per la cartella del team", "Team folder" : "Cartella del team", "Read" : "Lettura", "Write" : "Scrittura", @@ -20,6 +24,7 @@ "Share" : "Condivisione", "You" : "Tu", "Remove access rule" : "Rimuovi regola di accesso", + "Add new rule" : "Aggiungi nuova regola", "Select a user or group" : "Seleziona un utente o gruppo", "Open Team folder" : "Apri cartella del team", "Permission denied. User does not have sufficient permissions." : "Permesso negato. L'utente non ha permessi sufficienti.", @@ -33,14 +38,19 @@ "Are you sure you want to delete \"{folderName}\" and all files inside? This operation cannot be undone" : "Vuoi veramente eliminare \"{folderName}\" e i file in essa contenuti? Questa operazione non può essere annullata", "Delete \"{folderName}\"?" : "Vuoi eliminare \"{folderName}\"?", "Team folder admin delegation" : "Delega amministratore cartella team", + "Nextcloud allows you to delegate the administration of Team folders to non-admin users." : "Nextcloud consente di delegare l'amministrazione delle cartelle del team a utenti non amministratori.", + "Specify below the groups that will be allowed to manage Team folders and use its API/REST." : "Specificare di seguito i gruppi a cui sarà consentito gestire le cartelle del team e utilizzare la relativa API/REST.", "They will have access to all Team folders." : "Avranno accesso a tutte le cartelle del team.", + "Specify below the groups that will be allowed to manage Team folders and use its API/REST only." : "Specificare di seguito i gruppi a cui sarà consentito gestire le cartelle del team e utilizzare solo la relativa API/REST.", "They will only have access to Team folders for which they have advanced permissions." : "Avranno accesso solo alle cartelle del team per le quali dispongono di autorizzazioni avanzate.", "Group or team" : "Gruppo o team", "Sort by number of groups or teams that have access to this folder" : "Ordina per numero di gruppi o team che hanno accesso a questa cartella", "Sort by number of groups that have access to this folder" : "Ordina per numero di gruppi che hanno accesso a questa cartella", + "Advanced permissions allows setting permissions on a per-file basis but comes with a performance overhead" : "Le autorizzazioni avanzate consentono di impostare le autorizzazioni per ogni singolo file, ma comportano un sovraccarico di prestazioni", "Folder name" : "Nome della cartella", "Quota" : "Quota", "Advanced Permissions" : "Autorizzazioni avanzate", + "Do not grant any advanced permissions by default" : "Non concedere autorizzazioni avanzate per impostazione predefinita", "Pagination of team folders" : "Impaginazione delle cartelle del team", "Previous" : "Precedente", "Next" : "Successivo", diff --git a/lib/ACL/ACLCacheWrapper.php b/lib/ACL/ACLCacheWrapper.php index 88753736a..4fc35c31e 100644 --- a/lib/ACL/ACLCacheWrapper.php +++ b/lib/ACL/ACLCacheWrapper.php @@ -43,6 +43,7 @@ private function getACLPermissionsForPath(string $path, array $rules = []): int return $canRead ? $permissions : 0; } + #[\Override] protected function formatCacheEntry($entry, array $rules = []): ICacheEntry|false { if (isset($entry['permissions'])) { $entry['scan_permissions'] ??= $entry['permissions']; @@ -55,6 +56,7 @@ protected function formatCacheEntry($entry, array $rules = []): ICacheEntry|fals return $entry; } + #[\Override] public function getFolderContentsById($fileId): array { $results = $this->getCache()->getFolderContentsById($fileId); $rules = $this->preloadEntries($results); @@ -62,6 +64,7 @@ public function getFolderContentsById($fileId): array { return array_filter(array_map(fn (ICacheEntry $entry): ICacheEntry|false => $this->formatCacheEntry($entry, $rules), $results)); } + #[\Override] public function search($pattern): array { $results = $this->getCache()->search($pattern); $this->preloadEntries($results); @@ -69,6 +72,7 @@ public function search($pattern): array { return array_filter(array_map($this->formatCacheEntry(...), $results)); } + #[\Override] public function searchByMime($mimetype): array { $results = $this->getCache()->searchByMime($mimetype); $this->preloadEntries($results); @@ -76,6 +80,7 @@ public function searchByMime($mimetype): array { return array_filter(array_map($this->formatCacheEntry(...), $results)); } + #[\Override] public function searchQuery(ISearchQuery $query): array { $results = $this->getCache()->searchQuery($query); $this->preloadEntries($results); diff --git a/lib/ACL/ACLStorageWrapper.php b/lib/ACL/ACLStorageWrapper.php index 976fca1f7..525303e1a 100644 --- a/lib/ACL/ACLStorageWrapper.php +++ b/lib/ACL/ACLStorageWrapper.php @@ -47,32 +47,39 @@ private function checkPermissions(string $path, int $permissions): bool { return ($this->getACLPermissionsForPath($path) & $permissions) === $permissions; } + #[\Override] public function isReadable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::isReadable($path); } + #[\Override] public function isUpdatable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_UPDATE) && parent::isUpdatable($path); } + #[\Override] public function isCreatable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_CREATE) && parent::isCreatable($path); } + #[\Override] public function isDeletable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) && parent::isDeletable($path); } + #[\Override] public function isSharable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_SHARE) && parent::isSharable($path); } + #[\Override] public function getPermissions(string $path): int { return $this->storage->getPermissions($path) & $this->getACLPermissionsForPath($path); } + #[\Override] public function rename(string $source, string $target): bool { if (str_starts_with($source, $target)) { $part = substr($source, strlen($target)); @@ -100,6 +107,7 @@ public function rename(string $source, string $target): bool { && parent::rename($source, $target); } + #[\Override] public function opendir(string $path) { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -122,6 +130,7 @@ public function opendir(string $path) { return IteratorDirectory::wrap($items); } + #[\Override] public function copy(string $source, string $target): bool { $permissions = $this->file_exists($target) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($target, $permissions) @@ -129,21 +138,25 @@ public function copy(string $source, string $target): bool { && parent::copy($source, $target); } + #[\Override] public function touch(string $path, ?int $mtime = null): bool { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) && parent::touch($path, $mtime); } + #[\Override] public function mkdir(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_CREATE) && parent::mkdir($path); } + #[\Override] public function rmdir(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) && parent::rmdir($path); } + #[\Override] public function unlink(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) @@ -158,11 +171,13 @@ private function canDeleteTree(string $path): int { return $this->aclManager->getPermissionsForTree($this->folderId, $this->storageId, $path) & Constants::PERMISSION_DELETE; } + #[\Override] public function file_put_contents(string $path, mixed $data): int|float|false { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) ? parent::file_put_contents($path, $data) : false; } + #[\Override] public function fopen(string $path, string $mode) { if ($mode === 'r' or $mode === 'rb') { $permissions = Constants::PERMISSION_READ; @@ -173,6 +188,7 @@ public function fopen(string $path, string $mode) { return $this->checkPermissions($path, $permissions) ? parent::fopen($path, $mode) : false; } + #[\Override] public function writeStream(string $path, $stream, ?int $size = null): int { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) ? parent::writeStream($path, $stream, $size) : 0; @@ -181,6 +197,7 @@ public function writeStream(string $path, $stream, ?int $size = null): int { /** * @inheritDoc */ + #[\Override] public function getCache(string $path = '', ?IStorage $storage = null): ICache { if (!$storage) { $storage = $this; @@ -191,6 +208,7 @@ public function getCache(string $path = '', ?IStorage $storage = null): ICache { return new ACLCacheWrapper($sourceCache, $this->aclManager, $this->folderId, $this->inShare); } + #[\Override] public function getMetaData(string $path): ?array { $data = parent::getMetaData($path); @@ -205,6 +223,7 @@ public function getMetaData(string $path): ?array { /** * @inheritDoc */ + #[\Override] public function getScanner(string $path = '', ?IStorage $storage = null): IScanner { if (!$storage) { $storage = $this->storage; @@ -213,16 +232,19 @@ public function getScanner(string $path = '', ?IStorage $storage = null): IScann return parent::getScanner($path, $storage); } + #[\Override] public function is_dir(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::is_dir($path); } + #[\Override] public function is_file(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::is_file($path); } + #[\Override] public function stat(string $path): array|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -231,6 +253,7 @@ public function stat(string $path): array|false { return parent::stat($path); } + #[\Override] public function filetype(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -239,6 +262,7 @@ public function filetype(string $path): string|false { return parent::filetype($path); } + #[\Override] public function filesize(string $path): false|int|float { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -247,11 +271,13 @@ public function filesize(string $path): false|int|float { return parent::filesize($path); } + #[\Override] public function file_exists(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::file_exists($path); } + #[\Override] public function filemtime(string $path): int|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -260,6 +286,7 @@ public function filemtime(string $path): int|false { return parent::filemtime($path); } + #[\Override] public function file_get_contents(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -268,6 +295,7 @@ public function file_get_contents(string $path): string|false { return parent::file_get_contents($path); } + #[\Override] public function getMimeType(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -276,6 +304,7 @@ public function getMimeType(string $path): string|false { return parent::getMimeType($path); } + #[\Override] public function hash(string $type, string $path, bool $raw = false): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -284,6 +313,7 @@ public function hash(string $type, string $path, bool $raw = false): string|fals return parent::hash($type, $path, $raw); } + #[\Override] public function getETag(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -292,6 +322,7 @@ public function getETag(string $path): string|false { return parent::getETag($path); } + #[\Override] public function getDirectDownload(string $path): array|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -300,6 +331,7 @@ public function getDirectDownload(string $path): array|false { return parent::getDirectDownload($path); } + #[\Override] public function getDirectoryContent(string $directory): \Traversable { $content = $this->getWrapperStorage()->getDirectoryContent($directory); foreach ($content as $data) { diff --git a/lib/ACL/Rule.php b/lib/ACL/Rule.php index 528151e5c..c82613466 100644 --- a/lib/ACL/Rule.php +++ b/lib/ACL/Rule.php @@ -95,6 +95,7 @@ public function applyDenyPermissions(int $permissions): int { return $permissions & $denyMask; } + #[\Override] public function xmlSerialize(Writer $writer): void { $data = [ self::ACL => [ @@ -108,6 +109,7 @@ public function xmlSerialize(Writer $writer): void { $writer->write($data); } + #[\Override] public function jsonSerialize(): array { return [ 'mapping' => [ @@ -119,6 +121,7 @@ public function jsonSerialize(): array { ]; } + #[\Override] public static function xmlDeserialize(Reader $reader): Rule { $elements = \Sabre\Xml\Deserializer\keyValue($reader); diff --git a/lib/ACL/UserMapping/UserMapping.php b/lib/ACL/UserMapping/UserMapping.php index 74858b110..2c6f632bb 100644 --- a/lib/ACL/UserMapping/UserMapping.php +++ b/lib/ACL/UserMapping/UserMapping.php @@ -22,18 +22,22 @@ public function __construct( $this->displayName = $displayName ?? $id; } + #[\Override] public function getType(): string { return $this->type; } + #[\Override] public function getId(): string { return $this->id; } + #[\Override] public function getDisplayName(): string { return $this->displayName; } + #[\Override] public function getKey(): string { return $this->getType() . ':' . $this->getId(); } diff --git a/lib/ACL/UserMapping/UserMappingManager.php b/lib/ACL/UserMapping/UserMappingManager.php index b2cc2bbaa..22cfc1294 100644 --- a/lib/ACL/UserMapping/UserMappingManager.php +++ b/lib/ACL/UserMapping/UserMappingManager.php @@ -29,6 +29,7 @@ public function __construct( ) { } + #[\Override] public function getMappingsForUser(IUser $user, bool $userAssignable = true): array { $groupMappings = array_values(array_map(fn (IGroup $group): UserMapping => new UserMapping('group', $group->getGID(), $group->getDisplayName()), $this->groupManager->getUserGroups($user))); $circleMappings = array_values(array_map(fn (Circle $circle): UserMapping => new UserMapping('circle', $circle->getSingleId(), $circle->getDisplayName()), $this->getUserCircles($user->getUID()))); @@ -38,6 +39,7 @@ public function getMappingsForUser(IUser $user, bool $userAssignable = true): ar ], $groupMappings, $circleMappings); } + #[\Override] public function mappingFromId(string $type, string $id): ?IUserMapping { switch ($type) { case 'group': @@ -115,6 +117,7 @@ public function getCirclesManager(): ?CirclesManager { } } + #[\Override] public function userInMappings(IUser $user, array $mappings): bool { foreach ($mappings as $mapping) { if ($mapping->getType() === 'user' && $mapping->getId() === $user->getUID()) { diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index e2a10e475..d963acb7b 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -68,6 +68,7 @@ public function __construct(array $urlParams = []) { 'workspace' ]; + #[\Override] public function register(IRegistrationContext $context): void { /** Register $principalBackend for the DAV collection */ $context->registerServiceAlias('principalBackend', Principal::class); @@ -184,6 +185,7 @@ public function register(IRegistrationContext $context): void { $context->registerMiddleware(AuthorizedAdminSettingMiddleware::class); } + #[\Override] public function boot(IBootContext $context): void { $context->injectFn(function (IMountProviderCollection $mountProviderCollection, CacheListener $cacheListener, IEventDispatcher $eventDispatcher): void { $mountProviderCollection->registerProvider(Server::get(MountProvider::class)); diff --git a/lib/AppInfo/Capabilities.php b/lib/AppInfo/Capabilities.php index 6369e58cd..d4bdacda9 100644 --- a/lib/AppInfo/Capabilities.php +++ b/lib/AppInfo/Capabilities.php @@ -29,6 +29,7 @@ public function __construct( * }, * } */ + #[\Override] public function getCapabilities(): array { $user = $this->userSession->getUser(); if (!$user) { diff --git a/lib/AuthorizedAdminSettingMiddleware.php b/lib/AuthorizedAdminSettingMiddleware.php index 751de7682..30464e726 100644 --- a/lib/AuthorizedAdminSettingMiddleware.php +++ b/lib/AuthorizedAdminSettingMiddleware.php @@ -30,6 +30,7 @@ public function __construct( /** * Throws an error when the user is not allowed to use the app's APIs */ + #[\Override] public function beforeController(Controller $controller, string $methodName): void { $method = new ReflectionMethod($controller, $methodName); if ($method->getAttributes(RequireGroupFolderAdmin::class) !== [] && !$this->delegatedService->hasApiAccess()) { @@ -37,6 +38,7 @@ public function beforeController(Controller $controller, string $methodName): vo } } + #[\Override] public function afterException(Controller $controller, string $methodName, Exception $exception): Response { /** @var Http::STATUS_* $code */ $code = $exception->getCode(); diff --git a/lib/BackgroundJob/ExpireGroupPlaceholder.php b/lib/BackgroundJob/ExpireGroupPlaceholder.php index 907a54af5..1031a8cbf 100644 --- a/lib/BackgroundJob/ExpireGroupPlaceholder.php +++ b/lib/BackgroundJob/ExpireGroupPlaceholder.php @@ -18,6 +18,7 @@ public function __construct(ITimeFactory $timeFactory) { $this->setInterval(60 * 60 * 99999999); } + #[\Override] protected function run(mixed $argument): void { // noop } diff --git a/lib/BackgroundJob/ExpireGroupTrash.php b/lib/BackgroundJob/ExpireGroupTrash.php index 8d7732fcc..b03e4fe47 100644 --- a/lib/BackgroundJob/ExpireGroupTrash.php +++ b/lib/BackgroundJob/ExpireGroupTrash.php @@ -26,6 +26,7 @@ public function __construct( $this->setInterval(60 * 60); } + #[\Override] protected function run(mixed $argument): void { $backgroundJob = $this->config->getValueString('files_trashbin', 'background_job_expire_trash', 'yes'); if ($backgroundJob === 'no') { diff --git a/lib/BackgroundJob/ExpireGroupVersions.php b/lib/BackgroundJob/ExpireGroupVersions.php index 304e58497..7a75e5d7b 100644 --- a/lib/BackgroundJob/ExpireGroupVersions.php +++ b/lib/BackgroundJob/ExpireGroupVersions.php @@ -38,6 +38,7 @@ public function __construct( * Expiring groupfolder versions can be quite expensive. * We need to limit the amount of folders we expire per run. */ + #[\Override] protected function run(mixed $argument): void { $lastFolder = $this->appConfig->getValueInt(Application::APP_ID, 'cron_last_folder_index', 0); $folders = $this->folderManager->getAllFoldersWithSize(); diff --git a/lib/CacheListener.php b/lib/CacheListener.php index 04d5d6394..a9fa0e081 100644 --- a/lib/CacheListener.php +++ b/lib/CacheListener.php @@ -33,7 +33,9 @@ public function onCacheEvent(ICacheEvent $event): void { if (!$storage->instanceOfStorage(Jail::class)) { return; } - if ($path = $storage->getJailedPath($event->getPath())) { + /** @var Jail $storage */ + $path = $storage->getJailedPath($event->getPath()); + if ($path !== null) { $event->setPath($path); } } diff --git a/lib/Command/Create.php b/lib/Command/Create.php index 8d88a7420..b941e09bd 100644 --- a/lib/Command/Create.php +++ b/lib/Command/Create.php @@ -22,6 +22,7 @@ public function __construct( parent::__construct(); } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:create') @@ -32,6 +33,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $name = trim((string)$input->getArgument('name')); diff --git a/lib/Command/ExpireGroup/ExpireGroupBase.php b/lib/Command/ExpireGroup/ExpireGroupBase.php index caad5f2bf..1abd9aacc 100644 --- a/lib/Command/ExpireGroup/ExpireGroupBase.php +++ b/lib/Command/ExpireGroup/ExpireGroupBase.php @@ -20,6 +20,7 @@ public function __construct() { parent::__construct(); } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:expire') @@ -27,6 +28,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $output->writeln('groupfolder expiration handling is currently disabled because there is nothing to expire. Enable the "Delete Files" or/and "Versions" app to enable this feature.'); return 0; diff --git a/lib/Command/ExpireGroupVersionsPlaceholder.php b/lib/Command/ExpireGroupVersionsPlaceholder.php index ec9eea4b6..51022254f 100644 --- a/lib/Command/ExpireGroupVersionsPlaceholder.php +++ b/lib/Command/ExpireGroupVersionsPlaceholder.php @@ -13,6 +13,7 @@ use Symfony\Component\Console\Output\OutputInterface; class ExpireGroupVersionsPlaceholder extends Base { + #[\Override] protected function configure(): void { $this ->setName('groupfolders:expire') @@ -20,6 +21,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $output->writeln('Team folder version handling is only supported with Nextcloud 15 and up'); return 0; diff --git a/lib/Command/ListCommand.php b/lib/Command/ListCommand.php index 2250975bb..d24bdf3c9 100644 --- a/lib/Command/ListCommand.php +++ b/lib/Command/ListCommand.php @@ -38,6 +38,7 @@ public function __construct( parent::__construct(); } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:list') @@ -46,6 +47,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $userId = $input->getOption('user'); $groups = $this->groupManager->search(''); diff --git a/lib/Command/Trashbin/Cleanup.php b/lib/Command/Trashbin/Cleanup.php index 108b0360e..3ba3c936d 100644 --- a/lib/Command/Trashbin/Cleanup.php +++ b/lib/Command/Trashbin/Cleanup.php @@ -35,6 +35,7 @@ public function __construct( } } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:trashbin:cleanup') @@ -44,6 +45,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { if (!$this->trashBackend) { $output->writeln('files_trashbin is disabled: Team folders trashbin is not available'); diff --git a/lib/DAV/ACLPlugin.php b/lib/DAV/ACLPlugin.php index 0fa0851bc..da5f1f6d4 100644 --- a/lib/DAV/ACLPlugin.php +++ b/lib/DAV/ACLPlugin.php @@ -62,6 +62,7 @@ private function isAdmin(IUser $user, string $path): bool { return $this->canManageACL[$folderId]; } + #[\Override] public function initialize(Server $server): void { $this->server = $server; $this->user = $this->userSession->getUser(); diff --git a/lib/DAV/GroupFoldersHome.php b/lib/DAV/GroupFoldersHome.php index 72c92e1f9..63b80f1f0 100644 --- a/lib/DAV/GroupFoldersHome.php +++ b/lib/DAV/GroupFoldersHome.php @@ -27,23 +27,28 @@ public function __construct( ) { } + #[\Override] public function delete(): never { throw new Forbidden(); } + #[\Override] public function getName(): string { [, $name] = \Sabre\Uri\split($this->principalInfo['uri']); return $name; } + #[\Override] public function setName($name): never { throw new Forbidden('Permission denied to rename this folder'); } + #[\Override] public function createFile($name, $data = null): never { throw new Forbidden('Not allowed to create files in this folder'); } + #[\Override] public function createDirectory($name): never { throw new Forbidden('Permission denied to create folders in this folder'); } @@ -76,6 +81,7 @@ private function getDirectoryForFolder(FolderDefinition $folder): GroupFolderNod return new GroupFolderNode($view, $node, $folder->id); } + #[\Override] public function getChild($name): GroupFolderNode { $folder = $this->getFolder($name); if ($folder) { @@ -88,6 +94,7 @@ public function getChild($name): GroupFolderNode { /** * @return GroupFolderNode[] */ + #[\Override] public function getChildren(): array { $storageId = $this->rootFolder->getMountPoint()->getNumericStorageId(); if ($storageId === null) { @@ -102,10 +109,12 @@ public function getChildren(): array { return array_map($this->getDirectoryForFolder(...), $folders); } + #[\Override] public function childExists($name): bool { return $this->getFolder($name) !== null; } + #[\Override] public function getLastModified(): int { return 0; } diff --git a/lib/DAV/PropFindPlugin.php b/lib/DAV/PropFindPlugin.php index 630a848ac..0444bc6f4 100644 --- a/lib/DAV/PropFindPlugin.php +++ b/lib/DAV/PropFindPlugin.php @@ -32,10 +32,12 @@ public function __construct(IRootFolder $rootFolder, IUserSession $userSession) } + #[\Override] public function getPluginName(): string { return 'groupFoldersDavPlugin'; } + #[\Override] public function initialize(Server $server): void { $server->on('propFind', $this->propFind(...)); } diff --git a/lib/DAV/RootCollection.php b/lib/DAV/RootCollection.php index 1861870a0..6b814c5d9 100644 --- a/lib/DAV/RootCollection.php +++ b/lib/DAV/RootCollection.php @@ -31,6 +31,7 @@ public function __construct( * at least contain a uri item. Other properties may or may not be * supplied by the authentication backend. */ + #[\Override] public function getChildForPrincipal(array $principalInfo): GroupFoldersHome { [, $name] = \Sabre\Uri\split($principalInfo['uri']); $user = $this->userSession->getUser(); @@ -41,6 +42,7 @@ public function getChildForPrincipal(array $principalInfo): GroupFoldersHome { return new GroupFoldersHome($principalInfo, $this->folderManager, $this->rootFolder, $user); } + #[\Override] public function getName(): string { return 'groupfolders'; } diff --git a/lib/Folder/FolderWithMappingsAndCache.php b/lib/Folder/FolderWithMappingsAndCache.php index 90a2eba88..025f6206f 100644 --- a/lib/Folder/FolderWithMappingsAndCache.php +++ b/lib/Folder/FolderWithMappingsAndCache.php @@ -56,6 +56,7 @@ public static function fromFolderWithMapping(FolderDefinitionWithMappings $folde ); } + #[\Override] public function toArray(): array { return [ 'id' => $this->id, diff --git a/lib/Listeners/CircleDestroyedEventListener.php b/lib/Listeners/CircleDestroyedEventListener.php index f1ae1a660..88c9236bd 100644 --- a/lib/Listeners/CircleDestroyedEventListener.php +++ b/lib/Listeners/CircleDestroyedEventListener.php @@ -24,6 +24,7 @@ public function __construct( } + #[\Override] public function handle(Event $event): void { if (!$event instanceof CircleDestroyedEvent) { return; diff --git a/lib/Listeners/LoadAdditionalScriptsListener.php b/lib/Listeners/LoadAdditionalScriptsListener.php index f79dd18a5..b96e6b7ae 100644 --- a/lib/Listeners/LoadAdditionalScriptsListener.php +++ b/lib/Listeners/LoadAdditionalScriptsListener.php @@ -18,6 +18,7 @@ * @template-implements IEventListener */ class LoadAdditionalScriptsListener implements IEventListener { + #[\Override] public function handle(Event $event): void { if (!$event instanceof LoadAdditionalScriptsEvent && !$event instanceof BeforeTemplateRenderedEvent) { return; diff --git a/lib/Listeners/NodeRenamedListener.php b/lib/Listeners/NodeRenamedListener.php index c692d1f20..7727c50f8 100644 --- a/lib/Listeners/NodeRenamedListener.php +++ b/lib/Listeners/NodeRenamedListener.php @@ -25,6 +25,7 @@ public function __construct( ) { } + #[\Override] public function handle(Event $event): void { if (!$event instanceof NodeRenamedEvent) { return; diff --git a/lib/Migration/Version1000000Date20210216085047.php b/lib/Migration/Version1000000Date20210216085047.php index a919c07d9..76f9a47bd 100644 --- a/lib/Migration/Version1000000Date20210216085047.php +++ b/lib/Migration/Version1000000Date20210216085047.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version1000000Date20210216085047 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version102020Date20180806161449.php b/lib/Migration/Version102020Date20180806161449.php index 0b9933505..9804184d1 100644 --- a/lib/Migration/Version102020Date20180806161449.php +++ b/lib/Migration/Version102020Date20180806161449.php @@ -14,6 +14,7 @@ use OCP\Migration\SimpleMigrationStep; class Version102020Date20180806161449 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version103000Date20180806161724.php b/lib/Migration/Version103000Date20180806161724.php index cd772bd5c..7221ff465 100644 --- a/lib/Migration/Version103000Date20180806161724.php +++ b/lib/Migration/Version103000Date20180806161724.php @@ -21,6 +21,7 @@ public function __construct( ) { } + #[\Override] public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); @@ -35,6 +36,7 @@ public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array } } + #[\Override] public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); @@ -71,6 +73,7 @@ public function changeSchema(IOutput $output, \Closure $schemaClosure, array $op return $schema; } + #[\Override] public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { if (count($this->applicableData)) { $query = $this->connection->getQueryBuilder(); diff --git a/lib/Migration/Version104000Date20180918132853.php b/lib/Migration/Version104000Date20180918132853.php index 0c772bbab..69784cf2e 100644 --- a/lib/Migration/Version104000Date20180918132853.php +++ b/lib/Migration/Version104000Date20180918132853.php @@ -13,14 +13,17 @@ use OCP\Migration\SimpleMigrationStep; class Version104000Date20180918132853 extends SimpleMigrationStep { + #[\Override] public function name(): string { return 'Add group_folders_trash table'; } + #[\Override] public function description(): string { return 'Adds table to store trashbin information for Team folders'; } + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version1401000Date20230426112001.php b/lib/Migration/Version1401000Date20230426112001.php index dfd3bb574..99b86ab9e 100644 --- a/lib/Migration/Version1401000Date20230426112001.php +++ b/lib/Migration/Version1401000Date20230426112001.php @@ -14,6 +14,7 @@ use OCP\Migration\SimpleMigrationStep; class Version1401000Date20230426112001 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version1401000Date20230426112002.php b/lib/Migration/Version1401000Date20230426112002.php index cac09b4f0..2d4aa129b 100644 --- a/lib/Migration/Version1401000Date20230426112002.php +++ b/lib/Migration/Version1401000Date20230426112002.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version1401000Date20230426112002 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version16000Date20230821085801.php b/lib/Migration/Version16000Date20230821085801.php index 9af0e940c..c652456aa 100644 --- a/lib/Migration/Version16000Date20230821085801.php +++ b/lib/Migration/Version16000Date20230821085801.php @@ -16,6 +16,7 @@ use OCP\Migration\SimpleMigrationStep; class Version16000Date20230821085801 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version19000Date20240903062631.php b/lib/Migration/Version19000Date20240903062631.php index 0e397385d..d1e69a9de 100644 --- a/lib/Migration/Version19000Date20240903062631.php +++ b/lib/Migration/Version19000Date20240903062631.php @@ -15,6 +15,7 @@ use OCP\Migration\SimpleMigrationStep; class Version19000Date20240903062631 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version19000Date20241029123147.php b/lib/Migration/Version19000Date20241029123147.php index 00348cea0..ca7e49546 100644 --- a/lib/Migration/Version19000Date20241029123147.php +++ b/lib/Migration/Version19000Date20241029123147.php @@ -18,6 +18,7 @@ class Version19000Date20241029123147 extends SimpleMigrationStep { /** * @param Closure(): ISchemaWrapper $schemaClosure */ + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version2000000Date20250128110101.php b/lib/Migration/Version2000000Date20250128110101.php index 3d46ca898..94c7bd696 100644 --- a/lib/Migration/Version2000000Date20250128110101.php +++ b/lib/Migration/Version2000000Date20250128110101.php @@ -16,6 +16,7 @@ #[AddIndex('group_folders_groups', IndexType::INDEX, 'adding index on single circle id for better select')] class Version2000000Date20250128110101 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version201000Date20190111132839.php b/lib/Migration/Version201000Date20190111132839.php index e148b37df..080c933b1 100644 --- a/lib/Migration/Version201000Date20190111132839.php +++ b/lib/Migration/Version201000Date20190111132839.php @@ -13,14 +13,17 @@ use OCP\Migration\SimpleMigrationStep; class Version201000Date20190111132839 extends SimpleMigrationStep { + #[\Override] public function name(): string { return 'Add groupfolder_acl table'; } + #[\Override] public function description(): string { return 'Adds table to store ACL information for Team folders'; } + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version201000Date20190212150323.php b/lib/Migration/Version201000Date20190212150323.php index 41fdb7e3e..6cefccfc2 100644 --- a/lib/Migration/Version201000Date20190212150323.php +++ b/lib/Migration/Version201000Date20190212150323.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version201000Date20190212150323 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version300000Date20240905185515.php b/lib/Migration/Version300000Date20240905185515.php index e1cb6e42d..e1b9c259f 100644 --- a/lib/Migration/Version300000Date20240905185515.php +++ b/lib/Migration/Version300000Date20240905185515.php @@ -19,6 +19,7 @@ * Adds the delete_by column to the group_folders_trash table */ class Version300000Date20240905185515 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version401001Date20190715092137.php b/lib/Migration/Version401001Date20190715092137.php index 7d5ee7166..eb71d647c 100644 --- a/lib/Migration/Version401001Date20190715092137.php +++ b/lib/Migration/Version401001Date20190715092137.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version401001Date20190715092137 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version501000Date20190927102434.php b/lib/Migration/Version501000Date20190927102434.php index a5c09cefe..7bdd77348 100644 --- a/lib/Migration/Version501000Date20190927102434.php +++ b/lib/Migration/Version501000Date20190927102434.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version501000Date20190927102434 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version501000Date20191218182434.php b/lib/Migration/Version501000Date20191218182434.php index 0fbe3a33b..88c38fdee 100644 --- a/lib/Migration/Version501000Date20191218182434.php +++ b/lib/Migration/Version501000Date20191218182434.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version501000Date20191218182434 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version802000Date20201119112624.php b/lib/Migration/Version802000Date20201119112624.php index 95105b54f..4d4b1d407 100644 --- a/lib/Migration/Version802000Date20201119112624.php +++ b/lib/Migration/Version802000Date20201119112624.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version802000Date20201119112624 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/WrongDefaultQuotaRepairStep.php b/lib/Migration/WrongDefaultQuotaRepairStep.php index 1048eef63..97e9ad787 100644 --- a/lib/Migration/WrongDefaultQuotaRepairStep.php +++ b/lib/Migration/WrongDefaultQuotaRepairStep.php @@ -21,6 +21,7 @@ public function __construct( } + #[\Override] public function getName(): string { return 'Adjust Groupfolders with wrong default quotas'; } @@ -28,6 +29,7 @@ public function getName(): string { /** * @throws Exception */ + #[\Override] public function run(IOutput $output): void { foreach ($this->manager->getAllFolders() as $id => $folder) { $quota = $folder->quota; diff --git a/lib/Mount/CacheRootPermissionsMask.php b/lib/Mount/CacheRootPermissionsMask.php index c85f2d30a..3d0fc95d4 100644 --- a/lib/Mount/CacheRootPermissionsMask.php +++ b/lib/Mount/CacheRootPermissionsMask.php @@ -21,6 +21,7 @@ public function __construct( parent::__construct($cache); } + #[\Override] protected function formatCacheEntry($entry): ICacheEntry|false { $isRoot = $entry->getId() === $this->rootId; if (isset($entry['permissions']) && $isRoot) { diff --git a/lib/Mount/GroupFolderEncryptionJail.php b/lib/Mount/GroupFolderEncryptionJail.php index 295bb6cf3..96e7a24a3 100644 --- a/lib/Mount/GroupFolderEncryptionJail.php +++ b/lib/Mount/GroupFolderEncryptionJail.php @@ -23,6 +23,7 @@ class GroupFolderEncryptionJail extends Jail { * @param string $path * @param ?IStorage $storage */ + #[\Override] public function getCache($path = '', $storage = null): ICache { if (!$storage) { $storage = $this->getWrapperStorage(); diff --git a/lib/Mount/GroupFolderStorage.php b/lib/Mount/GroupFolderStorage.php index 5c5b28a56..b84690ae6 100644 --- a/lib/Mount/GroupFolderStorage.php +++ b/lib/Mount/GroupFolderStorage.php @@ -45,6 +45,7 @@ public function getFolder(): FolderDefinition { return $this->folder; } + #[\Override] public function getOwner(string $path): string|false { if ($this->mountOwner !== null) { return $this->mountOwner->getUID(); @@ -65,6 +66,7 @@ public function getUser(): ?IUser { /** * @inheritDoc */ + #[\Override] public function getCache(string $path = '', ?IStorage $storage = null): ICache { if ($this->cache) { return $this->cache; @@ -88,6 +90,7 @@ public function getCache(string $path = '', ?IStorage $storage = null): ICache { * @param string $path * @param ?IStorage $storage */ + #[\Override] public function getScanner($path = '', $storage = null): IScanner { /** @var ?\OC\Files\Storage\Wrapper\Wrapper $storage */ if (!$storage) { @@ -103,6 +106,7 @@ public function getScanner($path = '', $storage = null): IScanner { return $storage->scanner; } + #[\Override] protected function shouldApplyQuota(string $path): bool { return true; } diff --git a/lib/Mount/GroupMountPoint.php b/lib/Mount/GroupMountPoint.php index fc98ded24..b27d15eff 100644 --- a/lib/Mount/GroupMountPoint.php +++ b/lib/Mount/GroupMountPoint.php @@ -33,6 +33,7 @@ public function __construct( $this->rootId = $rootId; } + #[\Override] public function getMountType(): string { return 'group'; } diff --git a/lib/Mount/MountProvider.php b/lib/Mount/MountProvider.php index 10c186168..82c62b77f 100644 --- a/lib/Mount/MountProvider.php +++ b/lib/Mount/MountProvider.php @@ -48,6 +48,7 @@ public function getFoldersForUser(IUser $user): array { return $this->folderManager->getFoldersForUser($user); } + #[\Override] public function getMountsForUser(IUser $user, IStorageFactory $loader): array { $folders = $this->getFoldersForUser($user); diff --git a/lib/Mount/RootEntryCache.php b/lib/Mount/RootEntryCache.php index 9a83d6aba..675d291f2 100644 --- a/lib/Mount/RootEntryCache.php +++ b/lib/Mount/RootEntryCache.php @@ -20,6 +20,7 @@ public function __construct( parent::__construct($cache); } + #[\Override] public function get($file): ICacheEntry|false { if ($file === '' && $this->rootEntry) { return $this->rootEntry; @@ -28,6 +29,7 @@ public function get($file): ICacheEntry|false { return parent::get($file); } + #[\Override] public function getId($file): int { if ($file === '' && $this->rootEntry) { return $this->rootEntry->getId(); @@ -36,11 +38,13 @@ public function getId($file): int { return parent::getId($file); } + #[\Override] public function update($id, array $data): void { $this->rootEntry = null; parent::update($id, $data); } + #[\Override] public function insert($file, array $data): int { $this->rootEntry = null; return parent::insert($file, $data); diff --git a/lib/Mount/RootPermissionsMask.php b/lib/Mount/RootPermissionsMask.php index f01a3603a..7c3d9aae7 100644 --- a/lib/Mount/RootPermissionsMask.php +++ b/lib/Mount/RootPermissionsMask.php @@ -40,6 +40,7 @@ private function checkMask(int $permissions): bool { return ($this->mask & $permissions) === $permissions; } + #[\Override] public function isUpdatable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_UPDATE) and parent::isUpdatable($path); @@ -48,6 +49,7 @@ public function isUpdatable(string $path): bool { } } + #[\Override] public function isCreatable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_CREATE) and parent::isCreatable($path); @@ -56,6 +58,7 @@ public function isCreatable(string $path): bool { } } + #[\Override] public function isDeletable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_DELETE) and parent::isDeletable($path); @@ -64,6 +67,7 @@ public function isDeletable(string $path): bool { } } + #[\Override] public function isSharable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_SHARE) and parent::isSharable($path); @@ -72,6 +76,7 @@ public function isSharable(string $path): bool { } } + #[\Override] public function getPermissions(string $path): int { if ($path === '') { return $this->storage->getPermissions($path) & $this->mask; @@ -80,6 +85,7 @@ public function getPermissions(string $path): int { } } + #[\Override] public function getMetaData(string $path): ?array { $data = parent::getMetaData($path); @@ -91,6 +97,7 @@ public function getMetaData(string $path): ?array { return $data; } + #[\Override] public function getCache(string $path = '', ?IStorage $storage = null): ICache { if (!$storage) { $storage = $this; diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index d7307f209..262c465bc 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -25,6 +25,7 @@ public function __construct( ) { } + #[\Override] public function getForm(): TemplateResponse { \OCP\Util::addScript(Application::APP_ID, 'groupfolders-settings'); @@ -51,18 +52,22 @@ public function getForm(): TemplateResponse { ); } + #[\Override] public function getSection(): string { return Application::APP_ID; } + #[\Override] public function getPriority(): int { return 90; } + #[\Override] public function getName(): ?string { return null; } + #[\Override] public function getAuthorizedAppConfig(): array { return []; } diff --git a/lib/Settings/Section.php b/lib/Settings/Section.php index bccc0d4be..ed5994f8f 100644 --- a/lib/Settings/Section.php +++ b/lib/Settings/Section.php @@ -20,18 +20,22 @@ public function __construct( ) { } + #[\Override] public function getID(): string { return Application::APP_ID; } + #[\Override] public function getName(): string { return $this->l->t('Team folders'); } + #[\Override] public function getPriority(): int { return 90; } + #[\Override] public function getIcon(): string { return $this->url->imagePath('groupfolders', 'app-dark.svg'); } diff --git a/lib/Trash/GroupTrashItem.php b/lib/Trash/GroupTrashItem.php index 71ec339a6..39fa2c99c 100644 --- a/lib/Trash/GroupTrashItem.php +++ b/lib/Trash/GroupTrashItem.php @@ -33,6 +33,7 @@ public function getInternalOriginalLocation(): string { return $this->internalOriginalLocation; } + #[\Override] public function isRootItem(): bool { return substr_count($this->getTrashPath(), '/') === 2; } @@ -41,15 +42,18 @@ public function getGroupFolderMountPoint(): string { return $this->mountPoint; } + #[\Override] public function getTitle(): string { return $this->getGroupFolderMountPoint() . '/' . $this->getOriginalLocation(); } + #[\Override] public function getMtime(): int { // trashbin is currently (incorrectly) assuming these to be the same return $this->getDeletedTime(); } + #[\Override] public function getInternalPath(): string { // trashbin expects the path without the deletion timestamp $path = parent::getInternalPath(); diff --git a/lib/Versions/GroupVersionEntity.php b/lib/Versions/GroupVersionEntity.php index ef8acbc12..7cd289ec5 100644 --- a/lib/Versions/GroupVersionEntity.php +++ b/lib/Versions/GroupVersionEntity.php @@ -42,6 +42,7 @@ public function __construct() { $this->addType('metadata', Types::STRING); } + #[\Override] public function jsonSerialize(): array { return [ 'id' => $this->id, diff --git a/package-lock.json b/package-lock.json index 6ca9d5a05..374a7aa1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2293,10 +2293,11 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.6.tgz", - "integrity": "sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2304,14 +2305,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.0", + "form-data": "~4.0.4", "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.13.0", + "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -2321,6 +2322,22 @@ "node": ">= 6" } }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -4644,55 +4661,38 @@ "license": "MIT" }, "node_modules/@nextcloud/dialogs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-6.4.1.tgz", - "integrity": "sha512-Pr9pnZ21bwvvM43sc9tTLo3ETM6kIffmdILwvyfbTdCXkPcOsgggE2FI1c5iZUbtd8hrvAYMic4oZxhqA2izSA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-6.4.2.tgz", + "integrity": "sha512-xj6fyUdb56StWt1DWeDHYnqK0Ck7EWQLUEyWtXHnneknoOV3x/Y0HPRL5L2PTJaDuVQB8TcVW53JjR38JG9W6Q==", "license": "AGPL-3.0-or-later", "dependencies": { "@mdi/js": "^7.4.47", "@nextcloud/auth": "^2.5.3", "@nextcloud/axios": "^2.5.2", "@nextcloud/browser-storage": "^0.5.0", - "@nextcloud/event-bus": "^3.3.2", - "@nextcloud/files": "^3.10.2", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^3.12.2", "@nextcloud/initial-state": "^3.0.0", - "@nextcloud/l10n": "^3.4.0", - "@nextcloud/router": "^3.0.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", "@nextcloud/sharing": "^0.3.0", - "@nextcloud/typings": "^1.9.1", "@types/toastify-js": "^1.12.4", "@vueuse/core": "^11.3.0", "cancelable-promise": "^4.3.1", - "p-queue": "^9.0.0", + "p-queue": "^9.0.1", "toastify-js": "^1.12.0", "vue-frag": "^1.4.3", "webdav": "^5.8.0" }, "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0", - "npm": "^10.5.1" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" }, "peerDependencies": { "@nextcloud/vue": "^8.24.0", "vue": "^2.7.16" } }, - "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/sharing": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", - "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", - "license": "GPL-3.0-or-later", - "dependencies": { - "@nextcloud/initial-state": "^3.0.0", - "is-svg": "^6.1.0" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - }, - "optionalDependencies": { - "@nextcloud/files": "^3.12.0" - } - }, "node_modules/@nextcloud/dialogs/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -4700,9 +4700,9 @@ "license": "MIT" }, "node_modules/@nextcloud/dialogs/node_modules/p-queue": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.0.tgz", - "integrity": "sha512-KO1RyxstL9g1mK76530TExamZC/S2Glm080Nx8PE5sTd7nlduDQsAfEl4uXX+qZjLiwvDauvzXavufy3+rJ9zQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.1.tgz", + "integrity": "sha512-RhBdVhSwJb7Ocn3e8ULk4NMwBEuOxe+1zcgphUy9c2e5aR/xbEsdVXxHJ3lynw6Qiqu7OINEyHlZkiblEpaq7w==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -4814,19 +4814,20 @@ } }, "node_modules/@nextcloud/files": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.0.tgz", - "integrity": "sha512-LVZklgooZzBj2jkbPRZO4jnnvW5+RvOn7wN5weyOZltF6i2wVMbg1Y/Czl2pi/UNMjUm5ENqc0j7FgxMBo8bwA==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "license": "AGPL-3.0-or-later", "dependencies": { - "@nextcloud/auth": "^2.5.1", - "@nextcloud/capabilities": "^1.2.0", - "@nextcloud/l10n": "^3.3.0", - "@nextcloud/logger": "^3.0.2", - "@nextcloud/paths": "^2.2.1", - "@nextcloud/router": "^3.0.1", - "@nextcloud/sharing": "^0.2.4", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", "cancelable-promise": "^4.3.1", - "is-svg": "^6.0.0", + "is-svg": "^6.1.0", "typescript-event-target": "^1.1.1", "webdav": "^5.8.0" }, @@ -4859,15 +4860,15 @@ } }, "node_modules/@nextcloud/logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.2.tgz", - "integrity": "sha512-wByt0R0/6QC44RBpaJr1MWghjjOxk/pRbACHo/ZWWKht1qYbJRHB4GtEi+35KEIHY07ZpqxiDk6dIRuN7sXYWQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", + "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", + "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/auth": "^2.3.0" + "@nextcloud/auth": "^2.5.3" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/password-confirmation": { @@ -4892,13 +4893,12 @@ } }, "node_modules/@nextcloud/paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-2.2.1.tgz", - "integrity": "sha512-M3ShLjrxR7B48eKThLMoqbxTqTKyQXcwf9TgeXQGbCIhiHoXU6as5j8l5qNv/uZlANokVdowpuWHBi3b2+YNNA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.0.0.tgz", + "integrity": "sha512-+sTfTkIbVUa2Ue3bkz3R7F1mhddvHPOWUxkSNg7Q5dAsimVFBaTRgiBAJmsAag3JPsxyuS8kUgeb0zdEssRdTA==", "license": "GPL-3.0-or-later", "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/router": { @@ -4914,25 +4914,19 @@ } }, "node_modules/@nextcloud/sharing": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.2.4.tgz", - "integrity": "sha512-kOLAr0w4NDUGPF42L22i9iSs6Z3ylTsE0RudAGDBzw/pnxGY8PEwZI2j0IMAFRfQ7XFNcpV/EVHI5YCMxtxGMQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/initial-state": "^2.2.0" + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" - } - }, - "node_modules/@nextcloud/sharing/node_modules/@nextcloud/initial-state": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-2.2.0.tgz", - "integrity": "sha512-cDW98L5KGGgpS8pzd+05304/p80cyu8U2xSDQGa+kGPTpUFmCbv2qnO5WrwwGTauyjYijCal2bmw82VddSH+Pg==", - "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" } }, "node_modules/@nextcloud/stylelint-config": { @@ -5065,31 +5059,6 @@ "npm": "^10.0.0" } }, - "node_modules/@nextcloud/vue/node_modules/@nextcloud/sharing": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", - "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", - "license": "GPL-3.0-or-later", - "dependencies": { - "@nextcloud/initial-state": "^3.0.0", - "is-svg": "^6.1.0" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - }, - "optionalDependencies": { - "@nextcloud/files": "^3.12.0" - } - }, - "node_modules/@nextcloud/vue/node_modules/@nextcloud/sharing/node_modules/@nextcloud/initial-state": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", - "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", - "license": "GPL-3.0-or-later", - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, "node_modules/@nextcloud/webpack-vue-config": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/@nextcloud/webpack-vue-config/-/webpack-vue-config-5.5.1.tgz", @@ -5405,9 +5374,9 @@ } }, "node_modules/@testing-library/cypress": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@testing-library/cypress/-/cypress-10.0.3.tgz", - "integrity": "sha512-TeZJMCNtiS59cPWalra7LgADuufO5FtbqQBYxuAgdX6ZFAR2D9CtQwAG8VbgvFcchW3K414va/+7P4OkQ80UVg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/cypress/-/cypress-10.1.0.tgz", + "integrity": "sha512-tNkNtYRqPQh71xXKuMizr146zlellawUfDth7A/urYU4J66g0VGZ063YsS0gqS79Z58u1G/uo9UxN05qvKXMag==", "dev": true, "license": "MIT", "dependencies": { @@ -5419,7 +5388,7 @@ "npm": ">=6" }, "peerDependencies": { - "cypress": "^12.0.0 || ^13.0.0 || ^14.0.0" + "cypress": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0" } }, "node_modules/@testing-library/dom": { @@ -7963,24 +7932,25 @@ "peer": true }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -7997,6 +7967,28 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -8004,6 +7996,17 @@ "dev": true, "peer": true }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/bonjour-service": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", @@ -12678,23 +12681,6 @@ "dev": true, "peer": true }, - "node_modules/express/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -14328,6 +14314,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -20557,12 +20544,14 @@ ] }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -20655,21 +20644,55 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", diff --git a/psalm.xml b/psalm.xml index 54a6f6d26..6d12b4b3e 100644 --- a/psalm.xml +++ b/psalm.xml @@ -130,6 +130,7 @@ + diff --git a/tests/ACL/ACLCacheWrapperTest.php b/tests/ACL/ACLCacheWrapperTest.php index 4a3b3edf3..1d97641cf 100644 --- a/tests/ACL/ACLCacheWrapperTest.php +++ b/tests/ACL/ACLCacheWrapperTest.php @@ -25,6 +25,7 @@ class ACLCacheWrapperTest extends TestCase { private ACLCacheWrapper $cache; private array $aclPermissions = []; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/ACL/ACLManagerTest.php b/tests/ACL/ACLManagerTest.php index 3c6c1d9f6..22a156a40 100644 --- a/tests/ACL/ACLManagerTest.php +++ b/tests/ACL/ACLManagerTest.php @@ -30,6 +30,7 @@ class ACLManagerTest extends TestCase { /** @var array> */ private array $rules = []; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/ACL/ACLStorageWrapperTest.php b/tests/ACL/ACLStorageWrapperTest.php index fadc13983..0e5d75810 100644 --- a/tests/ACL/ACLStorageWrapperTest.php +++ b/tests/ACL/ACLStorageWrapperTest.php @@ -22,6 +22,7 @@ class ACLStorageWrapperTest extends TestCase { private ACLStorageWrapper $storage; private array $aclPermissions = []; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/ACL/RuleManagerTest.php b/tests/ACL/RuleManagerTest.php index 7dd0700d6..4b9dc835b 100644 --- a/tests/ACL/RuleManagerTest.php +++ b/tests/ACL/RuleManagerTest.php @@ -30,6 +30,7 @@ class RuleManagerTest extends TestCase { private IUser&MockObject $user; private IEventDispatcher&MockObject $eventDispatcher; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/AppInfo/CapabilitiesTest.php b/tests/AppInfo/CapabilitiesTest.php index 393d9189a..311fa9aff 100644 --- a/tests/AppInfo/CapabilitiesTest.php +++ b/tests/AppInfo/CapabilitiesTest.php @@ -23,6 +23,7 @@ class CapabilitiesTest extends TestCase { private IAppManager&MockObject $appManager; private Capabilities $capabilities; + #[\Override] public function setUp(): void { parent::setUp(); diff --git a/tests/Folder/FolderManagerTest.php b/tests/Folder/FolderManagerTest.php index 486280b71..44fda0c06 100644 --- a/tests/Folder/FolderManagerTest.php +++ b/tests/Folder/FolderManagerTest.php @@ -45,6 +45,7 @@ class FolderManagerTest extends TestCase { private FolderStorageManager $folderStorageManager; private IAppConfig $appConfig; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Listeners/CircleDestroyedEventListenerTest.php b/tests/Listeners/CircleDestroyedEventListenerTest.php index 06f695f18..38ac59cb6 100644 --- a/tests/Listeners/CircleDestroyedEventListenerTest.php +++ b/tests/Listeners/CircleDestroyedEventListenerTest.php @@ -21,6 +21,7 @@ class CircleDestroyedEventListenerTest extends TestCase { private FolderManager&MockObject $folderManager; private CircleDestroyedEventListener $listener; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Listeners/LoadAdditionalScriptsListenerTest.php b/tests/Listeners/LoadAdditionalScriptsListenerTest.php index c549fe99c..89660f769 100644 --- a/tests/Listeners/LoadAdditionalScriptsListenerTest.php +++ b/tests/Listeners/LoadAdditionalScriptsListenerTest.php @@ -19,6 +19,7 @@ class LoadAdditionalScriptsListenerTest extends TestCase { private LoadAdditionalScriptsListener $listener; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Listeners/NodeRenamedListenerTest.php b/tests/Listeners/NodeRenamedListenerTest.php index 9ea7ba706..a7f97b49d 100644 --- a/tests/Listeners/NodeRenamedListenerTest.php +++ b/tests/Listeners/NodeRenamedListenerTest.php @@ -30,6 +30,7 @@ class NodeRenamedListenerTest extends TestCase { private MockObject $target; private NodeRenamedEvent&MockObject $event; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Trash/TrashBackendTest.php b/tests/Trash/TrashBackendTest.php index 742a71aca..72c983e59 100644 --- a/tests/Trash/TrashBackendTest.php +++ b/tests/Trash/TrashBackendTest.php @@ -46,6 +46,7 @@ class TrashBackendTest extends TestCase { private IUser $managerUser; private IUser $normalUser; + #[\Override] public function setUp(): void { parent::setUp(); @@ -89,6 +90,7 @@ public function setUp(): void { } + #[\Override] protected function tearDown(): void { $folder = $this->folderManager->getFolder($this->folderId); if ($folder) { diff --git a/vendor-bin/psalm/composer.json b/vendor-bin/psalm/composer.json index d1eb38ea6..254fa9322 100644 --- a/vendor-bin/psalm/composer.json +++ b/vendor-bin/psalm/composer.json @@ -1,11 +1,11 @@ { "require-dev": { - "vimeo/psalm": "^6.4", + "vimeo/psalm": "^6.14", "psalm/plugin-phpunit": "^0.19.3" }, "config": { "platform": { - "php": "8.2.4" + "php": "8.2.27" } } } diff --git a/vendor-bin/psalm/composer.lock b/vendor-bin/psalm/composer.lock index 045351959..7c83a9cef 100644 --- a/vendor-bin/psalm/composer.lock +++ b/vendor-bin/psalm/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5b598ebb121e44cc752418d977c716c9", + "content-hash": "f9f7139e009b603ee856af72f6b6f2e9", "packages": [], "packages-dev": [ { "name": "amphp/amp", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9" + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", - "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", + "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f", + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f", "shasum": "" }, "require": { @@ -78,7 +78,7 @@ ], "support": { "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v3.1.0" + "source": "https://github.com/amphp/amp/tree/v3.1.1" }, "funding": [ { @@ -86,7 +86,7 @@ "type": "github" } ], - "time": "2025-01-26T16:07:39+00:00" + "time": "2025-08-27T21:42:00+00:00" }, { "name": "amphp/byte-stream", @@ -319,16 +319,16 @@ }, { "name": "amphp/parallel", - "version": "v2.3.1", + "version": "v2.3.3", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "5113111de02796a782f5d90767455e7391cca190" + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/5113111de02796a782f5d90767455e7391cca190", - "reference": "5113111de02796a782f5d90767455e7391cca190", + "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", "shasum": "" }, "require": { @@ -391,7 +391,7 @@ ], "support": { "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.3.1" + "source": "https://github.com/amphp/parallel/tree/v2.3.3" }, "funding": [ { @@ -399,7 +399,7 @@ "type": "github" } ], - "time": "2024-12-21T01:56:09+00:00" + "time": "2025-11-15T06:23:42+00:00" }, { "name": "amphp/parser", @@ -969,16 +969,16 @@ }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -1030,7 +1030,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.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -1040,13 +1040,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -1114,6 +1110,58 @@ ], "time": "2024-05-06T16:37:16+00:00" }, + { + "name": "danog/advanced-json-rpc", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/danog/php-advanced-json-rpc.git", + "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/aadb1c4068a88c3d0530cfe324b067920661efcb", + "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^5", + "php": ">=8.1", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "replace": { + "felixfbecker/php-advanced-json-rpc": "^3" + }, + "require-dev": { + "phpunit/phpunit": "^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/danog/php-advanced-json-rpc/issues", + "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.2" + }, + "time": "2025-02-14T10:55:15+00:00" + }, { "name": "daverandom/libdns", "version": "v2.1.0", @@ -1243,51 +1291,6 @@ }, "time": "2025-04-07T20:06:18+00:00" }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" - }, - "time": "2021-06-11T22:34:44+00:00" - }, { "name": "felixfbecker/language-server-protocol", "version": "v1.5.3", @@ -1346,16 +1349,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -1365,10 +1368,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -1395,7 +1398,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -1403,7 +1406,7 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "kelunik/certificate", @@ -1465,33 +1468,38 @@ }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807", + "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.7", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", "league/uri-components": "Needed to easily manipulate URI objects components", + "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1519,6 +1527,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -1531,9 +1540,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -1543,7 +1554,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.7.0" }, "funding": [ { @@ -1551,26 +1562,25 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2025-12-07T16:02:06+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c", + "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -1578,6 +1588,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1602,7 +1613,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -1627,7 +1638,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0" }, "funding": [ { @@ -1635,20 +1646,20 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2025-12-07T16:03:21+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.5.0", + "version": "v5.0.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" + "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", + "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", "shasum": "" }, "require": { @@ -1684,22 +1695,22 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.0" }, - "time": "2024-09-08T10:13:13+00:00" + "time": "2024-09-08T10:20:00+00:00" }, { "name": "nikic/php-parser", - "version": "v5.5.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -1718,7 +1729,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -1742,9 +1753,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-05-31T08:24:38+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -1801,16 +1812,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", + "version": "5.6.6", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", "shasum": "" }, "require": { @@ -1820,7 +1831,7 @@ "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { "mockery/mockery": "~1.3.5 || ~1.6.0", @@ -1859,22 +1870,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" }, - "time": "2025-04-13T19:20:35+00:00" + "time": "2025-12-22T21:13:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.10.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { @@ -1917,22 +1928,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" }, - "time": "2024-11-09T15:12:26+00:00" + "time": "2025-11-21T15:09:14+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -1964,9 +1975,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "psalm/plugin-phpunit", @@ -2242,16 +2253,16 @@ }, { "name": "revolt/event-loop", - "version": "v1.0.7", + "version": "v1.0.8", "source": { "type": "git", "url": "https://github.com/revoltphp/event-loop.git", - "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3" + "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/09bf1bf7f7f574453efe43044b06fafe12216eb3", - "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/b6fc06dce8e9b523c9946138fa5e62181934f91c", + "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c", "shasum": "" }, "require": { @@ -2308,35 +2319,35 @@ ], "support": { "issues": "https://github.com/revoltphp/event-loop/issues", - "source": "https://github.com/revoltphp/event-loop/tree/v1.0.7" + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.8" }, - "time": "2025-01-25T19:27:39+00:00" + "time": "2025-08-27T21:33:23+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2369,7 +2380,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -2377,20 +2388,20 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "spatie/array-to-xml", - "version": "3.4.0", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67" + "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67", - "reference": "7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/88b2f3852a922dd73177a68938f8eb2ec70c7224", + "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224", "shasum": "" }, "require": { @@ -2433,7 +2444,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.4.0" + "source": "https://github.com/spatie/array-to-xml/tree/3.4.4" }, "funding": [ { @@ -2445,51 +2456,51 @@ "type": "github" } ], - "time": "2024-12-16T12:45:15+00:00" + "time": "2025-12-15T09:00:41+00:00" }, { "name": "symfony/console", - "version": "v6.4.22", + "version": "v7.4.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3" + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", - "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", + "url": "https://api.github.com/repos/symfony/console/zipball/732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^7.2|^8.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|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2523,7 +2534,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.22" + "source": "https://github.com/symfony/console/tree/v7.4.3" }, "funding": [ { @@ -2534,12 +2545,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-07T07:05:04+00:00" + "time": "2025-12-23T14:50:43+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2610,25 +2625,25 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2656,7 +2671,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" }, "funding": [ { @@ -2667,16 +2682,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -2735,7 +2754,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -2746,6 +2765,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -2755,16 +2778,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -2813,7 +2836,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -2824,16 +2847,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -2894,7 +2921,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -2905,6 +2932,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -2914,7 +2945,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -2975,7 +3006,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -2986,6 +3017,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -2993,18 +3028,98 @@ ], "time": "2024-12-23T08:48:59+00:00" }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -3058,7 +3173,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -3069,31 +3184,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v6.4.21", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "73e2c6966a5aef1d4892873ed5322245295370c6" + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/73e2c6966a5aef1d4892873ed5322245295370c6", - "reference": "73e2c6966a5aef1d4892873ed5322245295370c6", + "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.33", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -3101,11 +3221,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3144,7 +3264,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.21" + "source": "https://github.com/symfony/string/tree/v7.4.0" }, "funding": [ { @@ -3155,25 +3275,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-18T15:23:29+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "vimeo/psalm", - "version": "6.5.0", + "version": "6.14.3", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "38fc8444edf0cebc9205296ee6e30e906ade783b" + "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/38fc8444edf0cebc9205296ee6e30e906ade783b", - "reference": "38fc8444edf0cebc9205296ee6e30e906ade783b", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0b040a91f280f071c1abcb1b77ce3822058725a", + "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a", "shasum": "" }, "require": { @@ -3183,6 +3307,7 @@ "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", "composer/xdebug-handler": "^2.0 || ^3.0", + "danog/advanced-json-rpc": "^3.1", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -3191,16 +3316,16 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", "felixfbecker/language-server-protocol": "^1.5.3", "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "netresearch/jsonmapper": "^5.0", "nikic/php-parser": "^5.0.0", - "php": "~8.1.17 || ~8.2.4 || ~8.3.0 || ~8.4.0", + "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^6.0 || ^7.0", - "symfony/filesystem": "^6.0 || ^7.0" + "symfony/console": "^6.0 || ^7.0 || ^8.0", + "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", + "symfony/polyfill-php84": "^1.31.0" }, "provide": { "psalm/psalm": "self.version" @@ -3209,6 +3334,7 @@ "amphp/phpunit-util": "^3", "bamarni/composer-bin-plugin": "^1.4", "brianium/paratest": "^6.9", + "danog/class-finder": "^0.4.8", "dg/bypass-finals": "^1.5", "ext-curl": "*", "mockery/mockery": "^1.5", @@ -3220,7 +3346,7 @@ "psalm/plugin-phpunit": "^0.19", "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^6.0 || ^7.0" + "symfony/process": "^6.0 || ^7.0 || ^8.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -3276,37 +3402,37 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2025-02-07T20:42:25+00:00" + "time": "2025-12-23T15:36:48+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "1b34b004e35a164bc5bb6ebd33c844b2d8069a54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/1b34b004e35a164bc5bb6ebd33c844b2d8069a54", + "reference": "1b34b004e35a164bc5bb6ebd33c844b2d8069a54", "shasum": "" }, "require": { "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -3322,6 +3448,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -3332,9 +3462,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/2.0.0" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2025-12-16T21:36:00+00:00" } ], "aliases": [], @@ -3345,7 +3475,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2.4" + "php": "8.2.27" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/vendor-bin/rector/composer.lock b/vendor-bin/rector/composer.lock index 8f69b19a5..4e2a2ce61 100644 --- a/vendor-bin/rector/composer.lock +++ b/vendor-bin/rector/composer.lock @@ -62,16 +62,16 @@ }, { "name": "rector/rector", - "version": "2.2.14", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "6d56bb0e94d4df4f57a78610550ac76ab403657d" + "reference": "f7166355dcf47482f27be59169b0825995f51c7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/6d56bb0e94d4df4f57a78610550ac76ab403657d", - "reference": "6d56bb0e94d4df4f57a78610550ac76ab403657d", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/f7166355dcf47482f27be59169b0825995f51c7d", + "reference": "f7166355dcf47482f27be59169b0825995f51c7d", "shasum": "" }, "require": { @@ -110,7 +110,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.2.14" + "source": "https://github.com/rectorphp/rector/tree/2.3.0" }, "funding": [ { @@ -118,7 +118,7 @@ "type": "github" } ], - "time": "2025-12-09T10:57:55+00:00" + "time": "2025-12-25T22:00:18+00:00" } ], "aliases": [],