aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/dav/l10n/de.js2
-rw-r--r--apps/dav/l10n/de.json2
-rw-r--r--apps/dav/l10n/de_DE.js2
-rw-r--r--apps/dav/l10n/de_DE.json2
-rw-r--r--apps/dav/l10n/et_EE.js7
-rw-r--r--apps/dav/l10n/et_EE.json7
-rw-r--r--apps/dav/lib/Connector/Sabre/File.php3
-rw-r--r--apps/federatedfilesharing/l10n/de_DE.js2
-rw-r--r--apps/federatedfilesharing/l10n/de_DE.json2
-rw-r--r--apps/files/l10n/de.js4
-rw-r--r--apps/files/l10n/de.json4
-rw-r--r--apps/files/l10n/de_DE.js4
-rw-r--r--apps/files/l10n/de_DE.json4
-rw-r--r--apps/files/l10n/et_EE.js4
-rw-r--r--apps/files/l10n/et_EE.json4
-rw-r--r--apps/files/l10n/ja.js9
-rw-r--r--apps/files/l10n/ja.json9
-rw-r--r--apps/files/l10n/pt_BR.js4
-rw-r--r--apps/files/l10n/pt_BR.json4
-rw-r--r--apps/files/l10n/sv.js7
-rw-r--r--apps/files/l10n/sv.json7
-rw-r--r--apps/files/l10n/zh_CN.js7
-rw-r--r--apps/files/l10n/zh_CN.json7
-rw-r--r--apps/files/l10n/zh_TW.js4
-rw-r--r--apps/files/l10n/zh_TW.json4
-rw-r--r--apps/files_sharing/l10n/de.js2
-rw-r--r--apps/files_sharing/l10n/de.json2
-rw-r--r--apps/files_sharing/l10n/de_DE.js2
-rw-r--r--apps/files_sharing/l10n/de_DE.json2
-rw-r--r--apps/files_sharing/l10n/ja.js3
-rw-r--r--apps/files_sharing/l10n/ja.json3
-rw-r--r--apps/files_versions/lib/Storage.php25
-rw-r--r--apps/provisioning_api/tests/CapabilitiesTest.php15
-rw-r--r--apps/provisioning_api/tests/Controller/AppConfigControllerTest.php63
-rw-r--r--apps/provisioning_api/tests/Controller/AppsControllerTest.php15
-rw-r--r--apps/provisioning_api/tests/Controller/GroupsControllerTest.php56
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php142
-rw-r--r--apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php40
-rw-r--r--apps/settings/l10n/de.js18
-rw-r--r--apps/settings/l10n/de.json18
-rw-r--r--apps/settings/l10n/de_DE.js22
-rw-r--r--apps/settings/l10n/de_DE.json22
-rw-r--r--apps/settings/l10n/fr.js2
-rw-r--r--apps/settings/l10n/fr.json2
-rw-r--r--apps/settings/l10n/it.js15
-rw-r--r--apps/settings/l10n/it.json15
-rw-r--r--apps/settings/tests/Activity/SecurityFilterTest.php12
-rw-r--r--apps/settings/tests/Activity/SecurityProviderTest.php28
-rw-r--r--apps/settings/tests/Activity/SecuritySettingTest.php4
-rw-r--r--apps/settings/tests/AppInfo/ApplicationTest.php15
-rw-r--r--apps/settings/tests/Controller/AppSettingsControllerTest.php48
-rw-r--r--apps/settings/tests/Controller/AuthSettingsControllerTest.php39
-rw-r--r--apps/settings/tests/Controller/CheckSetupControllerTest.php67
-rw-r--r--apps/settings/tests/Controller/DelegationControllerTest.php21
-rw-r--r--apps/settings/tests/Controller/MailSettingsControllerTest.php82
-rw-r--r--apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php14
-rw-r--r--apps/settings/tests/Controller/UsersControllerTest.php122
-rw-r--r--apps/settings/tests/Mailer/NewUserMailHelperTest.php41
-rw-r--r--apps/settings/tests/Middleware/SubadminMiddlewareTest.php23
-rw-r--r--apps/settings/tests/Settings/Admin/MailTest.php4
-rw-r--r--apps/settings/tests/Settings/Admin/SecurityTest.php27
-rw-r--r--apps/settings/tests/Settings/Admin/ServerTest.php27
-rw-r--r--apps/settings/tests/Settings/Admin/SharingTest.php40
-rw-r--r--apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php81
-rw-r--r--apps/settings/tests/Settings/Personal/Security/PasswordTest.php12
-rw-r--r--apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php5
-rw-r--r--apps/settings/tests/SetupChecks/CodeIntegrityTest.php7
-rw-r--r--apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php6
-rw-r--r--apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php7
-rw-r--r--apps/settings/tests/SetupChecks/LoggingLevelTest.php4
-rw-r--r--apps/settings/tests/SetupChecks/OcxProvicersTest.php6
-rw-r--r--apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php5
-rw-r--r--apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php5
-rw-r--r--apps/settings/tests/SetupChecks/SecurityHeadersTest.php24
-rw-r--r--apps/settings/tests/SetupChecks/SupportedDatabaseTest.php8
-rw-r--r--apps/settings/tests/SetupChecks/WellKnownUrlsTest.php21
-rw-r--r--apps/settings/tests/UserMigration/AccountMigratorTest.php49
-rw-r--r--apps/sharebymail/l10n/de.js2
-rw-r--r--apps/sharebymail/l10n/de.json2
-rw-r--r--apps/sharebymail/l10n/de_DE.js2
-rw-r--r--apps/sharebymail/l10n/de_DE.json2
-rw-r--r--apps/weather_status/l10n/ko.js45
-rw-r--r--apps/weather_status/l10n/ko.json45
83 files changed, 747 insertions, 804 deletions
diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js
index d6569cdc4f9..66e17898188 100644
--- a/apps/dav/l10n/de.js
+++ b/apps/dav/l10n/de.js
@@ -282,7 +282,7 @@ OC.L10N.register(
"Saved availability" : "Verfügbarkeit gespeichert",
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
"Time zone:" : "Zeitzone:",
- "to" : "an",
+ "to" : "bis",
"Delete slot" : "Slot löschen",
"No working hours set" : "Keine Arbeitszeiten konfiguriert",
"Add slot" : "Slot hinzufügen",
diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json
index e3a6f980ba1..94354959e6f 100644
--- a/apps/dav/l10n/de.json
+++ b/apps/dav/l10n/de.json
@@ -280,7 +280,7 @@
"Saved availability" : "Verfügbarkeit gespeichert",
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
"Time zone:" : "Zeitzone:",
- "to" : "an",
+ "to" : "bis",
"Delete slot" : "Slot löschen",
"No working hours set" : "Keine Arbeitszeiten konfiguriert",
"Add slot" : "Slot hinzufügen",
diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js
index 1072d8f9ff2..0a53ba564a7 100644
--- a/apps/dav/l10n/de_DE.js
+++ b/apps/dav/l10n/de_DE.js
@@ -282,7 +282,7 @@ OC.L10N.register(
"Saved availability" : "Verfügbarkeit gespeichert",
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
"Time zone:" : "Zeitzone:",
- "to" : "an",
+ "to" : "bis",
"Delete slot" : "Zeitfenster löschen",
"No working hours set" : "Keine Arbeitszeiten konfiguriert",
"Add slot" : "Zeitfenster hinzufügen",
diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json
index 721cee8c91a..7bf998eec36 100644
--- a/apps/dav/l10n/de_DE.json
+++ b/apps/dav/l10n/de_DE.json
@@ -280,7 +280,7 @@
"Saved availability" : "Verfügbarkeit gespeichert",
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
"Time zone:" : "Zeitzone:",
- "to" : "an",
+ "to" : "bis",
"Delete slot" : "Zeitfenster löschen",
"No working hours set" : "Keine Arbeitszeiten konfiguriert",
"Add slot" : "Zeitfenster hinzufügen",
diff --git a/apps/dav/l10n/et_EE.js b/apps/dav/l10n/et_EE.js
index 69f941b3daa..2cf7703d686 100644
--- a/apps/dav/l10n/et_EE.js
+++ b/apps/dav/l10n/et_EE.js
@@ -31,7 +31,11 @@ OC.L10N.register(
"{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}",
"You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}",
- "You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Sa uuendasid „{event}“ sündmust „{calendar}“ kalendris",
+ "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} teisaldas „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse",
+ "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Sina teisaldasid „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse",
+ "{actor} restored event {event} of calendar {calendar}" : "{actor} taastas „{event}“ sündmuse „{calendar}“ kalendris",
+ "You restored event {event} of calendar {calendar}" : "Sina taastasid „{event}“ sündmuse „{calendar}“ kalendris",
"Busy" : "Hõivatud",
"{actor} created to-do {todo} in list {calendar}" : "{actor} lisas {todo} ülesande {calendar} loendissse",
"You created to-do {todo} in list {calendar}" : "Sina lisasid {todo} ülesande {calendar} loendisse",
@@ -68,6 +72,7 @@ OC.L10N.register(
"Description: %s" : "Kirjeldus: %s",
"Where: %s" : "Kus: %s",
"%1$s via %2$s" : "%1$s %2$s kaudu",
+ "Every Day between %1$s - %2$s until %3$s" : "Iga päev ajavahemikus %1$s-%2$s kuni %3$s",
"Cancelled: %1$s" : "Tühistatud: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
"Re: %1$s" : "Re: %1$s",
diff --git a/apps/dav/l10n/et_EE.json b/apps/dav/l10n/et_EE.json
index 2eed43d0c8f..e4615d45ca2 100644
--- a/apps/dav/l10n/et_EE.json
+++ b/apps/dav/l10n/et_EE.json
@@ -29,7 +29,11 @@
"{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}",
"You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}",
- "You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}",
+ "You updated event {event} in calendar {calendar}" : "Sa uuendasid „{event}“ sündmust „{calendar}“ kalendris",
+ "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} teisaldas „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse",
+ "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Sina teisaldasid „{event}“ sündmuse „{sourceCalendar}“ kalendrist „{targetCalendar}“ kalendrisse",
+ "{actor} restored event {event} of calendar {calendar}" : "{actor} taastas „{event}“ sündmuse „{calendar}“ kalendris",
+ "You restored event {event} of calendar {calendar}" : "Sina taastasid „{event}“ sündmuse „{calendar}“ kalendris",
"Busy" : "Hõivatud",
"{actor} created to-do {todo} in list {calendar}" : "{actor} lisas {todo} ülesande {calendar} loendissse",
"You created to-do {todo} in list {calendar}" : "Sina lisasid {todo} ülesande {calendar} loendisse",
@@ -66,6 +70,7 @@
"Description: %s" : "Kirjeldus: %s",
"Where: %s" : "Kus: %s",
"%1$s via %2$s" : "%1$s %2$s kaudu",
+ "Every Day between %1$s - %2$s until %3$s" : "Iga päev ajavahemikus %1$s-%2$s kuni %3$s",
"Cancelled: %1$s" : "Tühistatud: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
"Re: %1$s" : "Re: %1$s",
diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php
index 045b9d7e784..98e0f2e9e4b 100644
--- a/apps/dav/lib/Connector/Sabre/File.php
+++ b/apps/dav/lib/Connector/Sabre/File.php
@@ -19,6 +19,7 @@ use OCA\DAV\Connector\Sabre\Exception\Forbidden as DAVForbiddenException;
use OCA\DAV\Connector\Sabre\Exception\UnsupportedMediaType;
use OCP\App\IAppManager;
use OCP\Encryption\Exceptions\GenericEncryptionException;
+use OCP\Files;
use OCP\Files\EntityTooLargeException;
use OCP\Files\FileInfo;
use OCP\Files\ForbiddenException;
@@ -229,7 +230,7 @@ class File extends Node implements IFile {
// because we have no clue about the cause we can only throw back a 500/Internal Server Error
throw new Exception($this->l10n->t('Could not write file contents'));
}
- [$count, $result] = \OC_Helper::streamCopy($data, $target);
+ [$count, $result] = Files::streamCopy($data, $target, true);
fclose($target);
}
diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js
index 40ad6b5be23..d1e9d2c2e71 100644
--- a/apps/federatedfilesharing/l10n/de_DE.js
+++ b/apps/federatedfilesharing/l10n/de_DE.js
@@ -53,7 +53,7 @@ OC.L10N.register(
"Federated Cloud" : "Federated Cloud",
"You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Sie können mit jedem teilen, der einen Nextcloud-Server oder andere Open Cloud Mesh (OCM) kompatible Server und Dienste verwendet! Geben Sie einfach deren Federated-Cloud-ID in den Teilen-Dialog ein. Diese sieht wie folgt aus: person@cloud.example.com",
"Your Federated Cloud ID" : "Ihre Federated-Cloud-ID",
- "Share it so your friends can share files with you:" : "Teilen Sie es, so dass Ihre Freunde Dateien mit Ihnen teilen können:",
+ "Share it so your friends can share files with you:" : "Teilen Sie es, damit Ihre Freunde Dateien mit Ihnen teilen können:",
"Facebook" : "Facebook",
"X (formerly Twitter)" : "X (früher Twitter)",
"formerly Twitter" : "früher Twitter",
diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json
index c6cdd274032..962f6fb0857 100644
--- a/apps/federatedfilesharing/l10n/de_DE.json
+++ b/apps/federatedfilesharing/l10n/de_DE.json
@@ -51,7 +51,7 @@
"Federated Cloud" : "Federated Cloud",
"You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Sie können mit jedem teilen, der einen Nextcloud-Server oder andere Open Cloud Mesh (OCM) kompatible Server und Dienste verwendet! Geben Sie einfach deren Federated-Cloud-ID in den Teilen-Dialog ein. Diese sieht wie folgt aus: person@cloud.example.com",
"Your Federated Cloud ID" : "Ihre Federated-Cloud-ID",
- "Share it so your friends can share files with you:" : "Teilen Sie es, so dass Ihre Freunde Dateien mit Ihnen teilen können:",
+ "Share it so your friends can share files with you:" : "Teilen Sie es, damit Ihre Freunde Dateien mit Ihnen teilen können:",
"Facebook" : "Facebook",
"X (formerly Twitter)" : "X (früher Twitter)",
"formerly Twitter" : "früher Twitter",
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index f4b11b60bfe..3237a8b49d0 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -99,6 +99,10 @@ OC.L10N.register(
"Rename file" : "Datei umbenennen",
"Folder" : "Ordner",
"Unknown file type" : "Unbekannter Dateityp",
+ "{ext} image" : "{ext}-Bild",
+ "{ext} video" : "{ext}-Video",
+ "{ext} audio" : "{ext}-Audio",
+ "{ext} text" : "{ext}-Text",
"Pending" : "Ausstehend",
"Unknown date" : "Unbekanntes Datum",
"Clear filter" : "Filter zurücksetzen",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index f34d8585898..f5ebd06c5a8 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -97,6 +97,10 @@
"Rename file" : "Datei umbenennen",
"Folder" : "Ordner",
"Unknown file type" : "Unbekannter Dateityp",
+ "{ext} image" : "{ext}-Bild",
+ "{ext} video" : "{ext}-Video",
+ "{ext} audio" : "{ext}-Audio",
+ "{ext} text" : "{ext}-Text",
"Pending" : "Ausstehend",
"Unknown date" : "Unbekanntes Datum",
"Clear filter" : "Filter zurücksetzen",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index cbb4d16f40a..bcf374148b5 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -99,6 +99,10 @@ OC.L10N.register(
"Rename file" : "Datei umbenennen",
"Folder" : "Ordner",
"Unknown file type" : "Unbekannter Dateityp",
+ "{ext} image" : "{ext}-Bild",
+ "{ext} video" : "{ext}-Video",
+ "{ext} audio" : "{ext}-Audio",
+ "{ext} text" : "{ext}-Text",
"Pending" : "Ausstehend",
"Unknown date" : "Unbekanntes Datum",
"Clear filter" : "Filter zurücksetzen",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 8e1f611f317..fd0d1714920 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -97,6 +97,10 @@
"Rename file" : "Datei umbenennen",
"Folder" : "Ordner",
"Unknown file type" : "Unbekannter Dateityp",
+ "{ext} image" : "{ext}-Bild",
+ "{ext} video" : "{ext}-Video",
+ "{ext} audio" : "{ext}-Audio",
+ "{ext} text" : "{ext}-Text",
"Pending" : "Ausstehend",
"Unknown date" : "Unbekanntes Datum",
"Clear filter" : "Filter zurücksetzen",
diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js
index 17330fbf036..86f79a96ea9 100644
--- a/apps/files/l10n/et_EE.js
+++ b/apps/files/l10n/et_EE.js
@@ -99,6 +99,10 @@ OC.L10N.register(
"Rename file" : "Muuda failinime",
"Folder" : "Kaust",
"Unknown file type" : "Tundmatu failitüüp",
+ "{ext} image" : "{ext} pilt",
+ "{ext} video" : "{ext} video",
+ "{ext} audio" : "{ext} helifail",
+ "{ext} text" : "{ext} tekst",
"Pending" : "Ootel",
"Unknown date" : "Tundmatu kuupäev",
"Clear filter" : "Tühjenda filter",
diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json
index cb2182202e8..7c1baa0915c 100644
--- a/apps/files/l10n/et_EE.json
+++ b/apps/files/l10n/et_EE.json
@@ -97,6 +97,10 @@
"Rename file" : "Muuda failinime",
"Folder" : "Kaust",
"Unknown file type" : "Tundmatu failitüüp",
+ "{ext} image" : "{ext} pilt",
+ "{ext} video" : "{ext} video",
+ "{ext} audio" : "{ext} helifail",
+ "{ext} text" : "{ext} tekst",
"Pending" : "Ootel",
"Unknown date" : "Tundmatu kuupäev",
"Clear filter" : "Tühjenda filter",
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 3d61616343b..6c16223edef 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -71,6 +71,8 @@ OC.L10N.register(
"Transferred from %1$s on %2$s" : "%1$sから%2$sに転送",
"Files compatibility" : "ファイルの互換性",
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "ファイルをすべてのクライアントと同期できるようにするために、ファイル名を制限することを許可します。デフォルトではPOSIX(LinuxやmacOSなど)で有効なすべてのファイル名が許可されています。",
+ "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Windows 互換のファイル名を有効にすると、既存のファイルは変更できなくなりますが、所有者が有効な新しいファイル名に変更できるようになります。",
+ "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "この設定を有効にした後、自動的にファイルを移行することも可能です。occコマンドに関するドキュメントを参照してください。",
"Enforce Windows compatibility" : "Windowsとの互換性を強制",
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "予約名や特殊文字のような、Windowsシステムにおいて有効でないファイル名をブロックします。これは大文字、小文字の互換性を強制するものではありません。",
"File Management" : "ファイル管理",
@@ -96,6 +98,11 @@ OC.L10N.register(
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" から \"{newName}\" に名前を変更済み",
"Rename file" : "ファイル名の変更",
"Folder" : "フォルダー",
+ "Unknown file type" : "不明なファイルタイプ",
+ "{ext} image" : "{ext}画像",
+ "{ext} video" : "{ext}ビデオ",
+ "{ext} audio" : "{ext}音声",
+ "{ext} text" : "{ext}テキスト",
"Pending" : "保留中",
"Unknown date" : "不明な日付",
"Clear filter" : "フィルターをクリア",
@@ -106,6 +113,7 @@ OC.L10N.register(
"Total rows summary" : "総行数のサマリー",
"Toggle selection for all files and folders" : "すべてのファイルとフォルダの選択を切り替える",
"Name" : "名前",
+ "File type" : "ファイルの種類",
"Size" : "サイズ",
"\"{displayName}\" failed on some elements" : "いくつかの要素で \"{displayName}\" が失敗しました。",
"\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。",
@@ -184,6 +192,7 @@ OC.L10N.register(
"Sort favorites first" : "お気に入りを最初に並べる",
"Sort folders before files" : "ファイルよりもフォルダを先に並べ替えます",
"Show hidden files" : "隠しファイルを表示",
+ "Show file type column" : "ファイルの種類のカラムを表示する",
"Crop image previews" : "プレビュー画像を切り抜く",
"Enable the grid view" : "グリッド表示を有効にする",
"Enable folder tree" : "フォルダーツリーを有効にする",
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index e778a19f0bb..6e24c0a0326 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -69,6 +69,8 @@
"Transferred from %1$s on %2$s" : "%1$sから%2$sに転送",
"Files compatibility" : "ファイルの互換性",
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "ファイルをすべてのクライアントと同期できるようにするために、ファイル名を制限することを許可します。デフォルトではPOSIX(LinuxやmacOSなど)で有効なすべてのファイル名が許可されています。",
+ "After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Windows 互換のファイル名を有効にすると、既存のファイルは変更できなくなりますが、所有者が有効な新しいファイル名に変更できるようになります。",
+ "It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "この設定を有効にした後、自動的にファイルを移行することも可能です。occコマンドに関するドキュメントを参照してください。",
"Enforce Windows compatibility" : "Windowsとの互換性を強制",
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "予約名や特殊文字のような、Windowsシステムにおいて有効でないファイル名をブロックします。これは大文字、小文字の互換性を強制するものではありません。",
"File Management" : "ファイル管理",
@@ -94,6 +96,11 @@
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" から \"{newName}\" に名前を変更済み",
"Rename file" : "ファイル名の変更",
"Folder" : "フォルダー",
+ "Unknown file type" : "不明なファイルタイプ",
+ "{ext} image" : "{ext}画像",
+ "{ext} video" : "{ext}ビデオ",
+ "{ext} audio" : "{ext}音声",
+ "{ext} text" : "{ext}テキスト",
"Pending" : "保留中",
"Unknown date" : "不明な日付",
"Clear filter" : "フィルターをクリア",
@@ -104,6 +111,7 @@
"Total rows summary" : "総行数のサマリー",
"Toggle selection for all files and folders" : "すべてのファイルとフォルダの選択を切り替える",
"Name" : "名前",
+ "File type" : "ファイルの種類",
"Size" : "サイズ",
"\"{displayName}\" failed on some elements" : "いくつかの要素で \"{displayName}\" が失敗しました。",
"\"{displayName}\" batch action executed successfully" : "\"{displayName}\" バッチアクションが正常に実行されました。",
@@ -182,6 +190,7 @@
"Sort favorites first" : "お気に入りを最初に並べる",
"Sort folders before files" : "ファイルよりもフォルダを先に並べ替えます",
"Show hidden files" : "隠しファイルを表示",
+ "Show file type column" : "ファイルの種類のカラムを表示する",
"Crop image previews" : "プレビュー画像を切り抜く",
"Enable the grid view" : "グリッド表示を有効にする",
"Enable folder tree" : "フォルダーツリーを有効にする",
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 65358d419aa..8e77d1b2bb5 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -99,6 +99,10 @@ OC.L10N.register(
"Rename file" : "Renomear arquivo",
"Folder" : "Pasta",
"Unknown file type" : "Tipo de arquivo desconhecido",
+ "{ext} image" : "imagem {ext}",
+ "{ext} video" : "vídeo {ext}",
+ "{ext} audio" : "áudio {ext}",
+ "{ext} text" : "texto {ext}",
"Pending" : "Pendente",
"Unknown date" : "Data desconhecida",
"Clear filter" : "Limpar filtro",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 7b39fa76f77..09de897bc56 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -97,6 +97,10 @@
"Rename file" : "Renomear arquivo",
"Folder" : "Pasta",
"Unknown file type" : "Tipo de arquivo desconhecido",
+ "{ext} image" : "imagem {ext}",
+ "{ext} video" : "vídeo {ext}",
+ "{ext} audio" : "áudio {ext}",
+ "{ext} text" : "texto {ext}",
"Pending" : "Pendente",
"Unknown date" : "Data desconhecida",
"Clear filter" : "Limpar filtro",
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index 2847bc373c7..ad6b2e96bf4 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -98,6 +98,11 @@ OC.L10N.register(
"Renamed \"{oldName}\" to \"{newName}\"" : "Bytte namn på \"{oldName}\" till \"{newName}\"",
"Rename file" : "Byt namn på fil",
"Folder" : "Mapp",
+ "Unknown file type" : "Okänd filtyp",
+ "{ext} image" : "{ext} bild",
+ "{ext} video" : "{ext} video",
+ "{ext} audio" : "{ext} ljud",
+ "{ext} text" : "{ext} text",
"Pending" : "Väntar",
"Unknown date" : "Okänt datum",
"Clear filter" : "Rensa filter",
@@ -108,6 +113,7 @@ OC.L10N.register(
"Total rows summary" : "Sammanfattning antal rader",
"Toggle selection for all files and folders" : "Växla markering för alla filer och mappar",
"Name" : "Namn",
+ "File type" : "Filtyp",
"Size" : "Storlek",
"\"{displayName}\" failed on some elements" : "\"{displayName}\" misslyckades med vissa element",
"\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts",
@@ -186,6 +192,7 @@ OC.L10N.register(
"Sort favorites first" : "Sortera favoriter först",
"Sort folders before files" : "Sortera mappar före filer",
"Show hidden files" : "Visa dolda filer",
+ "Show file type column" : "Visa kolumn för filtyp",
"Crop image previews" : "Beskär förhandsgranskningar för bilder",
"Enable the grid view" : "Aktivera rutnätsvy",
"Enable folder tree" : "Aktivera mappträd",
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index affd94daa75..514dd77aab7 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -96,6 +96,11 @@
"Renamed \"{oldName}\" to \"{newName}\"" : "Bytte namn på \"{oldName}\" till \"{newName}\"",
"Rename file" : "Byt namn på fil",
"Folder" : "Mapp",
+ "Unknown file type" : "Okänd filtyp",
+ "{ext} image" : "{ext} bild",
+ "{ext} video" : "{ext} video",
+ "{ext} audio" : "{ext} ljud",
+ "{ext} text" : "{ext} text",
"Pending" : "Väntar",
"Unknown date" : "Okänt datum",
"Clear filter" : "Rensa filter",
@@ -106,6 +111,7 @@
"Total rows summary" : "Sammanfattning antal rader",
"Toggle selection for all files and folders" : "Växla markering för alla filer och mappar",
"Name" : "Namn",
+ "File type" : "Filtyp",
"Size" : "Storlek",
"\"{displayName}\" failed on some elements" : "\"{displayName}\" misslyckades med vissa element",
"\"{displayName}\" batch action executed successfully" : "Batchåtgärden \"{displayName}\" har utförts",
@@ -184,6 +190,7 @@
"Sort favorites first" : "Sortera favoriter först",
"Sort folders before files" : "Sortera mappar före filer",
"Show hidden files" : "Visa dolda filer",
+ "Show file type column" : "Visa kolumn för filtyp",
"Crop image previews" : "Beskär förhandsgranskningar för bilder",
"Enable the grid view" : "Aktivera rutnätsvy",
"Enable folder tree" : "Aktivera mappträd",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 24c6af3046f..b0cc1433457 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -98,6 +98,11 @@ OC.L10N.register(
"Renamed \"{oldName}\" to \"{newName}\"" : "已将“{oldName}”重命名为“{newName}”",
"Rename file" : "重命名文件",
"Folder" : "文件夹",
+ "Unknown file type" : "未知文件类型",
+ "{ext} image" : "{ext} 图片",
+ "{ext} video" : "{ext} 视频",
+ "{ext} audio" : "{ext} 音频",
+ "{ext} text" : "{ext} 文本",
"Pending" : "等待",
"Unknown date" : "未知日期",
"Clear filter" : "清除筛选",
@@ -108,6 +113,7 @@ OC.L10N.register(
"Total rows summary" : "总行摘要",
"Toggle selection for all files and folders" : "切换所有文件和文件夹的选择",
"Name" : "名称",
+ "File type" : "文件类型",
"Size" : "大小",
"\"{displayName}\" failed on some elements" : "“{displayName}”在某些元素上失败",
"\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功",
@@ -186,6 +192,7 @@ OC.L10N.register(
"Sort favorites first" : "收藏排序优先",
"Sort folders before files" : "将文件夹排在文件前面",
"Show hidden files" : "显示隐藏文件",
+ "Show file type column" : "显示文件类型列",
"Crop image previews" : "裁剪图片预览",
"Enable the grid view" : "启用网格视图",
"Enable folder tree" : "启用文件夹树",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index 6fb7facb3b6..e15d9f5b180 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -96,6 +96,11 @@
"Renamed \"{oldName}\" to \"{newName}\"" : "已将“{oldName}”重命名为“{newName}”",
"Rename file" : "重命名文件",
"Folder" : "文件夹",
+ "Unknown file type" : "未知文件类型",
+ "{ext} image" : "{ext} 图片",
+ "{ext} video" : "{ext} 视频",
+ "{ext} audio" : "{ext} 音频",
+ "{ext} text" : "{ext} 文本",
"Pending" : "等待",
"Unknown date" : "未知日期",
"Clear filter" : "清除筛选",
@@ -106,6 +111,7 @@
"Total rows summary" : "总行摘要",
"Toggle selection for all files and folders" : "切换所有文件和文件夹的选择",
"Name" : "名称",
+ "File type" : "文件类型",
"Size" : "大小",
"\"{displayName}\" failed on some elements" : "“{displayName}”在某些元素上失败",
"\"{displayName}\" batch action executed successfully" : "批量操作“{displayName}”运行成功",
@@ -184,6 +190,7 @@
"Sort favorites first" : "收藏排序优先",
"Sort folders before files" : "将文件夹排在文件前面",
"Show hidden files" : "显示隐藏文件",
+ "Show file type column" : "显示文件类型列",
"Crop image previews" : "裁剪图片预览",
"Enable the grid view" : "启用网格视图",
"Enable folder tree" : "启用文件夹树",
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 51c97322725..4ff34d480e5 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -99,6 +99,10 @@ OC.L10N.register(
"Rename file" : "重新命名檔案",
"Folder" : "資料夾",
"Unknown file type" : "未知檔案類型",
+ "{ext} image" : "{ext} 影像",
+ "{ext} video" : "{ext} 視訊",
+ "{ext} audio" : "{ext} 音訊",
+ "{ext} text" : "{ext} 文字",
"Pending" : "待處理",
"Unknown date" : "未知日期",
"Clear filter" : "清除過濾條件",
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index ead55fc3891..0def7339d4d 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -97,6 +97,10 @@
"Rename file" : "重新命名檔案",
"Folder" : "資料夾",
"Unknown file type" : "未知檔案類型",
+ "{ext} image" : "{ext} 影像",
+ "{ext} video" : "{ext} 視訊",
+ "{ext} audio" : "{ext} 音訊",
+ "{ext} text" : "{ext} 文字",
"Pending" : "待處理",
"Unknown date" : "未知日期",
"Clear filter" : "清除過濾條件",
diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js
index f6aa0685ab2..e686a33970e 100644
--- a/apps/files_sharing/l10n/de.js
+++ b/apps/files_sharing/l10n/de.js
@@ -182,7 +182,7 @@ OC.L10N.register(
"Choose a default folder for accepted shares" : "Einen Standardordner für akzeptierte Freigaben wählen",
"Invalid path selected" : "Ungültigen Pfad ausgewählt",
"Unknown error" : "Unbekannter Fehler",
- "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen",
+ "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben",
"Reset" : "Zurücksetzen",
"Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen",
"Share expiration: " : "Freigabe-Ablaufdatum:",
diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json
index 52b17773dbd..a797c90fe56 100644
--- a/apps/files_sharing/l10n/de.json
+++ b/apps/files_sharing/l10n/de.json
@@ -180,7 +180,7 @@
"Choose a default folder for accepted shares" : "Einen Standardordner für akzeptierte Freigaben wählen",
"Invalid path selected" : "Ungültigen Pfad ausgewählt",
"Unknown error" : "Unbekannter Fehler",
- "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen",
+ "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben",
"Reset" : "Zurücksetzen",
"Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen",
"Share expiration: " : "Freigabe-Ablaufdatum:",
diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js
index 1269c6a0cfb..608e60101c9 100644
--- a/apps/files_sharing/l10n/de_DE.js
+++ b/apps/files_sharing/l10n/de_DE.js
@@ -182,7 +182,7 @@ OC.L10N.register(
"Choose a default folder for accepted shares" : "Wählen Sie einen Standardordner für akzeptierte Freigaben",
"Invalid path selected" : "Ungültiger Pfad ausgewählt",
"Unknown error" : "Unbekannter Fehler",
- "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen",
+ "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben",
"Reset" : "Zurücksetzen",
"Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen",
"Share expiration: " : "Freigabe-Ablaufdatum:",
diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json
index 0a61a725d3e..97c1ac18a7c 100644
--- a/apps/files_sharing/l10n/de_DE.json
+++ b/apps/files_sharing/l10n/de_DE.json
@@ -180,7 +180,7 @@
"Choose a default folder for accepted shares" : "Wählen Sie einen Standardordner für akzeptierte Freigaben",
"Invalid path selected" : "Ungültiger Pfad ausgewählt",
"Unknown error" : "Unbekannter Fehler",
- "Set default folder for accepted shares" : "Standardordner für akzeptierte Freigaben wählen",
+ "Set default folder for accepted shares" : "Standardordner für angenommene Freigaben",
"Reset" : "Zurücksetzen",
"Reset folder to system default" : "Ordner auf Systemstandard zurücksetzen",
"Share expiration: " : "Freigabe-Ablaufdatum:",
diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js
index 062614d2fe3..dfbb41c95cc 100644
--- a/apps/files_sharing/l10n/ja.js
+++ b/apps/files_sharing/l10n/ja.js
@@ -313,7 +313,9 @@ OC.L10N.register(
"Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "組織内の個人またはチームとファイルを共有するには、この方法を使用します。受信者がすでに共有にアクセスできるが、その場所を見つけられない場合は、簡単にアクセスできるように内部共有リンクを送信できます。",
"Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "組織外の個人や組織とファイルを共有するには、この方法を使用します。ファイルやフォルダは、パブリック共有リンクやメールアドレスで共有できます。また、連携クラウドIDを使用して、異なるインスタンスにホストされている他のNextcloudアカウントと共有することもできます。",
"Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "内部または外部共有に含まれない共有。これはアプリや他のソースからの共有になります。",
+ "Share with accounts, teams, federated cloud IDs" : "アカウント、チーム、連携クラウドIDとの共有",
"Share with accounts and teams" : "アカウントとチームで共有",
+ "Email, federated cloud ID" : "電子メール、連携クラウドID",
"Unable to load the shares list" : "共有リストを読み込めません",
"Expires {relativetime}" : "有効期限 {relativetime}",
"this share just expired." : "この共有は期限切れになりました。",
@@ -422,6 +424,7 @@ OC.L10N.register(
"You are not allowed to edit link shares that you don't own" : "あなたが所有していない共有リンクを編集することは許可されていません",
"_1 email address already added_::_{count} email addresses already added_" : ["{count} メールアドレスはすでに追加されています"],
"_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"],
+ "Share with accounts, teams, federated cloud id" : "アカウント、チーム、連携クラウドIDで共有",
"Email, federated cloud id" : "電子メール、連携クラウドID"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json
index c2657abce02..67b977bbe3b 100644
--- a/apps/files_sharing/l10n/ja.json
+++ b/apps/files_sharing/l10n/ja.json
@@ -311,7 +311,9 @@
"Use this method to share files with individuals or teams within your organization. If the recipient already has access to the share but cannot locate it, you can send them the internal share link for easy access." : "組織内の個人またはチームとファイルを共有するには、この方法を使用します。受信者がすでに共有にアクセスできるが、その場所を見つけられない場合は、簡単にアクセスできるように内部共有リンクを送信できます。",
"Use this method to share files with individuals or organizations outside your organization. Files and folders can be shared via public share links and email addresses. You can also share to other Nextcloud accounts hosted on different instances using their federated cloud ID." : "組織外の個人や組織とファイルを共有するには、この方法を使用します。ファイルやフォルダは、パブリック共有リンクやメールアドレスで共有できます。また、連携クラウドIDを使用して、異なるインスタンスにホストされている他のNextcloudアカウントと共有することもできます。",
"Shares that are not part of the internal or external shares. This can be shares from apps or other sources." : "内部または外部共有に含まれない共有。これはアプリや他のソースからの共有になります。",
+ "Share with accounts, teams, federated cloud IDs" : "アカウント、チーム、連携クラウドIDとの共有",
"Share with accounts and teams" : "アカウントとチームで共有",
+ "Email, federated cloud ID" : "電子メール、連携クラウドID",
"Unable to load the shares list" : "共有リストを読み込めません",
"Expires {relativetime}" : "有効期限 {relativetime}",
"this share just expired." : "この共有は期限切れになりました。",
@@ -420,6 +422,7 @@
"You are not allowed to edit link shares that you don't own" : "あなたが所有していない共有リンクを編集することは許可されていません",
"_1 email address already added_::_{count} email addresses already added_" : ["{count} メールアドレスはすでに追加されています"],
"_1 email address added_::_{count} email addresses added_" : ["{count} メールアドレスが追加されました"],
+ "Share with accounts, teams, federated cloud id" : "アカウント、チーム、連携クラウドIDで共有",
"Email, federated cloud id" : "電子メール、連携クラウドID"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php
index 19e7dd598ae..4b58d721583 100644
--- a/apps/files_versions/lib/Storage.php
+++ b/apps/files_versions/lib/Storage.php
@@ -23,6 +23,7 @@ use OCA\Files_Versions\Versions\IVersionManager;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\Command\IBus;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\Files;
use OCP\Files\FileInfo;
use OCP\Files\Folder;
use OCP\Files\IMimeTypeDetector;
@@ -32,6 +33,7 @@ use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OCP\Files\Search\ISearchBinaryOperator;
use OCP\Files\Search\ISearchComparison;
+use OCP\Files\Storage\IWriteStreamStorage;
use OCP\Files\StorageInvalidException;
use OCP\Files\StorageNotAvailableException;
use OCP\IURLGenerator;
@@ -416,12 +418,25 @@ class Storage {
try {
// TODO add a proper way of overwriting a file while maintaining file ids
- if ($storage1->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage') || $storage2->instanceOfStorage('\OC\Files\ObjectStore\ObjectStoreStorage')) {
+ if ($storage1->instanceOfStorage(\OC\Files\ObjectStore\ObjectStoreStorage::class)
+ || $storage2->instanceOfStorage(\OC\Files\ObjectStore\ObjectStoreStorage::class)
+ ) {
$source = $storage1->fopen($internalPath1, 'r');
- $target = $storage2->fopen($internalPath2, 'w');
- [, $result] = \OC_Helper::streamCopy($source, $target);
- fclose($source);
- fclose($target);
+ $result = $source !== false;
+ if ($result) {
+ if ($storage2->instanceOfStorage(IWriteStreamStorage::class)) {
+ /** @var IWriteStreamStorage $storage2 */
+ $storage2->writeStream($internalPath2, $source);
+ } else {
+ $target = $storage2->fopen($internalPath2, 'w');
+ $result = $target !== false;
+ if ($target !== false) {
+ [, $result] = Files::streamCopy($source, $target, true);
+ fclose($target);
+ }
+ }
+ fclose($source);
+ }
if ($result !== false) {
$storage1->unlink($internalPath1);
diff --git a/apps/provisioning_api/tests/CapabilitiesTest.php b/apps/provisioning_api/tests/CapabilitiesTest.php
index e3c14f37ed7..67a0335829c 100644
--- a/apps/provisioning_api/tests/CapabilitiesTest.php
+++ b/apps/provisioning_api/tests/CapabilitiesTest.php
@@ -1,9 +1,11 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Provisioning_API\Tests\unit;
+namespace OCA\Provisioning_API\Tests;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\Provisioning_API\Capabilities;
@@ -21,11 +23,8 @@ use Test\TestCase;
*/
class CapabilitiesTest extends TestCase {
- /** @var Capabilities */
- protected $capabilities;
-
- /** @var IAppManager|MockObject */
- protected $appManager;
+ protected IAppManager&MockObject $appManager;
+ protected Capabilities $capabilities;
public function setUp(): void {
parent::setUp();
@@ -38,7 +37,7 @@ class CapabilitiesTest extends TestCase {
->willReturn('1.12');
}
- public function getCapabilitiesProvider() {
+ public static function getCapabilitiesProvider(): array {
return [
[true, false, false, true, false],
[true, true, false, true, false],
@@ -52,7 +51,7 @@ class CapabilitiesTest extends TestCase {
/**
* @dataProvider getCapabilitiesProvider
*/
- public function testGetCapabilities($federationAppEnabled, $federatedFileSharingAppEnabled, $lookupServerEnabled, $expectedFederatedScopeEnabled, $expectedPublishedScopeEnabled): void {
+ public function testGetCapabilities(bool $federationAppEnabled, bool $federatedFileSharingAppEnabled, bool $lookupServerEnabled, bool $expectedFederatedScopeEnabled, bool $expectedPublishedScopeEnabled): void {
$this->appManager->expects($this->any())
->method('isEnabledForUser')
->will($this->returnValueMap([
diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
index 41739b6283f..3d2c1645d25 100644
--- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -30,7 +32,6 @@ use function json_encode;
* @package OCA\Provisioning_API\Tests
*/
class AppConfigControllerTest extends TestCase {
-
private IAppConfig&MockObject $appConfig;
private IUserSession&MockObject $userSession;
private IL10N&MockObject $l10n;
@@ -51,7 +52,7 @@ class AppConfigControllerTest extends TestCase {
/**
* @param string[] $methods
- * @return AppConfigController|\PHPUnit\Framework\MockObject\MockObject
+ * @return AppConfigController|MockObject
*/
protected function getInstance(array $methods = []) {
$request = $this->createMock(IRequest::class);
@@ -79,7 +80,7 @@ class AppConfigControllerTest extends TestCase {
$this->settingManager,
$this->appManager,
])
- ->setMethods($methods)
+ ->onlyMethods($methods)
->getMock();
}
}
@@ -95,7 +96,7 @@ class AppConfigControllerTest extends TestCase {
$this->assertEquals(['data' => ['apps']], $result->getData());
}
- public function dataGetKeys() {
+ public static function dataGetKeys(): array {
return [
['app1 ', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN],
['app2', ['keys'], null, Http::STATUS_OK],
@@ -104,12 +105,8 @@ class AppConfigControllerTest extends TestCase {
/**
* @dataProvider dataGetKeys
- * @param string $app
- * @param array|null $keys
- * @param \Exception|null $throws
- * @param int $status
*/
- public function testGetKeys($app, $keys, $throws, $status): void {
+ public function testGetKeys(string $app, ?array $keys, ?\Throwable $throws, int $status): void {
$api = $this->getInstance(['verifyAppId']);
if ($throws instanceof \Exception) {
$api->expects($this->once())
@@ -140,7 +137,7 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataGetValue() {
+ public static function dataGetValue(): array {
return [
['app1', 'key', 'default', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', 'return', null, Http::STATUS_OK],
@@ -149,14 +146,8 @@ class AppConfigControllerTest extends TestCase {
/**
* @dataProvider dataGetValue
- * @param string $app
- * @param string|null $key
- * @param string|null $default
- * @param string|null $return
- * @param \Exception|null $throws
- * @param int $status
*/
- public function testGetValue($app, $key, $default, $return, $throws, $status): void {
+ public function testGetValue(string $app, string $key, string $default, ?string $return, ?\Throwable $throws, int $status): void {
$api = $this->getInstance(['verifyAppId']);
if ($throws instanceof \Exception) {
$api->expects($this->once())
@@ -184,7 +175,7 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataSetValue() {
+ public static function dataSetValue(): array {
return [
['app1', 'key', 'default', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN],
@@ -201,14 +192,8 @@ class AppConfigControllerTest extends TestCase {
/**
* @dataProvider dataSetValue
- * @param string $app
- * @param string|null $key
- * @param string|null $value
- * @param \Exception|null $appThrows
- * @param \Exception|null $keyThrows
- * @param int|\Throwable $status
*/
- public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status, int|\Throwable $type = IAppConfig::VALUE_MIXED): void {
+ public function testSetValue(string $app, string $key, string $value, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status, int|\Throwable $type = IAppConfig::VALUE_MIXED): void {
$adminUser = $this->createMock(IUser::class);
$adminUser->expects($this->once())
->method('getUid')
@@ -297,7 +282,7 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataDeleteValue() {
+ public static function dataDeleteValue(): array {
return [
['app1', 'key', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN],
['app2', 'key', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN],
@@ -307,13 +292,8 @@ class AppConfigControllerTest extends TestCase {
/**
* @dataProvider dataDeleteValue
- * @param string $app
- * @param string|null $key
- * @param \Exception|null $appThrows
- * @param \Exception|null $keyThrows
- * @param int $status
*/
- public function testDeleteValue($app, $key, $appThrows, $keyThrows, $status): void {
+ public function testDeleteValue(string $app, string $key, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status): void {
$api = $this->getInstance(['verifyAppId', 'verifyConfigKey']);
if ($appThrows instanceof \Exception) {
$api->expects($this->once())
@@ -367,7 +347,7 @@ class AppConfigControllerTest extends TestCase {
$this->addToAssertionCount(1);
}
- public function dataVerifyAppIdThrows() {
+ public static function dataVerifyAppIdThrows(): array {
return [
['activity..'],
['activity/'],
@@ -378,16 +358,15 @@ class AppConfigControllerTest extends TestCase {
/**
* @dataProvider dataVerifyAppIdThrows
- * @param string $app
*/
- public function testVerifyAppIdThrows($app): void {
+ public function testVerifyAppIdThrows(string $app): void {
$this->expectException(\InvalidArgumentException::class);
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyAppId', [$app]);
}
- public function dataVerifyConfigKey() {
+ public static function dataVerifyConfigKey(): array {
return [
['activity', 'abc', ''],
['dav', 'public_route', ''],
@@ -398,17 +377,14 @@ class AppConfigControllerTest extends TestCase {
/**
* @dataProvider dataVerifyConfigKey
- * @param string $app
- * @param string $key
- * @param string $value
*/
- public function testVerifyConfigKey($app, $key, $value): void {
+ public function testVerifyConfigKey(string $app, string $key, string $value): void {
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyConfigKey', [$app, $key, $value]);
$this->addToAssertionCount(1);
}
- public function dataVerifyConfigKeyThrows() {
+ public static function dataVerifyConfigKeyThrows(): array {
return [
['activity', 'installed_version', ''],
['calendar', 'enabled', ''],
@@ -424,11 +400,8 @@ class AppConfigControllerTest extends TestCase {
/**
* @dataProvider dataVerifyConfigKeyThrows
- * @param string $app
- * @param string $key
- * @param string $value
*/
- public function testVerifyConfigKeyThrows($app, $key, $value): void {
+ public function testVerifyConfigKeyThrows(string $app, string $key, string $value): void {
$this->expectException(\InvalidArgumentException::class);
$api = $this->getInstance();
diff --git a/apps/provisioning_api/tests/Controller/AppsControllerTest.php b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
index bbcabfddd8b..f56be7c4c36 100644
--- a/apps/provisioning_api/tests/Controller/AppsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
@@ -24,12 +24,9 @@ use OCP\Server;
* @package OCA\Provisioning_API\Tests
*/
class AppsControllerTest extends TestCase {
- /** @var IAppManager */
- private $appManager;
- /** @var AppsController */
- private $api;
- /** @var IUserSession */
- private $userSession;
+ private IAppManager $appManager;
+ private AppsController $api;
+ private IUserSession $userSession;
protected function setUp(): void {
parent::setUp();
@@ -38,9 +35,7 @@ class AppsControllerTest extends TestCase {
$this->groupManager = Server::get(IGroupManager::class);
$this->userSession = Server::get(IUserSession::class);
- $request = $this->getMockBuilder(IRequest::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $request = $this->createMock(IRequest::class);
$this->api = new AppsController(
'provisioning_api',
@@ -96,7 +91,7 @@ class AppsControllerTest extends TestCase {
$this->assertEquals(count($disabled), count($data['apps']));
}
-
+
public function testGetAppsInvalidFilter(): void {
$this->expectException(OCSException::class);
$this->expectExceptionCode(101);
diff --git a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
index 29b098429e8..e4f8b3af183 100644
--- a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
@@ -22,30 +22,20 @@ use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\UserInterface;
+use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
class GroupsControllerTest extends \Test\TestCase {
- /** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */
- protected $request;
- /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $userManager;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- protected $config;
- /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */
- protected $groupManager;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- protected $userSession;
- /** @var IAccountManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $accountManager;
- /** @var ISubAdmin|\PHPUnit\Framework\MockObject\MockObject */
- protected $subAdminManager;
- /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10nFactory;
- /** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */
- protected $logger;
-
- /** @var GroupsController|\PHPUnit\Framework\MockObject\MockObject */
- protected $api;
+ protected IRequest&MockObject $request;
+ protected IUserManager&MockObject $userManager;
+ protected IConfig&MockObject $config;
+ protected Manager&MockObject $groupManager;
+ protected IUserSession&MockObject $userSession;
+ protected IAccountManager&MockObject $accountManager;
+ protected ISubAdmin&MockObject $subAdminManager;
+ protected IFactory&MockObject $l10nFactory;
+ protected LoggerInterface&MockObject $logger;
+ protected GroupsController&MockObject $api;
private IRootFolder $rootFolder;
@@ -82,16 +72,12 @@ class GroupsControllerTest extends \Test\TestCase {
$this->rootFolder,
$this->logger
])
- ->setMethods(['fillStorageInfo'])
+ ->onlyMethods(['fillStorageInfo'])
->getMock();
}
- /**
- * @param string $gid
- * @return IGroup|\PHPUnit\Framework\MockObject\MockObject
- */
- private function createGroup($gid) {
- $group = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
+ private function createGroup(string $gid): IGroup&MockObject {
+ $group = $this->createMock(\OCP\IGroup::class);
$group
->method('getGID')
->willReturn($gid);
@@ -116,7 +102,7 @@ class GroupsControllerTest extends \Test\TestCase {
/**
* @param string $uid
- * @return IUser|\PHPUnit\Framework\MockObject\MockObject
+ * @return IUser&MockObject
*/
private function createUser($uid) {
$user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -165,7 +151,7 @@ class GroupsControllerTest extends \Test\TestCase {
});
}
- public function dataGetGroups() {
+ public static function dataGetGroups(): array {
return [
[null, 0, 0],
['foo', 0, 0],
@@ -177,12 +163,8 @@ class GroupsControllerTest extends \Test\TestCase {
/**
* @dataProvider dataGetGroups
- *
- * @param string|null $search
- * @param int|null $limit
- * @param int|null $offset
*/
- public function testGetGroups($search, $limit, $offset): void {
+ public function testGetGroups(?string $search, int $limit, int $offset): void {
$groups = [$this->createGroup('group1'), $this->createGroup('group2')];
$search = $search === null ? '' : $search;
@@ -509,7 +491,7 @@ class GroupsControllerTest extends \Test\TestCase {
->method('getUserGroups')
->willReturn([$group]);
- /** @var \PHPUnit\Framework\MockObject\MockObject */
+ /** @var MockObject */
$this->subAdminManager->expects($this->any())
->method('isSubAdminOfGroup')
->willReturn(false);
@@ -554,7 +536,7 @@ class GroupsControllerTest extends \Test\TestCase {
->method('getUserGroups')
->willReturn([$group]);
- /** @var \PHPUnit\Framework\MockObject\MockObject */
+ /** @var MockObject */
$this->subAdminManager->expects($this->any())
->method('isSubAdminOfGroup')
->willReturn(false);
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index 7d4f99356b3..80d6d0f6152 100644
--- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
@@ -46,41 +46,24 @@ use RuntimeException;
use Test\TestCase;
class UsersControllerTest extends TestCase {
- /** @var IUserManager|MockObject */
- protected $userManager;
- /** @var IConfig|MockObject */
- protected $config;
- /** @var Manager|MockObject */
- protected $groupManager;
- /** @var IUserSession|MockObject */
- protected $userSession;
- /** @var LoggerInterface|MockObject */
- protected $logger;
- /** @var UsersController|MockObject */
- protected $api;
- /** @var IAccountManager|MockObject */
- protected $accountManager;
- /** @var ISubAdmin|MockObject */
- protected $subAdminManager;
- /** @var IURLGenerator|MockObject */
- protected $urlGenerator;
- /** @var IRequest|MockObject */
- protected $request;
- /** @var IFactory|MockObject */
- private $l10nFactory;
- /** @var NewUserMailHelper|MockObject */
- private $newUserMailHelper;
- /** @var ISecureRandom|MockObject */
- private $secureRandom;
- /** @var RemoteWipe|MockObject */
- private $remoteWipe;
- /** @var KnownUserService|MockObject */
- private $knownUserService;
- /** @var IEventDispatcher|MockObject */
- private $eventDispatcher;
+ protected IUserManager&MockObject $userManager;
+ protected IConfig&MockObject $config;
+ protected Manager&MockObject $groupManager;
+ protected IUserSession&MockObject $userSession;
+ protected LoggerInterface&MockObject $logger;
+ protected UsersController&MockObject $api;
+ protected IAccountManager&MockObject $accountManager;
+ protected ISubAdmin&MockObject $subAdminManager;
+ protected IURLGenerator&MockObject $urlGenerator;
+ protected IRequest&MockObject $request;
+ private IFactory&MockObject $l10nFactory;
+ private NewUserMailHelper&MockObject $newUserMailHelper;
+ private ISecureRandom&MockObject $secureRandom;
+ private RemoteWipe&MockObject $remoteWipe;
+ private KnownUserService&MockObject $knownUserService;
+ private IEventDispatcher&MockObject $eventDispatcher;
private IRootFolder $rootFolder;
- /** @var IPhoneNumberUtil */
- private $phoneNumberUtil;
+ private IPhoneNumberUtil $phoneNumberUtil;
protected function setUp(): void {
parent::setUp();
@@ -449,10 +432,6 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(2))
->method('groupExists')
- ->withConsecutive(
- ['ExistingGroup'],
- ['NonExistingGroup']
- )
->willReturnMap([
['ExistingGroup', true],
['NonExistingGroup', false]
@@ -798,18 +777,20 @@ class UsersControllerTest extends TestCase {
->method('get')
->with('ExistingGroup')
->willReturn($group);
+
+ $calls = [
+ ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']],
+ ];
$this->logger
->expects($this->exactly(2))
->method('info')
- ->withConsecutive(
- ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']]
- );
+ ->willReturnCallback(function () use (&$calls) {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
- $this->assertTrue(key_exists(
- 'id',
- $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData()
- ));
+ $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData());
}
@@ -966,11 +947,10 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(2))
->method('groupExists')
- ->withConsecutive(
- ['ExistingGroup1'],
- ['ExistingGroup2']
- )
- ->willReturn(true);
+ ->willReturnMap([
+ ['ExistingGroup1', true],
+ ['ExistingGroup2', true]
+ ]);
$user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -996,24 +976,23 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(4))
->method('get')
- ->withConsecutive(
- ['ExistingGroup1'],
- ['ExistingGroup2'],
- ['ExistingGroup1'],
- ['ExistingGroup2']
- )
->willReturnMap([
['ExistingGroup1', $existingGroup1],
['ExistingGroup2', $existingGroup2]
]);
+
+ $calls = [
+ ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']],
+ ];
$this->logger
->expects($this->exactly(3))
->method('info')
- ->withConsecutive(
- ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']]
- );
+ ->willReturnCallback(function () use (&$calls) {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
$subAdminManager = $this->getMockBuilder('OC\SubAdmin')
->disableOriginalConstructor()->getMock();
$this->groupManager
@@ -1023,16 +1002,12 @@ class UsersControllerTest extends TestCase {
$subAdminManager
->expects($this->exactly(2))
->method('isSubAdminOfGroup')
- ->withConsecutive(
- [$loggedInUser, $existingGroup1],
- [$loggedInUser, $existingGroup2]
- )
- ->willReturn(true);
+ ->willReturnMap([
+ [$loggedInUser, $existingGroup1, true],
+ [$loggedInUser, $existingGroup2, true],
+ ]);
- $this->assertTrue(key_exists(
- 'id',
- $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData()
- ));
+ $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData());
}
@@ -1541,7 +1516,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID']));
}
- public function dataSearchByPhoneNumbers(): array {
+ public static function dataSearchByPhoneNumbers(): array {
return [
'Invalid country' => ['Not a country code', ['12345' => ['NaN']], 400, null, null, []],
'No number to search' => ['DE', ['12345' => ['NaN']], 200, null, null, []],
@@ -1556,10 +1531,6 @@ class UsersControllerTest extends TestCase {
/**
* @dataProvider dataSearchByPhoneNumbers
- * @param string $location
- * @param array $search
- * @param int $status
- * @param array $expected
*/
public function testSearchByPhoneNumbers(string $location, array $search, int $status, ?array $searchUsers, ?array $userMatches, array $expected): void {
$knownTo = 'knownTo';
@@ -1870,7 +1841,7 @@ class UsersControllerTest extends TestCase {
$this->api->editUser('UserToEdit', 'email', 'demo.org');
}
- public function selfEditChangePropertyProvider() {
+ public static function selfEditChangePropertyProvider(): array {
return [
[IAccountManager::PROPERTY_TWITTER, '@oldtwitter', '@newtwitter'],
[IAccountManager::PROPERTY_FEDIVERSE, '@oldFediverse@floss.social', '@newFediverse@floss.social'],
@@ -2294,7 +2265,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData());
}
- public function dataEditUserSelfEditChangeLanguageButForced() {
+ public static function dataEditUserSelfEditChangeLanguageButForced(): array {
return [
['de'],
[true],
@@ -3942,11 +3913,10 @@ class UsersControllerTest extends TestCase {
$api->expects($this->exactly(2))
->method('getUserData')
- ->withConsecutive(
- ['uid', false],
- ['currentuser', true],
- )
- ->willReturn($expected);
+ ->willReturnMap([
+ ['uid', false, $expected],
+ ['currentuser', true, $expected],
+ ]);
$this->assertSame($expected, $api->getUser('uid')->getData());
@@ -4263,7 +4233,7 @@ class UsersControllerTest extends TestCase {
}
- public function dataGetEditableFields() {
+ public static function dataGetEditableFields(): array {
return [
[false, true, ISetDisplayNameBackend::class, [
IAccountManager::PROPERTY_EMAIL,
@@ -4388,10 +4358,6 @@ class UsersControllerTest extends TestCase {
/**
* @dataProvider dataGetEditableFields
- *
- * @param bool $allowedToChangeDisplayName
- * @param string $userBackend
- * @param array $expected
*/
public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $allowedToChangeEmail, string $userBackend, array $expected): void {
$this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => match ($key) {
diff --git a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
index d097febb04f..d40aab90d66 100644
--- a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
+++ b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
@@ -24,34 +24,29 @@ class ProvisioningApiMiddlewareTest extends TestCase {
$this->reflector = $this->createMock(IControllerMethodReflector::class);
}
- public function dataAnnotation() {
+ public static function dataAnnotation(): array {
return [
[false, false, false, false, false],
- [false, false, true, false, false],
- [false, true, true, false, false],
- [ true, false, false, false, true],
- [ true, false, true, false, false],
- [ true, true, false, false, false],
- [ true, true, true, false, false],
+ [false, false, true, false, false],
+ [false, true, true, false, false],
+ [true, false, false, false, true],
+ [true, false, true, false, false],
+ [true, true, false, false, false],
+ [true, true, true, false, false],
[false, false, false, true, false],
- [false, false, true, true, false],
- [false, true, true, true, false],
- [ true, false, false, true, false],
- [ true, false, true, true, false],
- [ true, true, false, true, false],
- [ true, true, true, true, false],
+ [false, false, true, true, false],
+ [false, true, true, true, false],
+ [true, false, false, true, false],
+ [true, false, true, true, false],
+ [true, true, false, true, false],
+ [true, true, true, true, false],
];
}
/**
* @dataProvider dataAnnotation
- *
- * @param bool $subadminRequired
- * @param bool $isAdmin
- * @param bool $isSubAdmin
- * @param bool $shouldThrowException
*/
- public function testBeforeController($subadminRequired, $isAdmin, $isSubAdmin, $hasSettingAuthorizationAnnotation, $shouldThrowException): void {
+ public function testBeforeController(bool $subadminRequired, bool $isAdmin, bool $isSubAdmin, bool $hasSettingAuthorizationAnnotation, bool $shouldThrowException): void {
$middleware = new ProvisioningApiMiddleware(
$this->reflector,
$isAdmin,
@@ -80,7 +75,7 @@ class ProvisioningApiMiddlewareTest extends TestCase {
}
}
- public function dataAfterException() {
+ public static function dataAfterException(): array {
return [
[new NotSubAdminException(), false],
[new \Exception('test', 42), true],
@@ -89,11 +84,8 @@ class ProvisioningApiMiddlewareTest extends TestCase {
/**
* @dataProvider dataAfterException
- *
- * @param \Exception $e
- * @param bool $forwared
*/
- public function testAfterException(\Exception $exception, $forwared): void {
+ public function testAfterException(\Exception $exception, bool $forwared): void {
$middleware = new ProvisioningApiMiddleware(
$this->reflector,
false,
diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js
index 66150d7a47b..1b90e97094c 100644
--- a/apps/settings/l10n/de.js
+++ b/apps/settings/l10n/de.js
@@ -122,7 +122,7 @@ OC.L10N.register(
"Mobile & desktop" : "Mobil & Desktop",
"Email server" : "E-Mail-Server",
"Mail Providers" : "E-Mail-Anbieter",
- "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
+ "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
"Send emails using" : "E-Mails senden mittels",
"User's email account" : "E-Mail-Konto des Benutzers",
"System email account" : "System-E-Mail-Konto",
@@ -371,14 +371,14 @@ OC.L10N.register(
"Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen",
"Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich",
"Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden",
- "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken",
+ "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken",
"Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)",
- "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen",
- "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken",
- "Groups allowed to share" : "Gruppen, die teilen dürfen",
+ "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen",
+ "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben",
+ "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen",
"Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen",
"Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.",
- "Set default expiration date for internal shares" : "Lege das Standardablaufdatum für interne Freigaben fest",
+ "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen",
"Expire shares after x days" : "Freigaben laufen nach x Tagen ab",
@@ -393,7 +393,7 @@ OC.L10N.register(
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.",
"Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken",
"Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.",
- "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und bei gleicher Gruppenzugehörigkeit)",
+ "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ",
"Disclaimer text" : "Haftungsausschlusstext",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -549,7 +549,7 @@ OC.L10N.register(
"The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.",
"The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten hierzu in der {linkstart}PHP-Dokumentation{linkend}.",
"Unable to update background job mode" : "Hintergrund-Job-Modus kann nicht aktualisiert werden",
- "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.",
+ "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.",
"Last job execution ran {time}. Something seems wrong." : "Der letzte Job lief {time}. Etwas scheint nicht zu stimmen.",
"Last job ran {relativeTime}." : "Der letzte Job lief {relativeTime}.",
"Background job did not run yet!" : "Hintergrund-Job wurde bislang nicht ausgeführt!",
@@ -870,7 +870,7 @@ OC.L10N.register(
"Save" : "Speichern",
"Test and verify email settings" : "Testen und überprüfen der E-Mail-Einstellungen",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
- "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Performance deiner Instanz ist es wichtig, dass alles richtig konfiguriert ist. Um dir dabei zu helfen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen kannst du der verlinkten Dokumentation entnehmen.",
+ "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung deiner Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um dich dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen findest du in der verlinkten Dokumentation.",
"All checks passed." : "Alle Überprüfungen bestanden.",
"There are some errors regarding your setup." : "Es gibt einige Fehler in der Systemkonfiguration.",
"There are some warnings regarding your setup." : "Es gibt einige Warnungen in der Systemkonfiguration.",
diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json
index c25dbf707bd..19b887b7028 100644
--- a/apps/settings/l10n/de.json
+++ b/apps/settings/l10n/de.json
@@ -120,7 +120,7 @@
"Mobile & desktop" : "Mobil & Desktop",
"Email server" : "E-Mail-Server",
"Mail Providers" : "E-Mail-Anbieter",
- "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
+ "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
"Send emails using" : "E-Mails senden mittels",
"User's email account" : "E-Mail-Konto des Benutzers",
"System email account" : "System-E-Mail-Konto",
@@ -369,14 +369,14 @@
"Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen",
"Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich",
"Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden",
- "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken",
+ "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken",
"Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)",
- "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen",
- "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken",
- "Groups allowed to share" : "Gruppen, die teilen dürfen",
+ "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen",
+ "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben",
+ "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen",
"Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen",
"Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.",
- "Set default expiration date for internal shares" : "Lege das Standardablaufdatum für interne Freigaben fest",
+ "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen",
"Expire shares after x days" : "Freigaben laufen nach x Tagen ab",
@@ -391,7 +391,7 @@
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.",
"Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken",
"Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.",
- "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der vollständigen Namen oder die E-Mail-Adresse eingeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und bei gleicher Gruppenzugehörigkeit)",
+ "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ",
"Disclaimer text" : "Haftungsausschlusstext",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -547,7 +547,7 @@
"The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.",
"The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten hierzu in der {linkstart}PHP-Dokumentation{linkend}.",
"Unable to update background job mode" : "Hintergrund-Job-Modus kann nicht aktualisiert werden",
- "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.",
+ "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden sich in der Dokumentation.",
"Last job execution ran {time}. Something seems wrong." : "Der letzte Job lief {time}. Etwas scheint nicht zu stimmen.",
"Last job ran {relativeTime}." : "Der letzte Job lief {relativeTime}.",
"Background job did not run yet!" : "Hintergrund-Job wurde bislang nicht ausgeführt!",
@@ -868,7 +868,7 @@
"Save" : "Speichern",
"Test and verify email settings" : "Testen und überprüfen der E-Mail-Einstellungen",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
- "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Performance deiner Instanz ist es wichtig, dass alles richtig konfiguriert ist. Um dir dabei zu helfen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen kannst du der verlinkten Dokumentation entnehmen.",
+ "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung deiner Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um dich dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen findest du in der verlinkten Dokumentation.",
"All checks passed." : "Alle Überprüfungen bestanden.",
"There are some errors regarding your setup." : "Es gibt einige Fehler in der Systemkonfiguration.",
"There are some warnings regarding your setup." : "Es gibt einige Warnungen in der Systemkonfiguration.",
diff --git a/apps/settings/l10n/de_DE.js b/apps/settings/l10n/de_DE.js
index 5388ff52529..002bd98e591 100644
--- a/apps/settings/l10n/de_DE.js
+++ b/apps/settings/l10n/de_DE.js
@@ -122,7 +122,7 @@ OC.L10N.register(
"Mobile & desktop" : "Mobil & Desktop",
"Email server" : "E-Mail-Server",
"Mail Providers" : "E-Mail-Anbieter",
- "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
+ "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
"Send emails using" : "E-Mails senden mittels",
"User's email account" : "E-Mail-Konto des Benutzers",
"System email account" : "System-E-Mail-Konto",
@@ -371,14 +371,14 @@ OC.L10N.register(
"Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen",
"Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich",
"Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden",
- "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken",
- "Allow sharing for everyone (default)" : "Teilen für jedermann erlauben (Standard)",
- "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen",
- "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken",
- "Groups allowed to share" : "Gruppen, die teilen dürfen",
+ "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken",
+ "Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)",
+ "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen",
+ "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben",
+ "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen",
"Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen",
"Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.",
- "Set default expiration date for internal shares" : "Legen Sie das Standardablaufdatum für interne Freigaben fest",
+ "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen",
"Expire shares after x days" : "Freigaben laufen nach x Tagen ab",
@@ -393,7 +393,7 @@ OC.L10N.register(
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.",
"Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken",
"Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.",
- "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der volle Namen oder E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)",
+ "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Haftungsausschluss auf der öffentlichen Upload-Seite anzeigen (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ",
"Disclaimer text" : "Haftungsausschlusstext",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -549,7 +549,7 @@ OC.L10N.register(
"The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.",
"The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten finden Sie in der {linkstart}PHP-Dokumentation{linkend}.",
"Unable to update background job mode" : "Hintergrund-Aufgaben-Modus kann nicht aktualisiert werden",
- "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.",
+ "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.",
"Last job execution ran {time}. Something seems wrong." : "Die letzte Aufgaben-Ausführung lief {time}. Etwas scheint falsch zu sein.",
"Last job ran {relativeTime}." : "Die letzte Aufgabe lief {relativeTime}.",
"Background job did not run yet!" : "Hintergrund-Aufgabe wurde bislang nicht ausgeführt!",
@@ -789,7 +789,7 @@ OC.L10N.register(
"Location" : "Ort",
"Profile picture" : "Profilbild",
"About" : "Über",
- "Date of birth" : "Geburtsdatum:",
+ "Date of birth" : "Geburtsdatum",
"Full name" : "Vollständiger Name",
"Additional email" : "Zusätzliche E-Mail-Adresse",
"Fediverse (e.g. Mastodon)" : "Fediverse (wie z. B. Mastodon)",
@@ -870,7 +870,7 @@ OC.L10N.register(
"Save" : "Speichern",
"Test and verify email settings" : "Testen und Überprüfen der E-Mail-Einstellungen",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
- "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Geschwindigkeit Ihrer Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Ihnen hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.",
+ "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung Ihrer Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um Sie dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.",
"All checks passed." : "Alle Überprüfungen bestanden.",
"There are some errors regarding your setup." : "Es gibt einige Fehler in Ihrer Systemkonfiguration.",
"There are some warnings regarding your setup." : "Es gibt einige Warnungen zu Ihrer Systemkonfiguration.",
diff --git a/apps/settings/l10n/de_DE.json b/apps/settings/l10n/de_DE.json
index 0f35dc26f55..4d040cf5a19 100644
--- a/apps/settings/l10n/de_DE.json
+++ b/apps/settings/l10n/de_DE.json
@@ -120,7 +120,7 @@
"Mobile & desktop" : "Mobil & Desktop",
"Email server" : "E-Mail-Server",
"Mail Providers" : "E-Mail-Anbieter",
- "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Provider ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
+ "Mail provider enables sending emails directly through the user's personal email account. At present, this functionality is limited to calendar invitations. It requires Nextcloud Mail 4.1 and an email account in Nextcloud Mail that matches the user's email address in Nextcloud." : "Der E-Mail-Anbieter ermöglicht das Senden von E-Mails direkt über das persönliche E-Mail-Konto des Benutzers. Derzeit ist diese Funktion auf Kalendereinladungen beschränkt. Es erfordert Nextcloud Mail 4.1 und ein E-Mail-Konto in Nextcloud Mail, das mit der E-Mail-Adresse des Benutzers in Nextcloud übereinstimmt.",
"Send emails using" : "E-Mails senden mittels",
"User's email account" : "E-Mail-Konto des Benutzers",
"System email account" : "System-E-Mail-Konto",
@@ -369,14 +369,14 @@
"Allow users to set custom share link tokens" : "Benutzern erlauben, benutzerdefinierte Freigabelink-Token festzulegen",
"Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Freigaben mit benutzerdefinierten Token sind auch noch nach der Deaktivierung dieser Einstellung zugänglich",
"Shares with guessable tokens may be accessed easily" : "Auf Freigaben mit erratbaren Token kann u. U. leicht zugegriffen werden",
- "Limit sharing based on groups" : "Freigeben basierend auf Gruppen beschränken",
- "Allow sharing for everyone (default)" : "Teilen für jedermann erlauben (Standard)",
- "Exclude some groups from sharing" : "Einige Gruppen vom Teilen ausschließen",
- "Limit sharing to some groups" : "Teilen auf einige Gruppen beschränken",
- "Groups allowed to share" : "Gruppen, die teilen dürfen",
+ "Limit sharing based on groups" : "Freigaben nach Gruppen einschränken",
+ "Allow sharing for everyone (default)" : "Teilen für alle erlauben (Standard)",
+ "Exclude some groups from sharing" : "Bestimmte Gruppen vom Teilen ausschließen",
+ "Limit sharing to some groups" : "Teilen für bestimmte Gruppen erlauben",
+ "Groups allowed to share" : "Für die Linkfreigabe zugelassene Gruppen",
"Groups excluded from sharing" : "Von der Linkfreigabe ausgeschlossene Gruppen",
"Not allowed groups will still be able to receive shares, but not to initiate them." : "Nicht zugelassene Gruppen können zwar weiterhin Freigaben empfangen, aber nicht erstellen.",
- "Set default expiration date for internal shares" : "Legen Sie das Standardablaufdatum für interne Freigaben fest",
+ "Set default expiration date for internal shares" : "Standardablaufdatum für interne Freigaben festlegen",
"Enforce expiration date" : "Ablaufdatum erzwingen",
"Default expiration time of new shares in days" : "Standardablaufzeit neuer Freigaben in Tagen",
"Expire shares after x days" : "Freigaben laufen nach x Tagen ab",
@@ -391,7 +391,7 @@
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Wenn die Autovervollständigung \"gleiche Gruppe\" und \"Rufnummernintegration\" aktiviert ist, reicht eine Übereinstimmung in einem der beiden Bereiche aus, um den Benutzer anzuzeigen.",
"Restrict account name autocompletion and system address book access to users within the same groups" : "Die automatische Vervollständigung von Kontonamen und den Zugriff auf das Systemadressbuch auf Benutzer innerhalb derselben Gruppen beschränken",
"Restrict account name autocompletion to users based on phone number integration" : "Die automatische Vervollständigung des Kontonamens auf Benutzer beschränken, die auf der Integration von Telefonnummern basieren.",
- "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Ermöglicht die automatische Vervollständigung, wenn der volle Namen oder E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)",
+ "Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Die automatische Vervollständigung ermöglichen, wenn der vollständige Name oder die E-Mail-Adresse eingegeben wird (ignoriert fehlende Telefonbuchübereinstimmungen und gleiche Gruppenzugehörigkeit)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Haftungsausschluss auf der öffentlichen Upload-Seite anzeigen (Wird nur gezeigt, wenn die Dateiliste nicht angezeigt wird.) ",
"Disclaimer text" : "Haftungsausschlusstext",
"This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
@@ -547,7 +547,7 @@
"The cron.php needs to be executed by the system account \"{user}\"." : "Die cron.php muss von dem Systemkonto \"{user}\" ausgeführt werden.",
"The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "Die PHP-POSIX-Erweiterung ist erforderlich. Weitere Einzelheiten finden Sie in der {linkstart}PHP-Dokumentation{linkend}.",
"Unable to update background job mode" : "Hintergrund-Aufgaben-Modus kann nicht aktualisiert werden",
- "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrundjobs richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.",
+ "For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Damit der Server ordnungsgemäß funktioniert, ist es wichtig, Hintergrund-Aufgaben richtig zu konfigurieren. Cron ist die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.",
"Last job execution ran {time}. Something seems wrong." : "Die letzte Aufgaben-Ausführung lief {time}. Etwas scheint falsch zu sein.",
"Last job ran {relativeTime}." : "Die letzte Aufgabe lief {relativeTime}.",
"Background job did not run yet!" : "Hintergrund-Aufgabe wurde bislang nicht ausgeführt!",
@@ -787,7 +787,7 @@
"Location" : "Ort",
"Profile picture" : "Profilbild",
"About" : "Über",
- "Date of birth" : "Geburtsdatum:",
+ "Date of birth" : "Geburtsdatum",
"Full name" : "Vollständiger Name",
"Additional email" : "Zusätzliche E-Mail-Adresse",
"Fediverse (e.g. Mastodon)" : "Fediverse (wie z. B. Mastodon)",
@@ -868,7 +868,7 @@
"Save" : "Speichern",
"Test and verify email settings" : "Testen und Überprüfen der E-Mail-Einstellungen",
"Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen",
- "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Geschwindigkeit Ihrer Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Ihnen hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.",
+ "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the linked documentation for more information." : "Für die Sicherheit und Leistung Ihrer Instanz ist es von großer Bedeutung, dass alles richtig konfiguriert ist. Um Sie dabei zu unterstützen, werden einige automatische Prüfungen durchgeführt. Weitere Informationen finden Sie in der verlinkten Dokumentation.",
"All checks passed." : "Alle Überprüfungen bestanden.",
"There are some errors regarding your setup." : "Es gibt einige Fehler in Ihrer Systemkonfiguration.",
"There are some warnings regarding your setup." : "Es gibt einige Warnungen zu Ihrer Systemkonfiguration.",
diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js
index 38ccba9634c..56e7508f399 100644
--- a/apps/settings/l10n/fr.js
+++ b/apps/settings/l10n/fr.js
@@ -223,7 +223,7 @@ OC.L10N.register(
"MySQL row format" : "MySQL format row ",
"You are not using MySQL" : "Vous n'utilisez pas MySQL",
"None of your tables use ROW_FORMAT=Compressed" : "Aucune de vos tables n'utilise ROW_FORMAT=Compressed",
- "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de donnéées. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s",
+ "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de données. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s",
"MySQL Unicode support" : "Compatibilité Unicode MySQL",
"MySQL is used as database and does support 4-byte characters" : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL." : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets. Pour être capable de gérer les caractères sur 4 octets (comme les émojis) sans problème, par exemple, dans les noms de fichiers ou les commentaires, il est recommandé d'activer la compatibilité 4 octets dans MySQL.",
diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json
index 5b5d67102f7..2b5a1e5bd65 100644
--- a/apps/settings/l10n/fr.json
+++ b/apps/settings/l10n/fr.json
@@ -221,7 +221,7 @@
"MySQL row format" : "MySQL format row ",
"You are not using MySQL" : "Vous n'utilisez pas MySQL",
"None of your tables use ROW_FORMAT=Compressed" : "Aucune de vos tables n'utilise ROW_FORMAT=Compressed",
- "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de donnéées. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s",
+ "Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s." : "Format de ligne incorrect trouvé dans votre base de données. ROW_FORMAT=Dynamic offre les meilleures performances de base de données pour Nextcloud. Veuillez modifier le format de ligne dans la liste: %s",
"MySQL Unicode support" : "Compatibilité Unicode MySQL",
"MySQL is used as database and does support 4-byte characters" : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL." : "MySQL est utilisé comme base de données et n'est pas compatible avec les caractères sur 4 octets. Pour être capable de gérer les caractères sur 4 octets (comme les émojis) sans problème, par exemple, dans les noms de fichiers ou les commentaires, il est recommandé d'activer la compatibilité 4 octets dans MySQL.",
diff --git a/apps/settings/l10n/it.js b/apps/settings/l10n/it.js
index 5fd40d06340..95f012f9599 100644
--- a/apps/settings/l10n/it.js
+++ b/apps/settings/l10n/it.js
@@ -256,6 +256,7 @@ OC.L10N.register(
"OPcache is not working as it should, opcache_get_status() returns false, please check configuration." : "OPcache non funziona come dovrebbe, opcache_get_status() restituisce false, controlla la configurazione.",
"The maximum number of OPcache keys is nearly exceeded. To assure that all scripts can be kept in the cache, it is recommended to apply \"opcache.max_accelerated_files\" to your PHP configuration with a value higher than \"%s\"." : "Il numero massimo di chiavi OPcache è stato quasi superato. Per garantire che tutti gli script possano essere mantenuti nella cache, si consiglia di applicare \"opcache.max_accelerated_files\" alla configurazione PHP con un valore superiore a \"%s\".",
"The OPcache buffer is nearly full. To assure that all scripts can be hold in cache, it is recommended to apply \"opcache.memory_consumption\" to your PHP configuration with a value higher than \"%s\"." : "Il buffer OPcache è quasi pieno. Per garantire che tutti gli script possano essere conservati nella cache, si consiglia di applicare \"opcache.memory_consumption\" alla configurazione PHP con un valore superiore a \"%s\".",
+ "The PHP OPcache module is not properly configured. %s." : "Il modulo PHP OPcache non è correttamente configurato. %s.",
"Correctly configured" : "Configurato correttamente",
"PHP version" : "Versione PHP",
"You are currently running PHP %s." : "Attualmente stai usando PHP %s.",
@@ -304,7 +305,16 @@ OC.L10N.register(
"Enforce password protection" : "Imponi la protezione con password",
"Exclude groups from password requirements" : "Escludi gruppi dai requisiti della password",
"Exclude groups from creating link shares" : "Escludi gruppi dalla creazione dei collegamenti di condivisione",
+ "Allow users to set custom share link tokens" : "Consenti agli utenti di impostare token di collegamento personalizzati",
+ "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Le condivisioni con token personalizzati continueranno a essere accessibili dopo aver disabilitato questa impostazione",
+ "Shares with guessable tokens may be accessed easily" : "Le condivisioni con token indovinabili sono facilmente accessibili",
+ "Limit sharing based on groups" : "Limita la condivisione in base ai gruppi",
+ "Exclude some groups from sharing" : "Escludi alcuni gruppi dalla condivisione",
+ "Limit sharing to some groups" : "Limita la condivisione ad alcuni gruppi",
+ "Groups allowed to share" : "Gruppi autorizzati a condividere",
"Groups excluded from sharing" : "Gruppi esclusi dalla condivisione",
+ "Not allowed groups will still be able to receive shares, but not to initiate them." : "I gruppi non autorizzati potranno comunque ricevere condivisioni, ma non avviarle.",
+ "Set default expiration date for internal shares" : "Imposta la data di scadenza predefinita per le condivisioni interne",
"Enforce expiration date" : "Forza la data di scadenza",
"Default expiration time of new shares in days" : "Scadenza predefinita delle nuove condivisioni in giorni",
"Expire shares after x days" : "Scadenza delle condivisioni dopo x giorni",
@@ -315,6 +325,7 @@ OC.L10N.register(
"Set default expiration date for shares via link or mail" : "Imposta la data di scadenza predefinita per le condivisioni tramite link o posta",
"Default expiration time of shares in days" : "Scadenza predefinita delle condivisioni in giorni",
"Privacy settings for sharing" : "Impostazioni sulla privacy per la condivisione",
+ "Allow account name autocompletion in share dialog and allow access to the system address book" : "Consenti il ​​completamento automatico del nome dell'account nella finestra di dialogo di condivisione e consenti l'accesso alla rubrica di sistema",
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se completamento di \"stesso gruppo\" e \"integrazione numero di telefono\" sono attivi, una corrispondenza in uno dei due è sufficiente per mostrare l'utente.",
"Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Consenti il completamento automatico quando inserisci il nome completo o l'indirizzo email (ignorando la corrispondenza della rubrica mancante e l'appartenenza allo stesso gruppo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostra il testo della liberatoria sulla pagina di caricamento del collegamento pubblico (visualizzato solo quando l'elenco dei file è nascosto)",
@@ -348,6 +359,7 @@ OC.L10N.register(
"No apps found for your version" : "Nessuna applicazione trovata per la tua versione",
"_%n app has an update available_::_%n apps have an update available_" : ["%n applicazione ha un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile"],
"_Update_::_Update all_" : ["Aggiorna","Aggiorna","Aggiorna tutto"],
+ "Failed to load groups" : "Impossibile caricare i gruppi",
"Failed to create group" : "Creazione gruppo fallita",
"Create group" : "Crea gruppo",
"Group name" : "Nome del gruppo",
@@ -423,6 +435,7 @@ OC.L10N.register(
"Password" : "Password",
"Show QR code for mobile apps" : "Mostra il codice QR per le applicazioni mobili",
"Use system cron service to call the cron.php file every 5 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 5 minuti.",
+ "The cron.php needs to be executed by the system account \"{user}\"." : "Il cron.php deve essere eseguito dall'account di sistema \"{user}\".",
"The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "È necessaria l'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per maggiori dettagli.",
"Unable to update background job mode" : "Impossibile aggiornare la modalità delle operazioni in background",
"For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Per un buon funzionamento del server, è importante configurare le operazioni in background correttamente. \"Cron\" è l'impostazione consigliata. Vedi la documentazione per ulteriori informazioni.",
@@ -523,12 +536,14 @@ OC.L10N.register(
"Password change is disabled because the master key is disabled" : "La modifica della password è disabilitata poiché la chiave principale è disabilitata",
"Loading accounts …" : "Caricamento account in corso...",
"Manager" : "Responsabile",
+ "Failed to search groups" : "Impossibile cercare i gruppi",
"New account" : "Nuovo account",
"Display name" : "Nome visualizzato",
"Either password or email is required" : "La password o l'email è necessaria",
"Password (required)" : "Password (richiesta)",
"Email (required)" : "Email (richiesta)",
"Email" : "Posta elettronica",
+ "Member of the following groups" : "Membro dei seguenti gruppi",
"Quota" : "Quote",
"Language" : "Lingua",
"Set default language" : "Imposta lingua predefinita",
diff --git a/apps/settings/l10n/it.json b/apps/settings/l10n/it.json
index 7bc04158924..16d6b817633 100644
--- a/apps/settings/l10n/it.json
+++ b/apps/settings/l10n/it.json
@@ -254,6 +254,7 @@
"OPcache is not working as it should, opcache_get_status() returns false, please check configuration." : "OPcache non funziona come dovrebbe, opcache_get_status() restituisce false, controlla la configurazione.",
"The maximum number of OPcache keys is nearly exceeded. To assure that all scripts can be kept in the cache, it is recommended to apply \"opcache.max_accelerated_files\" to your PHP configuration with a value higher than \"%s\"." : "Il numero massimo di chiavi OPcache è stato quasi superato. Per garantire che tutti gli script possano essere mantenuti nella cache, si consiglia di applicare \"opcache.max_accelerated_files\" alla configurazione PHP con un valore superiore a \"%s\".",
"The OPcache buffer is nearly full. To assure that all scripts can be hold in cache, it is recommended to apply \"opcache.memory_consumption\" to your PHP configuration with a value higher than \"%s\"." : "Il buffer OPcache è quasi pieno. Per garantire che tutti gli script possano essere conservati nella cache, si consiglia di applicare \"opcache.memory_consumption\" alla configurazione PHP con un valore superiore a \"%s\".",
+ "The PHP OPcache module is not properly configured. %s." : "Il modulo PHP OPcache non è correttamente configurato. %s.",
"Correctly configured" : "Configurato correttamente",
"PHP version" : "Versione PHP",
"You are currently running PHP %s." : "Attualmente stai usando PHP %s.",
@@ -302,7 +303,16 @@
"Enforce password protection" : "Imponi la protezione con password",
"Exclude groups from password requirements" : "Escludi gruppi dai requisiti della password",
"Exclude groups from creating link shares" : "Escludi gruppi dalla creazione dei collegamenti di condivisione",
+ "Allow users to set custom share link tokens" : "Consenti agli utenti di impostare token di collegamento personalizzati",
+ "Shares with custom tokens will continue to be accessible after this setting has been disabled" : "Le condivisioni con token personalizzati continueranno a essere accessibili dopo aver disabilitato questa impostazione",
+ "Shares with guessable tokens may be accessed easily" : "Le condivisioni con token indovinabili sono facilmente accessibili",
+ "Limit sharing based on groups" : "Limita la condivisione in base ai gruppi",
+ "Exclude some groups from sharing" : "Escludi alcuni gruppi dalla condivisione",
+ "Limit sharing to some groups" : "Limita la condivisione ad alcuni gruppi",
+ "Groups allowed to share" : "Gruppi autorizzati a condividere",
"Groups excluded from sharing" : "Gruppi esclusi dalla condivisione",
+ "Not allowed groups will still be able to receive shares, but not to initiate them." : "I gruppi non autorizzati potranno comunque ricevere condivisioni, ma non avviarle.",
+ "Set default expiration date for internal shares" : "Imposta la data di scadenza predefinita per le condivisioni interne",
"Enforce expiration date" : "Forza la data di scadenza",
"Default expiration time of new shares in days" : "Scadenza predefinita delle nuove condivisioni in giorni",
"Expire shares after x days" : "Scadenza delle condivisioni dopo x giorni",
@@ -313,6 +323,7 @@
"Set default expiration date for shares via link or mail" : "Imposta la data di scadenza predefinita per le condivisioni tramite link o posta",
"Default expiration time of shares in days" : "Scadenza predefinita delle condivisioni in giorni",
"Privacy settings for sharing" : "Impostazioni sulla privacy per la condivisione",
+ "Allow account name autocompletion in share dialog and allow access to the system address book" : "Consenti il ​​completamento automatico del nome dell'account nella finestra di dialogo di condivisione e consenti l'accesso alla rubrica di sistema",
"If autocompletion \"same group\" and \"phone number integration\" are enabled a match in either is enough to show the user." : "Se completamento di \"stesso gruppo\" e \"integrazione numero di telefono\" sono attivi, una corrispondenza in uno dei due è sufficiente per mostrare l'utente.",
"Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)" : "Consenti il completamento automatico quando inserisci il nome completo o l'indirizzo email (ignorando la corrispondenza della rubrica mancante e l'appartenenza allo stesso gruppo)",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Mostra il testo della liberatoria sulla pagina di caricamento del collegamento pubblico (visualizzato solo quando l'elenco dei file è nascosto)",
@@ -346,6 +357,7 @@
"No apps found for your version" : "Nessuna applicazione trovata per la tua versione",
"_%n app has an update available_::_%n apps have an update available_" : ["%n applicazione ha un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile","%n applicazioni hanno un aggiornamento disponibile"],
"_Update_::_Update all_" : ["Aggiorna","Aggiorna","Aggiorna tutto"],
+ "Failed to load groups" : "Impossibile caricare i gruppi",
"Failed to create group" : "Creazione gruppo fallita",
"Create group" : "Crea gruppo",
"Group name" : "Nome del gruppo",
@@ -421,6 +433,7 @@
"Password" : "Password",
"Show QR code for mobile apps" : "Mostra il codice QR per le applicazioni mobili",
"Use system cron service to call the cron.php file every 5 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 5 minuti.",
+ "The cron.php needs to be executed by the system account \"{user}\"." : "Il cron.php deve essere eseguito dall'account di sistema \"{user}\".",
"The PHP POSIX extension is required. See {linkstart}PHP documentation{linkend} for more details." : "È necessaria l'estensione POSIX di PHP. Vedi la {linkstart}documentazione di PHP{linkend} per maggiori dettagli.",
"Unable to update background job mode" : "Impossibile aggiornare la modalità delle operazioni in background",
"For the server to work properly, it's important to configure background jobs correctly. Cron is the recommended setting. Please see the documentation for more information." : "Per un buon funzionamento del server, è importante configurare le operazioni in background correttamente. \"Cron\" è l'impostazione consigliata. Vedi la documentazione per ulteriori informazioni.",
@@ -521,12 +534,14 @@
"Password change is disabled because the master key is disabled" : "La modifica della password è disabilitata poiché la chiave principale è disabilitata",
"Loading accounts …" : "Caricamento account in corso...",
"Manager" : "Responsabile",
+ "Failed to search groups" : "Impossibile cercare i gruppi",
"New account" : "Nuovo account",
"Display name" : "Nome visualizzato",
"Either password or email is required" : "La password o l'email è necessaria",
"Password (required)" : "Password (richiesta)",
"Email (required)" : "Email (richiesta)",
"Email" : "Posta elettronica",
+ "Member of the following groups" : "Membro dei seguenti gruppi",
"Quota" : "Quote",
"Language" : "Lingua",
"Set default language" : "Imposta lingua predefinita",
diff --git a/apps/settings/tests/Activity/SecurityFilterTest.php b/apps/settings/tests/Activity/SecurityFilterTest.php
index f3f94df3d21..22ef03816d3 100644
--- a/apps/settings/tests/Activity/SecurityFilterTest.php
+++ b/apps/settings/tests/Activity/SecurityFilterTest.php
@@ -12,15 +12,9 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class SecurityFilterTest extends TestCase {
-
- /** @var IURLGenerator|MockObject */
- private $urlGenerator;
-
- /** @var IL10N|MockObject */
- private $l10n;
-
- /** @var SecurityFilter */
- private $filter;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IL10N&MockObject $l10n;
+ private SecurityFilter $filter;
protected function setUp(): void {
parent::setUp();
diff --git a/apps/settings/tests/Activity/SecurityProviderTest.php b/apps/settings/tests/Activity/SecurityProviderTest.php
index 35526995a67..1687f116871 100644
--- a/apps/settings/tests/Activity/SecurityProviderTest.php
+++ b/apps/settings/tests/Activity/SecurityProviderTest.php
@@ -16,27 +16,19 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class SecurityProviderTest extends TestCase {
-
- /** @var IFactory|MockObject */
- private $l10n;
-
- /** @var IURLGenerator|MockObject */
- private $urlGenerator;
-
- /** @var IManager|MockObject */
- private $activityManager;
-
- /** @var SecurityProvider */
- private $provider;
+ private IFactory&MockObject $l10nFactory;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IManager&MockObject $activityManager;
+ private SecurityProvider $provider;
protected function setUp(): void {
parent::setUp();
- $this->l10n = $this->createMock(IFactory::class);
+ $this->l10nFactory = $this->createMock(IFactory::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->activityManager = $this->createMock(IManager::class);
- $this->provider = new SecurityProvider($this->l10n, $this->urlGenerator, $this->activityManager);
+ $this->provider = new SecurityProvider($this->l10nFactory, $this->urlGenerator, $this->activityManager);
}
public function testParseUnrelated(): void {
@@ -50,7 +42,7 @@ class SecurityProviderTest extends TestCase {
$this->provider->parse($lang, $event);
}
- public function subjectData() {
+ public static function subjectData(): array {
return [
['twofactor_success'],
['twofactor_failed'],
@@ -60,7 +52,7 @@ class SecurityProviderTest extends TestCase {
/**
* @dataProvider subjectData
*/
- public function testParse($subject): void {
+ public function testParse(string $subject): void {
$lang = 'ru';
$event = $this->createMock(IEvent::class);
$l = $this->createMock(IL10N::class);
@@ -68,7 +60,7 @@ class SecurityProviderTest extends TestCase {
$event->expects($this->once())
->method('getType')
->willReturn('security');
- $this->l10n->expects($this->once())
+ $this->l10nFactory->expects($this->once())
->method('get')
->with('settings', $lang)
->willReturn($l);
@@ -104,7 +96,7 @@ class SecurityProviderTest extends TestCase {
$event->expects($this->once())
->method('getType')
->willReturn('security');
- $this->l10n->expects($this->once())
+ $this->l10nFactory->expects($this->once())
->method('get')
->with('settings', $lang)
->willReturn($l);
diff --git a/apps/settings/tests/Activity/SecuritySettingTest.php b/apps/settings/tests/Activity/SecuritySettingTest.php
index 1b2b0e3361c..c109a9f7fdf 100644
--- a/apps/settings/tests/Activity/SecuritySettingTest.php
+++ b/apps/settings/tests/Activity/SecuritySettingTest.php
@@ -12,8 +12,8 @@ use Test\TestCase;
class SecuritySettingTest extends TestCase {
private $l10n;
- /** @var SecuritySetting */
- private $setting;
+ /** @var */
+ private SecuritySetting $setting;
protected function setUp(): void {
parent::setUp();
diff --git a/apps/settings/tests/AppInfo/ApplicationTest.php b/apps/settings/tests/AppInfo/ApplicationTest.php
index 677efdc64bf..85be8c56178 100644
--- a/apps/settings/tests/AppInfo/ApplicationTest.php
+++ b/apps/settings/tests/AppInfo/ApplicationTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -26,11 +28,8 @@ use Test\TestCase;
* @group DB
*/
class ApplicationTest extends TestCase {
- /** @var Application */
- protected $app;
-
- /** @var IAppContainer */
- protected $container;
+ protected Application $app;
+ protected IAppContainer $container;
protected function setUp(): void {
parent::setUp();
@@ -43,7 +42,7 @@ class ApplicationTest extends TestCase {
$this->assertEquals('settings', $this->container->getAppName());
}
- public function dataContainerQuery() {
+ public static function dataContainerQuery(): array {
return [
[AdminSettingsController::class, Controller::class],
[AppSettingsController::class, Controller::class],
@@ -59,10 +58,8 @@ class ApplicationTest extends TestCase {
/**
* @dataProvider dataContainerQuery
- * @param string $service
- * @param string $expected
*/
- public function testContainerQuery($service, $expected): void {
+ public function testContainerQuery(string $service, string $expected): void {
$this->assertTrue($this->container->query($service) instanceof $expected);
}
}
diff --git a/apps/settings/tests/Controller/AppSettingsControllerTest.php b/apps/settings/tests/Controller/AppSettingsControllerTest.php
index f72bd45a3d2..5194ca2cc33 100644
--- a/apps/settings/tests/Controller/AppSettingsControllerTest.php
+++ b/apps/settings/tests/Controller/AppSettingsControllerTest.php
@@ -37,39 +37,23 @@ use Test\TestCase;
* @group DB
*/
class AppSettingsControllerTest extends TestCase {
- /** @var AppSettingsController */
- private $appSettingsController;
- /** @var IRequest|MockObject */
- private $request;
- /** @var IL10N|MockObject */
- private $l10n;
- /** @var IConfig|MockObject */
- private $config;
- /** @var INavigationManager|MockObject */
- private $navigationManager;
+ private IRequest&MockObject $request;
+ private IL10N&MockObject $l10n;
+ private IConfig&MockObject $config;
+ private INavigationManager&MockObject $navigationManager;
private AppManager&MockObject $appManager;
- /** @var CategoryFetcher|MockObject */
- private $categoryFetcher;
- /** @var AppFetcher|MockObject */
- private $appFetcher;
- /** @var IFactory|MockObject */
- private $l10nFactory;
- /** @var BundleFetcher|MockObject */
- private $bundleFetcher;
- /** @var Installer|MockObject */
- private $installer;
- /** @var IURLGenerator|MockObject */
- private $urlGenerator;
- /** @var LoggerInterface|MockObject */
- private $logger;
- /** @var IInitialState|MockObject */
- private $initialState;
- /** @var IAppDataFactory|MockObject */
- private $appDataFactory;
- /** @var AppDiscoverFetcher|MockObject */
- private $discoverFetcher;
- /** @var IClientService|MockObject */
- private $clientService;
+ private CategoryFetcher&MockObject $categoryFetcher;
+ private AppFetcher&MockObject $appFetcher;
+ private IFactory&MockObject $l10nFactory;
+ private BundleFetcher&MockObject $bundleFetcher;
+ private Installer&MockObject $installer;
+ private IURLGenerator&MockObject $urlGenerator;
+ private LoggerInterface&MockObject $logger;
+ private IInitialState&MockObject $initialState;
+ private IAppDataFactory&MockObject $appDataFactory;
+ private AppDiscoverFetcher&MockObject $discoverFetcher;
+ private IClientService&MockObject $clientService;
+ private AppSettingsController $appSettingsController;
protected function setUp(): void {
parent::setUp();
diff --git a/apps/settings/tests/Controller/AuthSettingsControllerTest.php b/apps/settings/tests/Controller/AuthSettingsControllerTest.php
index 13213992d94..bb6068ffe94 100644
--- a/apps/settings/tests/Controller/AuthSettingsControllerTest.php
+++ b/apps/settings/tests/Controller/AuthSettingsControllerTest.php
@@ -28,24 +28,15 @@ use Psr\Log\LoggerInterface;
use Test\TestCase;
class AuthSettingsControllerTest extends TestCase {
-
- /** @var AuthSettingsController */
- private $controller;
- /** @var IRequest|MockObject */
- private $request;
- /** @var IProvider|MockObject */
- private $tokenProvider;
- /** @var ISession|MockObject */
- private $session;
- /** @var IUserSession|MockObject */
- private $userSession;
- /** @var ISecureRandom|MockObject */
- private $secureRandom;
- /** @var IManager|MockObject */
- private $activityManager;
- /** @var RemoteWipe|MockObject */
- private $remoteWipe;
- private $uid = 'jane';
+ private IRequest&MockObject $request;
+ private IProvider&MockObject $tokenProvider;
+ private ISession&MockObject $session;
+ private IUserSession&MockObject $userSession;
+ private ISecureRandom&MockObject $secureRandom;
+ private IManager&MockObject $activityManager;
+ private RemoteWipe&MockObject $remoteWipe;
+ private string $uid = 'jane';
+ private AuthSettingsController $controller;
protected function setUp(): void {
parent::setUp();
@@ -57,7 +48,7 @@ class AuthSettingsControllerTest extends TestCase {
$this->secureRandom = $this->createMock(ISecureRandom::class);
$this->activityManager = $this->createMock(IManager::class);
$this->remoteWipe = $this->createMock(RemoteWipe::class);
- /** @var LoggerInterface|MockObject $logger */
+ /** @var LoggerInterface&MockObject $logger */
$logger = $this->createMock(LoggerInterface::class);
$this->controller = new AuthSettingsController(
@@ -214,7 +205,7 @@ class AuthSettingsControllerTest extends TestCase {
$this->assertSame(\OCP\AppFramework\Http::STATUS_NOT_FOUND, $response->getStatus());
}
- public function dataRenameToken(): array {
+ public static function dataRenameToken(): array {
return [
'App password => Other token name' => ['App password', 'Other token name'],
'Other token name => App password' => ['Other token name', 'App password'],
@@ -223,9 +214,6 @@ class AuthSettingsControllerTest extends TestCase {
/**
* @dataProvider dataRenameToken
- *
- * @param string $name
- * @param string $newName
*/
public function testUpdateRename(string $name, string $newName): void {
$tokenId = 42;
@@ -257,7 +245,7 @@ class AuthSettingsControllerTest extends TestCase {
$this->assertSame([], $this->controller->update($tokenId, [IToken::SCOPE_FILESYSTEM => true], $newName));
}
- public function dataUpdateFilesystemScope(): array {
+ public static function dataUpdateFilesystemScope(): array {
return [
'Grant filesystem access' => [false, true],
'Revoke filesystem access' => [true, false],
@@ -266,9 +254,6 @@ class AuthSettingsControllerTest extends TestCase {
/**
* @dataProvider dataUpdateFilesystemScope
- *
- * @param bool $filesystem
- * @param bool $newFilesystem
*/
public function testUpdateFilesystemScope(bool $filesystem, bool $newFilesystem): void {
$tokenId = 42;
diff --git a/apps/settings/tests/Controller/CheckSetupControllerTest.php b/apps/settings/tests/Controller/CheckSetupControllerTest.php
index 27f7aa1b696..a8e89260573 100644
--- a/apps/settings/tests/Controller/CheckSetupControllerTest.php
+++ b/apps/settings/tests/Controller/CheckSetupControllerTest.php
@@ -29,59 +29,40 @@ use Test\TestCase;
* @package Tests\Settings\Controller
*/
class CheckSetupControllerTest extends TestCase {
- /** @var CheckSetupController | \PHPUnit\Framework\MockObject\MockObject */
- private $checkSetupController;
- /** @var IRequest | \PHPUnit\Framework\MockObject\MockObject */
- private $request;
- /** @var IConfig | \PHPUnit\Framework\MockObject\MockObject */
- private $config;
- /** @var IURLGenerator | \PHPUnit\Framework\MockObject\MockObject */
- private $urlGenerator;
- /** @var IL10N | \PHPUnit\Framework\MockObject\MockObject */
- private $l10n;
- /** @var LoggerInterface */
- private $logger;
- /** @var Checker|\PHPUnit\Framework\MockObject\MockObject */
- private $checker;
- /** @var ISetupCheckManager|MockObject */
- private $setupCheckManager;
+ private IRequest&MockObject $request;
+ private IConfig&MockObject $config;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IL10N&MockObject $l10n;
+ private LoggerInterface&MockObject $logger;
+ private Checker&MockObject $checker;
+ private ISetupCheckManager&MockObject $setupCheckManager;
+ private CheckSetupController $checkSetupController;
protected function setUp(): void {
parent::setUp();
- $this->request = $this->getMockBuilder(IRequest::class)
- ->disableOriginalConstructor()->getMock();
- $this->config = $this->getMockBuilder(IConfig::class)
- ->disableOriginalConstructor()->getMock();
- $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)
- ->disableOriginalConstructor()->getMock();
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->request = $this->createMock(IRequest::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
return vsprintf($message, $replace);
});
- $this->checker = $this->getMockBuilder('\OC\IntegrityCheck\Checker')
- ->disableOriginalConstructor()->getMock();
- $this->logger = $this->getMockBuilder(LoggerInterface::class)->getMock();
+ $this->checker = $this->createMock(Checker::class);
+ $this->logger = $this->createMock(LoggerInterface::class);
$this->setupCheckManager = $this->createMock(ISetupCheckManager::class);
- $this->checkSetupController = $this->getMockBuilder(CheckSetupController::class)
- ->setConstructorArgs([
- 'settings',
- $this->request,
- $this->config,
- $this->urlGenerator,
- $this->l10n,
- $this->checker,
- $this->logger,
- $this->setupCheckManager,
- ])
- ->setMethods([
- 'getCurlVersion',
- 'isPhpOutdated',
- 'isPHPMailerUsed',
- ])->getMock();
+ $this->checkSetupController = new CheckSetupController(
+ 'settings',
+ $this->request,
+ $this->config,
+ $this->urlGenerator,
+ $this->l10n,
+ $this->checker,
+ $this->logger,
+ $this->setupCheckManager,
+ );
}
public function testCheck(): void {
diff --git a/apps/settings/tests/Controller/DelegationControllerTest.php b/apps/settings/tests/Controller/DelegationControllerTest.php
index 5994ddf298d..c4cbe67466b 100644
--- a/apps/settings/tests/Controller/DelegationControllerTest.php
+++ b/apps/settings/tests/Controller/DelegationControllerTest.php
@@ -10,23 +10,18 @@ use OC\Settings\AuthorizedGroup;
use OCA\Settings\Controller\AuthorizedGroupController;
use OCA\Settings\Service\AuthorizedGroupService;
use OCP\IRequest;
+use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class DelegationControllerTest extends TestCase {
-
- /** @var AuthorizedGroupService */
- private $service;
-
- /** @var IRequest */
- private $request;
-
- /** @var AuthorizedGroupController */
- private $controller;
+ private AuthorizedGroupService&MockObject $service;
+ private IRequest&MockObject $request;
+ private AuthorizedGroupController $controller;
protected function setUp(): void {
parent::setUp();
- $this->request = $this->getMockBuilder(IRequest::class)->getMock();
- $this->service = $this->getMockBuilder(AuthorizedGroupService::class)->disableOriginalConstructor()->getMock();
+ $this->request = $this->createMock(IRequest::class);
+ $this->service = $this->createMock(AuthorizedGroupService::class);
$this->controller = new AuthorizedGroupController(
'settings', $this->request, $this->service
);
@@ -41,7 +36,7 @@ class DelegationControllerTest extends TestCase {
$this->service->expects($this->once())
->method('findExistingGroupsForClass')
->with('MySecretSetting')
- ->will($this->returnValue($oldGroups));
+ ->willReturn($oldGroups);
$this->service->expects($this->once())
->method('delete')
@@ -50,7 +45,7 @@ class DelegationControllerTest extends TestCase {
$this->service->expects($this->once())
->method('create')
->with('world', 'MySecretSetting')
- ->will($this->returnValue(AuthorizedGroup::fromParams(['groupId' => 'world', 'class' => $setting])));
+ ->willReturn(AuthorizedGroup::fromParams(['groupId' => 'world', 'class' => $setting]));
$result = $this->controller->saveSettings([['gid' => 'hello'], ['gid' => 'world']], 'MySecretSetting');
diff --git a/apps/settings/tests/Controller/MailSettingsControllerTest.php b/apps/settings/tests/Controller/MailSettingsControllerTest.php
index 2a0028738dd..dcb1e3efef4 100644
--- a/apps/settings/tests/Controller/MailSettingsControllerTest.php
+++ b/apps/settings/tests/Controller/MailSettingsControllerTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -16,25 +18,18 @@ use OCP\IURLGenerator;
use OCP\IUserSession;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
+use PHPUnit\Framework\MockObject\MockObject;
/**
* @package Tests\Settings\Controller
*/
class MailSettingsControllerTest extends \Test\TestCase {
-
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- private $config;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- private $userSession;
- /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */
- private $mailer;
- /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- private $l;
- /** @var IURLGenerator */
- private $urlGenerator;
-
- /** @var MailSettingsController */
- private $mailController;
+ private IConfig&MockObject $config;
+ private IUserSession&MockObject $userSession;
+ private IMailer&MockObject $mailer;
+ private IL10N&MockObject $l;
+ private IURLGenerator&MockObject $urlGenerator;
+ private MailSettingsController $mailController;
protected function setUp(): void {
parent::setUp();
@@ -44,7 +39,7 @@ class MailSettingsControllerTest extends \Test\TestCase {
$this->userSession = $this->createMock(IUserSession::class);
$this->mailer = $this->createMock(IMailer::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
- /** @var IRequest|\PHPUnit\Framework\MockObject\MockObject $request */
+ /** @var IRequest&MockObject $request */
$request = $this->createMock(IRequest::class);
$this->mailController = new MailSettingsController(
'settings',
@@ -54,37 +49,40 @@ class MailSettingsControllerTest extends \Test\TestCase {
$this->userSession,
$this->urlGenerator,
$this->mailer,
- 'no-reply@nextcloud.com'
);
}
public function testSetMailSettings(): void {
+ $calls = [
+ [[
+ 'mail_domain' => 'nextcloud.com',
+ 'mail_from_address' => 'demo@nextcloud.com',
+ 'mail_smtpmode' => 'smtp',
+ 'mail_smtpsecure' => 'ssl',
+ 'mail_smtphost' => 'mx.nextcloud.org',
+ 'mail_smtpauth' => 1,
+ 'mail_smtpport' => '25',
+ 'mail_sendmailmode' => 'smtp',
+ ]],
+ [[
+ 'mail_domain' => 'nextcloud.com',
+ 'mail_from_address' => 'demo@nextcloud.com',
+ 'mail_smtpmode' => 'smtp',
+ 'mail_smtpsecure' => 'ssl',
+ 'mail_smtphost' => 'mx.nextcloud.org',
+ 'mail_smtpauth' => null,
+ 'mail_smtpport' => '25',
+ 'mail_smtpname' => null,
+ 'mail_smtppassword' => null,
+ 'mail_sendmailmode' => 'smtp',
+ ]],
+ ];
$this->config->expects($this->exactly(2))
->method('setSystemValues')
- ->withConsecutive(
- [[
- 'mail_domain' => 'nextcloud.com',
- 'mail_from_address' => 'demo@nextcloud.com',
- 'mail_smtpmode' => 'smtp',
- 'mail_smtpsecure' => 'ssl',
- 'mail_smtphost' => 'mx.nextcloud.org',
- 'mail_smtpauth' => 1,
- 'mail_smtpport' => '25',
- 'mail_sendmailmode' => 'smtp',
- ]],
- [[
- 'mail_domain' => 'nextcloud.com',
- 'mail_from_address' => 'demo@nextcloud.com',
- 'mail_smtpmode' => 'smtp',
- 'mail_smtpsecure' => 'ssl',
- 'mail_smtphost' => 'mx.nextcloud.org',
- 'mail_smtpauth' => null,
- 'mail_smtpport' => '25',
- 'mail_smtpname' => null,
- 'mail_smtppassword' => null,
- 'mail_sendmailmode' => 'smtp',
- ]]
- );
+ ->willReturnCallback(function () use (&$calls) {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
// With authentication
$response = $this->mailController->setMailSettings(
@@ -93,7 +91,7 @@ class MailSettingsControllerTest extends \Test\TestCase {
'smtp',
'ssl',
'mx.nextcloud.org',
- 1,
+ '1',
'25',
'smtp'
);
@@ -106,7 +104,7 @@ class MailSettingsControllerTest extends \Test\TestCase {
'smtp',
'ssl',
'mx.nextcloud.org',
- 0,
+ '0',
'25',
'smtp'
);
diff --git a/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php b/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php
index c34b2907dfd..9f8d53d4f9f 100644
--- a/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php
+++ b/apps/settings/tests/Controller/TwoFactorSettingsControllerTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -14,15 +16,9 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class TwoFactorSettingsControllerTest extends TestCase {
-
- /** @var IRequest|MockObject */
- private $request;
-
- /** @var MandatoryTwoFactor|MockObject */
- private $mandatoryTwoFactor;
-
- /** @var TwoFactorSettingsController */
- private $controller;
+ private IRequest&MockObject $request;
+ private MandatoryTwoFactor&MockObject $mandatoryTwoFactor;
+ private TwoFactorSettingsController $controller;
protected function setUp(): void {
parent::setUp();
diff --git a/apps/settings/tests/Controller/UsersControllerTest.php b/apps/settings/tests/Controller/UsersControllerTest.php
index 96823e5ceed..d5fe38ad458 100644
--- a/apps/settings/tests/Controller/UsersControllerTest.php
+++ b/apps/settings/tests/Controller/UsersControllerTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2014-2015 ownCloud, Inc.
@@ -40,38 +42,22 @@ use PHPUnit\Framework\MockObject\MockObject;
* @package Tests\Settings\Controller
*/
class UsersControllerTest extends \Test\TestCase {
- /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
- private $groupManager;
- /** @var UserManager|\PHPUnit\Framework\MockObject\MockObject */
- private $userManager;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- private $userSession;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- private $config;
- /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */
- private $mailer;
- /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */
- private $l10nFactory;
- /** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject */
- private $appManager;
- /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- private $l;
- /** @var AccountManager|\PHPUnit\Framework\MockObject\MockObject */
- private $accountManager;
- /** @var IJobList | \PHPUnit\Framework\MockObject\MockObject */
- private $jobList;
- /** @var \OC\Security\IdentityProof\Manager|\PHPUnit\Framework\MockObject\MockObject */
- private $securityManager;
- /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
- private $encryptionManager;
- /** @var KnownUserService|\PHPUnit\Framework\MockObject\MockObject */
- private $knownUserService;
- /** @var IEncryptionModule|\PHPUnit\Framework\MockObject\MockObject */
- private $encryptionModule;
- /** @var IEventDispatcher|\PHPUnit\Framework\MockObject\MockObject */
- private $dispatcher;
- /** @var IInitialState|\PHPUnit\Framework\MockObject\MockObject */
- private $initialState;
+ private IGroupManager&MockObject $groupManager;
+ private UserManager&MockObject $userManager;
+ private IUserSession&MockObject $userSession;
+ private IConfig&MockObject $config;
+ private IMailer&MockObject $mailer;
+ private IFactory&MockObject $l10nFactory;
+ private IAppManager&MockObject $appManager;
+ private IL10N&MockObject $l;
+ private AccountManager&MockObject $accountManager;
+ private IJobList&MockObject $jobList;
+ private \OC\Security\IdentityProof\Manager&MockObject $securityManager;
+ private IManager&MockObject $encryptionManager;
+ private KnownUserService&MockObject $knownUserService;
+ private IEncryptionModule&MockObject $encryptionModule;
+ private IEventDispatcher&MockObject $dispatcher;
+ private IInitialState&MockObject $initialState;
protected function setUp(): void {
parent::setUp();
@@ -85,7 +71,7 @@ class UsersControllerTest extends \Test\TestCase {
$this->l10nFactory = $this->createMock(IFactory::class);
$this->appManager = $this->createMock(IAppManager::class);
$this->accountManager = $this->createMock(AccountManager::class);
- $this->securityManager = $this->getMockBuilder(\OC\Security\IdentityProof\Manager::class)->disableOriginalConstructor()->getMock();
+ $this->securityManager = $this->createMock(\OC\Security\IdentityProof\Manager::class);
$this->jobList = $this->createMock(IJobList::class);
$this->encryptionManager = $this->createMock(IManager::class);
$this->knownUserService = $this->createMock(KnownUserService::class);
@@ -106,9 +92,9 @@ class UsersControllerTest extends \Test\TestCase {
/**
* @param bool $isAdmin
- * @return UsersController | \PHPUnit\Framework\MockObject\MockObject
+ * @return UsersController|MockObject
*/
- protected function getController($isAdmin = false, $mockedMethods = []) {
+ protected function getController(bool $isAdmin = false, array $mockedMethods = []) {
$this->groupManager->expects($this->any())
->method('isAdmin')
->willReturn($isAdmin);
@@ -155,7 +141,9 @@ class UsersControllerTest extends \Test\TestCase {
$this->dispatcher,
$this->initialState,
]
- )->onlyMethods($mockedMethods)->getMock();
+ )
+ ->onlyMethods($mockedMethods)
+ ->getMock();
}
}
@@ -177,7 +165,7 @@ class UsersControllerTest extends \Test\TestCase {
return $property;
}
- protected function getDefaultAccountMock(bool $useDefaultValues = true): MockObject {
+ protected function getDefaultAccountMock(): MockObject {
$propertyMocks = [
IAccountManager::PROPERTY_DISPLAYNAME => $this->buildPropertyMock(
IAccountManager::PROPERTY_DISPLAYNAME,
@@ -249,12 +237,8 @@ class UsersControllerTest extends \Test\TestCase {
/**
* @dataProvider dataTestSetUserSettings
- *
- * @param string $email
- * @param bool $validEmail
- * @param $expectedStatus
*/
- public function testSetUserSettings($email, $validEmail, $expectedStatus): void {
+ public function testSetUserSettings(string $email, bool $validEmail, int $expectedStatus): void {
$controller = $this->getController(false, ['saveUserSettings']);
$user = $this->createMock(IUser::class);
$user->method('getUID')->willReturn('johndoe');
@@ -305,7 +289,7 @@ class UsersControllerTest extends \Test\TestCase {
$this->assertSame($expectedStatus, $result->getStatus());
}
- public function dataTestSetUserSettings() {
+ public static function dataTestSetUserSettings(): array {
return [
['', true, Http::STATUS_OK],
['', false, Http::STATUS_OK],
@@ -515,18 +499,15 @@ class UsersControllerTest extends \Test\TestCase {
/**
* @dataProvider dataTestSetUserSettingsSubset
- *
- * @param string $property
- * @param string $propertyValue
*/
- public function testSetUserSettingsSubset($property, $propertyValue): void {
+ public function testSetUserSettingsSubset(string $property, string $propertyValue): void {
$controller = $this->getController(false, ['saveUserSettings']);
$user = $this->createMock(IUser::class);
$user->method('getUID')->willReturn('johndoe');
$this->userSession->method('getUser')->willReturn($user);
- /** @var IAccount|MockObject $userAccount */
+ /** @var IAccount&MockObject $userAccount */
$userAccount = $this->getDefaultAccountMock();
$this->accountManager->expects($this->once())
@@ -554,9 +535,9 @@ class UsersControllerTest extends \Test\TestCase {
$pronouns = ($property === 'pronouns') ? $propertyValue : null;
$pronounsScope = ($property === 'pronounsScope') ? $propertyValue : null;
- /** @var IAccountProperty[]|MockObject[] $expectedProperties */
+ /** @var IAccountProperty[]&MockObject[] $expectedProperties */
$expectedProperties = $userAccount->getProperties();
- $isScope = strrpos($property, 'Scope') === strlen($property) - strlen(5);
+ $isScope = strrpos($property, 'Scope') === strlen($property) - strlen('5');
switch ($property) {
case 'avatarScope':
$propertyId = IAccountManager::PROPERTY_AVATAR;
@@ -636,7 +617,7 @@ class UsersControllerTest extends \Test\TestCase {
);
}
- public function dataTestSetUserSettingsSubset() {
+ public static function dataTestSetUserSettingsSubset(): array {
return [
['avatarScope', IAccountManager::SCOPE_PUBLISHED],
['displayName', 'Display name'],
@@ -662,15 +643,8 @@ class UsersControllerTest extends \Test\TestCase {
/**
* @dataProvider dataTestSaveUserSettings
- *
- * @param array $data
- * @param ?string $oldEmailAddress
- * @param ?string $oldDisplayName
*/
- public function testSaveUserSettings($data,
- $oldEmailAddress,
- $oldDisplayName,
- ): void {
+ public function testSaveUserSettings(array $data, ?string $oldEmailAddress, ?string $oldDisplayName): void {
$controller = $this->getController();
$user = $this->createMock(IUser::class);
@@ -722,7 +696,7 @@ class UsersControllerTest extends \Test\TestCase {
$this->invokePrivate($controller, 'saveUserSettings', [$account]);
}
- public function dataTestSaveUserSettings() {
+ public static function dataTestSaveUserSettings(): array {
return [
[
[
@@ -833,7 +807,7 @@ class UsersControllerTest extends \Test\TestCase {
}
- public function dataTestSaveUserSettingsException() {
+ public static function dataTestSaveUserSettingsException(): array {
return [
[
[
@@ -870,14 +844,9 @@ class UsersControllerTest extends \Test\TestCase {
}
/**
- * @param string $account
- * @param string $type
- * @param array $dataBefore
- * @param array $expectedData
- *
* @dataProvider dataTestGetVerificationCode
*/
- public function testGetVerificationCode($account, $type, $dataBefore, $expectedData, $onlyVerificationCode): void {
+ public function testGetVerificationCode(string $account, string $type, array $dataBefore, array $expectedData, bool $onlyVerificationCode): void {
$message = 'Use my Federated Cloud ID to share with me: user@nextcloud.com';
$signature = 'theSignature';
@@ -936,7 +905,7 @@ class UsersControllerTest extends \Test\TestCase {
$this->assertSame($code, $data['code']);
}
- public function dataTestGetVerificationCode() {
+ public static function dataTestGetVerificationCode(): array {
$accountDataBefore = [
IAccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => IAccountManager::NOT_VERIFIED],
IAccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => IAccountManager::NOT_VERIFIED, 'signature' => 'theSignature'],
@@ -973,16 +942,13 @@ class UsersControllerTest extends \Test\TestCase {
/**
* @dataProvider dataTestCanAdminChangeUserPasswords
- *
- * @param bool $encryptionEnabled
- * @param bool $encryptionModuleLoaded
- * @param bool $masterKeyEnabled
- * @param bool $expected
*/
- public function testCanAdminChangeUserPasswords($encryptionEnabled,
- $encryptionModuleLoaded,
- $masterKeyEnabled,
- $expected): void {
+ public function testCanAdminChangeUserPasswords(
+ bool $encryptionEnabled,
+ bool $encryptionModuleLoaded,
+ bool $masterKeyEnabled,
+ bool $expected,
+ ): void {
$controller = $this->getController();
$this->encryptionManager->expects($this->any())
@@ -1005,7 +971,7 @@ class UsersControllerTest extends \Test\TestCase {
$this->assertSame($expected, $result);
}
- public function dataTestCanAdminChangeUserPasswords() {
+ public static function dataTestCanAdminChangeUserPasswords(): array {
return [
// encryptionEnabled, encryptionModuleLoaded, masterKeyEnabled, expectedResult
[true, true, true, true],
diff --git a/apps/settings/tests/Mailer/NewUserMailHelperTest.php b/apps/settings/tests/Mailer/NewUserMailHelperTest.php
index 1a1fc20354b..26a2bf5a6b6 100644
--- a/apps/settings/tests/Mailer/NewUserMailHelperTest.php
+++ b/apps/settings/tests/Mailer/NewUserMailHelperTest.php
@@ -20,29 +20,20 @@ use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
use OCP\Security\ICrypto;
use OCP\Security\ISecureRandom;
+use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class NewUserMailHelperTest extends TestCase {
- /** @var Defaults|\PHPUnit\Framework\MockObject\MockObject */
- private $defaults;
- /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
- private $urlGenerator;
- /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- private $l10n;
- /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */
- private $l10nFactory;
- /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */
- private $mailer;
- /** @var ISecureRandom|\PHPUnit\Framework\MockObject\MockObject */
- private $secureRandom;
- /** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
- private $timeFactory;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- private $config;
- /** @var ICrypto|\PHPUnit\Framework\MockObject\MockObject */
- private $crypto;
- /** @var NewUserMailHelper */
- private $newUserMailHelper;
+ private Defaults&MockObject $defaults;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IL10N&MockObject $l10n;
+ private IFactory&MockObject $l10nFactory;
+ private IMailer&MockObject $mailer;
+ private ISecureRandom&MockObject $secureRandom;
+ private ITimeFactory&MockObject $timeFactory;
+ private IConfig&MockObject $config;
+ private ICrypto&MockObject $crypto;
+ private NewUserMailHelper $newUserMailHelper;
protected function setUp(): void {
parent::setUp();
@@ -113,7 +104,7 @@ class NewUserMailHelperTest extends TestCase {
->expects($this->once())
->method('getTime')
->willReturn(12345);
- /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */
+ /** @var IUser&MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->any())
@@ -371,7 +362,7 @@ EOF;
['myLogo',''],
]);
- /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */
+ /** @var IUser&MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->any())
@@ -611,7 +602,7 @@ EOF;
['myLogo', ''],
]);
- /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */
+ /** @var IUser&MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->any())
@@ -830,7 +821,7 @@ EOF;
}
public function testSendMail(): void {
- /** @var IUser|\PHPUnit\Framework\MockObject\MockObject $user */
+ /** @var IUser&MockObject $user */
$user = $this->createMock(IUser::class);
$user
->expects($this->once())
@@ -840,7 +831,7 @@ EOF;
->expects($this->once())
->method('getDisplayName')
->willReturn('John Doe');
- /** @var IEMailTemplate|\PHPUnit\Framework\MockObject\MockObject $emailTemplate */
+ /** @var IEMailTemplate&MockObject $emailTemplate */
$emailTemplate = $this->createMock(IEMailTemplate::class);
$message = $this->createMock(Message::class);
$message
diff --git a/apps/settings/tests/Middleware/SubadminMiddlewareTest.php b/apps/settings/tests/Middleware/SubadminMiddlewareTest.php
index 2992810af6c..37cfb5ccc59 100644
--- a/apps/settings/tests/Middleware/SubadminMiddlewareTest.php
+++ b/apps/settings/tests/Middleware/SubadminMiddlewareTest.php
@@ -29,7 +29,6 @@ use PHPUnit\Framework\MockObject\MockObject;
*/
class SubadminMiddlewareTest extends \Test\TestCase {
private SubadminMiddleware $subadminMiddleware;
-
private IUserSession&MockObject $userSession;
private ISubAdmin&MockObject $subAdminManager;
private ControllerMethodReflector&MockObject $reflector;
@@ -38,8 +37,7 @@ class SubadminMiddlewareTest extends \Test\TestCase {
protected function setUp(): void {
parent::setUp();
- $this->reflector = $this->getMockBuilder(ControllerMethodReflector::class)
- ->disableOriginalConstructor()->getMock();
+ $this->reflector = $this->createMock(ControllerMethodReflector::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->subAdminManager = $this->createMock(ISubAdmin::class);
$this->l10n = $this->createMock(IL10N::class);
@@ -51,8 +49,7 @@ class SubadminMiddlewareTest extends \Test\TestCase {
$this->l10n,
);
- $this->controller = $this->getMockBuilder(Controller::class)
- ->disableOriginalConstructor()->getMock();
+ $this->controller = $this->createMock(Controller::class);
$this->userSession
->expects(self::any())
@@ -67,10 +64,10 @@ class SubadminMiddlewareTest extends \Test\TestCase {
$this->reflector
->expects($this->exactly(2))
->method('hasAnnotation')
- ->withConsecutive(
- ['NoSubAdminRequired'],
- ['AuthorizedAdminSetting'],
- )->willReturn(false);
+ ->willReturnMap([
+ ['NoSubAdminRequired', false],
+ ['AuthorizedAdminSetting', false],
+ ]);
$this->subAdminManager
->expects(self::once())
@@ -99,10 +96,10 @@ class SubadminMiddlewareTest extends \Test\TestCase {
$this->reflector
->expects($this->exactly(2))
->method('hasAnnotation')
- ->withConsecutive(
- ['NoSubAdminRequired'],
- ['AuthorizedAdminSetting'],
- )->willReturn(false);
+ ->willReturnMap([
+ ['NoSubAdminRequired', false],
+ ['AuthorizedAdminSetting', false],
+ ]);
$this->subAdminManager
->expects(self::once())
diff --git a/apps/settings/tests/Settings/Admin/MailTest.php b/apps/settings/tests/Settings/Admin/MailTest.php
index 560e4f8e997..37d7cb7d56d 100644
--- a/apps/settings/tests/Settings/Admin/MailTest.php
+++ b/apps/settings/tests/Settings/Admin/MailTest.php
@@ -21,8 +21,8 @@ class MailTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->config = $this->getMockBuilder(IConfig::class)->getMock();
- $this->l10n = $this->getMockBuilder(IL10N::class)->getMock();
+ $this->config = $this->createMock(IConfig::class);
+ $this->l10n = $this->createMock(IL10N::class);
$this->admin = new Mail(
$this->config,
diff --git a/apps/settings/tests/Settings/Admin/SecurityTest.php b/apps/settings/tests/Settings/Admin/SecurityTest.php
index 95b5e988397..63b52dd8616 100644
--- a/apps/settings/tests/Settings/Admin/SecurityTest.php
+++ b/apps/settings/tests/Settings/Admin/SecurityTest.php
@@ -16,21 +16,16 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class SecurityTest extends TestCase {
- /** @var Security */
- private $admin;
- /** @var Manager */
- private $manager;
- /** @var IUserManager */
- private $userManager;
- /** @var MandatoryTwoFactor|MockObject */
- private $mandatoryTwoFactor;
- /** @var IInitialState|MockObject */
- private $initialState;
+ private Manager $manager;
+ private IUserManager $userManager;
+ private MandatoryTwoFactor&MockObject $mandatoryTwoFactor;
+ private IInitialState&MockObject $initialState;
+ private Security $admin;
protected function setUp(): void {
parent::setUp();
- $this->manager = $this->getMockBuilder(Manager::class)->disableOriginalConstructor()->getMock();
- $this->userManager = $this->getMockBuilder(IUserManager::class)->getMock();
+ $this->manager = $this->createMock(Manager::class);
+ $this->userManager = $this->createMock(IUserManager::class);
$this->mandatoryTwoFactor = $this->createMock(MandatoryTwoFactor::class);
$this->initialState = $this->createMock(IInitialState::class);
@@ -43,10 +38,7 @@ class SecurityTest extends TestCase {
);
}
- /**
- * @return array
- */
- public function encryptionSettingsProvider() {
+ public static function encryptionSettingsProvider(): array {
return [
[true],
[false],
@@ -55,9 +47,8 @@ class SecurityTest extends TestCase {
/**
* @dataProvider encryptionSettingsProvider
- * @param bool $enabled
*/
- public function testGetFormWithOnlyOneBackend($enabled): void {
+ public function testGetFormWithOnlyOneBackend(bool $enabled): void {
$this->manager
->expects($this->once())
->method('isEnabled')
diff --git a/apps/settings/tests/Settings/Admin/ServerTest.php b/apps/settings/tests/Settings/Admin/ServerTest.php
index 35a8a3ce7f7..e2ca4cff3c6 100644
--- a/apps/settings/tests/Settings/Admin/ServerTest.php
+++ b/apps/settings/tests/Settings/Admin/ServerTest.php
@@ -25,24 +25,15 @@ use Test\TestCase;
* @group DB
*/
class ServerTest extends TestCase {
- /** @var IDBConnection */
- private $connection;
- /** @var Server&MockObject */
- private $admin;
- /** @var IInitialState&MockObject */
- private $initialStateService;
- /** @var ProfileManager&MockObject */
- private $profileManager;
- /** @var ITimeFactory&MockObject */
- private $timeFactory;
- /** @var IConfig&MockObject */
- private $config;
- /** @var IAppConfig&MockObject */
- private $appConfig;
- /** @var IL10N&MockObject */
- private $l10n;
- /** @var IUrlGenerator&MockObject */
- private $urlGenerator;
+ private IDBConnection $connection;
+ private Server&MockObject $admin;
+ private IInitialState&MockObject $initialStateService;
+ private ProfileManager&MockObject $profileManager;
+ private ITimeFactory&MockObject $timeFactory;
+ private IConfig&MockObject $config;
+ private IAppConfig&MockObject $appConfig;
+ private IL10N&MockObject $l10n;
+ private IUrlGenerator&MockObject $urlGenerator;
protected function setUp(): void {
parent::setUp();
diff --git a/apps/settings/tests/Settings/Admin/SharingTest.php b/apps/settings/tests/Settings/Admin/SharingTest.php
index 048634be1e0..bd1a7a1045b 100644
--- a/apps/settings/tests/Settings/Admin/SharingTest.php
+++ b/apps/settings/tests/Settings/Admin/SharingTest.php
@@ -18,34 +18,22 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class SharingTest extends TestCase {
- /** @var Sharing */
- private $admin;
- /** @var IConfig&MockObject */
- private $config;
- /** @var IL10N&MockObject */
- private $l10n;
- /** @var IManager|MockObject */
- private $shareManager;
- /** @var IAppManager|MockObject */
- private $appManager;
- /** @var IURLGenerator|MockObject */
- private $urlGenerator;
- /** @var IInitialState|MockObject */
- private $initialState;
+ private IConfig&MockObject $config;
+ private IL10N&MockObject $l10n;
+ private IManager&MockObject $shareManager;
+ private IAppManager&MockObject $appManager;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IInitialState&MockObject $initialState;
+ private Sharing $admin;
protected function setUp(): void {
parent::setUp();
- $this->config = $this->getMockBuilder(IConfig::class)->getMock();
- $this->l10n = $this->getMockBuilder(IL10N::class)->getMock();
-
- /** @var IManager|MockObject */
- $this->shareManager = $this->getMockBuilder(IManager::class)->getMock();
- /** @var IAppManager|MockObject */
- $this->appManager = $this->getMockBuilder(IAppManager::class)->getMock();
- /** @var IURLGenerator|MockObject */
- $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock();
- /** @var IInitialState|MockObject */
- $this->initialState = $this->getMockBuilder(IInitialState::class)->getMock();
+ $this->config = $this->createMock(IConfig::class);
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->shareManager = $this->createMock(IManager::class);
+ $this->appManager = $this->createMock(IAppManager::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->initialState = $this->createMock(IInitialState::class);
$this->admin = new Sharing(
$this->config,
@@ -104,7 +92,7 @@ class SharingTest extends TestCase {
->willReturnCallback(function (string $key) use (&$initialStateCalls): void {
$initialStateCalls[$key] = func_get_args();
});
-
+
$expectedInitialStateCalls = [
'sharingAppEnabled' => false,
'sharingDocumentation' => '',
diff --git a/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php b/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php
index 44641ee98b3..f6f82ab311a 100644
--- a/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php
+++ b/apps/settings/tests/Settings/Personal/Security/AuthtokensTest.php
@@ -20,24 +20,12 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class AuthtokensTest extends TestCase {
-
- /** @var IAuthTokenProvider|MockObject */
- private $authTokenProvider;
-
- /** @var ISession|MockObject */
- private $session;
-
- /** @var IUserSession|MockObject */
- private $userSession;
-
- /** @var IInitialState|MockObject */
- private $initialState;
-
- /** @var string */
- private $uid;
-
- /** @var Authtokens */
- private $section;
+ private IAuthTokenProvider&MockObject $authTokenProvider;
+ private ISession&MockObject $session;
+ private IUserSession&MockObject $userSession;
+ private IInitialState&MockObject $initialState;
+ private string $uid;
+ private Authtokens $section;
protected function setUp(): void {
parent::setUp();
@@ -80,34 +68,39 @@ class AuthtokensTest extends TestCase {
->method('getToken')
->with('session123')
->willReturn($sessionToken);
+
+ $calls = [
+ [
+ 'app_tokens', [
+ [
+ 'id' => 100,
+ 'name' => null,
+ 'lastActivity' => 0,
+ 'type' => 0,
+ 'canDelete' => false,
+ 'current' => true,
+ 'scope' => [IToken::SCOPE_FILESYSTEM => true],
+ 'canRename' => false,
+ ],
+ [
+ 'id' => 200,
+ 'name' => null,
+ 'lastActivity' => 0,
+ 'type' => 0,
+ 'canDelete' => true,
+ 'scope' => [IToken::SCOPE_FILESYSTEM => true],
+ 'canRename' => true,
+ ],
+ ]
+ ],
+ ['can_create_app_token', true],
+ ];
$this->initialState->expects($this->exactly(2))
->method('provideInitialState')
- ->withConsecutive(
- [
- 'app_tokens', [
- [
- 'id' => 100,
- 'name' => null,
- 'lastActivity' => 0,
- 'type' => 0,
- 'canDelete' => false,
- 'current' => true,
- 'scope' => [IToken::SCOPE_FILESYSTEM => true],
- 'canRename' => false,
- ],
- [
- 'id' => 200,
- 'name' => null,
- 'lastActivity' => 0,
- 'type' => 0,
- 'canDelete' => true,
- 'scope' => [IToken::SCOPE_FILESYSTEM => true],
- 'canRename' => true,
- ],
- ]
- ],
- ['can_create_app_token', true],
- );
+ ->willReturnCallback(function () use (&$calls) {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
$form = $this->section->getForm();
diff --git a/apps/settings/tests/Settings/Personal/Security/PasswordTest.php b/apps/settings/tests/Settings/Personal/Security/PasswordTest.php
index 62f2c998943..34a4b8e296f 100644
--- a/apps/settings/tests/Settings/Personal/Security/PasswordTest.php
+++ b/apps/settings/tests/Settings/Personal/Security/PasswordTest.php
@@ -16,15 +16,9 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class PasswordTest extends TestCase {
-
- /** @var IUserManager|MockObject */
- private $userManager;
-
- /** @var string */
- private $uid;
-
- /** @var Password */
- private $section;
+ private IUserManager&MockObject $userManager;
+ private string $uid;
+ private Password $section;
protected function setUp(): void {
parent::setUp();
diff --git a/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php b/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php
index db3141e3a26..423f932dcf5 100644
--- a/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php
+++ b/apps/settings/tests/SetupChecks/AppDirsWithDifferentOwnerTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\AppDirsWithDifferentOwner;
use OCP\IL10N;
@@ -26,8 +26,7 @@ class AppDirsWithDifferentOwnerTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
diff --git a/apps/settings/tests/SetupChecks/CodeIntegrityTest.php b/apps/settings/tests/SetupChecks/CodeIntegrityTest.php
index 52101aed901..4dd54a644f5 100644
--- a/apps/settings/tests/SetupChecks/CodeIntegrityTest.php
+++ b/apps/settings/tests/SetupChecks/CodeIntegrityTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OC\IntegrityCheck\Checker;
use OCA\Settings\SetupChecks\CodeIntegrity;
@@ -17,7 +17,7 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class CodeIntegrityTest extends TestCase {
-
+
private IL10N&MockObject $l10n;
private IURLGenerator&MockObject $urlGenerator;
private Checker&MockObject $checker;
@@ -25,8 +25,7 @@ class CodeIntegrityTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
diff --git a/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php b/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php
index 51dffe58787..a48c6296aff 100644
--- a/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php
+++ b/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\DataDirectoryProtected;
use OCP\Http\Client\IClientService;
@@ -30,9 +30,7 @@ class DataDirectoryProtectedTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- /** @var IL10N&MockObject */
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
diff --git a/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php b/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php
index b8b25e74c63..b57eb852d80 100644
--- a/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php
+++ b/apps/settings/tests/SetupChecks/ForwardedForHeadersTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\ForwardedForHeaders;
use OCP\IConfig;
@@ -26,8 +26,7 @@ class ForwardedForHeadersTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
@@ -68,7 +67,7 @@ class ForwardedForHeadersTest extends TestCase {
);
}
- public function dataForwardedForHeadersWorking(): array {
+ public static function dataForwardedForHeadersWorking(): array {
return [
// description => trusted proxies, getHeader('REMOTE_ADDR'), getRemoteAddr, expected result
'no trusted proxies' => [[], '2.2.2.2', '2.2.2.2', SetupResult::SUCCESS],
diff --git a/apps/settings/tests/SetupChecks/LoggingLevelTest.php b/apps/settings/tests/SetupChecks/LoggingLevelTest.php
index d87f66bb484..9d588a4e486 100644
--- a/apps/settings/tests/SetupChecks/LoggingLevelTest.php
+++ b/apps/settings/tests/SetupChecks/LoggingLevelTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\LoggingLevel;
use OCP\IConfig;
@@ -60,7 +60,7 @@ class LoggingLevelTest extends TestCase {
}
/** @dataProvider dataRun */
- public function testRun(mixed $value, string $expected): void {
+ public function testRun(string|int $value, string $expected): void {
$this->urlGenerator->method('linkToDocs')->willReturn('admin-logging');
$this->config->expects(self::once())
diff --git a/apps/settings/tests/SetupChecks/OcxProvicersTest.php b/apps/settings/tests/SetupChecks/OcxProvicersTest.php
index 4c2b36a8325..8e5a2c1b88b 100644
--- a/apps/settings/tests/SetupChecks/OcxProvicersTest.php
+++ b/apps/settings/tests/SetupChecks/OcxProvicersTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\OcxProviders;
use OCP\Http\Client\IClientService;
@@ -30,9 +30,7 @@ class OcxProvicersTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- /** @var IL10N|MockObject */
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
diff --git a/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php b/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php
index 4fba60cf72f..3722346219a 100644
--- a/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php
+++ b/apps/settings/tests/SetupChecks/PhpDefaultCharsetTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\PhpDefaultCharset;
use OCP\IL10N;
@@ -21,8 +21,7 @@ class PhpDefaultCharsetTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
diff --git a/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php b/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php
index 69194df81c5..de509347044 100644
--- a/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php
+++ b/apps/settings/tests/SetupChecks/PhpOutputBufferingTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\PhpOutputBuffering;
use OCP\IL10N;
@@ -21,8 +21,7 @@ class PhpOutputBufferingTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
diff --git a/apps/settings/tests/SetupChecks/SecurityHeadersTest.php b/apps/settings/tests/SetupChecks/SecurityHeadersTest.php
index d8bb51d47c6..e7d87775485 100644
--- a/apps/settings/tests/SetupChecks/SecurityHeadersTest.php
+++ b/apps/settings/tests/SetupChecks/SecurityHeadersTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\SecurityHeaders;
use OCP\Http\Client\IClientService;
@@ -20,19 +20,17 @@ use Psr\Log\LoggerInterface;
use Test\TestCase;
class SecurityHeadersTest extends TestCase {
- private IL10N|MockObject $l10n;
- private IConfig|MockObject $config;
- private IURLGenerator|MockObject $urlGenerator;
- private IClientService|MockObject $clientService;
- private LoggerInterface|MockObject $logger;
- private SecurityHeaders|MockObject $setupcheck;
+ private IL10N&MockObject $l10n;
+ private IConfig&MockObject $config;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IClientService&MockObject $clientService;
+ private LoggerInterface&MockObject $logger;
+ private SecurityHeaders&MockObject $setupcheck;
protected function setUp(): void {
parent::setUp();
- /** @var IL10N|MockObject */
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
@@ -92,7 +90,7 @@ class SecurityHeadersTest extends TestCase {
$this->assertEquals(SetupResult::WARNING, $result->getSeverity());
}
- public function dataSuccess(): array {
+ public static function dataSuccess(): array {
return [
// description => modifiedHeaders
'basic' => [[]],
@@ -112,7 +110,7 @@ class SecurityHeadersTest extends TestCase {
/**
* @dataProvider dataSuccess
*/
- public function testSuccess($headers): void {
+ public function testSuccess(array $headers): void {
$headers = array_merge(
[
'X-XSS-Protection' => '1; mode=block',
@@ -138,7 +136,7 @@ class SecurityHeadersTest extends TestCase {
$this->assertEquals(SetupResult::SUCCESS, $result->getSeverity());
}
- public function dataFailure(): array {
+ public static function dataFailure(): array {
return [
// description => modifiedHeaders
'x-robots-none' => [['X-Robots-Tag' => 'none'], "- The `X-Robots-Tag` HTTP header is not set to `noindex,nofollow`. This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.\n"],
diff --git a/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php b/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php
index 4bf529da6bb..6c75df47aa0 100644
--- a/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php
+++ b/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php
@@ -6,12 +6,12 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\SupportedDatabase;
use OCP\IDBConnection;
use OCP\IL10N;
-use OCP\IUrlGenerator;
+use OCP\IURLGenerator;
use OCP\Server;
use OCP\SetupCheck\SetupResult;
use Test\TestCase;
@@ -29,8 +29,8 @@ class SupportedDatabaseTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->l10n = $this->getMockBuilder(IL10N::class)->getMock();
- $this->urlGenerator = $this->getMockBuilder(IUrlGenerator::class)->getMock();
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->connection = Server::get(IDBConnection::class);
$this->check = new SupportedDatabase(
diff --git a/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php b/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php
index 983f2c427ad..14473a540ba 100644
--- a/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php
+++ b/apps/settings/tests/SetupChecks/WellKnownUrlsTest.php
@@ -6,7 +6,7 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Settings\Tests;
+namespace OCA\Settings\Tests\SetupChecks;
use OCA\Settings\SetupChecks\WellKnownUrls;
use OCP\Http\Client\IClientService;
@@ -20,19 +20,18 @@ use Psr\Log\LoggerInterface;
use Test\TestCase;
class WellKnownUrlsTest extends TestCase {
- private IL10N|MockObject $l10n;
- private IConfig|MockObject $config;
- private IURLGenerator|MockObject $urlGenerator;
- private IClientService|MockObject $clientService;
- private LoggerInterface|MockObject $logger;
- private WellKnownUrls|MockObject $setupcheck;
+ private IL10N&MockObject $l10n;
+ private IConfig&MockObject $config;
+ private IURLGenerator&MockObject $urlGenerator;
+ private IClientService&MockObject $clientService;
+ private LoggerInterface&MockObject $logger;
+ private WellKnownUrls&MockObject $setupcheck;
protected function setUp(): void {
parent::setUp();
- /** @var IL10N|MockObject */
- $this->l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()->getMock();
+ /** @var IL10N&MockObject */
+ $this->l10n = $this->createMock(IL10N::class);
$this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function ($message, array $replace) {
@@ -116,7 +115,7 @@ class WellKnownUrlsTest extends TestCase {
}
public function dataTestResponses(): array {
- $createResponse = function (int $statuscode, array $header = []): IResponse|MockObject {
+ $createResponse = function (int $statuscode, array $header = []): IResponse&MockObject {
$response = $this->createMock(IResponse::class);
$response->expects($this->any())
->method('getStatusCode')
diff --git a/apps/settings/tests/UserMigration/AccountMigratorTest.php b/apps/settings/tests/UserMigration/AccountMigratorTest.php
index cd3fd2f7aeb..ded905d226c 100644
--- a/apps/settings/tests/UserMigration/AccountMigratorTest.php
+++ b/apps/settings/tests/UserMigration/AccountMigratorTest.php
@@ -27,21 +27,12 @@ use Test\TestCase;
* @group DB
*/
class AccountMigratorTest extends TestCase {
-
private IUserManager $userManager;
-
private IAvatarManager $avatarManager;
-
private AccountMigrator $migrator;
-
- /** @var IImportSource|MockObject */
- private $importSource;
-
- /** @var IExportDestination|MockObject */
- private $exportDestination;
-
- /** @var OutputInterface|MockObject */
- private $output;
+ private IImportSource&MockObject $importSource;
+ private IExportDestination&MockObject $exportDestination;
+ private OutputInterface&MockObject $output;
private const ASSETS_DIR = __DIR__ . '/assets/';
@@ -72,9 +63,9 @@ class AccountMigratorTest extends TestCase {
parent::tearDown();
}
- public function dataImportExportAccount(): array {
+ public static function dataImportExportAccount(): array {
return array_map(
- function (string $filename) {
+ static function (string $filename): array {
$dataPath = static::ASSETS_DIR . $filename;
// For each account json file there is an avatar image and a config json file with the same basename
$basename = pathinfo($filename, PATHINFO_FILENAME);
@@ -111,17 +102,18 @@ class AccountMigratorTest extends TestCase {
->with($this->migrator->getId())
->willReturn(1);
+ $calls = [
+ [static::REGEX_ACCOUNT_FILE, json_encode($importData)],
+ [static::REGEX_CONFIG_FILE, json_encode($importConfig)],
+ ];
$this->importSource
->expects($this->exactly(2))
->method('getFileContents')
- ->withConsecutive(
- [$this->matchesRegularExpression(static::REGEX_ACCOUNT_FILE)],
- [$this->matchesRegularExpression(static::REGEX_CONFIG_FILE)],
- )
- ->willReturnOnConsecutiveCalls(
- json_encode($importData),
- json_encode($importConfig),
- );
+ ->willReturnCallback(function ($path) use (&$calls) {
+ $expected = array_shift($calls);
+ $this->assertMatchesRegularExpression($expected[0], $path);
+ return $expected[1];
+ });
$this->importSource
->expects($this->once())
@@ -152,13 +144,18 @@ class AccountMigratorTest extends TestCase {
);
}
+ $calls = [
+ [static::REGEX_ACCOUNT_FILE, new JsonMatches(json_encode($importData))],
+ [static::REGEX_CONFIG_FILE,new JsonMatches(json_encode($importConfig))],
+ ];
$this->exportDestination
->expects($this->exactly(2))
->method('addFileContents')
- ->withConsecutive(
- [$this->matchesRegularExpression(static::REGEX_ACCOUNT_FILE), new JsonMatches(json_encode($exportData))],
- [$this->matchesRegularExpression(static::REGEX_CONFIG_FILE), new JsonMatches(json_encode($exportConfig))],
- );
+ ->willReturnCallback(function ($path) use (&$calls) {
+ $expected = array_shift($calls);
+ $this->assertMatchesRegularExpression($expected[0], $path);
+ return $expected[1];
+ });
$this->exportDestination
->expects($this->once())
diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js
index bbbe6d400f2..e66e9d82c37 100644
--- a/apps/sharebymail/l10n/de.js
+++ b/apps/sharebymail/l10n/de.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail",
"Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ",
"Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an dich gesendet",
- "Share by mail" : "Geteilt über eine E-Mail",
+ "Share by mail" : "Teilen per E-Mail",
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde",
"We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gib in deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.",
"Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Habe eine ungültige E-Mail-Adresse erhalten.",
diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json
index a98ad30a28d..ca952b6d67c 100644
--- a/apps/sharebymail/l10n/de.json
+++ b/apps/sharebymail/l10n/de.json
@@ -11,7 +11,7 @@
"{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail",
"Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ",
"Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an dich gesendet",
- "Share by mail" : "Geteilt über eine E-Mail",
+ "Share by mail" : "Teilen per E-Mail",
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde",
"We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gib in deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.",
"Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Habe eine ungültige E-Mail-Adresse erhalten.",
diff --git a/apps/sharebymail/l10n/de_DE.js b/apps/sharebymail/l10n/de_DE.js
index 338d60108cd..16e66447462 100644
--- a/apps/sharebymail/l10n/de_DE.js
+++ b/apps/sharebymail/l10n/de_DE.js
@@ -13,7 +13,7 @@ OC.L10N.register(
"{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail",
"Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ",
"Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt ",
- "Share by mail" : "Geteilt über eine E-Mail",
+ "Share by mail" : "Teilen per E-Mail",
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde",
"We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.",
"Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Es wurde eine ungültige E-Mail-Adresse angegeben.",
diff --git a/apps/sharebymail/l10n/de_DE.json b/apps/sharebymail/l10n/de_DE.json
index 27ee126b8f0..752bc7681c5 100644
--- a/apps/sharebymail/l10n/de_DE.json
+++ b/apps/sharebymail/l10n/de_DE.json
@@ -11,7 +11,7 @@
"{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail",
"Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ",
"Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt ",
- "Share by mail" : "Geteilt über eine E-Mail",
+ "Share by mail" : "Teilen per E-Mail",
"Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde",
"We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.",
"Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Es wurde eine ungültige E-Mail-Adresse angegeben.",
diff --git a/apps/weather_status/l10n/ko.js b/apps/weather_status/l10n/ko.js
index 6f28af490e8..9af97446624 100644
--- a/apps/weather_status/l10n/ko.js
+++ b/apps/weather_status/l10n/ko.js
@@ -7,11 +7,44 @@ OC.L10N.register(
"Error" : "오류",
"Weather status" : "날씨 현황",
"Weather status in your dashboard" : "내 대시보드에 있는 날씨 현황",
- "Detect location" : "위치 감지",
- "Set custom address" : "주소 설정",
- "Favorites" : "즐겨찾기",
+ "Weather status integrated in the Dashboard app.\n The geographic location can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다.",
+ "{temperature} {unit} clear sky later today" : "{temperature} {unit} 오늘 오후 늦게 맑음",
+ "{temperature} {unit} clear sky" : "{temperature} {unit} 맑음",
+ "{temperature} {unit} cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 흐림 ",
+ "{temperature} {unit} cloudy" : "{temperature} {unit} 흐림 ",
+ "{temperature} {unit} snow and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 눈",
+ "{temperature} {unit} snow and thunder" : "{temperature} {unit} 천둥·번개를 동반한 눈",
+ "{temperature} {unit} snow showers and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 소나기눈",
+ "{temperature} {unit} snow showers and thunder" : "{temperature} {unit} 천둥·번개를 동반한 소나기눈",
+ "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개와 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature} {unit} 천둥·번개와 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기눈",
+ "{temperature} {unit} snow showers" : "{temperature} {unit} 소나기눈",
+ "{temperature} {unit} snow showers and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow showers and polar twilight" : "{temperature} {unit} 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow later today" : "{temperature} {unit} 오늘 오후 늦게 눈",
+ "{temperature} {unit} snow" : "{temperature} {unit} 눈",
+ "{temperature} {unit} fair weather later today" : "{temperature} {unit} 오늘 오후 늦게 맑음",
+ "{temperature} {unit} fair weather" : "{temperature} {unit} 맑음",
+ "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 구름 조금",
+ "{temperature} {unit} partly cloudy" : "{temperature} {unit} 구름 조금",
+ "{temperature} {unit} foggy later today" : "{temperature} {unit} 오늘 오후 늦게 안개",
+ "{temperature} {unit} foggy" : "{temperature} {unit} 안개",
+ "{temperature} {unit} light rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 약한 비",
+ "{temperature} {unit} light rainfall" : "{temperature} {unit} 약한 비",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 비",
+ "{temperature} {unit} rainfall" : "{temperature} {unit} 비",
+ "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 거센 비",
+ "{temperature} {unit} heavy rainfall" : "{temperature} {unit} 거센 비",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기",
+ "{temperature} {unit} rainfall showers" : "{temperature} {unit} 소나기",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 약한 소나기",
+ "{temperature} {unit} light rainfall showers" : "{temperature} {unit} 약한 소나기",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 거센 소나기",
+ "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} 거센 소나기",
"More weather for {adr}" : "{adr} 날씨 더 보기",
"Loading weather" : "날씨 불러오는 중",
+ "Set location for weather" : "날씨 위치 설정",
"Remove from favorites" : "즐겨찾기에서 제거",
"Add as favorite" : "즐겨찾기로 추가",
"You are not logged in." : "당신은 로그인하지 않았습니다.",
@@ -22,7 +55,9 @@ OC.L10N.register(
"There was an error setting the location." : "주소를 설정하는 동안 오류가 발생했습니다.",
"There was an error saving the mode." : "모드 저장에 오류가 있습니다.",
"There was an error using personal address." : "개인 주소를 사용하는 동안 오류가 발생했습니다.",
- "Set location for weather" : "날씨 위치 설정",
- "Weather status integrated in the Dashboard app.\n User's position can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다."
+ "Unknown weather code" : "알 수 없는 날씨 코드",
+ "Detect location" : "위치 감지",
+ "Set custom address" : "주소 설정",
+ "Favorites" : "즐겨찾기"
},
"nplurals=1; plural=0;");
diff --git a/apps/weather_status/l10n/ko.json b/apps/weather_status/l10n/ko.json
index b07606e36ae..1a7bbaa4d64 100644
--- a/apps/weather_status/l10n/ko.json
+++ b/apps/weather_status/l10n/ko.json
@@ -5,11 +5,44 @@
"Error" : "오류",
"Weather status" : "날씨 현황",
"Weather status in your dashboard" : "내 대시보드에 있는 날씨 현황",
- "Detect location" : "위치 감지",
- "Set custom address" : "주소 설정",
- "Favorites" : "즐겨찾기",
+ "Weather status integrated in the Dashboard app.\n The geographic location can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다.",
+ "{temperature} {unit} clear sky later today" : "{temperature} {unit} 오늘 오후 늦게 맑음",
+ "{temperature} {unit} clear sky" : "{temperature} {unit} 맑음",
+ "{temperature} {unit} cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 흐림 ",
+ "{temperature} {unit} cloudy" : "{temperature} {unit} 흐림 ",
+ "{temperature} {unit} snow and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 눈",
+ "{temperature} {unit} snow and thunder" : "{temperature} {unit} 천둥·번개를 동반한 눈",
+ "{temperature} {unit} snow showers and thunder later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개를 동반한 소나기눈",
+ "{temperature} {unit} snow showers and thunder" : "{temperature} {unit} 천둥·번개를 동반한 소나기눈",
+ "{temperature} {unit} snow showers, thunder and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 천둥·번개와 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow showers, thunder and polar twilight" : "{temperature} {unit} 천둥·번개와 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기눈",
+ "{temperature} {unit} snow showers" : "{temperature} {unit} 소나기눈",
+ "{temperature} {unit} snow showers and polar twilight later today" : "{temperature} {unit} 오늘 오후 늦게 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow showers and polar twilight" : "{temperature} {unit} 극야를 동반한 소나기눈",
+ "{temperature} {unit} snow later today" : "{temperature} {unit} 오늘 오후 늦게 눈",
+ "{temperature} {unit} snow" : "{temperature} {unit} 눈",
+ "{temperature} {unit} fair weather later today" : "{temperature} {unit} 오늘 오후 늦게 맑음",
+ "{temperature} {unit} fair weather" : "{temperature} {unit} 맑음",
+ "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} 오늘 오후 늦게 구름 조금",
+ "{temperature} {unit} partly cloudy" : "{temperature} {unit} 구름 조금",
+ "{temperature} {unit} foggy later today" : "{temperature} {unit} 오늘 오후 늦게 안개",
+ "{temperature} {unit} foggy" : "{temperature} {unit} 안개",
+ "{temperature} {unit} light rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 약한 비",
+ "{temperature} {unit} light rainfall" : "{temperature} {unit} 약한 비",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 비",
+ "{temperature} {unit} rainfall" : "{temperature} {unit} 비",
+ "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} 오늘 오후 늦게 거센 비",
+ "{temperature} {unit} heavy rainfall" : "{temperature} {unit} 거센 비",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 소나기",
+ "{temperature} {unit} rainfall showers" : "{temperature} {unit} 소나기",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 약한 소나기",
+ "{temperature} {unit} light rainfall showers" : "{temperature} {unit} 약한 소나기",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} 오늘 오후 늦게 거센 소나기",
+ "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} 거센 소나기",
"More weather for {adr}" : "{adr} 날씨 더 보기",
"Loading weather" : "날씨 불러오는 중",
+ "Set location for weather" : "날씨 위치 설정",
"Remove from favorites" : "즐겨찾기에서 제거",
"Add as favorite" : "즐겨찾기로 추가",
"You are not logged in." : "당신은 로그인하지 않았습니다.",
@@ -20,7 +53,9 @@
"There was an error setting the location." : "주소를 설정하는 동안 오류가 발생했습니다.",
"There was an error saving the mode." : "모드 저장에 오류가 있습니다.",
"There was an error using personal address." : "개인 주소를 사용하는 동안 오류가 발생했습니다.",
- "Set location for weather" : "날씨 위치 설정",
- "Weather status integrated in the Dashboard app.\n User's position can be automatically determined or manually defined. A 6 hours forecast is then displayed.\n This status can also be integrated in other places like the Calendar app." : "날씨 현황이 대시보드 앱에 통합되었습니다.\n사용자의 현재 위치를 자동 혹은 수동으로 지정할 수 있습니다. 그 후 6시간의 일기예보가 표시됩니다.\n날씨 현황은 달력 앱과 같이 다른 곳에서도 통합될 수 있습니다."
+ "Unknown weather code" : "알 수 없는 날씨 코드",
+ "Detect location" : "위치 감지",
+ "Set custom address" : "주소 설정",
+ "Favorites" : "즐겨찾기"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file