diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index f7b1dd975..94cf3cf41 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -22,7 +22,7 @@ env: # Usually it's the base branch of the PR, but for pushes it's the branch itself. # e.g. 'main', 'stable27' or 'feature/my-feature' # n.b. server will use head_ref, as we want to test the PR branch. - BRANCH: ${{ github.base_ref || github.ref_name }} + BRANCH: stable30 permissions: diff --git a/.github/workflows/phpunit-mysql-sharding.yml b/.github/workflows/phpunit-mysql-sharding.yml index d17bf33c2..d2278f2b7 100644 --- a/.github/workflows/phpunit-mysql-sharding.yml +++ b/.github/workflows/phpunit-mysql-sharding.yml @@ -139,7 +139,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: nextcloud/circles - ref: master + ref: stable30 path: apps/circles - name: Checkout app diff --git a/.github/workflows/phpunit-mysql.yml b/.github/workflows/phpunit-mysql.yml index 2e242ce07..70c508b88 100644 --- a/.github/workflows/phpunit-mysql.yml +++ b/.github/workflows/phpunit-mysql.yml @@ -100,7 +100,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: nextcloud/circles - ref: stable32 + ref: stable30 path: apps/circles - name: Checkout app diff --git a/.github/workflows/phpunit-oci.yml b/.github/workflows/phpunit-oci.yml index 712d7f99e..9e4f05146 100644 --- a/.github/workflows/phpunit-oci.yml +++ b/.github/workflows/phpunit-oci.yml @@ -113,7 +113,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: nextcloud/circles - ref: stable32 + ref: stable30 path: apps/circles - name: Checkout app diff --git a/.github/workflows/phpunit-pgsql.yml b/.github/workflows/phpunit-pgsql.yml index 52a2aad88..3d530dc25 100644 --- a/.github/workflows/phpunit-pgsql.yml +++ b/.github/workflows/phpunit-pgsql.yml @@ -103,7 +103,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: nextcloud/circles - ref: stable32 + ref: stable30 path: apps/circles - name: Checkout app diff --git a/.github/workflows/phpunit-sqlite-s3.yml b/.github/workflows/phpunit-sqlite-s3.yml index d14e36755..c995806c1 100644 --- a/.github/workflows/phpunit-sqlite-s3.yml +++ b/.github/workflows/phpunit-sqlite-s3.yml @@ -102,7 +102,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: nextcloud/circles - ref: master + ref: stable30 path: apps/circles - name: Checkout app diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml index 6ebbf79fa..3d4b34a40 100644 --- a/.github/workflows/phpunit-sqlite.yml +++ b/.github/workflows/phpunit-sqlite.yml @@ -92,7 +92,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: nextcloud/circles - ref: stable32 + ref: stable30 path: apps/circles - name: Checkout app diff --git a/appinfo/info.xml b/appinfo/info.xml index 5fa2af4f1..dd290813a 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -34,7 +34,7 @@ As of Hub 10/Nextcloud 31, the admin needs to be a part of the team to be able t https://raw.githubusercontent.com/nextcloud/groupfolders/master/screenshots/permissions.png - + diff --git a/composer.json b/composer.json index d53061841..f48a1333c 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "roave/security-advisories": "dev-latest", "sabre/dav": "^4.1", "sabre/xml": "^2.2", - "nextcloud/ocp": "dev-stable32" + "nextcloud/ocp": "dev-stable30" }, "require": { "bamarni/composer-bin-plugin": "^1.8" diff --git a/composer.lock b/composer.lock index a907b0e3a..775ab719a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8be7585f75c8217d39f923f6b02ac3cc", + "content-hash": "ef94d47ebb872f78b1dcd152d40fb5d1", "packages": [ { "name": "bamarni/composer-bin-plugin", - "version": "1.8.2", + "version": "1.8.3", "source": { "type": "git", "url": "https://github.com/bamarni/composer-bin-plugin.git", - "reference": "92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880" + "reference": "e7ef9e012667327516c24e5fad9903a3bc91389d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880", - "reference": "92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880", + "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/e7ef9e012667327516c24e5fad9903a3bc91389d", + "reference": "e7ef9e012667327516c24e5fad9903a3bc91389d", "shasum": "" }, "require": { @@ -30,7 +30,7 @@ "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.5", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.0", "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" @@ -59,37 +59,37 @@ ], "support": { "issues": "https://github.com/bamarni/composer-bin-plugin/issues", - "source": "https://github.com/bamarni/composer-bin-plugin/tree/1.8.2" + "source": "https://github.com/bamarni/composer-bin-plugin/tree/1.8.3" }, - "time": "2022-10-31T08:38:03+00:00" + "time": "2025-11-24T19:20:55+00:00" } ], "packages-dev": [ { "name": "nextcloud/ocp", - "version": "dev-stable32", + "version": "dev-stable30", "source": { "type": "git", "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "76d31f226abe036a5dfef3702f788c118a619731" + "reference": "b152be1a1f97e9f3a4eab84908ea0ad38a1d8187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/76d31f226abe036a5dfef3702f788c118a619731", - "reference": "76d31f226abe036a5dfef3702f788c118a619731", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/b152be1a1f97e9f3a4eab84908ea0ad38a1d8187", + "reference": "b152be1a1f97e9f3a4eab84908ea0ad38a1d8187", "shasum": "" }, "require": { - "php": "~8.1 || ~8.2 || ~8.3 || ~8.4", + "php": "~8.0 || ~8.1 || ~8.2 || ~8.3", "psr/clock": "^1.0", "psr/container": "^2.0.2", "psr/event-dispatcher": "^1.0", - "psr/log": "^3.0.2" + "psr/log": "^2.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-stable32": "32.0.0-dev" + "dev-stable30": "30.0.0-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -100,18 +100,14 @@ { "name": "Christoph Wurst", "email": "christoph@winzerhof-wurst.at" - }, - { - "name": "Joas Schilling", - "email": "coding@schilljs.com" } ], - "description": "Composer package containing Nextcloud's public OCP API and the unstable NCU API", + "description": "Composer package containing Nextcloud's public API (classes, interfaces)", "support": { "issues": "https://github.com/nextcloud-deps/ocp/issues", - "source": "https://github.com/nextcloud-deps/ocp/tree/stable32" + "source": "https://github.com/nextcloud-deps/ocp/tree/stable30" }, - "time": "2025-11-28T00:50:34+00:00" + "time": "2025-12-01T01:03:15+00:00" }, { "name": "psr/clock", @@ -266,16 +262,16 @@ }, { "name": "psr/log", - "version": "3.0.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { @@ -284,7 +280,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -310,9 +306,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2024-09-11T13:17:53+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "roave/security-advisories", @@ -320,40 +316,45 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "b3d9a3d80bf68f14f44ffa521454b162d8ff5561" + "reference": "3f393e137e490ecb2ac77989a692129c31192de7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b3d9a3d80bf68f14f44ffa521454b162d8ff5561", - "reference": "b3d9a3d80bf68f14f44ffa521454b162d8ff5561", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3f393e137e490ecb2ac77989a692129c31192de7", + "reference": "3f393e137e490ecb2ac77989a692129c31192de7", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.3.10", - "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "adaptcms/adaptcms": "<=1.3", + "admidio/admidio": "<=4.3.16", + "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", - "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", + "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", - "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9", + "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", - "alextselegidis/easyappointments": "<1.5", + "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alt-design/alt-redirect": "<1.6.4", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", + "ameos/ameos_tarteaucitron": "<1.2.23", "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<=1.7.2|>=2,<=2.1", "amphp/http-client": ">=4,<4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "aoe/restler": "<1.7.1", "apache-solr-for-typo3/solr": "<2.8.3", "apereo/phpcas": "<1.6", - "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "api-platform/core": "<3.4.17|>=4,<4.0.22|>=4.1,<4.1.5", + "api-platform/graphql": "<3.4.17|>=4,<4.0.22|>=4.1,<4.1.5", "appwrite/server-ce": "<=1.2.1", "arc/web": "<3", "area17/twill": "<1.2.5|>=2,<2.5.3", @@ -361,29 +362,38 @@ "asymmetricrypt/asymmetricrypt": "<9.9.99", "athlon1600/php-proxy": "<=5.1", "athlon1600/php-proxy-app": "<=3", + "athlon1600/youtube-downloader": "<=4", "austintoddj/canvas": "<=3.4.2", - "auth0/wordpress": "<=4.6", + "auth0/auth0-php": ">=3.3,<=8.16", + "auth0/login": "<=7.18", + "auth0/symfony": "<=5.4.1", + "auth0/wordpress": "<=5.3", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<3.288.1", "azuracast/azuracast": "<0.18.3", - "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", + "b13/seo_basics": "<0.8.2", + "backdrop/backdrop": "<=1.32", "backpack/crud": "<3.4.9", - "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", - "badaso/core": "<2.7", - "bagisto/bagisto": "<2.1", + "backpack/filemanager": "<2.0.2|>=3,<3.0.9", + "bacula-web/bacula-web": "<9.7.1", + "badaso/core": "<=2.9.11", + "bagisto/bagisto": "<=2.3.7", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", - "barryvdh/laravel-translation-manager": "<0.6.2", + "barryvdh/laravel-translation-manager": "<0.6.8", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<5.0.9", + "baserproject/basercms": "<=5.1.1", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", "bbpress/bbpress": "<2.6.5", + "bcit-ci/codeigniter": "<3.1.3", "bcosca/fatfree": "<3.7.2", "bedita/bedita": "<4", + "bednee/cooluri": "<1.0.30", "bigfork/silverstripe-form-capture": ">=3,<3.1.1", - "billz/raspap-webgui": "<=3.1.4", + "billz/raspap-webgui": "<3.3.6", + "binarytorch/larecipe": "<2.8.1", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", "blueimp/jquery-file-upload": "==6.4.4", "bmarshall511/wordpress_zero_spam": "<5.2.13", @@ -398,6 +408,7 @@ "brotkrueml/typo3-matomo-integration": "<1.3.2", "buddypress/buddypress": "<7.2.1", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "bvbmedia/multishop": "<2.0.39", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", @@ -408,48 +419,65 @@ "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", - "causal/oidc": "<2.1", + "causal/oidc": "<4", "cecil/cecil": "<7.47.1", "centreon/centreon": "<22.10.15", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "chrome-php/chrome": "<1.14", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", - "ckeditor/ckeditor": "<4.24", - "cockpit-hq/cockpit": "<2.7|==2.7", + "ckeditor/ckeditor": "<4.25", + "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", + "co-stack/fal_sftp": "<0.2.6", + "cockpit-hq/cockpit": "<2.11.4", + "code16/sharp": "<9.11.1", "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<3.1.9", - "codeigniter4/framework": "<4.4.7", + "codeigniter/framework": "<3.1.10", + "codeigniter4/framework": "<4.6.2", "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", + "codingms/additional-tca": ">=1.7,<1.15.17|>=1.16,<1.16.9", + "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", + "commerceteam/commerce": ">=0.9.6,<0.9.9", + "components/jquery": ">=1.0.3,<3.5", "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", - "concrete5/concrete5": "<9.3.4", + "concrete5/concrete5": "<9.4.3", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", - "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.13.56|>=5,<5.3.38|>=5.4.0.0-RC1-dev,<5.6.1", "contao/core": "<3.5.39", - "contao/core-bundle": "<4.13.40|>=5,<5.3.4", + "contao/core-bundle": "<4.13.57|>=5,<5.3.42|>=5.4,<5.6.5", "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<4.6.2|>=5,<=5.2.2", + "couleurcitron/tarteaucitron-wp": "<0.3", + "craftcms/cms": "<=4.16.5|>=5,<=5.8.6", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", + "czim/file-handling": "<1.5|>=2,<2.3", "czproject/git-php": "<4.0.3", - "damienharper/auditor-bundle": "<6", + "damienharper/auditor-bundle": "<5.2.6", "dapphp/securimage": "<3.6.6", "darylldoyle/safe-svg": "<1.9.10", "datadog/dd-trace": ">=0.30,<0.30.2", + "datahihi1/tiny-env": "<1.0.3|>=1.0.9,<1.0.11", "datatables/datatables": "<1.10.10", "david-garcia/phpwhois": "<=4.3.1", "dbrisinajumi/d2files": "<1", - "dcat/laravel-admin": "<=2.1.3", + "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", + "dev-lancer/minecraft-motd-parser": "<=1.0.5", + "devcode-it/openstamanager": "<=2.9.4", "devgroup/dotplant": "<2020.09.14-dev", + "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "dl/yag": "<3.0.1", + "dmk/webkitpdf": "<1.1.4", + "dnadesign/silverstripe-elemental": "<5.3.12", "doctrine/annotations": "<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": "<2.4.3|>=2.5,<2.5.1", @@ -459,12 +487,45 @@ "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<19.0.2", + "dolibarr/dolibarr": "<21.0.3", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", - "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2|==11.9999999.9999999.9999999-dev", - "drupal/core-recommended": "==11.9999999.9999999.9999999-dev", - "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4|==11.9999999.9999999.9999999-dev", + "drupal-pattern-lab/unified-twig-extensions": "<=0.1", + "drupal/access_code": "<2.0.5", + "drupal/acquia_dam": "<1.1.5", + "drupal/admin_audit_trail": "<1.0.5", + "drupal/ai": "<1.0.5", + "drupal/alogin": "<2.0.6", + "drupal/cache_utility": "<1.2.1", + "drupal/civictheme": "<1.12", + "drupal/commerce_alphabank_redirect": "<1.0.3", + "drupal/commerce_eurobank_redirect": "<2.1.1", + "drupal/config_split": "<1.10|>=2,<2.0.2", + "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.4.9|>=10.5,<10.5.6|>=11,<11.1.9|>=11.2,<11.2.8", + "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/currency": "<3.5", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/email_tfa": "<2.0.6", + "drupal/formatter_suite": "<2.1", + "drupal/gdpr": "<3.0.1|>=3.1,<3.1.2", + "drupal/google_tag": "<1.8|>=2,<2.0.8", + "drupal/ignition": "<1.0.4", + "drupal/json_field": "<1.5", + "drupal/lightgallery": "<1.6", + "drupal/link_field_display_mode_formatter": "<1.6", + "drupal/matomo": "<1.24", + "drupal/oauth2_client": "<4.1.3", + "drupal/oauth2_server": "<2.1", + "drupal/obfuscate": "<2.0.1", + "drupal/plausible_tracking": "<1.0.2", + "drupal/quick_node_block": "<2", + "drupal/rapidoc_elements_field_formatter": "<1.0.1", + "drupal/reverse_proxy_header": "<1.1.2", + "drupal/simple_multistep": "<2", + "drupal/simple_oauth": ">=6,<6.0.7", + "drupal/spamspan": "<3.2.1", + "drupal/tfa": "<1.10", + "drupal/umami_analytics": "<1.0.1", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", @@ -474,10 +535,11 @@ "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", "elijaa/phpmemcacheadmin": "<=1.3", + "elmsln/haxcms": "<11.0.14", "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", "enhavo/enhavo-app": "<=0.13.1", - "enshrined/svg-sanitize": "<0.15", + "enshrined/svg-sanitize": "<0.22", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", "evolutioncms/evolution": "<=3.2.3", @@ -488,35 +550,39 @@ "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", - "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.39|>=3.3,<3.3.39", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1|>=5.3.0.0-beta1,<5.3.5", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-http-cache": "<2.3.16", "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.26|>=3.3,<3.3.40", "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", - "ezyang/htmlpurifier": "<4.1.1", + "ezyang/htmlpurifier": "<=4.2", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", "facturascripts/facturascripts": "<=2022.08", "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", + "filament/actions": ">=3.2,<3.2.123", + "filament/infolists": ">=3,<3.2.115", + "filament/tables": ">=3,<3.2.115", "filegator/filegator": "<7.8", "filp/whoops": "<2.1.13", "fineuploader/php-traditional-server": "<=1.2.2", "firebase/php-jwt": "<6", "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", - "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8.5", + "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.8.10", "flarum/flarum": "<0.1.0.0-beta8", - "flarum/framework": "<1.8.5", + "flarum/framework": "<1.8.10", "flarum/mentions": "<1.6.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", @@ -537,32 +603,38 @@ "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", - "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", - "froxlor/froxlor": "<=2.2.0.0-RC3", + "froala/wysiwyg-editor": "<=4.3", + "froxlor/froxlor": "<=2.2.5", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", + "funadmin/funadmin": "<=5.0.2", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", + "georgringer/news": "<1.3.3", + "geshi/geshi": "<=1.0.9.1", + "getformwork/formwork": "<2.2", "getgrav/grav": "<1.7.46", - "getkirby/cms": "<=3.6.6.5|>=3.7,<=3.7.5.4|>=3.8,<=3.8.4.3|>=3.9,<=3.9.8.1|>=3.10,<=3.10.1|>=4,<=4.3", - "getkirby/kirby": "<=2.5.12", + "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", + "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", "gilacms/gila": "<=1.15.4", "gleez/cms": "<=1.3|==2", "globalpayments/php-sdk": "<2", + "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", - "google/protobuf": "<3.15", + "google/protobuf": "<3.4", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", + "gp247/core": "<1.1.24", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", "grumpydictator/firefly-iii": "<6.1.17", "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/oauth-subscriber": "<0.8.1", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "handcraftedinthealps/goodby-csv": "<1.4.3", "harvesthq/chosen": "<1.8.7", "helloxz/imgurl": "<=2.31", "hhxsv5/laravel-s": "<3.7.36", @@ -572,13 +644,15 @@ "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.25|>=5,<5.0.3", + "ibexa/admin-ui-assets": ">=4.6.0.0-alpha1,<4.6.21", "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", - "ibexa/fieldtype-richtext": ">=4.6,<4.6.10", + "ibexa/fieldtype-richtext": ">=4.6,<4.6.25|>=5,<5.0.3", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", - "ibexa/post-install": "<=1.0.4", + "ibexa/http-cache": ">=4.6,<4.6.14", + "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14", "ibexa/solr": ">=4.5,<4.5.4", - "ibexa/user": ">=4,<4.4.3", + "ibexa/user": ">=4,<4.4.3|>=5,<5.0.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", "ilicmiljan/secure-props": ">=1.2,<1.2.2", @@ -589,119 +663,154 @@ "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "imdbphp/imdbphp": "<=5.1.1", "impresscms/impresscms": "<=1.4.5", - "impresspages/impresspages": "<=1.0.12", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", + "impresspages/impresspages": "<1.0.13", + "in2code/femanager": "<6.4.2|>=7,<7.5.3|>=8,<8.3.1", "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", - "in2code/powermail": "<7.5|>=8,<8.5|>=9,<10.9|>=11,<12.4", + "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.5.3|==13", "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", "ipl/web": "<0.10.1", + "islandora/crayfish": "<4.1", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "jambagecom/div2007": "<0.10.2", "james-heinrich/getid3": "<1.9.21", - "james-heinrich/phpthumb": "<1.7.12", + "james-heinrich/phpthumb": "<=1.7.23", "jasig/phpcas": "<1.3.3", + "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", - "johnbillion/wp-crontrol": "<1.16.2", + "joelbutcher/socialstream": "<5.6|>=6,<6.2", + "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/database": ">=1,<2.2|>=3,<3.4", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", - "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/filter": "<2.0.6|>=3,<3.0.5|==4", "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", - "joomla/joomla-cms": ">=2.5,<3.9.12", + "joomla/joomla-cms": "<3.9.12|>=4,<4.4.13|>=5,<5.2.6", + "joomla/joomla-platform": "<1.5.4", "joomla/session": "<1.3.1", "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", - "juzaweb/cms": "<=3.4", + "juzaweb/cms": "<=3.4.2", "jweiland/events2": "<8.3.8|>=9,<9.0.6", + "jweiland/kk-downloader": "<1.2.2", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3", - "kimai/kimai": "<2.16", + "kimai/kimai": "<=2.20.1", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", "kohana/core": "<3.3.3", - "krayin/laravel-crm": "<1.2.2", + "koillection/koillection": "<1.6.12", + "krayin/laravel-crm": "<=1.3", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", + "lara-zeus/artemis": ">=1,<=1.0.6", + "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/pulse": "<1.3.1", + "laravel/reverb": "<1.4", "laravel/socialite": ">=1,<2.0.10", "latte/latte": "<2.10.8", "lavalite/cms": "<=9|==10.1", + "lavitto/typo3-form-to-database": "<2.2.5|>=3,<3.2.2|>=4,<4.2.3|>=5,<5.0.2", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<0.18.3", + "league/commonmark": "<2.7", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", + "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", "librenms/librenms": "<2017.08.18", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", - "limesurvey/limesurvey": "<3.27.19", + "limesurvey/limesurvey": "<6.5.12", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9", + "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.6.4", + "livewire/volt": "<1.7", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "lomkit/laravel-rest-api": "<2.13", + "luracast/restler": "<3.1", "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch9|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch7|==2.4.7|>=2.4.7.0-patch1,<2.4.7.0-patch2", + "macropay-solutions/laravel-crud-wizard-free": "<3.4.17", + "maestroerror/php-heic-to-jpg": "<1.0.5", + "magento/community-edition": "<2.4.6.0-patch13|>=2.4.7.0-beta1,<2.4.7.0-patch8|>=2.4.8.0-beta1,<2.4.8.0-patch3|>=2.4.9.0-alpha1,<2.4.9.0-alpha3|==2.4.9", "magento/core": "<=1.9.4.5", "magento/magento1ce": "<1.9.4.3-dev", "magento/magento1ee": ">=1,<1.14.4.3-dev", "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", + "magento/project-community-edition": "<=2.0.2", "magneto/core": "<1.9.4.4-dev", + "mahocommerce/maho": "<25.9", "maikuolan/phpmussel": ">=1,<1.6", "mainwp/mainwp": "<=4.4.3.3", - "mantisbt/mantisbt": "<2.26.2", + "manogi/nova-tiptap": "<=3.2.6", + "mantisbt/mantisbt": "<2.27.2", "marcwillmann/turn": "<0.3.3", + "marshmallow/nova-tiptap": "<5.7", + "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.4.12|>=5.0.0.0-alpha,<5.0.4", + "mautic/core": "<5.2.8|>=6.0.0.0-alpha,<6.0.5", + "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", - "mediawiki/core": "<1.36.2", + "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", + "mediawiki/cargo": "<3.8.3", + "mediawiki/core": "<1.39.5|==1.40", + "mediawiki/data-transfer": ">=1.39,<1.39.11|>=1.41,<1.41.3|>=1.42,<1.42.2", "mediawiki/matomo": "<2.4.3", "mediawiki/semantic-media-wiki": "<4.0.2", + "mehrwert/phpmyadmin": "<3.2", "melisplatform/melis-asset-manager": "<5.0.1", - "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-cms": "<5.3.4", + "melisplatform/melis-cms-slider": "<5.3.1", + "melisplatform/melis-core": "<5.3.11", "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", "microsoft/microsoft-graph-beta": "<2.0.1", "microsoft/microsoft-graph-core": "<2.0.2", - "microweber/microweber": "<=2.0.16", + "microweber/microweber": "<=2.0.19", "mikehaertl/php-shellcommand": "<1.6.1", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", - "modx/revolution": "<=2.8.3.0-patch", + "modx/revolution": "<=3.1", "mojo42/jirafeau": "<4.4", "mongodb/mongodb": ">=1,<1.9.2", + "mongodb/mongodb-extension": "<1.21.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1", + "moodle/moodle": "<4.4.11|>=4.5.0.0-beta,<4.5.7|>=5.0.0.0-beta,<5.0.3", + "moonshine/moonshine": "<=3.12.5", "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", "movingbytes/social-network": "<=1.2.1", "mpdf/mpdf": "<=7.1.7", - "munkireport/comment": "<4.1", + "munkireport/comment": "<4", "munkireport/managedinstalls": "<2.6", "munkireport/munki_facts": "<1.5", - "munkireport/munkireport": ">=2.5.3,<5.6.3", "munkireport/reportdata": "<3.5", "munkireport/softwareupdate": "<1.6", "mustache/mustache": ">=2,<2.14.1", + "mwdelaney/wp-enable-svg": "<=0.2", "namshi/jose": "<2.2", + "nasirkhan/laravel-starter": "<11.11", "nategood/httpful": "<1", "neoan3-apps/template": "<1.1.1", "neorazorx/facturascripts": "<2022.04", @@ -710,14 +819,18 @@ "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", "neos/swiftmailer": "<5.4.5", + "nesbot/carbon": "<2.72.6|>=3,<3.8.4", + "netcarver/textile": "<=4.1.2", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<3.0.10", + "nilsteampassnet/teampass": "<3.1.3.1-dev", + "nitsan/ns-backup": "<13.0.1", "nonfiction/nterchange": "<4.1.1", "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", "novaksolutions/infusionsoft-php-sdk": "<1", + "novosga/novosga": "<=2.2.12", "nukeviet/nukeviet": "<4.5.02", "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", @@ -725,19 +838,20 @@ "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<=3.4.4", + "october/october": "<3.7.5", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", + "october/system": "<3.7.5", + "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", - "open-web-analytics/open-web-analytics": "<1.7.4", + "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.10.1", + "openmage/magento-lts": "<20.16", "opensolutions/vimbadmin": "<=3.0.15", - "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", - "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7", + "orchid/platform": ">=8,<14.43", "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", @@ -745,7 +859,7 @@ "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", - "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/oxideshop-ce": "<=7.0.5", "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", @@ -761,6 +875,7 @@ "pear/archive_tar": "<1.4.14", "pear/auth": "<1.2.4", "pear/crypt_gpg": "<1.6.7", + "pear/http_request2": "<2.7", "pear/pear": "<=1.10.1", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", @@ -768,16 +883,18 @@ "phenx/php-svg-lib": "<0.5.2", "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", "php-mod/curl": "<2.3.2", - "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpbb/phpbb": "<3.3.11", "phpems/phpems": ">=6,<=6.1.3", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpmyadmin/phpmyadmin": "<5.2.2", + "phpmyfaq/phpmyfaq": "<=4.0.13", "phpoffice/common": "<0.2.9", - "phpoffice/phpexcel": "<1.8", - "phpoffice/phpspreadsheet": "<1.29.1|>=2,<2.1.1|>=2.2,<2.2.1", + "phpoffice/math": "<=0.2", + "phpoffice/phpexcel": "<=1.8.2", + "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", + "phppgadmin/phppgadmin": "<=7.13", "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", @@ -786,18 +903,19 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.5.4", - "pimcore/customer-management-framework-bundle": "<4.0.6", + "pimcore/admin-ui-classic-bundle": "<1.7.6", + "pimcore/customer-management-framework-bundle": "<4.2.1", "pimcore/data-hub": "<1.2.4", "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<11.2.4", - "pixelfed/pixelfed": "<0.11.11", + "pimcore/pimcore": "<11.5.4", + "piwik/piwik": "<1.11", + "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.11.2", + "pocketmine/pocketmine-mp": "<5.32.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -805,19 +923,22 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.1.6", + "prestashop/prestashop": "<8.2.3", "prestashop/productcomments": "<5.0.2", + "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", + "prestashop/ps_contactinfo": "<=3.3.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", - "processwire/processwire": "<=3.0.229", + "privatebin/privatebin": "<1.4|>=1.5,<1.7.4|>=1.7.7,<2.0.3", + "processwire/processwire": "<=3.0.246", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.11.6", + "pterodactyl/panel": "<=1.11.10", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", + "punktde/pt_extbase": "<1.5.1", "pusher/pusher-php-server": "<2.2.1", "pwweb/laravel-core": "<=0.3.6.0-beta", "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", @@ -831,37 +952,43 @@ "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<=5.15.1", + "redaxo/source": "<5.20.1", "remdex/livehelperchat": "<4.29", + "renolit/reint-downloadmanager": "<4.0.2|>=5,<5.0.1", "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", "robrichards/xmlseclibs": ">=1,<3.0.4", "roots/soil": "<4.1", + "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", "rudloff/alltube": "<3.0.3", - "s-cart/core": "<6.9", + "rudloff/rtmpdump-bin": "<=2.3.1", + "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "samwilson/unlinked-wikibase": "<1.42", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", + "setasign/fpdi": "<2.6.4", "sfroemken/url_redirect": "<=1.2.1", - "sheng/yiicms": "<=1.2", - "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", - "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", + "sheng/yiicms": "<1.2.1", + "shopware/core": "<6.6.10.9-dev|>=6.7,<6.7.4.1-dev", + "shopware/platform": "<6.6.10.7-dev|>=6.7,<6.7.3.1-dev", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17", + "shopware/shopware": "<=5.7.17|>=6.7,<6.7.2.1-dev", "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", - "shopxo/shopxo": "<=6.1", + "shopxo/shopxo": "<=6.4", "showdoc/showdoc": "<2.10.4", + "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<5.2.16", + "silverstripe/framework": "<5.3.23", "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", "silverstripe/recipe-cms": ">=4.5,<4.5.3", @@ -873,47 +1000,61 @@ "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", "silverstripe/userforms": "<3|>=5,<5.4.2", "silverstripe/versioned-admin": ">=1,<1.11.1", + "simogeo/filemanager": "<=2.5", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/saml2": "<=4.16.15|>=5.0.0.0-alpha1,<=5.0.0.0-alpha19", + "simplesamlphp/saml2-legacy": "<=4.16.15", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-common": "<1.20", "simplesamlphp/xml-security": "==1.6.11", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", + "sjbr/sr-feuser-register": "<2.6.2|>=5.1,<12.5", "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "sjbr/static-info-tables": "<2.3.1", "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<6.4.2", + "snipe/snipe-it": "<=8.3.4", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", - "spatie/browsershot": "<3.57.4", + "solspace/craft-freeform": ">=5,<5.10.16", + "soosyze/soosyze": "<=2", + "spatie/browsershot": "<5.0.5", "spatie/image-optimizer": "<1.7.3", + "spencer14420/sp-php-email-handler": "<1", "spipu/html2pdf": "<5.2.8", + "spiral/roadrunner": "<2025.1", "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<24.05.1", - "statamic/cms": "<4.46|>=5.3,<5.6.2", + "starcitizentools/citizen-skin": ">=1.9.4,<3.9", + "starcitizentools/short-description": ">=4,<4.0.1", + "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", + "starcitizenwiki/embedvideo": "<=4", + "statamic/cms": "<=5.22", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13", + "sulu/sulu": "<1.6.44|>=2,<2.5.25|>=2.6,<2.6.9|>=3.0.0.0-alpha1,<3.0.0.0-alpha3", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", + "svewap/a21glossary": "<=0.4.10", "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": "<6.2.5", "swiftyedit/swiftyedit": "<1.2", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", - "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", + "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", "symbiote/silverstripe-multivaluefield": ">=3,<3.1", @@ -926,7 +1067,8 @@ "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", - "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", + "symfony/http-client": ">=4.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", + "symfony/http-foundation": "<5.4.50|>=6,<6.4.29|>=7,<7.3.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", @@ -934,20 +1076,24 @@ "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/polyfill": ">=1,<1.10", "symfony/polyfill-php55": ">=1,<1.10", + "symfony/process": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/routing": ">=2,<2.0.19", + "symfony/runtime": ">=5.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7", "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", - "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.4.10|>=7,<7.0.10|>=7.1,<7.1.3", "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/symfony": "<5.4.50|>=6,<6.4.29|>=7,<7.3.7", "symfony/translation": ">=2,<2.0.17", "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/ux-autocomplete": "<2.11.2", - "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/ux-live-component": "<2.25.1", + "symfony/ux-twig-component": "<2.25.1", + "symfony/validator": "<5.4.43|>=6,<6.4.11|>=7,<7.1.4", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", "symfony/webhook": ">=6.3,<6.3.8", @@ -956,40 +1102,55 @@ "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", "t3s/content-consent": "<1.0.3|>=2,<2.0.2", - "tastyigniter/tastyigniter": "<3.3", - "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<=6.7.4", + "tastyigniter/tastyigniter": "<4", + "tcg/voyager": "<=1.8", + "tecnickcom/tc-lib-pdf-font": "<2.6.4", + "tecnickcom/tcpdf": "<6.8", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<3.2.2", + "thorsten/phpmyfaq": "<=4.0.13", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", + "tltneon/lgsl": "<7", "tobiasbg/tablepress": "<=2.0.0.0-RC1", "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", "topthink/think": "<=6.1.1", - "topthink/thinkphp": "<=3.2.3", - "torrentpier/torrentpier": "<=2.4.3", + "topthink/thinkphp": "<=3.2.3|>=6.1.3,<=8.0.4", + "torrentpier/torrentpier": "<=2.8.8", "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", - "tribalsystems/zenario": "<9.5.60602", + "tribalsystems/zenario": "<=9.7.61188", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", - "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", - "twig/twig": "<1.44.8|>=2,<2.16.1|>=3,<3.11.1|>=3.12,<3.14", + "twbs/bootstrap": "<3.4.1|>=4,<4.3.1", + "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-beuser": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-dashboard": ">=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-felogin": ">=4.2,<4.2.3", "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", - "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", - "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2", + "typo3/cms-lowlevel": ">=11,<=11.5.41", + "typo3/cms-recordlist": ">=11,<11.5.48", + "typo3/cms-recycler": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "typo3/cms-scheduler": ">=11,<=11.5.41", + "typo3/cms-setup": ">=9,<=9.5.50|>=10,<=10.4.49|>=11,<=11.5.43|>=12,<=12.4.30|>=13,<=13.4.11", + "typo3/cms-webhooks": ">=12,<=12.4.30|>=13,<=13.4.11", + "typo3/cms-workspaces": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", @@ -998,40 +1159,48 @@ "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", "uasoft-indonesia/badaso": "<=2.9.7", - "unisharp/laravel-filemanager": "<2.6.4", + "unisharp/laravel-filemanager": "<2.9.1", + "universal-omega/dynamic-page-list3": "<3.6.4", + "unopim/unopim": "<=0.3", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "uvdesk/community-skeleton": "<=1.1.1", "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", "verbb/comments": "<1.5.5", - "verbb/formie": "<2.1.6", + "verbb/formie": "<=2.1.43", "verbb/image-resizer": "<2.0.9", "verbb/knock-knock": "<1.2.8", "verot/class.upload.php": "<=2.1.6", + "vertexvaar/falsftp": "<0.2.6", "villagedefrance/opencart-overclocked": "<=1.11.1", "vova07/yii2-fileapi-widget": "<0.1.9", - "vrana/adminer": "<4.8.1", + "vrana/adminer": "<=4.8.1", "vufind/vufind": ">=2,<9.1.1", "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.6.7", + "wallabag/wallabag": "<2.6.11", "wanglelecc/laracms": "<=1.0.3", + "wapplersystems/a21glossary": "<=0.4.10", "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", "web-auth/webauthn-lib": ">=4.5,<4.9", "web-feet/coastercms": "==5.5", + "web-tp3/wec_map": "<3.0.3", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", "webpa/webpa": "<3.1.2", + "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "winter/wn-backend-module": "<1.2.4", + "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", + "wireui/wireui": "<1.19.3|>=2,<2.1.3", "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", "wp-cli/wp-cli": ">=0.12,<2.5", "wp-graphql/wp-graphql": "<=1.14.5", @@ -1043,23 +1212,24 @@ "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", - "yeswiki/yeswiki": "<4.1", - "yetiforce/yetiforce-crm": "<=6.4", + "yeswiki/yeswiki": "<=4.5.4", + "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.29", - "yiisoft/yii2": "<2.0.49.4-dev", + "yiisoft/yii": "<1.1.31", + "yiisoft/yii2": "<2.0.52", "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.43", + "yiisoft/yii2-dev": "<=2.0.45", "yiisoft/yii2-elasticsearch": "<2.0.5", "yiisoft/yii2-gii": "<=2.2.4", "yiisoft/yii2-jui": "<2.0.4", - "yiisoft/yii2-redis": "<2.0.8", + "yiisoft/yii2-redis": "<2.0.20", "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", "yourls/yourls": "<=1.8.2", "yuan1994/tpadmin": "<=1.3.12", + "z-push/z-push-dev": "<2.7.6", "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", @@ -1134,7 +1304,7 @@ "type": "tidelift" } ], - "time": "2024-09-16T22:05:02+00:00" + "time": "2025-11-26T00:22:38+00:00" }, { "name": "sabre/dav", @@ -1287,16 +1457,16 @@ }, { "name": "sabre/http", - "version": "5.1.12", + "version": "5.1.13", "source": { "type": "git", "url": "https://github.com/sabre-io/http.git", - "reference": "dedff73f3995578bc942fa4c8484190cac14f139" + "reference": "7c2a14097d1a0de2347dcbdc91a02f38e338f4db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/http/zipball/dedff73f3995578bc942fa4c8484190cac14f139", - "reference": "dedff73f3995578bc942fa4c8484190cac14f139", + "url": "https://api.github.com/repos/sabre-io/http/zipball/7c2a14097d1a0de2347dcbdc91a02f38e338f4db", + "reference": "7c2a14097d1a0de2347dcbdc91a02f38e338f4db", "shasum": "" }, "require": { @@ -1308,7 +1478,7 @@ "sabre/uri": "^2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1||^3.63", + "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, @@ -1346,7 +1516,7 @@ "issues": "https://github.com/sabre-io/http/issues", "source": "https://github.com/fruux/sabre-http" }, - "time": "2024-08-27T16:07:41+00:00" + "time": "2025-09-09T10:21:47+00:00" }, { "name": "sabre/uri", @@ -1410,16 +1580,16 @@ }, { "name": "sabre/vobject", - "version": "4.5.6", + "version": "4.5.7", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "900266bb3bd448a9f7f41f82344ad0aba237cb27" + "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/900266bb3bd448a9f7f41f82344ad0aba237cb27", - "reference": "900266bb3bd448a9f7f41f82344ad0aba237cb27", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", + "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", "shasum": "" }, "require": { @@ -1429,7 +1599,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "~2.17.1", - "phpstan/phpstan": "^0.12 || ^1.11", + "phpstan/phpstan": "^0.12 || ^1.12 || ^2.0", "phpunit/php-invoker": "^2.0 || ^3.1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, @@ -1510,7 +1680,7 @@ "issues": "https://github.com/sabre-io/vobject/issues", "source": "https://github.com/fruux/sabre-vobject" }, - "time": "2024-10-14T11:53:54+00:00" + "time": "2025-04-17T09:22:48+00:00" }, { "name": "sabre/xml", @@ -1595,5 +1765,5 @@ "platform-overrides": { "php": "8.1" }, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } diff --git a/lib/ACL/ACLStorageWrapper.php b/lib/ACL/ACLStorageWrapper.php index a3856d4bf..0861f85a4 100644 --- a/lib/ACL/ACLStorageWrapper.php +++ b/lib/ACL/ACLStorageWrapper.php @@ -11,12 +11,12 @@ use Icewind\Streams\IteratorDirectory; use OC\Files\Storage\Wrapper\Wrapper; use OCP\Constants; -use OCP\Files\Cache\ICache; -use OCP\Files\Cache\IScanner; -use OCP\Files\Storage\IConstructableStorage; -use OCP\Files\Storage\IStorage; -class ACLStorageWrapper extends Wrapper implements IConstructableStorage { +/** + * @psalm-suppress DeprecatedInterface + * @psalm-suppress MissingParamType + */ +class ACLStorageWrapper extends Wrapper { private readonly ACLManager $aclManager; private readonly bool $inShare; private int $storageId; @@ -41,37 +41,37 @@ private function getACLPermissionsForPath(string $path): int { return $canRead ? $permissions : 0; } - private function checkPermissions(string $path, int $permissions): bool { + private function checkPermissions($path, $permissions): bool { return ($this->getACLPermissionsForPath($path) & $permissions) === $permissions; } - public function isReadable(string $path): bool { + public function isReadable($path) { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::isReadable($path); } - public function isUpdatable(string $path): bool { + public function isUpdatable($path) { return $this->checkPermissions($path, Constants::PERMISSION_UPDATE) && parent::isUpdatable($path); } - public function isCreatable(string $path): bool { + public function isCreatable($path) { return $this->checkPermissions($path, Constants::PERMISSION_CREATE) && parent::isCreatable($path); } - public function isDeletable(string $path): bool { + public function isDeletable($path) { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) && parent::isDeletable($path); } - public function isSharable(string $path): bool { + public function isSharable($path) { return $this->checkPermissions($path, Constants::PERMISSION_SHARE) && parent::isSharable($path); } - public function getPermissions(string $path): int { + public function getPermissions($path): int { return $this->storage->getPermissions($path) & $this->getACLPermissionsForPath($path); } - public function rename(string $source, string $target): bool { + public function rename($source, $target): bool { if (str_starts_with($source, $target)) { $part = substr($source, strlen($target)); //This is a rename of the transfer file to the original file @@ -98,7 +98,7 @@ public function rename(string $source, string $target): bool { && parent::rename($source, $target); } - public function opendir(string $path) { + public function opendir($path) { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -120,29 +120,29 @@ public function opendir(string $path) { return IteratorDirectory::wrap($items); } - public function copy(string $source, string $target): bool { + public function copy($source, $target): bool { $permissions = $this->file_exists($target) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($target, $permissions) && $this->checkPermissions($source, Constants::PERMISSION_READ) && parent::copy($source, $target); } - public function touch(string $path, ?int $mtime = null): bool { + public function touch($path, $mtime = null): bool { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) && parent::touch($path, $mtime); } - public function mkdir(string $path): bool { + public function mkdir($path): bool { return $this->checkPermissions($path, Constants::PERMISSION_CREATE) && parent::mkdir($path); } - public function rmdir(string $path): bool { + public function rmdir($path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) && parent::rmdir($path); } - public function unlink(string $path): bool { + public function unlink($path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) && parent::unlink($path); @@ -156,12 +156,12 @@ private function canDeleteTree(string $path): int { return $this->aclManager->getPermissionsForTree($this->storageId, $path) & Constants::PERMISSION_DELETE; } - public function file_put_contents(string $path, mixed $data): int|float|false { + public function file_put_contents($path, $data) { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) ? parent::file_put_contents($path, $data) : false; } - public function fopen(string $path, string $mode) { + public function fopen($path, $mode) { if ($mode === 'r' or $mode === 'rb') { $permissions = Constants::PERMISSION_READ; } else { @@ -179,7 +179,7 @@ public function writeStream(string $path, $stream, ?int $size = null): int { /** * @inheritDoc */ - public function getCache(string $path = '', ?IStorage $storage = null): ICache { + public function getCache($path = '', $storage = null) { if (!$storage) { $storage = $this; } @@ -189,7 +189,7 @@ public function getCache(string $path = '', ?IStorage $storage = null): ICache { return new ACLCacheWrapper($sourceCache, $this->aclManager, $this->inShare); } - public function getMetaData(string $path): ?array { + public function getMetaData($path): ?array { $data = parent::getMetaData($path); if ($data && isset($data['permissions'])) { @@ -203,7 +203,7 @@ public function getMetaData(string $path): ?array { /** * @inheritDoc */ - public function getScanner(string $path = '', ?IStorage $storage = null): IScanner { + public function getScanner($path = '', $storage = null) { if (!$storage) { $storage = $this->storage; } @@ -211,17 +211,17 @@ public function getScanner(string $path = '', ?IStorage $storage = null): IScann return parent::getScanner($path, $storage); } - public function is_dir(string $path): bool { + public function is_dir($path) { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::is_dir($path); } - public function is_file(string $path): bool { + public function is_file($path) { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::is_file($path); } - public function stat(string $path): array|false { + public function stat($path) { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -229,7 +229,7 @@ public function stat(string $path): array|false { return parent::stat($path); } - public function filetype(string $path): string|false { + public function filetype($path) { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -237,7 +237,7 @@ public function filetype(string $path): string|false { return parent::filetype($path); } - public function filesize(string $path): false|int|float { + public function filesize($path): float|false|int { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -245,12 +245,12 @@ public function filesize(string $path): false|int|float { return parent::filesize($path); } - public function file_exists(string $path): bool { + public function file_exists($path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::file_exists($path); } - public function filemtime(string $path): int|false { + public function filemtime($path): bool|int { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -258,7 +258,7 @@ public function filemtime(string $path): int|false { return parent::filemtime($path); } - public function file_get_contents(string $path): string|false { + public function file_get_contents($path): bool|string { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -266,7 +266,7 @@ public function file_get_contents(string $path): string|false { return parent::file_get_contents($path); } - public function getMimeType(string $path): string|false { + public function getMimeType($path): bool|string { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -274,7 +274,7 @@ public function getMimeType(string $path): string|false { return parent::getMimeType($path); } - public function hash(string $type, string $path, bool $raw = false): string|false { + public function hash($type, $path, $raw = false): bool|string { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -282,7 +282,7 @@ public function hash(string $type, string $path, bool $raw = false): string|fals return parent::hash($type, $path, $raw); } - public function getETag(string $path): string|false { + public function getETag($path): bool|string { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -290,7 +290,7 @@ public function getETag(string $path): string|false { return parent::getETag($path); } - public function getDirectDownload(string $path): array|false { + public function getDirectDownload($path): bool|array { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; } @@ -298,7 +298,7 @@ public function getDirectDownload(string $path): array|false { return parent::getDirectDownload($path); } - public function getDirectoryContent(string $directory): \Traversable { + public function getDirectoryContent($directory): \Traversable { $content = $this->getWrapperStorage()->getDirectoryContent($directory); foreach ($content as $data) { $data['scan_permissions'] ??= $data['permissions']; diff --git a/lib/BackCompat/InvalidObjectStoreConfigurationException.php b/lib/BackCompat/InvalidObjectStoreConfigurationException.php new file mode 100644 index 000000000..533289754 --- /dev/null +++ b/lib/BackCompat/InvalidObjectStoreConfigurationException.php @@ -0,0 +1,16 @@ + + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OCA\GroupFolders\BackCompat; + +/** + * Copy of \OC\Files\ObjectStore\InvalidObjectStoreConfigurationException from NC 32 + */ +class InvalidObjectStoreConfigurationException extends \Exception { + +} diff --git a/lib/BackCompat/Mapper.php b/lib/BackCompat/Mapper.php new file mode 100644 index 000000000..7591e0d28 --- /dev/null +++ b/lib/BackCompat/Mapper.php @@ -0,0 +1,35 @@ +config['arguments']['min_bucket']) + ? (int)$this->config['arguments']['min_bucket'] + : 0; + + $hash = md5($this->user->getUID()); + $num = hexdec(substr($hash, 0, 4)); + return (string)(($num % ($numBuckets - $minBucket)) + $minBucket); + } +} diff --git a/lib/BackCompat/PrimaryObjectStoreConfig.php b/lib/BackCompat/PrimaryObjectStoreConfig.php new file mode 100644 index 000000000..b079ca74c --- /dev/null +++ b/lib/BackCompat/PrimaryObjectStoreConfig.php @@ -0,0 +1,240 @@ +, arguments: array{multibucket: bool, ...}} + */ +class PrimaryObjectStoreConfig { + public function __construct( + private readonly IConfig $config, + private readonly IAppManager $appManager, + ) { + } + + /** + * @param ObjectStoreConfig $config + */ + public function buildObjectStore(array $config): IObjectStore { + return new $config['class']($config['arguments']); + } + + /** + * @return ?ObjectStoreConfig + */ + public function getObjectStoreConfigForRoot(): ?array { + if (!$this->hasObjectStore()) { + return null; + } + + $config = $this->getObjectStoreConfiguration('root'); + + if ($config['arguments']['multibucket']) { + if (!isset($config['arguments']['bucket'])) { + $config['arguments']['bucket'] = ''; + } + + // put the root FS always in first bucket for multibucket configuration + $config['arguments']['bucket'] .= '0'; + } + return $config; + } + + /** + * @return ?ObjectStoreConfig + */ + public function getObjectStoreConfigForUser(IUser $user): ?array { + if (!$this->hasObjectStore()) { + return null; + } + + $store = $this->getObjectStoreForUser($user); + $config = $this->getObjectStoreConfiguration($store); + + if ($config['arguments']['multibucket']) { + $config['arguments']['bucket'] = $this->getBucketForUser($user, $config); + } + return $config; + } + + /** + * @param string $name + * @return ObjectStoreConfig + */ + public function getObjectStoreConfiguration(string $name): array { + $configs = $this->getObjectStoreConfigs(); + $name = $this->resolveAlias($name); + if (!isset($configs[$name])) { + throw new \Exception("Object store configuration for '$name' not found"); + } + if (is_string($configs[$name])) { + throw new \Exception("Object store configuration for '{$configs[$name]}' not found"); + } + return $configs[$name]; + } + + public function resolveAlias(string $name): string { + $configs = $this->getObjectStoreConfigs(); + + while (isset($configs[$name]) && is_string($configs[$name])) { + $name = $configs[$name]; + } + return $name; + } + + public function hasObjectStore(): bool { + $objectStore = $this->config->getSystemValue('objectstore', null); + $objectStoreMultiBucket = $this->config->getSystemValue('objectstore_multibucket', null); + return $objectStore || $objectStoreMultiBucket; + } + + public function hasMultipleObjectStorages(): bool { + $objectStore = $this->config->getSystemValue('objectstore', []); + return isset($objectStore['default']); + } + + /** + * @return ?array + * @throws InvalidObjectStoreConfigurationException + */ + public function getObjectStoreConfigs(): ?array { + $objectStore = $this->config->getSystemValue('objectstore', null); + $objectStoreMultiBucket = $this->config->getSystemValue('objectstore_multibucket', null); + + // new-style multibucket config uses the same 'objectstore' key but sets `'multibucket' => true`, transparently upgrade older style config + if ($objectStoreMultiBucket) { + $objectStoreMultiBucket['arguments']['multibucket'] = true; + $configs = [ + 'default' => 'server1', + 'server1' => $this->validateObjectStoreConfig($objectStoreMultiBucket), + 'root' => 'server1', + ]; + } elseif ($objectStore) { + if (!isset($objectStore['default'])) { + $objectStore = [ + 'default' => 'server1', + 'root' => 'server1', + 'server1' => $objectStore, + ]; + } + if (!isset($objectStore['root'])) { + $objectStore['root'] = 'default'; + } + + if (!is_string($objectStore['default'])) { + throw new InvalidObjectStoreConfigurationException('The \'default\' object storage configuration is required to be a reference to another configuration.'); + } + $configs = array_map($this->validateObjectStoreConfig(...), $objectStore); + } else { + return null; + } + + $usedBuckets = []; + foreach ($configs as $config) { + if (is_array($config)) { + $bucket = $config['arguments']['bucket'] ?? ''; + if (in_array($bucket, $usedBuckets)) { + throw new InvalidObjectStoreConfigurationException('Each object store configuration must use distinct bucket names'); + } + $usedBuckets[] = $bucket; + } + } + + return $configs; + } + + /** + * @param array|string $config + * @return string|ObjectStoreConfig + */ + private function validateObjectStoreConfig(array|string $config): array|string { + if (is_string($config)) { + return $config; + } + if (!isset($config['class'])) { + throw new InvalidObjectStoreConfigurationException('No class configured for object store'); + } + if (!isset($config['arguments'])) { + $config['arguments'] = []; + } + $class = $config['class']; + $arguments = $config['arguments']; + if (!is_array($arguments)) { + throw new InvalidObjectStoreConfigurationException('Configured object store arguments are not an array'); + } + if (!isset($arguments['multibucket'])) { + $arguments['multibucket'] = false; + } + if (!is_bool($arguments['multibucket'])) { + throw new InvalidObjectStoreConfigurationException('arguments.multibucket must be a boolean in object store configuration'); + } + + if (!is_string($class)) { + throw new InvalidObjectStoreConfigurationException('Configured class for object store is not a string'); + } + + if (str_starts_with($class, 'OCA\\') && substr_count($class, '\\') >= 2) { + [$appId] = explode('\\', $class); + $this->appManager->loadApp(strtolower($appId)); + } + + if (!is_a($class, IObjectStore::class, true)) { + throw new InvalidObjectStoreConfigurationException('Configured class for object store is not an object store'); + } + return [ + 'class' => $class, + 'arguments' => $arguments, + ]; + } + + public function getBucketForUser(IUser $user, array $config): string { + $bucket = $this->getSetBucketForUser($user); + + if ($bucket === null) { + /* + * Use any provided bucket argument as prefix + * and add the mapping from username => bucket + */ + if (!isset($config['arguments']['bucket'])) { + $config['arguments']['bucket'] = ''; + } + $mapper = new Mapper($user, $config); + $numBuckets = $config['arguments']['num_buckets'] ?? 64; + $bucket = $config['arguments']['bucket'] . $mapper->getBucket($numBuckets); + + $this->config->setUserValue($user->getUID(), 'homeobjectstore', 'bucket', $bucket); + } + + return $bucket; + } + + public function getSetBucketForUser(IUser $user): ?string { + return $this->config->getUserValue($user->getUID(), 'homeobjectstore', 'bucket', null); + } + + public function getObjectStoreForUser(IUser $user): string { + if ($this->hasMultipleObjectStorages()) { + $value = $this->config->getUserValue($user->getUID(), 'homeobjectstore', 'objectstore', null); + if ($value === null) { + $value = $this->resolveAlias('default'); + $this->config->setUserValue($user->getUID(), 'homeobjectstore', 'objectstore', $value); + } + return $value; + } else { + return 'default'; + } + } +} diff --git a/lib/Command/Trashbin/Cleanup.php b/lib/Command/Trashbin/Cleanup.php index 8abc2ff0d..451caddf6 100644 --- a/lib/Command/Trashbin/Cleanup.php +++ b/lib/Command/Trashbin/Cleanup.php @@ -51,6 +51,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int } /** @var QuestionHelper $helper */ + /** @psalm-suppress UndefinedMethod */ $helper = $this->getHelper('question'); $folders = $this->folderManager->getAllFoldersWithSize(); diff --git a/lib/Mount/FolderStorageManager.php b/lib/Mount/FolderStorageManager.php index 1071f1395..85c38cc51 100644 --- a/lib/Mount/FolderStorageManager.php +++ b/lib/Mount/FolderStorageManager.php @@ -10,12 +10,12 @@ use OC\Files\Cache\Cache; use OC\Files\ObjectStore\ObjectStoreStorage; -use OC\Files\ObjectStore\PrimaryObjectStoreConfig; use OC\Files\Storage\Local; use OC\Files\Storage\Wrapper\Jail; use OCA\GroupFolders\ACL\ACLManagerFactory; use OCA\GroupFolders\ACL\ACLStorageWrapper; use OCA\GroupFolders\AppInfo\Application; +use OCA\GroupFolders\BackCompat\PrimaryObjectStoreConfig; use OCA\GroupFolders\Folder\FolderDefinition; use OCP\Files\Folder; use OCP\Files\IRootFolder; diff --git a/lib/Mount/GroupFolderEncryptionJail.php b/lib/Mount/GroupFolderEncryptionJail.php index 295bb6cf3..9f7a3c1af 100644 --- a/lib/Mount/GroupFolderEncryptionJail.php +++ b/lib/Mount/GroupFolderEncryptionJail.php @@ -16,6 +16,7 @@ /** * Jail with overridden behaviors specific to group folders when encryption is * enabled. + * @psalm-suppress DeprecatedInterface */ class GroupFolderEncryptionJail extends Jail { /** diff --git a/lib/Mount/GroupFolderNoEncryptionStorage.php b/lib/Mount/GroupFolderNoEncryptionStorage.php index 3cad1f7e6..64696f911 100644 --- a/lib/Mount/GroupFolderNoEncryptionStorage.php +++ b/lib/Mount/GroupFolderNoEncryptionStorage.php @@ -14,6 +14,7 @@ * @psalm-suppress UnimplementedInterfaceMethod * Psalm gets confused about missing methods, but those are implemented in OC\Files\Storage\Wrapper\Wrapper, * so this suppression is fine and necessary as there is nothing wrong. + * @psalm-suppress DeprecatedInterface */ class GroupFolderNoEncryptionStorage extends GroupFolderStorage implements IDisableEncryptionStorage { } diff --git a/lib/Mount/GroupFolderStorage.php b/lib/Mount/GroupFolderStorage.php index 694e25201..3e41f38ff 100644 --- a/lib/Mount/GroupFolderStorage.php +++ b/lib/Mount/GroupFolderStorage.php @@ -16,12 +16,14 @@ use OCP\Files\Cache\ICache; use OCP\Files\Cache\ICacheEntry; use OCP\Files\Cache\IScanner; -use OCP\Files\Storage\IConstructableStorage; use OCP\Files\Storage\IStorage; use OCP\IUser; use OCP\IUserSession; -class GroupFolderStorage extends Quota implements IConstructableStorage { +/** + * @psalm-suppress DeprecatedInterface + */ +class GroupFolderStorage extends Quota { private readonly FolderDefinition $folder; private readonly ?ICacheEntry $rootEntry; private readonly IUserSession $userSession; @@ -45,7 +47,7 @@ public function getFolder(): FolderDefinition { return $this->folder; } - public function getOwner(string $path): string|false { + public function getOwner($path) { if ($this->mountOwner !== null) { return $this->mountOwner->getUID(); } @@ -55,6 +57,7 @@ public function getOwner(string $path): string|false { return $user->getUID(); } + /** @psalm-suppress FalsableReturnStatement */ return false; } @@ -63,10 +66,12 @@ public function getUser(): ?IUser { } /** - * @inheritDoc + * @psalm-suppress MoreSpecificReturnType + * @psalm-suppress MissingParamType */ - public function getCache(string $path = '', ?IStorage $storage = null): ICache { + public function getCache($path = '', $storage = null) { if ($this->cache) { + /** @psalm-suppress LessSpecificReturnStatement */ return $this->cache; } diff --git a/lib/Mount/GroupMountPoint.php b/lib/Mount/GroupMountPoint.php index fc98ded24..6a6c056dd 100644 --- a/lib/Mount/GroupMountPoint.php +++ b/lib/Mount/GroupMountPoint.php @@ -12,12 +12,11 @@ use OC\Files\Storage\Storage; use OC\Files\Storage\Wrapper\Jail; use OCA\GroupFolders\Folder\FolderDefinition; -use OCP\Files\Mount\IShareOwnerlessMount; use OCP\Files\Mount\ISystemMountPoint; use OCP\Files\Storage\IStorage; use OCP\Files\Storage\IStorageFactory; -class GroupMountPoint extends MountPoint implements ISystemMountPoint, IShareOwnerlessMount { +class GroupMountPoint extends MountPoint implements ISystemMountPoint { public function __construct( private readonly FolderDefinition $folder, IStorage $storage, diff --git a/lib/Mount/RootPermissionsMask.php b/lib/Mount/RootPermissionsMask.php index 17de6e8bb..6be09e554 100644 --- a/lib/Mount/RootPermissionsMask.php +++ b/lib/Mount/RootPermissionsMask.php @@ -16,6 +16,7 @@ /** * Permissions mask that only masks the root of the storage + * @psalm-suppress DeprecatedInterface */ class RootPermissionsMask extends Wrapper { /** diff --git a/lib/Service/ApplicationService.php b/lib/Service/ApplicationService.php index a5cffcae2..3eed05e97 100644 --- a/lib/Service/ApplicationService.php +++ b/lib/Service/ApplicationService.php @@ -22,7 +22,7 @@ public function __construct( * @return boolean true if all apps are installed, false otherwise. */ public function checkAppsInstalled(): bool { - $diffApps = array_diff(Application::APPS_USE_GROUPFOLDERS, $this->appManager->getEnabledApps()); + $diffApps = array_diff(Application::APPS_USE_GROUPFOLDERS, $this->appManager->getInstalledApps()); return empty($diffApps); } diff --git a/tests/Trash/TrashBackendTest.php b/tests/Trash/TrashBackendTest.php index 742a71aca..891e9c443 100644 --- a/tests/Trash/TrashBackendTest.php +++ b/tests/Trash/TrashBackendTest.php @@ -223,6 +223,9 @@ public function testHideDeletedTrashItemInDeletedParentFolderAcl(): void { } public function testWrongOriginalLocation(): void { + /** @psalm-suppress DeprecatedMethod */ + \OCP\Util::connectHook('OC_Filesystem', 'preSetup', 'OCA\Files_Trashbin\Storage', 'setupStorage'); + $shareManager = Server::get(Share\IManager::class); $userA = $this->createUser('A', 'test'); diff --git a/tests/stubs/icewind_streams_directory.php b/tests/stubs/icewind_streams_directory.php index 50ec2cc6c..64c1e0618 100644 --- a/tests/stubs/icewind_streams_directory.php +++ b/tests/stubs/icewind_streams_directory.php @@ -1,7 +1,8 @@ - * SPDX-License-Identifier: MIT + * Copyright (c) 2014 Robin Appelman + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT */ namespace Icewind\Streams; diff --git a/tests/stubs/icewind_streams_iteratordirectory.php b/tests/stubs/icewind_streams_iteratordirectory.php index 32f3198fe..9caf54cd3 100644 --- a/tests/stubs/icewind_streams_iteratordirectory.php +++ b/tests/stubs/icewind_streams_iteratordirectory.php @@ -1,7 +1,8 @@ - * SPDX-License-Identifier: MIT + * Copyright (c) 2014 Robin Appelman + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT */ namespace Icewind\Streams; diff --git a/tests/stubs/icewind_streams_wrapperhandler.php b/tests/stubs/icewind_streams_wrapperhandler.php index 407bc7b9c..136805e27 100644 --- a/tests/stubs/icewind_streams_wrapperhandler.php +++ b/tests/stubs/icewind_streams_wrapperhandler.php @@ -1,7 +1,22 @@ - * SPDX-License-Identifier: AGPL-3.0-or-later + * @copyright Copyright (c) 2019 Robin Appelman + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * */ namespace Icewind\Streams; diff --git a/tests/stubs/oc.php b/tests/stubs/oc.php index 4216334cb..f97f3e2d2 100644 --- a/tests/stubs/oc.php +++ b/tests/stubs/oc.php @@ -6,28 +6,24 @@ * SPDX-FileCopyrightText: 2013-2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-only */ - -use OC\Profiler\BuiltInProfiler; +use OC\Encryption\HookManager; use OC\Share20\GroupDeletedListener; use OC\Share20\Hooks; use OC\Share20\UserDeletedListener; use OC\Share20\UserRemovedListener; use OC\User\DisabledUserException; use OCP\EventDispatcher\IEventDispatcher; -use OCP\Files\Events\BeforeFileSystemSetupEvent; use OCP\Group\Events\GroupDeletedEvent; use OCP\Group\Events\UserRemovedEvent; -use OCP\IConfig; use OCP\ILogger; use OCP\IRequest; use OCP\IURLGenerator; use OCP\IUserSession; use OCP\Security\Bruteforce\IThrottler; use OCP\Server; -use OCP\Template\ITemplateManager; +use OCP\Share; use OCP\User\Events\UserChangedEvent; use OCP\User\Events\UserDeletedEvent; -use OCP\Util; use Psr\Log\LoggerInterface; use Symfony\Component\Routing\Exception\MethodNotAllowedException; use function OCP\Log\logger; @@ -38,6 +34,10 @@ * OC_autoload! */ class OC { + /** + * Associative array for autoloading. classname => filename + */ + public static array $CLASSPATH = []; /** * The installation path for Nextcloud on the server (e.g. /srv/http/nextcloud) */ @@ -64,6 +64,8 @@ class OC { */ public static bool $CLI = false; + public static \OC\Autoloader $loader; + public static \Composer\Autoload\ClassLoader $composerAutoloader; public static \OC\Server $server; @@ -122,6 +124,10 @@ public static function registerCleanupHooks(\OC\SystemConfig $systemConfig): voi */ public static function registerShareHooks(\OC\SystemConfig $systemConfig): void { + } + + protected static function registerAutoloaderCache(\OC\SystemConfig $systemConfig): void + { } /** diff --git a/tests/stubs/oc_appframework_ocs_baseresponse.php b/tests/stubs/oc_appframework_ocs_baseresponse.php index c554ba7b7..59451c489 100644 --- a/tests/stubs/oc_appframework_ocs_baseresponse.php +++ b/tests/stubs/oc_appframework_ocs_baseresponse.php @@ -52,14 +52,6 @@ public function __construct(DataResponse $dataResponse, $format = 'xml', $status */ protected function renderResult(array $meta): string { - } - - /** - * @psalm-taint-escape has_quotes - * @psalm-taint-escape html - */ - protected function toJson(array $array): string - { } protected function toXML(array $array, \XMLWriter $writer): void diff --git a/tests/stubs/oc_appframework_utility_simplecontainer.php b/tests/stubs/oc_appframework_utility_simplecontainer.php index 5d7358a0e..de7a44293 100644 --- a/tests/stubs/oc_appframework_utility_simplecontainer.php +++ b/tests/stubs/oc_appframework_utility_simplecontainer.php @@ -12,9 +12,7 @@ use OCP\AppFramework\QueryException; use OCP\IContainer; use Pimple\Container; -use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; -use Psr\Log\LoggerInterface; use ReflectionClass; use ReflectionException; use ReflectionNamedType; @@ -25,8 +23,6 @@ * SimpleContainer is a simple implementation of a container on basis of Pimple */ class SimpleContainer implements ArrayAccess, ContainerInterface, IContainer { - public static bool $useLazyObjects = false; - public function __construct() { } @@ -83,15 +79,11 @@ public function registerService($name, Closure $closure, $shared = true) * @param string $alias the alias that should be registered * @param string $target the target that should be resolved instead */ - public function registerAlias($alias, $target): void + public function registerAlias($alias, $target) { } - protected function registerDeprecatedAlias(string $alias, string $target): void - { - } - - /** + /* * @param string $name * @return string */ diff --git a/tests/stubs/oc_db_querybuilder_querybuilder.php b/tests/stubs/oc_db_querybuilder_querybuilder.php index 10b17d62f..83f764919 100644 --- a/tests/stubs/oc_db_querybuilder_querybuilder.php +++ b/tests/stubs/oc_db_querybuilder_querybuilder.php @@ -952,8 +952,6 @@ public function getTableName($table) /** * Returns the table name with database prefix as needed by the implementation * - * Was protected until version 30. - * * @param string $table * @return string */ @@ -980,10 +978,6 @@ public function getColumnName($column, $tableAlias = '') */ public function quoteAlias($alias) { - } - - public function escapeLikeParameter(string $parameter): string - { } public function hintShardKey(string $column, mixed $value, bool $overwrite = false): self diff --git a/tests/stubs/oc_files_cache_cache.php b/tests/stubs/oc_files_cache_cache.php index 90a240793..60a15cdc5 100644 --- a/tests/stubs/oc_files_cache_cache.php +++ b/tests/stubs/oc_files_cache_cache.php @@ -7,15 +7,13 @@ */ namespace OC\Files\Cache; +use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use OC\DB\Exceptions\DbalException; use OC\DB\QueryBuilder\Sharded\ShardDefinition; -use OC\Files\Cache\Wrapper\CacheJail; -use OC\Files\Cache\Wrapper\CacheWrapper; use OC\Files\Search\SearchComparison; use OC\Files\Search\SearchQuery; use OC\Files\Storage\Wrapper\Encryption; use OC\SystemConfig; -use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\Cache\CacheEntryInsertedEvent; @@ -94,7 +92,7 @@ public function getNumericStorageId() /** * get the stored metadata of a file or folder * - * @param string|int $file either the path of a file or folder or the file id for a file or folder + * @param string | int $file either the path of a file or folder or the file id for a file or folder * @return ICacheEntry|false the cache entry as array or false if the file is not found in the cache */ public function get($file) @@ -152,7 +150,7 @@ public function put($file, array $data) * @param array $data * * @return int file id - * @throws \RuntimeException|Exception + * @throws \RuntimeException */ public function insert($file, array $data) { @@ -245,10 +243,6 @@ protected function getMoveInfo($path) protected function hasEncryptionWrapper(): bool { - } - - protected function shouldEncrypt(string $targetPath): bool - { } /** @@ -315,9 +309,10 @@ public function searchQuery(ISearchQuery $query) /** * Re-calculate the folder size and the size of all parent folders * - * @param array|ICacheEntry|null $data (optional) meta data of the folder + * @param string|boolean $path + * @param array $data (optional) meta data of the folder */ - public function correctFolderSize(string $path, $data = null, bool $isBackgroundScan = false): void + public function correctFolderSize($path, $data = null, $isBackgroundScan = false) { } @@ -394,7 +389,7 @@ public function getPathById($id) * * @param int $id * @return array first element holding the storage id, second the path - * @deprecated 17.0.0 use getPathById() instead + * @deprecated use getPathById() instead */ public static function getById($id) { diff --git a/tests/stubs/oc_files_cache_cacheentry.php b/tests/stubs/oc_files_cache_cacheentry.php index d6d4b62ca..a4351d98e 100644 --- a/tests/stubs/oc_files_cache_cacheentry.php +++ b/tests/stubs/oc_files_cache_cacheentry.php @@ -56,7 +56,7 @@ public function getName() } - public function getMimeType(): string + public function getMimeType() { } @@ -99,10 +99,6 @@ public function getCreationTime(): ?int public function getUploadTime(): ?int { - } - - public function getParentId(): int - { } public function getData() diff --git a/tests/stubs/oc_files_cache_scanner.php b/tests/stubs/oc_files_cache_scanner.php index 9d70a5dc4..471693932 100644 --- a/tests/stubs/oc_files_cache_scanner.php +++ b/tests/stubs/oc_files_cache_scanner.php @@ -15,7 +15,6 @@ use OCP\Files\Cache\IScanner; use OCP\Files\ForbiddenException; use OCP\Files\NotFoundException; -use OCP\Files\Storage\ILockingStorage; use OCP\Files\Storage\IReliableEtagStorage; use OCP\IDBConnection; use OCP\Lock\ILockingProvider; @@ -75,7 +74,7 @@ public function __construct(\OC\Files\Storage\Storage $storage) * * @param bool $useTransactions */ - public function setUseTransactions($useTransactions): void + public function setUseTransactions($useTransactions) { } @@ -96,9 +95,9 @@ protected function getData($path) * @param string $file * @param int $reuseExisting * @param int $parentId - * @param array|CacheEntry|null|false $cacheData existing data in the cache for the file to be scanned + * @param array|null|false $cacheData existing data in the cache for the file to be scanned * @param bool $lock set to false to disable getting an additional read lock during scanning - * @param array|null $data the metadata for the file, as returned by the storage + * @param null $data the metadata for the file, as returned by the storage * @return array|null an array of metadata of the scanned file * @throws \OCP\Lock\LockedException */ @@ -165,9 +164,9 @@ protected function array_diff_assoc_multi(array $array1, array $array2) * Get the children currently in the cache * * @param int $folderId - * @return array + * @return array[] */ - protected function getExistingChildren($folderId): array + protected function getExistingChildren($folderId) { } diff --git a/tests/stubs/oc_files_cache_wrapper_cachejail.php b/tests/stubs/oc_files_cache_wrapper_cachejail.php index 9fff517d1..a7be4f416 100644 --- a/tests/stubs/oc_files_cache_wrapper_cachejail.php +++ b/tests/stubs/oc_files_cache_wrapper_cachejail.php @@ -21,16 +21,16 @@ * Jail to a subdirectory of the wrapped cache */ class CacheJail extends CacheWrapper { + /** + * @var string + */ + protected $root; + protected $unjailedRoot; - protected string $unjailedRoot; - - public function __construct(?ICache $cache, protected string $root, ?CacheDependencies $dependencies = null) + public function __construct(?ICache $cache, string $root, ?CacheDependencies $dependencies = null) { } - /** - * @return string - */ protected function getRoot() { } @@ -44,10 +44,7 @@ public function getGetUnjailedRoot() { } - /** - * @return string - */ - protected function getSourcePath(string $path) + protected function getSourcePath($path) { } @@ -67,7 +64,7 @@ protected function formatCacheEntry($entry) /** * get the stored metadata of a file or folder * - * @param string|int $file + * @param string /int $file * @return ICacheEntry|false */ public function get($file) @@ -175,9 +172,10 @@ public function getStatus($file) /** * update the folder size and the size of all parent folders * - * @param array|ICacheEntry|null $data (optional) meta data of the folder + * @param string|boolean $path + * @param array $data (optional) meta data of the folder */ - public function correctFolderSize(string $path, $data = null, bool $isBackgroundScan = false): void + public function correctFolderSize($path, $data = null, $isBackgroundScan = false) { } diff --git a/tests/stubs/oc_files_cache_wrapper_cachewrapper.php b/tests/stubs/oc_files_cache_wrapper_cachewrapper.php index b0cf27190..4b6f1d849 100644 --- a/tests/stubs/oc_files_cache_wrapper_cachewrapper.php +++ b/tests/stubs/oc_files_cache_wrapper_cachewrapper.php @@ -25,7 +25,7 @@ public function __construct(?ICache $cache, ?CacheDependencies $dependencies = n { } - public function getCache(): ICache + protected function getCache() { } @@ -189,9 +189,10 @@ public function searchQuery(ISearchQuery $query) /** * update the folder size and the size of all parent folders * - * @param array|ICacheEntry|null $data (optional) meta data of the folder + * @param string|boolean $path + * @param array $data (optional) meta data of the folder */ - public function correctFolderSize(string $path, $data = null, bool $isBackgroundScan = false): void + public function correctFolderSize($path, $data = null, $isBackgroundScan = false) { } diff --git a/tests/stubs/oc_files_filesystem.php b/tests/stubs/oc_files_filesystem.php index b13436375..e6f3052a9 100644 --- a/tests/stubs/oc_files_filesystem.php +++ b/tests/stubs/oc_files_filesystem.php @@ -8,7 +8,6 @@ namespace OC\Files; use OC\Files\Mount\MountPoint; -use OC\Files\Storage\StorageFactory; use OC\User\NoUserException; use OCP\Cache\CappedMemoryCache; use OCP\EventDispatcher\IEventDispatcher; diff --git a/tests/stubs/oc_files_node_lazyfolder.php b/tests/stubs/oc_files_node_lazyfolder.php index 4b7481b94..521bc9a9c 100644 --- a/tests/stubs/oc_files_node_lazyfolder.php +++ b/tests/stubs/oc_files_node_lazyfolder.php @@ -127,6 +127,9 @@ public function unMount($mount) { } + /** + * @inheritDoc + */ public function get($path) { } @@ -271,7 +274,10 @@ public function getUserFolder($userId) { } - public function getMimetype(): string + /** + * @inheritDoc + */ + public function getMimetype() { } @@ -356,6 +362,9 @@ public function getDirectoryListing() { } + /** + * @inheritDoc + */ public function nodeExists($path) { } @@ -494,9 +503,5 @@ public function getParentId(): int */ public function getMetadata(): array { - } - - public function verifyPath($fileName, $readonly = false): void - { } } diff --git a/tests/stubs/oc_files_node_node.php b/tests/stubs/oc_files_node_node.php index 962634890..6f99111ae 100644 --- a/tests/stubs/oc_files_node_node.php +++ b/tests/stubs/oc_files_node_node.php @@ -254,7 +254,7 @@ public function isShared() { } - public function getMimeType(): string + public function getMimeType() { } diff --git a/tests/stubs/oc_files_objectstore_objectstorestorage.php b/tests/stubs/oc_files_objectstore_objectstorestorage.php index 498f23070..fdcf29fb5 100644 --- a/tests/stubs/oc_files_objectstore_objectstorestorage.php +++ b/tests/stubs/oc_files_objectstore_objectstorestorage.php @@ -17,12 +17,10 @@ use OC\Files\Storage\PolyFill\CopyDirectory; use OCP\Files\Cache\ICache; use OCP\Files\Cache\ICacheEntry; -use OCP\Files\Cache\IScanner; use OCP\Files\FileInfo; use OCP\Files\GenericFileException; use OCP\Files\NotFoundException; use OCP\Files\ObjectStore\IObjectStore; -use OCP\Files\ObjectStore\IObjectStoreMetaData; use OCP\Files\ObjectStore\IObjectStoreMultiPartUpload; use OCP\Files\Storage\IChunkedFileWrite; use OCP\Files\Storage\IStorage; @@ -36,34 +34,38 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common implements IChunkedFil protected bool $validateWrites = true; /** - * @param array $parameters + * @param array $params * @throws \Exception */ - public function __construct(array $parameters) + public function __construct($params) { } - public function mkdir(string $path, bool $force = false, array $metadata = []): bool + public function mkdir($path, bool $force = false, array $metadata = []) { } /** * Object Stores use a NoopScanner because metadata is directly stored in * the file cache and cannot really scan the filesystem. The storage passed in is not used anywhere. + * + * @param string $path + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the scanner + * @return \OC\Files\ObjectStore\ObjectStoreScanner */ - public function getScanner(string $path = '', ?IStorage $storage = null): IScanner + public function getScanner($path = '', $storage = null) { } - public function getId(): string + public function getId() { } - public function rmdir(string $path): bool + public function rmdir($path) { } - public function unlink(string $path): bool + public function unlink($path) { } @@ -71,11 +73,11 @@ public function rmObject(ICacheEntry $entry): bool { } - public function stat(string $path): array|false + public function stat($path) { } - public function getPermissions(string $path): int + public function getPermissions($path) { } @@ -84,53 +86,61 @@ public function getPermissions(string $path): int * The default implementations just appends the fileId to 'urn:oid:'. Make sure the URN is unique over all users. * You may need a mapping table to store your URN if it cannot be generated from the fileid. * - * @return string the unified resource name used to identify the object + * @param int $fileId the fileid + * @return null|string the unified resource name used to identify the object */ - public function getURN(int $fileId): string + public function getURN($fileId) { } - public function opendir(string $path) + public function opendir($path) { } - public function filetype(string $path): string|false + public function filetype($path) { } - public function fopen(string $path, string $mode) + public function fopen($path, $mode) { } - public function file_exists(string $path): bool + public function file_exists($path) { } - public function rename(string $source, string $target): bool + public function rename($source, $target) { } - public function getMimeType(string $path): string|false + public function getMimeType($path) { } - public function touch(string $path, ?int $mtime = null): bool + public function touch($path, $mtime = null) { } - public function writeBack(string $tmpFile, string $path) + public function writeBack($tmpFile, $path) { } - public function hasUpdated(string $path, int $time): bool + /** + * external changes are not supported, exclusive access to the object storage is assumed + * + * @param string $path + * @param int $time + * @return false + */ + public function hasUpdated($path, $time) { } - public function needsPartFile(): bool + public function needsPartFile() { } - public function file_put_contents(string $path, mixed $data): int + public function file_put_contents($path, $data) { } @@ -142,15 +152,15 @@ public function getObjectStore(): IObjectStore { } - public function copyFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath, bool $preserveMtime = false): bool + public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) { } - public function moveFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath, ?ICacheEntry $sourceCacheEntry = null): bool + public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, ?ICacheEntry $sourceCacheEntry = null): bool { } - public function copy(string $source, string $target): bool + public function copy($source, $target) { } @@ -159,6 +169,7 @@ public function startChunkedWrite(string $targetPath): string } /** + * * @throws GenericFileException */ public function putChunkedWritePart(string $targetPath, string $writeToken, string $chunkId, $data, $size = null): ?array diff --git a/tests/stubs/oc_files_setupmanager.php b/tests/stubs/oc_files_setupmanager.php index 6bb940563..a298315e5 100644 --- a/tests/stubs/oc_files_setupmanager.php +++ b/tests/stubs/oc_files_setupmanager.php @@ -21,12 +21,13 @@ use OC\Lockdown\Filesystem\NullStorage; use OC\Share\Share; use OC\Share20\ShareDisableChecker; +use OC_App; use OC_Hook; +use OC_Util; use OCA\Files_External\Config\ExternalMountPoint; use OCA\Files_Sharing\External\Mount; use OCA\Files_Sharing\ISharedMountPoint; use OCA\Files_Sharing\SharedMount; -use OCP\App\IAppManager; use OCP\Constants; use OCP\Diagnostics\IEventLogger; use OCP\EventDispatcher\IEventDispatcher; @@ -35,7 +36,6 @@ use OCP\Files\Config\IMountProvider; use OCP\Files\Config\IRootMountProvider; use OCP\Files\Config\IUserMountCache; -use OCP\Files\Events\BeforeFileSystemSetupEvent; use OCP\Files\Events\InvalidateMountCacheEvent; use OCP\Files\Events\Node\FilesystemTornDownEvent; use OCP\Files\Mount\IMountManager; @@ -55,7 +55,7 @@ use Psr\Log\LoggerInterface; class SetupManager { - public function __construct(private IEventLogger $eventLogger, private MountProviderCollection $mountProviderCollection, private IMountManager $mountManager, private IUserManager $userManager, private IEventDispatcher $eventDispatcher, private IUserMountCache $userMountCache, private ILockdownManager $lockdownManager, private IUserSession $userSession, ICacheFactory $cacheFactory, private LoggerInterface $logger, private IConfig $config, private ShareDisableChecker $shareDisableChecker, private IAppManager $appManager) + public function __construct(private IEventLogger $eventLogger, private MountProviderCollection $mountProviderCollection, private IMountManager $mountManager, private IUserManager $userManager, private IEventDispatcher $eventDispatcher, private IUserMountCache $userMountCache, private ILockdownManager $lockdownManager, private IUserSession $userSession, ICacheFactory $cacheFactory, private LoggerInterface $logger, private IConfig $config, private ShareDisableChecker $shareDisableChecker) { } diff --git a/tests/stubs/oc_files_storage_common.php b/tests/stubs/oc_files_storage_common.php index dcf00bffa..b1ac1bde9 100644 --- a/tests/stubs/oc_files_storage_common.php +++ b/tests/stubs/oc_files_storage_common.php @@ -16,25 +16,16 @@ use OC\Files\FilenameValidator; use OC\Files\Filesystem; use OC\Files\ObjectStore\ObjectStoreStorage; -use OC\Files\Storage\Wrapper\Encryption; use OC\Files\Storage\Wrapper\Jail; use OC\Files\Storage\Wrapper\Wrapper; -use OCP\Files; -use OCP\Files\Cache\ICache; -use OCP\Files\Cache\IPropagator; -use OCP\Files\Cache\IScanner; -use OCP\Files\Cache\IUpdater; -use OCP\Files\Cache\IWatcher; use OCP\Files\ForbiddenException; use OCP\Files\GenericFileException; use OCP\Files\IFilenameValidator; use OCP\Files\InvalidPathException; -use OCP\Files\Storage\IConstructableStorage; use OCP\Files\Storage\ILockingStorage; use OCP\Files\Storage\IStorage; use OCP\Files\Storage\IWriteStreamStorage; use OCP\Files\StorageNotAvailableException; -use OCP\IConfig; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; use OCP\Server; @@ -51,108 +42,126 @@ * Some \OC\Files\Storage\Common methods call functions which are first defined * in classes which extend it, e.g. $this->stat() . */ -abstract class Common implements Storage, ILockingStorage, IWriteStreamStorage, IConstructableStorage { +abstract class Common implements Storage, ILockingStorage, IWriteStreamStorage { use LocalTempFileTrait; - protected ?Cache $cache = null; - protected ?Scanner $scanner = null; - protected ?Watcher $watcher = null; - protected ?Propagator $propagator = null; + protected $cache; + protected $scanner; + protected $watcher; + protected $propagator; protected $storageCache; - protected ?Updater $updater = null; + protected $updater; - protected array $mountOptions = []; + protected $mountOptions = []; protected $owner = null; - public function __construct(array $parameters) { + public function __construct($parameters) { } - protected function remove(string $path): bool + /** + * Remove a file or folder + * + * @param string $path + * @return bool + */ + protected function remove($path) { } - public function is_dir(string $path): bool + public function is_dir($path) { } - public function is_file(string $path): bool + public function is_file($path) { } - public function filesize(string $path): int|float|false + public function filesize($path): false|int|float { } - public function isReadable(string $path): bool + public function isReadable($path) { } - public function isUpdatable(string $path): bool + public function isUpdatable($path) { } - public function isCreatable(string $path): bool + public function isCreatable($path) { } - public function isDeletable(string $path): bool + public function isDeletable($path) { } - public function isSharable(string $path): bool + public function isSharable($path) { } - public function getPermissions(string $path): int + public function getPermissions($path) { } - public function filemtime(string $path): int|false + public function filemtime($path) { } - public function file_get_contents(string $path): string|false + public function file_get_contents($path) { } - public function file_put_contents(string $path, mixed $data): int|float|false + public function file_put_contents($path, $data) { } - public function rename(string $source, string $target): bool + public function rename($source, $target) { } - public function copy(string $source, string $target): bool + public function copy($source, $target) { } - public function getMimeType(string $path): string|false + public function getMimeType($path) { } - public function hash(string $type, string $path, bool $raw = false): string|false + public function hash($type, $path, $raw = false) { } - public function getLocalFile(string $path): string|false + public function search($query) { } - protected function searchInDir(string $query, string $dir = ''): array + public function getLocalFile($path) + { + } + + /** + * @param string $query + * @param string $dir + * @return array + */ + protected function searchInDir($query, $dir = '') { } /** - * @inheritDoc * Check if a file or folder has been updated since $time * * The method is only used to check if the cache needs to be updated. Storage backends that don't support checking * the mtime should always return false here. As a result storage implementations that always return false expect * exclusive access to the backend and will not pick up files that have been added in a way that circumvents * Nextcloud filesystem. + * + * @param string $path + * @param int $time + * @return bool */ - public function hasUpdated(string $path, int $time): bool + public function hasUpdated($path, $time) { } @@ -160,35 +169,53 @@ protected function getCacheDependencies(): CacheDependencies { } - public function getCache(string $path = '', ?IStorage $storage = null): ICache + public function getCache($path = '', $storage = null) { } - public function getScanner(string $path = '', ?IStorage $storage = null): IScanner + public function getScanner($path = '', $storage = null) { } - public function getWatcher(string $path = '', ?IStorage $storage = null): IWatcher + public function getWatcher($path = '', $storage = null) { } - public function getPropagator(?IStorage $storage = null): IPropagator + /** + * get a propagator instance for the cache + * + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher + * @return \OC\Files\Cache\Propagator + */ + public function getPropagator($storage = null) { } - public function getUpdater(?IStorage $storage = null): IUpdater + public function getUpdater($storage = null) { } - public function getStorageCache(?IStorage $storage = null): \OC\Files\Cache\Storage + public function getStorageCache($storage = null) { } - public function getOwner(string $path): string|false + /** + * get the owner of a path + * + * @param string $path The path to get the owner + * @return string|false uid or false + */ + public function getOwner($path) { } - public function getETag(string $path): string|false + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string + */ + public function getETag($path) { } @@ -199,29 +226,43 @@ public function getETag(string $path): string|false * @param string $path The path to clean * @return string cleaned path */ - public function cleanPath(string $path): string + public function cleanPath($path) { } /** * Test a storage for availability + * + * @return bool */ - public function test(): bool + public function test() { } - public function free_space(string $path): int|float|false + /** + * get the free space in the storage + * + * @param string $path + * @return int|float|false + */ + public function free_space($path) { } - public function isLocal(): bool + /** + * {@inheritdoc} + */ + public function isLocal() { } /** * Check if the storage is an instance of $class or is a wrapper for a storage that is an instance of $class + * + * @param string $class + * @return bool */ - public function instanceOfStorage(string $class): bool + public function instanceOfStorage($class) { } @@ -229,12 +270,19 @@ public function instanceOfStorage(string $class): bool * A custom storage implementation can return an url for direct download of a give file. * * For now the returned array can hold the parameter url - in future more attributes might follow. + * + * @param string $path + * @return array|false */ - public function getDirectDownload(string $path): array|false + public function getDirectDownload($path) { } - public function verifyPath(string $path, string $fileName): void + /** + * @inheritdoc + * @throws InvalidPathException + */ + public function verifyPath($path, $fileName) { } @@ -246,62 +294,127 @@ protected function getFilenameValidator(): IFilenameValidator { } - public function setMountOptions(array $options): void + /** + * @param array $options + */ + public function setMountOptions(array $options) { } - public function getMountOption(string $name, mixed $default = null): mixed + /** + * @param string $name + * @param mixed $default + * @return mixed + */ + public function getMountOption($name, $default = null) { } - public function copyFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath, bool $preserveMtime = false): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @param bool $preserveMtime + * @return bool + */ + public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) { } - public function moveFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } - public function getMetaData(string $path): ?array + /** + * @inheritdoc + */ + public function getMetaData($path) { } - public function acquireLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function acquireLock($path, $type, ILockingProvider $provider) { } - public function releaseLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function releaseLock($path, $type, ILockingProvider $provider) { } - public function changeLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function changeLock($path, $type, ILockingProvider $provider) { } /** * @return array [ available, last_checked ] */ - public function getAvailability(): array + public function getAvailability() { } - public function setAvailability(bool $isAvailable): void + /** + * @param bool $isAvailable + */ + public function setAvailability($isAvailable) { } + /** + * Allow setting the storage owner + * + * This can be used for storages that do not have a dedicated owner, where we want to + * pass the user that we setup the mountpoint for along to the storage layer + * + * @param string|null $user + * @return void + */ public function setOwner(?string $user): void { } - public function needsPartFile(): bool + /** + * @return bool + */ + public function needsPartFile() { } + /** + * fallback implementation + * + * @param string $path + * @param resource $stream + * @param int $size + * @return int + */ public function writeStream(string $path, $stream, ?int $size = null): int { } - public function getDirectoryContent(string $directory): \Traversable + public function getDirectoryContent($directory): \Traversable { } } diff --git a/tests/stubs/oc_files_storage_local.php b/tests/stubs/oc_files_storage_local.php index 4fe5790a0..1ce789c5c 100644 --- a/tests/stubs/oc_files_storage_local.php +++ b/tests/stubs/oc_files_storage_local.php @@ -17,7 +17,6 @@ use OCP\Files\Storage\IStorage; use OCP\Files\StorageNotAvailableException; use OCP\IConfig; -use OCP\Server; use OCP\Util; use Psr\Log\LoggerInterface; @@ -35,143 +34,182 @@ class Local extends \OC\Files\Storage\Common { protected bool $caseInsensitive = false; - public function __construct(array $parameters) + public function __construct($arguments) { } public function __destruct() { } - public function getId(): string + public function getId() { } - public function mkdir(string $path): bool + public function mkdir($path) { } - public function rmdir(string $path): bool + public function rmdir($path) { } - public function opendir(string $path) + public function opendir($path) { } - public function is_dir(string $path): bool + public function is_dir($path) { } - public function is_file(string $path): bool + public function is_file($path) { } - public function stat(string $path): array|false + public function stat($path) { } - public function getMetaData(string $path): ?array + /** + * @inheritdoc + */ + public function getMetaData($path) { } - public function filetype(string $path): string|false + public function filetype($path) { } - public function filesize(string $path): int|float|false + public function filesize($path): false|int|float { } - public function isReadable(string $path): bool + public function isReadable($path) { } - public function isUpdatable(string $path): bool + public function isUpdatable($path) { } - public function file_exists(string $path): bool + public function file_exists($path) { } - public function filemtime(string $path): int|false + public function filemtime($path) { } - public function touch(string $path, ?int $mtime = null): bool + public function touch($path, $mtime = null) { } - public function file_get_contents(string $path): string|false + public function file_get_contents($path) { } - public function file_put_contents(string $path, mixed $data): int|float|false + public function file_put_contents($path, $data) { } - public function unlink(string $path): bool + public function unlink($path) { } - public function rename(string $source, string $target): bool + public function rename($source, $target): bool { } - public function copy(string $source, string $target): bool + public function copy($source, $target) { } - public function fopen(string $path, string $mode) + public function fopen($path, $mode) { } - public function hash(string $type, string $path, bool $raw = false): string|false + public function hash($type, $path, $raw = false): string|false { } - public function free_space(string $path): int|float|false + public function free_space($path) { } - public function search(string $query): array + public function search($query) { } - public function getLocalFile(string $path): string|false + public function getLocalFile($path) { } - protected function searchInDir(string $query, string $dir = ''): array + /** + * @param string $query + * @param string $dir + * @return array + */ + protected function searchInDir($query, $dir = '') { } - public function hasUpdated(string $path, int $time): bool + /** + * check if a file or folder has been updated since $time + * + * @param string $path + * @param int $time + * @return bool + */ + public function hasUpdated($path, $time) { } /** * Get the source path (on disk) of a given path * + * @param string $path + * @return string * @throws ForbiddenException */ - public function getSourcePath(string $path): string + public function getSourcePath($path) { } - public function isLocal(): bool + /** + * {@inheritdoc} + */ + public function isLocal() { } - public function getETag(string $path): string|false + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string + */ + public function getETag($path) { } - public function copyFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath, bool $preserveMtime = false): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @param bool $preserveMtime + * @return bool + */ + public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) { } - public function moveFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } diff --git a/tests/stubs/oc_files_storage_storage.php b/tests/stubs/oc_files_storage_storage.php index 8afb2fb77..fb239aa84 100644 --- a/tests/stubs/oc_files_storage_storage.php +++ b/tests/stubs/oc_files_storage_storage.php @@ -5,54 +5,131 @@ * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OC\Files\Storage; -use OCP\Files\Cache\ICache; -use OCP\Files\Cache\IPropagator; -use OCP\Files\Cache\IScanner; -use OCP\Files\Cache\IUpdater; -use OCP\Files\Cache\IWatcher; -use OCP\Files\Storage\ILockingStorage; -use OCP\Files\Storage\IStorage; +use OCP\Lock\ILockingProvider; /** * Provide a common interface to all different storage options * * All paths passed to the storage are relative to the storage and should NOT have a leading slash. */ -interface Storage extends IStorage, ILockingStorage { - public function getCache(string $path = '', ?IStorage $storage = null): ICache +interface Storage extends \OCP\Files\Storage { + /** + * get a cache instance for the storage + * + * @param string $path + * @param \OC\Files\Storage\Storage|null (optional) the storage to pass to the cache + * @return \OC\Files\Cache\Cache + */ + public function getCache($path = '', $storage = null) { } - public function getScanner(string $path = '', ?IStorage $storage = null): IScanner + /** + * get a scanner instance for the storage + * + * @param string $path + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the scanner + * @return \OC\Files\Cache\Scanner + */ + public function getScanner($path = '', $storage = null) { } - public function getWatcher(string $path = '', ?IStorage $storage = null): IWatcher + + /** + * get the user id of the owner of a file or folder + * + * @param string $path + * @return string + */ + public function getOwner($path) { } - public function getPropagator(?IStorage $storage = null): IPropagator + /** + * get a watcher instance for the cache + * + * @param string $path + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher + * @return \OC\Files\Cache\Watcher + */ + public function getWatcher($path = '', $storage = null) { } - public function getUpdater(?IStorage $storage = null): IUpdater + /** + * get a propagator instance for the cache + * + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher + * @return \OC\Files\Cache\Propagator + */ + public function getPropagator($storage = null) { } - public function getStorageCache(): \OC\Files\Cache\Storage + /** + * get a updater instance for the cache + * + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher + * @return \OC\Files\Cache\Updater + */ + public function getUpdater($storage = null) { } - public function getMetaData(string $path): ?array + /** + * @return \OC\Files\Cache\Storage + */ + public function getStorageCache() + { + } + + /** + * @param string $path + * @return array|null + */ + public function getMetaData($path) + { + } + + /** + * @param string $path The path of the file to acquire the lock for + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function acquireLock($path, $type, ILockingProvider $provider) + { + } + + /** + * @param string $path The path of the file to release the lock for + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function releaseLock($path, $type, ILockingProvider $provider) + { + } + + /** + * @param string $path The path of the file to change the lock for + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function changeLock($path, $type, ILockingProvider $provider) { } /** * Get the contents of a directory with metadata * + * @param string $directory + * @return \Traversable an iterator, containing file metadata + * * The metadata array will contain the following fields * * - name @@ -63,7 +140,7 @@ public function getMetaData(string $path): ?array * - storage_mtime * - permissions */ - public function getDirectoryContent(string $directory): \Traversable + public function getDirectoryContent($directory): \Traversable { } } diff --git a/tests/stubs/oc_files_storage_temporary.php b/tests/stubs/oc_files_storage_temporary.php index aecd7f8b2..a8e995b10 100644 --- a/tests/stubs/oc_files_storage_temporary.php +++ b/tests/stubs/oc_files_storage_temporary.php @@ -7,19 +7,15 @@ */ namespace OC\Files\Storage; -use OCP\Files; -use OCP\ITempManager; -use OCP\Server; - /** * local storage backend in temporary folder for testing purpose */ class Temporary extends Local { - public function __construct(array $parameters = []) + public function __construct($arguments = null) { } - public function cleanUp(): void + public function cleanUp() { } @@ -27,7 +23,7 @@ public function __destruct() { } - public function getDataDir(): array|string + public function getDataDir() { } } diff --git a/tests/stubs/oc_files_storage_wrapper_jail.php b/tests/stubs/oc_files_storage_wrapper_jail.php index 622224ace..02a5a559f 100644 --- a/tests/stubs/oc_files_storage_wrapper_jail.php +++ b/tests/stubs/oc_files_storage_wrapper_jail.php @@ -11,10 +11,6 @@ use OC\Files\Cache\Wrapper\JailPropagator; use OC\Files\Cache\Wrapper\JailWatcher; use OC\Files\Filesystem; -use OCP\Files; -use OCP\Files\Cache\ICache; -use OCP\Files\Cache\IPropagator; -use OCP\Files\Cache\IWatcher; use OCP\Files\Storage\IStorage; use OCP\Files\Storage\IWriteStreamStorage; use OCP\Lock\ILockingProvider; @@ -31,195 +27,444 @@ class Jail extends Wrapper { protected $rootPath; /** - * @param array $parameters ['storage' => $storage, 'root' => $root] + * @param array $arguments ['storage' => $storage, 'root' => $root] * * $storage: The storage that will be wrapper * $root: The folder in the wrapped storage that will become the root folder of the wrapped storage */ - public function __construct(array $parameters) + public function __construct($arguments) { } - public function getUnjailedPath(string $path): string + public function getUnjailedPath($path) { } /** * This is separate from Wrapper::getWrapperStorage so we can get the jailed storage consistently even if the jail is inside another wrapper */ - public function getUnjailedStorage(): IStorage + public function getUnjailedStorage() { } - public function getJailedPath(string $path): ?string + public function getJailedPath($path) { } - public function getId(): string + public function getId() { } - public function mkdir(string $path): bool + /** + * see https://www.php.net/manual/en/function.mkdir.php + * + * @param string $path + * @return bool + */ + public function mkdir($path) { } - public function rmdir(string $path): bool + /** + * see https://www.php.net/manual/en/function.rmdir.php + * + * @param string $path + * @return bool + */ + public function rmdir($path) { } - public function opendir(string $path) + /** + * see https://www.php.net/manual/en/function.opendir.php + * + * @param string $path + * @return resource|false + */ + public function opendir($path) { } - public function is_dir(string $path): bool + /** + * see https://www.php.net/manual/en/function.is_dir.php + * + * @param string $path + * @return bool + */ + public function is_dir($path) { } - public function is_file(string $path): bool + /** + * see https://www.php.net/manual/en/function.is_file.php + * + * @param string $path + * @return bool + */ + public function is_file($path) { } - public function stat(string $path): array|false + /** + * see https://www.php.net/manual/en/function.stat.php + * only the following keys are required in the result: size and mtime + * + * @param string $path + * @return array|bool + */ + public function stat($path) { } - public function filetype(string $path): string|false + /** + * see https://www.php.net/manual/en/function.filetype.php + * + * @param string $path + * @return bool + */ + public function filetype($path) { } - public function filesize(string $path): int|float|false + /** + * see https://www.php.net/manual/en/function.filesize.php + * The result for filesize when called on a folder is required to be 0 + */ + public function filesize($path): false|int|float { } - public function isCreatable(string $path): bool + /** + * check if a file can be created in $path + * + * @param string $path + * @return bool + */ + public function isCreatable($path) { } - public function isReadable(string $path): bool + /** + * check if a file can be read + * + * @param string $path + * @return bool + */ + public function isReadable($path) { } - public function isUpdatable(string $path): bool + /** + * check if a file can be written to + * + * @param string $path + * @return bool + */ + public function isUpdatable($path) { } - public function isDeletable(string $path): bool + /** + * check if a file can be deleted + * + * @param string $path + * @return bool + */ + public function isDeletable($path) { } - public function isSharable(string $path): bool + /** + * check if a file can be shared + * + * @param string $path + * @return bool + */ + public function isSharable($path) { } - public function getPermissions(string $path): int + /** + * get the full permissions of a path. + * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php + * + * @param string $path + * @return int + */ + public function getPermissions($path) { } - public function file_exists(string $path): bool + /** + * see https://www.php.net/manual/en/function.file_exists.php + * + * @param string $path + * @return bool + */ + public function file_exists($path) { } - public function filemtime(string $path): int|false + /** + * see https://www.php.net/manual/en/function.filemtime.php + * + * @param string $path + * @return int|bool + */ + public function filemtime($path) { } - public function file_get_contents(string $path): string|false + /** + * see https://www.php.net/manual/en/function.file_get_contents.php + * + * @param string $path + * @return string|false + */ + public function file_get_contents($path) { } - public function file_put_contents(string $path, mixed $data): int|float|false + /** + * see https://www.php.net/manual/en/function.file_put_contents.php + * + * @param string $path + * @param mixed $data + * @return int|float|false + */ + public function file_put_contents($path, $data) { } - public function unlink(string $path): bool + /** + * see https://www.php.net/manual/en/function.unlink.php + * + * @param string $path + * @return bool + */ + public function unlink($path) { } - public function rename(string $source, string $target): bool + /** + * see https://www.php.net/manual/en/function.rename.php + * + * @param string $source + * @param string $target + * @return bool + */ + public function rename($source, $target) + { + } + + /** + * see https://www.php.net/manual/en/function.copy.php + * + * @param string $source + * @param string $target + * @return bool + */ + public function copy($source, $target) { } - public function copy(string $source, string $target): bool + /** + * see https://www.php.net/manual/en/function.fopen.php + * + * @param string $path + * @param string $mode + * @return resource|bool + */ + public function fopen($path, $mode) { } - public function fopen(string $path, string $mode) + /** + * get the mimetype for a file or folder + * The mimetype for a folder is required to be "httpd/unix-directory" + * + * @param string $path + * @return string|bool + */ + public function getMimeType($path) { } - public function getMimeType(string $path): string|false + /** + * see https://www.php.net/manual/en/function.hash.php + * + * @param string $type + * @param string $path + * @param bool $raw + * @return string|bool + */ + public function hash($type, $path, $raw = false) { } - public function hash(string $type, string $path, bool $raw = false): string|false + /** + * see https://www.php.net/manual/en/function.free_space.php + * + * @param string $path + * @return int|float|bool + */ + public function free_space($path) { } - public function free_space(string $path): int|float|false + /** + * search for occurrences of $query in file names + * + * @param string $query + * @return array|bool + */ + public function search($query) { } - public function touch(string $path, ?int $mtime = null): bool + /** + * see https://www.php.net/manual/en/function.touch.php + * If the backend does not support the operation, false should be returned + * + * @param string $path + * @param int $mtime + * @return bool + */ + public function touch($path, $mtime = null) { } - public function getLocalFile(string $path): string|false + /** + * get the path to a local version of the file. + * The local version of the file can be temporary and doesn't have to be persistent across requests + * + * @param string $path + * @return string|false + */ + public function getLocalFile($path) { } - public function hasUpdated(string $path, int $time): bool + /** + * check if a file or folder has been updated since $time + * + * @param string $path + * @param int $time + * @return bool + * + * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed. + * returning true for other changes in the folder is optional + */ + public function hasUpdated($path, $time) { } - public function getCache(string $path = '', ?IStorage $storage = null): ICache + /** + * get a cache instance for the storage + * + * @param string $path + * @param \OC\Files\Storage\Storage|null (optional) the storage to pass to the cache + * @return \OC\Files\Cache\Cache + */ + public function getCache($path = '', $storage = null) { } - public function getOwner(string $path): string|false + /** + * get the user id of the owner of a file or folder + * + * @param string $path + * @return string + */ + public function getOwner($path) { } - public function getWatcher(string $path = '', ?IStorage $storage = null): IWatcher + /** + * get a watcher instance for the cache + * + * @param string $path + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher + * @return \OC\Files\Cache\Watcher + */ + public function getWatcher($path = '', $storage = null) { } - public function getETag(string $path): string|false + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string|false + */ + public function getETag($path) { } - public function getMetaData(string $path): ?array + public function getMetaData($path) { } - public function acquireLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function acquireLock($path, $type, ILockingProvider $provider) { } - public function releaseLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + */ + public function releaseLock($path, $type, ILockingProvider $provider) { } - public function changeLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + */ + public function changeLock($path, $type, ILockingProvider $provider) { } /** * Resolve the path for the source of the share + * + * @param string $path + * @return array */ - public function resolvePath(string $path): array + public function resolvePath($path) { } - public function copyFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } - public function moveFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } - public function getPropagator(?IStorage $storage = null): IPropagator + public function getPropagator($storage = null) { } @@ -227,7 +472,7 @@ public function writeStream(string $path, $stream, ?int $size = null): int { } - public function getDirectoryContent(string $directory): \Traversable + public function getDirectoryContent($directory): \Traversable { } } diff --git a/tests/stubs/oc_files_storage_wrapper_permissionsmask.php b/tests/stubs/oc_files_storage_wrapper_permissionsmask.php index 73d73e812..fb662e374 100644 --- a/tests/stubs/oc_files_storage_wrapper_permissionsmask.php +++ b/tests/stubs/oc_files_storage_wrapper_permissionsmask.php @@ -9,7 +9,6 @@ use OC\Files\Cache\Wrapper\CachePermissionsMask; use OCP\Constants; -use OCP\Files\Storage\IStorage; /** * Mask the permissions of a storage @@ -20,80 +19,87 @@ */ class PermissionsMask extends Wrapper { /** - * @param array $parameters ['storage' => $storage, 'mask' => $mask] + * @param array $arguments ['storage' => $storage, 'mask' => $mask] * * $storage: The storage the permissions mask should be applied on * $mask: The permission bits that should be kept, a combination of the \OCP\Constant::PERMISSION_ constants */ - public function __construct(array $parameters) + public function __construct($arguments) { } - public function isUpdatable(string $path): bool + public function isUpdatable($path) { } - public function isCreatable(string $path): bool + public function isCreatable($path) { } - public function isDeletable(string $path): bool + public function isDeletable($path) { } - public function isSharable(string $path): bool + public function isSharable($path) { } - public function getPermissions(string $path): int + public function getPermissions($path) { } - public function rename(string $source, string $target): bool + public function rename($source, $target) { } - public function copy(string $source, string $target): bool + public function copy($source, $target) { } - public function touch(string $path, ?int $mtime = null): bool + public function touch($path, $mtime = null) { } - public function mkdir(string $path): bool + public function mkdir($path) { } - public function rmdir(string $path): bool + public function rmdir($path) { } - public function unlink(string $path): bool + public function unlink($path) { } - public function file_put_contents(string $path, mixed $data): int|float|false + public function file_put_contents($path, $data) { } - public function fopen(string $path, string $mode) + public function fopen($path, $mode) { } - public function getCache(string $path = '', ?IStorage $storage = null): \OCP\Files\Cache\ICache + /** + * get a cache instance for the storage + * + * @param string $path + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the cache + * @return \OC\Files\Cache\Cache + */ + public function getCache($path = '', $storage = null) { } - public function getMetaData(string $path): ?array + public function getMetaData($path) { } - public function getScanner(string $path = '', ?IStorage $storage = null): \OCP\Files\Cache\IScanner + public function getScanner($path = '', $storage = null) { } - public function getDirectoryContent(string $directory): \Traversable + public function getDirectoryContent($directory): \Traversable { } } diff --git a/tests/stubs/oc_files_storage_wrapper_quota.php b/tests/stubs/oc_files_storage_wrapper_quota.php index e7ea43c05..5997398a1 100644 --- a/tests/stubs/oc_files_storage_wrapper_quota.php +++ b/tests/stubs/oc_files_storage_wrapper_quota.php @@ -23,31 +23,66 @@ class Quota extends Wrapper { /** * @param array $parameters */ - public function __construct(array $parameters) + public function __construct($parameters) { } + /** + * @return int|float quota value + */ public function getQuota(): int|float { } - protected function getSize(string $path, ?IStorage $storage = null): int|float + /** + * @param string $path + * @param IStorage $storage + * @return int|float + */ + protected function getSize($path, $storage = null) { } - public function free_space(string $path): int|float|false + /** + * Get free space as limited by the quota + * + * @param string $path + * @return int|float|bool + */ + public function free_space($path) { } - public function file_put_contents(string $path, mixed $data): int|float|false + /** + * see https://www.php.net/manual/en/function.file_put_contents.php + * + * @param string $path + * @param mixed $data + * @return int|float|false + */ + public function file_put_contents($path, $data) { } - public function copy(string $source, string $target): bool + /** + * see https://www.php.net/manual/en/function.copy.php + * + * @param string $source + * @param string $target + * @return bool + */ + public function copy($source, $target) { } - public function fopen(string $path, string $mode) + /** + * see https://www.php.net/manual/en/function.fopen.php + * + * @param string $path + * @param string $mode + * @return resource|bool + */ + public function fopen($path, $mode) { } @@ -58,23 +93,31 @@ protected function shouldApplyQuota(string $path): bool { } - public function copyFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool - { - } - - public function moveFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } - public function mkdir(string $path): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } - public function touch(string $path, ?int $mtime = null): bool + public function mkdir($path) { } - public function enableQuota(bool $enabled): void + public function touch($path, $mtime = null) { } } diff --git a/tests/stubs/oc_files_storage_wrapper_wrapper.php b/tests/stubs/oc_files_storage_wrapper_wrapper.php index 225156692..7af2696c4 100644 --- a/tests/stubs/oc_files_storage_wrapper_wrapper.php +++ b/tests/stubs/oc_files_storage_wrapper_wrapper.php @@ -8,13 +8,7 @@ namespace OC\Files\Storage\Wrapper; use OC\Files\Storage\FailedStorage; -use OC\Files\Storage\Storage; -use OCP\Files; -use OCP\Files\Cache\ICache; -use OCP\Files\Cache\IPropagator; -use OCP\Files\Cache\IScanner; -use OCP\Files\Cache\IUpdater; -use OCP\Files\Cache\IWatcher; +use OCP\Files\InvalidPathException; use OCP\Files\Storage\ILockingStorage; use OCP\Files\Storage\IStorage; use OCP\Files\Storage\IWriteStreamStorage; @@ -37,171 +31,426 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage, IWriteStrea /** * @param array $parameters */ - public function __construct(array $parameters) + public function __construct($parameters) { } - public function getWrapperStorage(): Storage + /** + * @return \OC\Files\Storage\Storage + */ + public function getWrapperStorage() { } - public function getId(): string + /** + * Get the identifier for the storage, + * the returned id should be the same for every storage object that is created with the same parameters + * and two storage objects with the same id should refer to two storages that display the same files. + * + * @return string + */ + public function getId() { } - public function mkdir(string $path): bool + /** + * see https://www.php.net/manual/en/function.mkdir.php + * + * @param string $path + * @return bool + */ + public function mkdir($path) { } - public function rmdir(string $path): bool + /** + * see https://www.php.net/manual/en/function.rmdir.php + * + * @param string $path + * @return bool + */ + public function rmdir($path) { } - public function opendir(string $path) + /** + * see https://www.php.net/manual/en/function.opendir.php + * + * @param string $path + * @return resource|false + */ + public function opendir($path) { } - public function is_dir(string $path): bool + /** + * see https://www.php.net/manual/en/function.is_dir.php + * + * @param string $path + * @return bool + */ + public function is_dir($path) { } - public function is_file(string $path): bool + /** + * see https://www.php.net/manual/en/function.is_file.php + * + * @param string $path + * @return bool + */ + public function is_file($path) { } - public function stat(string $path): array|false + /** + * see https://www.php.net/manual/en/function.stat.php + * only the following keys are required in the result: size and mtime + * + * @param string $path + * @return array|bool + */ + public function stat($path) { } - public function filetype(string $path): string|false + /** + * see https://www.php.net/manual/en/function.filetype.php + * + * @param string $path + * @return string|bool + */ + public function filetype($path) { } - public function filesize(string $path): int|float|false + /** + * see https://www.php.net/manual/en/function.filesize.php + * The result for filesize when called on a folder is required to be 0 + */ + public function filesize($path): false|int|float { } - public function isCreatable(string $path): bool + /** + * check if a file can be created in $path + * + * @param string $path + * @return bool + */ + public function isCreatable($path) { } - public function isReadable(string $path): bool + /** + * check if a file can be read + * + * @param string $path + * @return bool + */ + public function isReadable($path) { } - public function isUpdatable(string $path): bool + /** + * check if a file can be written to + * + * @param string $path + * @return bool + */ + public function isUpdatable($path) { } - public function isDeletable(string $path): bool + /** + * check if a file can be deleted + * + * @param string $path + * @return bool + */ + public function isDeletable($path) + { + } + + /** + * check if a file can be shared + * + * @param string $path + * @return bool + */ + public function isSharable($path) { } - public function isSharable(string $path): bool + /** + * get the full permissions of a path. + * Should return a combination of the PERMISSION_ constants defined in lib/public/constants.php + * + * @param string $path + * @return int + */ + public function getPermissions($path) { } - public function getPermissions(string $path): int + /** + * see https://www.php.net/manual/en/function.file_exists.php + * + * @param string $path + * @return bool + */ + public function file_exists($path) { } - public function file_exists(string $path): bool + /** + * see https://www.php.net/manual/en/function.filemtime.php + * + * @param string $path + * @return int|bool + */ + public function filemtime($path) { } - public function filemtime(string $path): int|false + /** + * see https://www.php.net/manual/en/function.file_get_contents.php + * + * @param string $path + * @return string|false + */ + public function file_get_contents($path) { } - public function file_get_contents(string $path): string|false + /** + * see https://www.php.net/manual/en/function.file_put_contents.php + * + * @param string $path + * @param mixed $data + * @return int|float|false + */ + public function file_put_contents($path, $data) { } - public function file_put_contents(string $path, mixed $data): int|float|false + /** + * see https://www.php.net/manual/en/function.unlink.php + * + * @param string $path + * @return bool + */ + public function unlink($path) { } - public function unlink(string $path): bool + /** + * see https://www.php.net/manual/en/function.rename.php + * + * @param string $source + * @param string $target + * @return bool + */ + public function rename($source, $target) { } - public function rename(string $source, string $target): bool + /** + * see https://www.php.net/manual/en/function.copy.php + * + * @param string $source + * @param string $target + * @return bool + */ + public function copy($source, $target) { } - public function copy(string $source, string $target): bool + /** + * see https://www.php.net/manual/en/function.fopen.php + * + * @param string $path + * @param string $mode + * @return resource|bool + */ + public function fopen($path, $mode) { } - public function fopen(string $path, string $mode) + /** + * get the mimetype for a file or folder + * The mimetype for a folder is required to be "httpd/unix-directory" + * + * @param string $path + * @return string|bool + */ + public function getMimeType($path) { } - public function getMimeType(string $path): string|false + /** + * see https://www.php.net/manual/en/function.hash.php + * + * @param string $type + * @param string $path + * @param bool $raw + * @return string|bool + */ + public function hash($type, $path, $raw = false) { } - public function hash(string $type, string $path, bool $raw = false): string|false + /** + * see https://www.php.net/manual/en/function.free_space.php + * + * @param string $path + * @return int|float|bool + */ + public function free_space($path) { } - public function free_space(string $path): int|float|false + /** + * search for occurrences of $query in file names + * + * @param string $query + * @return array|bool + */ + public function search($query) { } - public function touch(string $path, ?int $mtime = null): bool + /** + * see https://www.php.net/manual/en/function.touch.php + * If the backend does not support the operation, false should be returned + * + * @param string $path + * @param int $mtime + * @return bool + */ + public function touch($path, $mtime = null) { } - public function getLocalFile(string $path): string|false + /** + * get the path to a local version of the file. + * The local version of the file can be temporary and doesn't have to be persistent across requests + * + * @param string $path + * @return string|false + */ + public function getLocalFile($path) { } - public function hasUpdated(string $path, int $time): bool + /** + * check if a file or folder has been updated since $time + * + * @param string $path + * @param int $time + * @return bool + * + * hasUpdated for folders should return at least true if a file inside the folder is add, removed or renamed. + * returning true for other changes in the folder is optional + */ + public function hasUpdated($path, $time) { } - public function getCache(string $path = '', ?IStorage $storage = null): ICache + /** + * get a cache instance for the storage + * + * @param string $path + * @param \OC\Files\Storage\Storage|null (optional) the storage to pass to the cache + * @return \OC\Files\Cache\Cache + */ + public function getCache($path = '', $storage = null) { } - public function getScanner(string $path = '', ?IStorage $storage = null): IScanner + /** + * get a scanner instance for the storage + * + * @param string $path + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the scanner + * @return \OC\Files\Cache\Scanner + */ + public function getScanner($path = '', $storage = null) { } - public function getOwner(string $path): string|false + + /** + * get the user id of the owner of a file or folder + * + * @param string $path + * @return string + */ + public function getOwner($path) { } - public function getWatcher(string $path = '', ?IStorage $storage = null): IWatcher + /** + * get a watcher instance for the cache + * + * @param string $path + * @param \OC\Files\Storage\Storage (optional) the storage to pass to the watcher + * @return \OC\Files\Cache\Watcher + */ + public function getWatcher($path = '', $storage = null) { } - public function getPropagator(?IStorage $storage = null): IPropagator + public function getPropagator($storage = null) { } - public function getUpdater(?IStorage $storage = null): IUpdater + public function getUpdater($storage = null) { } - public function getStorageCache(): \OC\Files\Cache\Storage + /** + * @return \OC\Files\Cache\Storage + */ + public function getStorageCache() { } - public function getETag(string $path): string|false + /** + * get the ETag for a file or folder + * + * @param string $path + * @return string|false + */ + public function getETag($path) { } - public function test(): bool + /** + * Returns true + * + * @return true + */ + public function test() { } - public function isLocal(): bool + /** + * Returns the wrapped storage's value for isLocal() + * + * @return bool wrapped storage's isLocal() value + */ + public function isLocal() { } - public function instanceOfStorage(string $class): bool + /** + * Check if the storage is an instance of $class or is a wrapper for a storage that is an instance of $class + * + * @param class-string $class + * @return bool + */ + public function instanceOfStorage($class) { } @@ -210,60 +459,117 @@ public function instanceOfStorage(string $class): bool * @psalm-param class-string $class * @psalm-return T|null */ - public function getInstanceOfStorage(string $class): ?IStorage + public function getInstanceOfStorage(string $class) { } /** * Pass any methods custom to specific storage implementations to the wrapped storage * + * @param string $method + * @param array $args * @return mixed */ - public function __call(string $method, array $args) + public function __call($method, $args) { } - public function getDirectDownload(string $path): array|false + /** + * A custom storage implementation can return an url for direct download of a give file. + * + * For now the returned array can hold the parameter url - in future more attributes might follow. + * + * @param string $path + * @return array|bool + */ + public function getDirectDownload($path) { } - public function getAvailability(): array + /** + * Get availability of the storage + * + * @return array [ available, last_checked ] + */ + public function getAvailability() { } - public function setAvailability(bool $isAvailable): void + /** + * Set availability of the storage + * + * @param bool $isAvailable + */ + public function setAvailability($isAvailable) { } - public function verifyPath(string $path, string $fileName): void + /** + * @param string $path the path of the target folder + * @param string $fileName the name of the file itself + * @return void + * @throws InvalidPathException + */ + public function verifyPath($path, $fileName) { } - public function copyFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } - public function moveFromStorage(IStorage $sourceStorage, string $sourceInternalPath, string $targetInternalPath): bool + /** + * @param IStorage $sourceStorage + * @param string $sourceInternalPath + * @param string $targetInternalPath + * @return bool + */ + public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) { } - public function getMetaData(string $path): ?array + public function getMetaData($path) { } - public function acquireLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + * @throws \OCP\Lock\LockedException + */ + public function acquireLock($path, $type, ILockingProvider $provider) { } - public function releaseLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + */ + public function releaseLock($path, $type, ILockingProvider $provider) { } - public function changeLock(string $path, int $type, ILockingProvider $provider): void + /** + * @param string $path + * @param int $type \OCP\Lock\ILockingProvider::LOCK_SHARED or \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE + * @param \OCP\Lock\ILockingProvider $provider + */ + public function changeLock($path, $type, ILockingProvider $provider) { } - public function needsPartFile(): bool + /** + * @return bool + */ + public function needsPartFile() { } @@ -271,11 +577,11 @@ public function writeStream(string $path, $stream, ?int $size = null): int { } - public function getDirectoryContent(string $directory): \Traversable + public function getDirectoryContent($directory): \Traversable { } - public function isWrapperOf(IStorage $storage): bool + public function isWrapperOf(IStorage $storage) { } diff --git a/tests/stubs/oc_files_view.php b/tests/stubs/oc_files_view.php index d6b0debc7..9037fde49 100644 --- a/tests/stubs/oc_files_view.php +++ b/tests/stubs/oc_files_view.php @@ -10,14 +10,12 @@ use Icewind\Streams\CallbackWrapper; use OC\Files\Mount\MoveableMount; use OC\Files\Storage\Storage; -use OC\Files\Storage\Wrapper\Quota; use OC\Share\Share; use OC\User\LazyUser; use OC\User\Manager as UserManager; use OC\User\User; use OCA\Files_Sharing\SharedMount; use OCP\Constants; -use OCP\Files; use OCP\Files\Cache\ICacheEntry; use OCP\Files\ConnectionLostException; use OCP\Files\EmptyFileNameException; @@ -31,7 +29,6 @@ use OCP\Files\NotFoundException; use OCP\Files\ReservedWordException; use OCP\IUser; -use OCP\IUserManager; use OCP\L10N\IFactory; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; @@ -552,9 +549,11 @@ public function searchByTag($tag, $userId) /** * Get the owner for a file or folder * + * @param string $path + * @return string the user id of the owner * @throws NotFoundException */ - public function getOwner(string $path): string + public function getOwner($path) { } @@ -578,7 +577,7 @@ public function getETag($path) * @return string * @throws NotFoundException */ - public function getPath($id, ?int $storageId = null): string + public function getPath($id, ?int $storageId = null) { } diff --git a/tests/stubs/oc_group_database.php b/tests/stubs/oc_group_database.php index caa9ce7cf..7bf13a504 100644 --- a/tests/stubs/oc_group_database.php +++ b/tests/stubs/oc_group_database.php @@ -7,8 +7,8 @@ */ namespace OC\Group; +use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use OC\User\LazyUser; -use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Group\Backend\ABackend; use OCP\Group\Backend\IAddToGroupBackend; @@ -47,10 +47,9 @@ class Database extends ABackend implements * * @param IDBConnection|null $dbConn */ - public function __construct( - private ?IDBConnection $dbConn = null, - ) { - } + public function __construct(?IDBConnection $dbConn = null) + { + } public function createGroup(string $name): ?string { @@ -106,7 +105,7 @@ public function removeFromGroup(string $uid, string $gid): bool /** * Get all groups a user belongs to * @param string $uid Name of the user - * @return list an array of group names + * @return array an array of group names * * This function fetches all groups a user belongs to. It does not check * if the user exists at all. diff --git a/tests/stubs/oc_group_manager.php b/tests/stubs/oc_group_manager.php index e20887351..d3856bf4d 100644 --- a/tests/stubs/oc_group_manager.php +++ b/tests/stubs/oc_group_manager.php @@ -180,7 +180,7 @@ public function isInGroup($userId, $group) * get a list of group ids for a user * * @param IUser $user - * @return list with group ids + * @return string[] with group ids */ public function getUserGroupIds(IUser $user): array { diff --git a/tests/stubs/oc_server.php b/tests/stubs/oc_server.php index 8d7f73731..876ebd399 100644 --- a/tests/stubs/oc_server.php +++ b/tests/stubs/oc_server.php @@ -8,10 +8,11 @@ namespace OC; use bantu\IniGetWrapper\IniGetWrapper; -use NCU\Security\Signature\ISignatureManager; use OC\Accounts\AccountManager; use OC\App\AppManager; use OC\App\AppStore\Bundles\BundleFetcher; +use OC\App\AppStore\Fetcher\AppFetcher; +use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\AppFramework\Bootstrap\Coordinator; use OC\AppFramework\Http\Request; use OC\AppFramework\Http\RequestId; @@ -44,7 +45,6 @@ use OC\Files\Config\MountProviderCollection; use OC\Files\Config\UserMountCache; use OC\Files\Config\UserMountCacheListener; -use OC\Files\Conversion\ConversionManager; use OC\Files\Lock\LockManager; use OC\Files\Mount\CacheMountProvider; use OC\Files\Mount\LocalHomeMountProvider; @@ -65,6 +65,7 @@ use OC\Http\Client\ClientService; use OC\Http\Client\NegativeDnsCache; use OC\IntegrityCheck\Checker; +use OC\IntegrityCheck\Helpers\AppLocator; use OC\IntegrityCheck\Helpers\EnvironmentHelper; use OC\IntegrityCheck\Helpers\FileAccessHelper; use OC\KnownUser\KnownUserService; @@ -75,7 +76,6 @@ use OC\Lockdown\LockdownManager; use OC\Log\LogFactory; use OC\Log\PsrLoggerAdapter; -use OC\Mail\EmailValidator; use OC\Mail\Mailer; use OC\Memcache\ArrayCache; use OC\Memcache\Factory; @@ -105,7 +105,6 @@ use OC\Security\Ip\RemoteAddress; use OC\Security\RateLimiting\Limiter; use OC\Security\SecureRandom; -use OC\Security\Signature\SignatureManager; use OC\Security\TrustedDomainHelper; use OC\Security\VerificationToken\VerificationToken; use OC\Session\CryptoWrapper; @@ -115,6 +114,7 @@ use OC\Share20\ShareHelper; use OC\SpeechToText\SpeechToTextManager; use OC\SystemTag\ManagerFactory as SystemTagManagerFactory; +use OC\Tagging\TagMapper; use OC\Talk\Broker; use OC\Teams\TeamManager; use OC\Template\JSCombiner; @@ -124,6 +124,10 @@ use OC\User\Listeners\BeforeUserDeletedListener; use OC\User\Listeners\UserChangedListener; use OC\User\Session; +use OCA\Files_External\Service\BackendService; +use OCA\Files_External\Service\GlobalStoragesService; +use OCA\Files_External\Service\UserGlobalStoragesService; +use OCA\Files_External\Service\UserStoragesService; use OCA\Theming\ImageManager; use OCA\Theming\Service\BackgroundService; use OCA\Theming\ThemingDefaults; @@ -134,10 +138,10 @@ use OCP\Authentication\LoginCredentials\IStore; use OCP\Authentication\Token\IProvider as OCPIProvider; use OCP\BackgroundJob\IJobList; +use OCP\Collaboration\AutoComplete\IManager; use OCP\Collaboration\Reference\IReferenceManager; use OCP\Command\IBus; use OCP\Comments\ICommentsManager; -use OCP\Config\IUserConfig; use OCP\Contacts\ContactsMenu\IActionFactory; use OCP\Contacts\ContactsMenu\IContactsStore; use OCP\Defaults; @@ -152,7 +156,6 @@ use OCP\Files\Cache\IFileAccess; use OCP\Files\Config\IMountProviderCollection; use OCP\Files\Config\IUserMountCache; -use OCP\Files\Conversion\IConversionManager; use OCP\Files\IMimeTypeDetector; use OCP\Files\IMimeTypeLoader; use OCP\Files\IRootFolder; @@ -162,6 +165,7 @@ use OCP\Files\Template\ITemplateManager; use OCP\FilesMetadata\IFilesMetadataManager; use OCP\FullTextSearch\IFullTextSearchManager; +use OCP\GlobalScale\IConfig; use OCP\Group\ISubAdmin; use OCP\Http\Client\IClientService; use OCP\IAppConfig; @@ -177,6 +181,7 @@ use OCP\IGroupManager; use OCP\IInitialStateService; use OCP\IL10N; +use OCP\ILogger; use OCP\INavigationManager; use OCP\IPhoneNumberUtil; use OCP\IPreview; @@ -184,6 +189,7 @@ use OCP\IRequestId; use OCP\IServerContainer; use OCP\ISession; +use OCP\ITagManager; use OCP\ITempManager; use OCP\IURLGenerator; use OCP\IUserManager; @@ -194,9 +200,7 @@ use OCP\Lock\ILockingProvider; use OCP\Lockdown\ILockdownManager; use OCP\Log\ILogFactory; -use OCP\Mail\IEmailValidator; use OCP\Mail\IMailer; -use OCP\OCM\ICapabilityAwareOCMProvider; use OCP\OCM\IOCMDiscoveryService; use OCP\OCM\IOCMProvider; use OCP\Preview\IMimeIconProvider; @@ -204,10 +208,10 @@ use OCP\Profiler\IProfiler; use OCP\Remote\Api\IApiFactory; use OCP\Remote\IInstanceFactory; -use OCP\RichObjectStrings\IRichTextFormatter; use OCP\RichObjectStrings\IValidator; use OCP\Route\IRouter; use OCP\Security\Bruteforce\IThrottler; +use OCP\Security\IContentSecurityPolicyManager; use OCP\Security\ICredentialsManager; use OCP\Security\ICrypto; use OCP\Security\IHasher; @@ -216,7 +220,6 @@ use OCP\Security\ITrustedDomainHelper; use OCP\Security\RateLimiting\ILimiter; use OCP\Security\VerificationToken\IVerificationToken; -use OCP\ServerVersion; use OCP\Settings\IDeclarativeManager; use OCP\SetupCheck\ISetupCheckManager; use OCP\Share\IProviderFactory; @@ -237,6 +240,7 @@ use OCP\User\Events\UserLoggedInWithCookieEvent; use OCP\User\Events\UserLoggedOutEvent; use OCP\User\IAvailabilityCoordinator; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Log\LoggerInterface; @@ -258,6 +262,30 @@ public function __construct($webRoot, \OC\Config $config) public function boot() { + } + + /** + * @return \OCP\Calendar\IManager + * @deprecated 20.0.0 + */ + public function getCalendarManager() + { + } + + /** + * @return \OCP\Calendar\Resource\IManager + * @deprecated 20.0.0 + */ + public function getCalendarResourceBackendManager() + { + } + + /** + * @return \OCP\Calendar\Room\IManager + * @deprecated 20.0.0 + */ + public function getCalendarRoomBackendManager() + { } /** @@ -282,6 +310,14 @@ public function getEncryptionManager() */ public function getEncryptionFilesHelper() { + } + + /** + * @return \OCP\Encryption\Keys\IStorage + * @deprecated 20.0.0 + */ + public function getEncryptionKeyStorage() + { } /** @@ -294,6 +330,61 @@ public function getEncryptionFilesHelper() */ public function getRequest() { + } + + /** + * Returns the preview manager which can create preview images for a given file + * + * @return IPreview + * @deprecated 20.0.0 + */ + public function getPreviewManager() + { + } + + /** + * Returns the tag manager which can get and set tags for different object types + * + * @see \OCP\ITagManager::load() + * @return ITagManager + * @deprecated 20.0.0 + */ + public function getTagManager() + { + } + + /** + * Returns the system-tag manager + * + * @return ISystemTagManager + * + * @since 9.0.0 + * @deprecated 20.0.0 + */ + public function getSystemTagManager() + { + } + + /** + * Returns the system-tag object mapper + * + * @return ISystemTagObjectMapper + * + * @since 9.0.0 + * @deprecated 20.0.0 + */ + public function getSystemTagObjectMapper() + { + } + + /** + * Returns the avatar manager, used for avatar functionality + * + * @return IAvatarManager + * @deprecated 20.0.0 + */ + public function getAvatarManager() + { } /** @@ -367,6 +458,22 @@ public function getSession() */ public function setSession(\OCP\ISession $session) { + } + + /** + * @return \OC\Authentication\TwoFactorAuth\Manager + * @deprecated 20.0.0 + */ + public function getTwoFactorAuthManager() + { + } + + /** + * @return \OC\NavigationManager + * @deprecated 20.0.0 + */ + public function getNavigationManager() + { } /** @@ -383,6 +490,16 @@ public function getConfig() */ public function getSystemConfig() { + } + + /** + * Returns the app config manager + * + * @return IAppConfig + * @deprecated 20.0.0 + */ + public function getAppConfig() + { } /** @@ -411,6 +528,14 @@ public function getL10N($app, $lang = null) */ public function getURLGenerator() { + } + + /** + * @return AppFetcher + * @deprecated 20.0.0 + */ + public function getAppFetcher() + { } /** @@ -434,6 +559,17 @@ public function getMemCacheFactory() { } + /** + * Returns an \OC\RedisFactory instance + * + * @return \OC\RedisFactory + * @deprecated 20.0.0 + */ + public function getGetRedisFactory() + { + } + + /** * Returns the current session * @@ -462,6 +598,35 @@ public function getActivityManager() */ public function getJobList() { + } + + /** + * Returns a logger instance + * + * @return ILogger + * @deprecated 20.0.0 + */ + public function getLogger() + { + } + + /** + * @return ILogFactory + * @throws \OCP\AppFramework\QueryException + * @deprecated 20.0.0 + */ + public function getLogFactory() + { + } + + /** + * Returns a router for generating and matching urls + * + * @return IRouter + * @deprecated 20.0.0 + */ + public function getRouter() + { } /** @@ -492,6 +657,16 @@ public function getCrypto() */ public function getHasher() { + } + + /** + * Returns a CredentialsManager instance + * + * @return ICredentialsManager + * @deprecated 20.0.0 + */ + public function getCredentialsManager() + { } /** @@ -501,6 +676,40 @@ public function getHasher() */ public function getCertificateManager() { + } + + /** + * Returns an instance of the HTTP client service + * + * @return IClientService + * @deprecated 20.0.0 + */ + public function getHTTPClientService() + { + } + + /** + * Get the active event logger + * + * The returned logger only logs data when debug mode is enabled + * + * @return IEventLogger + * @deprecated 20.0.0 + */ + public function getEventLogger() + { + } + + /** + * Get the active query logger + * + * The returned logger only logs data when debug mode is enabled + * + * @return IQueryLogger + * @deprecated 20.0.0 + */ + public function getQueryLogger() + { } /** @@ -541,6 +750,66 @@ public function getMailer() */ public function getWebRoot() { + } + + /** + * @return \OC\OCSClient + * @deprecated 20.0.0 + */ + public function getOcsClient() + { + } + + /** + * @return IDateTimeZone + * @deprecated 20.0.0 + */ + public function getDateTimeZone() + { + } + + /** + * @return IDateTimeFormatter + * @deprecated 20.0.0 + */ + public function getDateTimeFormatter() + { + } + + /** + * @return IMountProviderCollection + * @deprecated 20.0.0 + */ + public function getMountProviderCollection() + { + } + + /** + * Get the IniWrapper + * + * @return IniGetWrapper + * @deprecated 20.0.0 + */ + public function getIniWrapper() + { + } + + /** + * @return \OCP\Command\IBus + * @deprecated 20.0.0 + */ + public function getCommandBus() + { + } + + /** + * Get the trusted domain helper + * + * @return TrustedDomainHelper + * @deprecated 20.0.0 + */ + public function getTrustedDomainHelper() + { } /** @@ -552,6 +821,22 @@ public function getWebRoot() */ public function getLockingProvider() { + } + + /** + * @return IMountManager + * @deprecated 20.0.0 + **/ + public function getMountManager() + { + } + + /** + * @return IUserMountCache + * @deprecated 20.0.0 + */ + public function getUserMountCache() + { } /** @@ -572,6 +857,16 @@ public function getMimeTypeDetector() */ public function getMimeTypeLoader() { + } + + /** + * Get the manager of all the capabilities + * + * @return CapabilitiesManager + * @deprecated 20.0.0 + */ + public function getCapabilitiesManager() + { } /** @@ -583,6 +878,14 @@ public function getMimeTypeLoader() */ public function getNotificationManager() { + } + + /** + * @return ICommentsManager + * @deprecated 20.0.0 + */ + public function getCommentsManager() + { } /** @@ -599,6 +902,14 @@ public function getThemingDefaults() */ public function getIntegrityCodeChecker() { + } + + /** + * @return \OC\Session\CryptoWrapper + * @deprecated 20.0.0 + */ + public function getSessionCryptoWrapper() + { } /** @@ -607,6 +918,22 @@ public function getIntegrityCodeChecker() */ public function getCsrfTokenManager() { + } + + /** + * @return IThrottler + * @deprecated 20.0.0 + */ + public function getBruteForceThrottler() + { + } + + /** + * @return IContentSecurityPolicyManager + * @deprecated 20.0.0 + */ + public function getContentSecurityPolicyManager() + { } /** @@ -615,6 +942,80 @@ public function getCsrfTokenManager() */ public function getContentSecurityPolicyNonceManager() { + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\BackendService + * @deprecated 20.0.0 + */ + public function getStoragesBackendService() + { + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\GlobalStoragesService + * @deprecated 20.0.0 + */ + public function getGlobalStoragesService() + { + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\UserGlobalStoragesService + * @deprecated 20.0.0 + */ + public function getUserGlobalStoragesService() + { + } + + /** + * Not a public API as of 8.2, wait for 9.0 + * + * @return \OCA\Files_External\Service\UserStoragesService + * @deprecated 20.0.0 + */ + public function getUserStoragesService() + { + } + + /** + * @return \OCP\Share\IManager + * @deprecated 20.0.0 + */ + public function getShareManager() + { + } + + /** + * @return \OCP\Collaboration\Collaborators\ISearch + * @deprecated 20.0.0 + */ + public function getCollaboratorSearch() + { + } + + /** + * @return \OCP\Collaboration\AutoComplete\IManager + * @deprecated 20.0.0 + */ + public function getAutoCompleteManager() + { + } + + /** + * Returns the LDAP Provider + * + * @return \OCP\LDAP\ILDAPProvider + * @deprecated 20.0.0 + */ + public function getLDAPProvider() + { } /** @@ -631,6 +1032,14 @@ public function getSettingsManager() */ public function getAppDataDir($app) { + } + + /** + * @return \OCP\Lockdown\ILockdownManager + * @deprecated 20.0.0 + */ + public function getLockdownManager() + { } /** @@ -639,5 +1048,64 @@ public function getAppDataDir($app) */ public function getCloudIdManager() { + } + + /** + * @return \OCP\GlobalScale\IConfig + * @deprecated 20.0.0 + */ + public function getGlobalScaleConfig() + { + } + + /** + * @return \OCP\Federation\ICloudFederationProviderManager + * @deprecated 20.0.0 + */ + public function getCloudFederationProviderManager() + { + } + + /** + * @return \OCP\Remote\Api\IApiFactory + * @deprecated 20.0.0 + */ + public function getRemoteApiFactory() + { + } + + /** + * @return \OCP\Federation\ICloudFederationFactory + * @deprecated 20.0.0 + */ + public function getCloudFederationFactory() + { + } + + /** + * @return \OCP\Remote\IInstanceFactory + * @deprecated 20.0.0 + */ + public function getRemoteInstanceFactory() + { + } + + /** + * @return IStorageFactory + * @deprecated 20.0.0 + */ + public function getStorageFactory() + { + } + + /** + * Get the Preview GeneratorHelper + * + * @return GeneratorHelper + * @since 17.0.0 + * @deprecated 20.0.0 + */ + public function getGeneratorHelper() + { } } diff --git a/tests/stubs/oc_user_user.php b/tests/stubs/oc_user_user.php index f20db3a93..d55403e56 100644 --- a/tests/stubs/oc_user_user.php +++ b/tests/stubs/oc_user_user.php @@ -11,6 +11,7 @@ use OC\Accounts\AccountManager; use OC\Avatar\AvatarManager; use OC\Hooks\Emitter; +use OC_Helper; use OCP\Accounts\IAccountManager; use OCP\Comments\ICommentsManager; use OCP\EventDispatcher\IEventDispatcher; @@ -108,23 +109,17 @@ public function setPrimaryEMailAddress(string $mailAddress): void /** * returns the timestamp of the user's last login or 0 if the user did never * login + * + * @return int */ - public function getLastLogin(): int - { - } - - /** - * returns the timestamp of the user's last login or 0 if the user did never - * login - */ - public function getFirstLogin(): int + public function getLastLogin() { } /** * updates the timestamp of the most recent login of this user */ - public function updateLastLoginTimestamp(): bool + public function updateLastLoginTimestamp() { } @@ -179,7 +174,7 @@ public function getBackend(): ?UserInterface } /** - * Check if the backend allows the user to change their avatar on Personal page + * Check if the backend allows the user to change his avatar on Personal page * * @return bool */ @@ -259,10 +254,6 @@ public function getPrimaryEMailAddress(): ?string */ public function getQuota() { - } - - public function getQuotaBytes(): int|float - { } /** diff --git a/tests/stubs/oca_circles_circlesqueryhelper.php b/tests/stubs/oca_circles_circlesqueryhelper.php index 58e0e65c5..a3d99d015 100644 --- a/tests/stubs/oca_circles_circlesqueryhelper.php +++ b/tests/stubs/oca_circles_circlesqueryhelper.php @@ -40,9 +40,9 @@ public function __construct(CoreRequestBuilder $coreRequestBuilder, FederatedUse /** - * @return CoreQueryBuilder&IQueryBuilder + * @return IQueryBuilder */ - public function getQueryBuilder(): CoreQueryBuilder + public function getQueryBuilder(): IQueryBuilder { } diff --git a/tests/stubs/oca_circles_db_corequerybuilder.php b/tests/stubs/oca_circles_db_corequerybuilder.php index 1d7cad1ca..6be64ba4c 100644 --- a/tests/stubs/oca_circles_db_corequerybuilder.php +++ b/tests/stubs/oca_circles_db_corequerybuilder.php @@ -12,6 +12,7 @@ namespace OCA\Circles\Db; use Doctrine\DBAL\Query\QueryBuilder; +use OC; use OCA\Circles\Exceptions\RequestBuilderException; use OCA\Circles\IFederatedModel; use OCA\Circles\IFederatedUser; @@ -25,7 +26,6 @@ use OCA\Circles\Tools\Traits\TArrayTools; use OCP\DB\QueryBuilder\ICompositeExpression; use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\Server; /** * Class CoreQueryBuilder @@ -699,7 +699,7 @@ public function leftJoinMountpoint(string $aliasMount, IFederatedUser $federated * @param array $path * @param array $options * - * @return CoreQueryBuilder&IQueryBuilder + * @return CoreQueryBuilder */ public function setOptions(array $path, array $options): self { diff --git a/tests/stubs/oca_circles_ifederateduser.php b/tests/stubs/oca_circles_ifederateduser.php index 07c1599b7..989c80ed7 100644 --- a/tests/stubs/oca_circles_ifederateduser.php +++ b/tests/stubs/oca_circles_ifederateduser.php @@ -19,29 +19,11 @@ * @package OCA\Circles */ interface IFederatedUser extends IFederatedModel { - /** - * @param string $singleId - * - * @return self - */ - public function setSingleId(string $singleId): self - { - } - /** * @return string */ public function getSingleId(): string { - } - - /** - * @param string $userId - * - * @return self - */ - public function setUserId(string $userId): self - { } /** @@ -49,15 +31,6 @@ public function setUserId(string $userId): self */ public function getUserId(): string { - } - - /** - * @param int $userType - * - * @return self - */ - public function setUserType(int $userType): self - { } /** @@ -65,15 +38,6 @@ public function setUserType(int $userType): self */ public function getUserType(): int { - } - - /** - * @param string $displayName - * - * @return IFederatedUser - */ - public function setDisplayName(string $displayName): self - { } /** @@ -81,15 +45,6 @@ public function setDisplayName(string $displayName): self */ public function getDisplayName(): string { - } - - /** - * @param ?Circle $basedOn - * - * @return $this - */ - public function setBasedOn(?Circle $basedOn): self - { } /** @@ -104,14 +59,5 @@ public function getBasedOn(): Circle */ public function hasBasedOn(): bool { - } - - /** - * @param string $instance - * - * @return self - */ - public function setInstance(string $instance): self - { } } diff --git a/tests/stubs/oca_circles_model_circle.php b/tests/stubs/oca_circles_model_circle.php index 15d678d0d..f05fa9ea8 100644 --- a/tests/stubs/oca_circles_model_circle.php +++ b/tests/stubs/oca_circles_model_circle.php @@ -33,7 +33,6 @@ use OCA\Circles\Tools\Traits\TArrayTools; use OCA\Circles\Tools\Traits\TDeserialize; use OCP\Security\IHasher; -use OCP\Server; /** * Class Circle @@ -124,7 +123,7 @@ class Circle extends ManagedModel implements IEntity, IDeserializable, IQueryRow /** - * Note: When editing those values, update lib/AppInfo/Capabilities.php + * Note: When editing those values, update lib/Application/Capabilities.php * * @see Capabilities::getCapabilitiesCircleConstants() * @var array @@ -134,9 +133,9 @@ class Circle extends ManagedModel implements IEntity, IDeserializable, IQueryRow 2 => 'Nextcloud Group', 4 => 'Email Address', 8 => 'Contact', - 16 => 'Team', + 16 => 'Circle', 10000 => 'Nextcloud App', - 10001 => 'Teams App', + 10001 => 'Circles App', 10002 => 'Admin Command Line', 11000 => '3rd party app', 11010 => 'Collectives App' diff --git a/tests/stubs/oca_circles_model_federateduser.php b/tests/stubs/oca_circles_model_federateduser.php index 6aaad5850..f6a14876f 100644 --- a/tests/stubs/oca_circles_model_federateduser.php +++ b/tests/stubs/oca_circles_model_federateduser.php @@ -136,11 +136,11 @@ public function hasBasedOn(): bool } /** - * @param ?Circle $basedOn + * @param Circle|null $basedOn * * @return $this */ - public function setBasedOn(?Circle $basedOn): self + public function setBasedOn(Circle $basedOn): self { } diff --git a/tests/stubs/oca_circles_model_managedmodel.php b/tests/stubs/oca_circles_model_managedmodel.php index 729a06545..82aa3ae52 100644 --- a/tests/stubs/oca_circles_model_managedmodel.php +++ b/tests/stubs/oca_circles_model_managedmodel.php @@ -11,8 +11,8 @@ namespace OCA\Circles\Model; +use OC; use OCA\Circles\IFederatedUser; -use OCP\Server; /** * Class ManagedModel diff --git a/tests/stubs/oca_circles_model_member.php b/tests/stubs/oca_circles_model_member.php index a223c08ec..f960d108f 100644 --- a/tests/stubs/oca_circles_model_member.php +++ b/tests/stubs/oca_circles_model_member.php @@ -287,11 +287,11 @@ public function hasBasedOn(): bool } /** - * @param ?Circle $basedOn + * @param Circle $basedOn * * @return $this */ - public function setBasedOn(?Circle $basedOn): self + public function setBasedOn(Circle $basedOn): self { } @@ -454,7 +454,7 @@ public function setNoteObj(string $key, JsonSerializable $obj): self /** * @param string $displayName * - * @return $this + * @return Member */ public function setDisplayName(string $displayName): self { diff --git a/tests/stubs/oca_circles_tools_db_extendedquerybuilder.php b/tests/stubs/oca_circles_tools_db_extendedquerybuilder.php index 630b79cab..52a921d23 100644 --- a/tests/stubs/oca_circles_tools_db_extendedquerybuilder.php +++ b/tests/stubs/oca_circles_tools_db_extendedquerybuilder.php @@ -15,6 +15,7 @@ use DateTime; use Doctrine\DBAL\Query\QueryBuilder as DBALQueryBuilder; use Exception; +use OC; use OC\DB\QueryBuilder\QueryBuilder; use OC\SystemConfig; use OCA\Circles\Tools\Exceptions\DateTimeException; @@ -24,7 +25,6 @@ use OCP\DB\QueryBuilder\ICompositeExpression; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; -use OCP\Server; use Psr\Log\LoggerInterface; class ExtendedQueryBuilder extends QueryBuilder { @@ -709,7 +709,7 @@ public function generateSelect(string $table, array $fields, string $alias = '') * @param array $fields * @param string $alias * @param string $prefix - * @param array $default + * @param array $default * * @return $this */ diff --git a/tests/stubs/oca_dav_connector_sabre_directory.php b/tests/stubs/oca_dav_connector_sabre_directory.php index 63c8e89ae..a2b2f1d54 100644 --- a/tests/stubs/oca_dav_connector_sabre_directory.php +++ b/tests/stubs/oca_dav_connector_sabre_directory.php @@ -13,15 +13,10 @@ use OCA\DAV\Connector\Sabre\Exception\FileLocked; use OCA\DAV\Connector\Sabre\Exception\Forbidden; use OCA\DAV\Connector\Sabre\Exception\InvalidPath; -use OCA\DAV\Storage\PublicShareWrapper; -use OCP\App\IAppManager; -use OCP\Constants; use OCP\Files\FileInfo; use OCP\Files\Folder; use OCP\Files\ForbiddenException; use OCP\Files\InvalidPathException; -use OCP\Files\Mount\IMountManager; -use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\Files\StorageNotAvailableException; use OCP\IL10N; @@ -29,7 +24,6 @@ use OCP\L10N\IFactory; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; -use OCP\Server; use OCP\Share\IManager as IShareManager; use Psr\Log\LoggerInterface; use Sabre\DAV\Exception\BadRequest; @@ -39,11 +33,11 @@ use Sabre\DAV\IFile; use Sabre\DAV\INode; -class Directory extends Node implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuota, \Sabre\DAV\IMoveTarget, \Sabre\DAV\ICopyTarget { +class Directory extends \OCA\DAV\Connector\Sabre\Node implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuota, \Sabre\DAV\IMoveTarget, \Sabre\DAV\ICopyTarget { /** * Sets up the node, expects a full path name */ - public function __construct(View $view, FileInfo $info, private ?CachingTree $tree = null, ?IShareManager $shareManager = null) + public function __construct(View $view, FileInfo $info, ?CachingTree $tree = null, ?IShareManager $shareManager = null) { } @@ -100,7 +94,7 @@ public function createDirectory($name) * Returns a specific child node, referenced by its name * * @param string $name - * @param FileInfo $info + * @param \OCP\Files\FileInfo $info * @return \Sabre\DAV\INode * @throws InvalidPath * @throws \Sabre\DAV\Exception\NotFound @@ -115,7 +109,7 @@ public function getChild($name, $info = null, ?IRequest $request = null, ?IL10N * * @return \Sabre\DAV\INode[] * @throws \Sabre\DAV\Exception\Locked - * @throws Forbidden + * @throws \OCA\DAV\Connector\Sabre\Exception\Forbidden */ public function getChildren() { diff --git a/tests/stubs/oca_dav_connector_sabre_node.php b/tests/stubs/oca_dav_connector_sabre_node.php index 4492b2d13..22fde839d 100644 --- a/tests/stubs/oca_dav_connector_sabre_node.php +++ b/tests/stubs/oca_dav_connector_sabre_node.php @@ -12,19 +12,21 @@ use OC\Files\Node\Folder; use OC\Files\View; use OCA\DAV\Connector\Sabre\Exception\InvalidPath; -use OCP\Constants; use OCP\Files\DavUtil; use OCP\Files\FileInfo; -use OCP\Files\InvalidPathException; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\Files\Storage\ISharedStorage; use OCP\Files\StorageNotAvailableException; -use OCP\Server; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; abstract class Node implements \Sabre\DAV\INode { + /** + * @var View + */ + protected $fileView; + /** * The path to the current node * @@ -51,7 +53,7 @@ abstract class Node implements \Sabre\DAV\INode { /** * Sets up the node, expects a full path name */ - public function __construct(protected View $fileView, FileInfo $info, ?IManager $shareManager = null) + public function __construct(View $view, FileInfo $info, ?IManager $shareManager = null) { } diff --git a/tests/stubs/oca_dav_connector_sabre_principal.php b/tests/stubs/oca_dav_connector_sabre_principal.php index ac63b7a7c..68966f2d5 100644 --- a/tests/stubs/oca_dav_connector_sabre_principal.php +++ b/tests/stubs/oca_dav_connector_sabre_principal.php @@ -8,9 +8,7 @@ namespace OCA\DAV\Connector\Sabre; use OC\KnownUser\KnownUserService; -use OCA\Circles\Api\v1\Circles; use OCA\Circles\Exceptions\CircleNotFoundException; -use OCA\Circles\Model\Circle; use OCA\DAV\CalDAV\Proxy\ProxyMapper; use OCA\DAV\Traits\PrincipalProxyTrait; use OCP\Accounts\IAccountManager; @@ -33,7 +31,7 @@ class Principal implements BackendInterface { - public function __construct(private IUserManager $userManager, private IGroupManager $groupManager, private IAccountManager $accountManager, private IShareManager $shareManager, private IUserSession $userSession, private IAppManager $appManager, private ProxyMapper $proxyMapper, KnownUserService $knownUserService, private IConfig $config, private IFactory $languageFactory, string $principalPrefix = 'principals/users/') + public function __construct(IUserManager $userManager, IGroupManager $groupManager, IAccountManager $accountManager, IShareManager $shareManager, IUserSession $userSession, IAppManager $appManager, ProxyMapper $proxyMapper, KnownUserService $knownUserService, IConfig $config, IFactory $languageFactory, string $principalPrefix = 'principals/users/') { } @@ -68,21 +66,6 @@ public function getPrincipalsByPrefix($prefixPath) */ public function getPrincipalByPath($path) { - } - - /** - * Returns a specific principal, specified by its path. - * The returned structure should be the exact same as from - * getPrincipalsByPrefix. - * - * It is possible to optionally filter retrieved properties in case only a limited set is - * required. Note that the implementation might return more properties than requested. - * - * @param string $path The path of the principal - * @param string[]|null $propertyFilter A list of properties to be retrieved or all if null. An empty array will cause a very shallow principal to be retrieved. - */ - public function getPrincipalPropertiesByPath($path, ?array $propertyFilter = null): ?array - { } /** @@ -138,11 +121,10 @@ public function findByUri($uri, $principalPrefix) /** * @param IUser $user - * @param string[]|null $propertyFilter * @return array * @throws PropertyDoesNotExistException */ - protected function userToPrincipal($user, ?array $propertyFilter = null) + protected function userToPrincipal($user) { } @@ -164,7 +146,7 @@ protected function circleToPrincipal($circleUniqueId) * @param string $principal * @return array * @throws Exception - * @throws QueryException + * @throws \OCP\AppFramework\QueryException * @suppress PhanUndeclaredClassMethod */ public function getCircleMembership($principal): array diff --git a/tests/stubs/oca_files_sharing_event_beforetemplaterenderedevent.php b/tests/stubs/oca_files_sharing_event_beforetemplaterenderedevent.php index 4abf9c5c5..60b36908b 100644 --- a/tests/stubs/oca_files_sharing_event_beforetemplaterenderedevent.php +++ b/tests/stubs/oca_files_sharing_event_beforetemplaterenderedevent.php @@ -26,7 +26,7 @@ class BeforeTemplateRenderedEvent extends Event { /** * @since 20.0.0 */ - public function __construct(private IShare $share, private ?string $scope = null) + public function __construct(IShare $share, ?string $scope = null) { } diff --git a/tests/stubs/oca_files_trashbin_expiration.php b/tests/stubs/oca_files_trashbin_expiration.php index 5a387bbc5..18d8c7c09 100644 --- a/tests/stubs/oca_files_trashbin_expiration.php +++ b/tests/stubs/oca_files_trashbin_expiration.php @@ -16,7 +16,7 @@ class Expiration { public const DEFAULT_RETENTION_OBLIGATION = 30; public const NO_OBLIGATION = -1; - public function __construct(IConfig $config, private ITimeFactory $timeFactory) + public function __construct(IConfig $config, ITimeFactory $timeFactory) { } diff --git a/tests/stubs/oca_files_trashbin_trash_trashitem.php b/tests/stubs/oca_files_trashbin_trash_trashitem.php index a641f3da5..b5aae0014 100644 --- a/tests/stubs/oca_files_trashbin_trash_trashitem.php +++ b/tests/stubs/oca_files_trashbin_trash_trashitem.php @@ -70,7 +70,7 @@ public function getPath() { } - public function getMimetype(): string + public function getMimetype() { } diff --git a/tests/stubs/oca_files_versions_expiration.php b/tests/stubs/oca_files_versions_expiration.php index 2c93ef2da..e19015430 100644 --- a/tests/stubs/oca_files_versions_expiration.php +++ b/tests/stubs/oca_files_versions_expiration.php @@ -16,7 +16,7 @@ class Expiration { // how long do we keep files a version if no other value is defined in the config file (unit: days) public const NO_OBLIGATION = -1; - public function __construct(IConfig $config, private ITimeFactory $timeFactory, private LoggerInterface $logger) + public function __construct(IConfig $config, ITimeFactory $timeFactory, LoggerInterface $logger) { } diff --git a/tests/stubs/oca_files_versions_versions_ineedsyncversionbackend.php b/tests/stubs/oca_files_versions_versions_ineedsyncversionbackend.php index 4f82a3db3..8dd0ff5f3 100644 --- a/tests/stubs/oca_files_versions_versions_ineedsyncversionbackend.php +++ b/tests/stubs/oca_files_versions_versions_ineedsyncversionbackend.php @@ -8,18 +8,13 @@ */ namespace OCA\Files_Versions\Versions; -use OCA\Files_Versions\Db\VersionEntity; use OCP\Files\File; /** * @since 28.0.0 */ interface INeedSyncVersionBackend { - /** - * TODO: Convert return type to strong type once all implementations are fixed. - * @return null|VersionEntity - */ - public function createVersionEntity(File $file) + public function createVersionEntity(File $file): void { } public function updateVersionEntity(File $sourceFile, int $revision, array $properties): void diff --git a/tests/stubs/oca_files_versions_versions_iversionbackend.php b/tests/stubs/oca_files_versions_versions_iversionbackend.php index b2885bee7..6e7c766aa 100644 --- a/tests/stubs/oca_files_versions_versions_iversionbackend.php +++ b/tests/stubs/oca_files_versions_versions_iversionbackend.php @@ -8,7 +8,6 @@ */ namespace OCA\Files_Versions\Versions; -use OC\Files\Node\Node; use OCP\Files\File; use OCP\Files\FileInfo; use OCP\Files\NotFoundException; @@ -90,14 +89,5 @@ public function read(IVersion $version) */ public function getVersionFile(IUser $user, FileInfo $sourceFile, $revision): File { - } - - /** - * Get the revision for a node - * - * @since 32.0.0 - */ - public function getRevision(Node $node): int - { } } diff --git a/tests/stubs/oca_settings_service_authorizedgroupservice.php b/tests/stubs/oca_settings_service_authorizedgroupservice.php index ddca80bbb..312687d66 100644 --- a/tests/stubs/oca_settings_service_authorizedgroupservice.php +++ b/tests/stubs/oca_settings_service_authorizedgroupservice.php @@ -16,10 +16,9 @@ class AuthorizedGroupService { - public function __construct( - private AuthorizedGroupMapper $mapper, - ) { - } + public function __construct(AuthorizedGroupMapper $mapper) + { + } /** * @return AuthorizedGroup[] diff --git a/tests/stubs/test_testcase.php b/tests/stubs/test_testcase.php index cfb88fb6a..76ef8b3a8 100644 --- a/tests/stubs/test_testcase.php +++ b/tests/stubs/test_testcase.php @@ -11,7 +11,6 @@ use DOMDocument; use DOMNode; use OC\Command\QueueBus; -use OC\Files\Cache\Storage; use OC\Files\Config\MountProviderCollection; use OC\Files\Filesystem; use OC\Files\Mount\CacheMountProvider; @@ -19,22 +18,15 @@ use OC\Files\Mount\RootMountProvider; use OC\Files\ObjectStore\PrimaryObjectStoreConfig; use OC\Files\SetupManager; -use OC\Files\View; use OC\Template\Base; -use OCP\AppFramework\QueryException; use OCP\Command\IBus; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Defaults; use OCP\IConfig; use OCP\IDBConnection; use OCP\IL10N; -use OCP\IUserManager; -use OCP\IUserSession; use OCP\Lock\ILockingProvider; -use OCP\Lock\LockedException; use OCP\Security\ISecureRandom; -use OCP\Server; -use PHPUnit\Framework\Attributes\Group; if (version_compare(\PHPUnit\Runner\Version::id(), 10, '>=')) { trait OnNotSuccessfulTestTrait { @@ -131,21 +123,6 @@ protected static function invokePrivate($object, $methodName, array $parameters */ protected static function getUniqueID($prefix = '', $length = 13) { - } - - /** - * Filter methods - * - * Returns all methods of the given class, - * that are public or abstract and not in the ignoreMethods list, - * to be able to fill onlyMethods() with an inverted list. - * - * @param string $className - * @param string[] $filterMethods - * @return string[] - */ - public function filterClassMethods(string $className, array $filterMethods): array - { } public static function tearDownAfterClass(): void @@ -238,7 +215,7 @@ protected function runCommands() /** * Check if the given path is locked with a given type * - * @param View $view view + * @param \OC\Files\View $view view * @param string $path path to check * @param int $type lock type * @param bool $onMountPoint true to check the mount point instead of the @@ -255,7 +232,7 @@ protected function getGroupAnnotations(): array { } - protected function IsDatabaseAccessAllowed(): bool + protected function IsDatabaseAccessAllowed() { } diff --git a/tests/stubs/test_traits_usertrait.php b/tests/stubs/test_traits_usertrait.php index 6a27afa83..e1644bf17 100644 --- a/tests/stubs/test_traits_usertrait.php +++ b/tests/stubs/test_traits_usertrait.php @@ -11,15 +11,14 @@ use OC\User\User; use OCP\EventDispatcher\IEventDispatcher; use OCP\IUser; -use OCP\IUserManager; use OCP\Server; -use OCP\UserInterface; class DummyUser extends User { - public function __construct( - private string $uid, - ) { - parent::__construct($this->uid, null, Server::get(IEventDispatcher::class)); + private string $uid; + + public function __construct(string $uid) { + $this->uid = $uid; + parent::__construct($uid, null, Server::get(IEventDispatcher::class)); } public function getUID(): string { @@ -32,7 +31,7 @@ public function getUID(): string { */ trait UserTrait { /** - * @var \Test\Util\User\Dummy|UserInterface + * @var \Test\Util\User\Dummy|\OCP\UserInterface */ protected $userBackend;