aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/admin_audit/l10n/es_EC.js7
-rw-r--r--apps/admin_audit/l10n/es_EC.json5
-rw-r--r--apps/dashboard/l10n/es_EC.js28
-rw-r--r--apps/dashboard/l10n/es_EC.json26
-rw-r--r--apps/dashboard/l10n/fa.js2
-rw-r--r--apps/dashboard/l10n/fa.json2
-rw-r--r--apps/dav/openapi.json66
-rw-r--r--apps/encryption/l10n/fa.js2
-rw-r--r--apps/encryption/l10n/fa.json2
-rw-r--r--apps/files/l10n/ar.js2
-rw-r--r--apps/files/l10n/ar.json2
-rw-r--r--apps/files/l10n/sl.js12
-rw-r--r--apps/files/l10n/sl.json12
-rw-r--r--apps/files/l10n/zh_CN.js1
-rw-r--r--apps/files/l10n/zh_CN.json1
-rw-r--r--apps/files_sharing/l10n/ko.js2
-rw-r--r--apps/files_sharing/l10n/ko.json2
-rw-r--r--apps/files_sharing/openapi.json462
-rw-r--r--apps/provisioning_api/openapi.json66
-rw-r--r--apps/settings/l10n/ar.js4
-rw-r--r--apps/settings/l10n/ar.json4
-rw-r--r--apps/settings/l10n/ko.js5
-rw-r--r--apps/settings/l10n/ko.json5
-rw-r--r--apps/theming/l10n/ko.js3
-rw-r--r--apps/theming/l10n/ko.json3
-rw-r--r--apps/theming/openapi.json230
-rw-r--r--apps/user_ldap/lib/Access.php8
-rw-r--r--apps/user_ldap/lib/Configuration.php6
-rw-r--r--apps/user_ldap/lib/Connection.php2
-rw-r--r--apps/user_ldap/lib/Jobs/Sync.php2
-rw-r--r--apps/user_ldap/lib/LDAP.php2
-rw-r--r--apps/user_ldap/lib/Migration/UUIDFixInsert.php2
-rw-r--r--apps/user_ldap/lib/User/Manager.php2
-rw-r--r--apps/user_ldap/lib/User/OfflineUser.php2
-rw-r--r--apps/user_ldap/lib/User/User.php6
-rw-r--r--apps/user_ldap/tests/Group_LDAPTest.php6
-rw-r--r--apps/user_ldap/tests/Integration/AbstractIntegrationTest.php2
-rw-r--r--apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php4
-rw-r--r--apps/user_ldap/tests/User_LDAPTest.php2
-rw-r--r--apps/user_status/openapi.json110
-rw-r--r--core/Controller/ClientFlowLoginController.php4
-rw-r--r--core/Controller/ClientFlowLoginV2Controller.php4
-rw-r--r--core/Controller/CssController.php2
-rw-r--r--core/Controller/JsController.php2
-rw-r--r--core/Controller/LoginController.php2
-rw-r--r--core/Controller/NavigationController.php4
-rw-r--r--core/ajax/update.php9
-rw-r--r--core/l10n/de_DE.js4
-rw-r--r--core/l10n/de_DE.json4
-rw-r--r--core/openapi.json154
-rw-r--r--lib/composer/composer/autoload_classmap.php2
-rw-r--r--lib/composer/composer/autoload_static.php2
-rw-r--r--lib/l10n/ar.js2
-rw-r--r--lib/l10n/ar.json2
-rw-r--r--lib/l10n/zh_CN.js1
-rw-r--r--lib/l10n/zh_CN.json1
-rw-r--r--lib/private/EventSourceFactory.php46
-rw-r--r--lib/private/Server.php13
-rw-r--r--lib/private/legacy/OC_EventSource.php13
-rw-r--r--lib/public/IEventSourceFactory.php38
-rw-r--r--lib/public/IServerContainer.php9
-rw-r--r--package-lock.json9
-rw-r--r--tests/lib/EventSourceFactoryTest.php37
-rw-r--r--tests/lib/ServerTest.php5
64 files changed, 371 insertions, 1110 deletions
diff --git a/apps/admin_audit/l10n/es_EC.js b/apps/admin_audit/l10n/es_EC.js
new file mode 100644
index 00000000000..f39d29b3ea7
--- /dev/null
+++ b/apps/admin_audit/l10n/es_EC.js
@@ -0,0 +1,7 @@
+OC.L10N.register(
+ "admin_audit",
+ {
+ "Auditing / Logging" : "Auditoría / Registro",
+ "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Proporciona capacidades de registro para Nextcloud, como el registro de accesos a archivos o acciones confidenciales."
+},
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/admin_audit/l10n/es_EC.json b/apps/admin_audit/l10n/es_EC.json
new file mode 100644
index 00000000000..4fb9f38c21f
--- /dev/null
+++ b/apps/admin_audit/l10n/es_EC.json
@@ -0,0 +1,5 @@
+{ "translations": {
+ "Auditing / Logging" : "Auditoría / Registro",
+ "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Proporciona capacidades de registro para Nextcloud, como el registro de accesos a archivos o acciones confidenciales."
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/dashboard/l10n/es_EC.js b/apps/dashboard/l10n/es_EC.js
new file mode 100644
index 00000000000..d9f3a53a765
--- /dev/null
+++ b/apps/dashboard/l10n/es_EC.js
@@ -0,0 +1,28 @@
+OC.L10N.register(
+ "dashboard",
+ {
+ "Dashboard" : "Tablero de control",
+ "Dashboard app" : "App Dashboard",
+ "Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! Users can add the widgets they like and change the background to their liking." : "Comienza tu día informado\n\nEl Dashboard de Nextcloud es tu punto de partida del día, dándote un\nresumen de tus próximas citas, emails urgentes, mensajes de chat,\npróximos tickets, últimos tweets y mucho más! Los usuarios pueden agregr widgets\nque le gusten y cambiar el fondo a su gusto.",
+ "\"{title} icon\"" : "\"icono {title}\"",
+ "Customize" : "Personalizar",
+ "Edit widgets" : "Editar widgets",
+ "Get more widgets from the App Store" : "Conseguir más widgets desde la tienda de Apps",
+ "Weather service" : "Servicio meteorológico",
+ "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Por privacidad, los datos meteorológicos son solicitados por tu servidor Nextcloud en tu nombre de tal forma que el servicio no recibe información personal.",
+ "Weather data from Met.no" : "Datos meteorológicos de Met.no",
+ "geocoding with Nominatim" : "geocoding con Nominatim",
+ "elevation data from OpenTopoData" : "datos de elevación de OpenTopoData",
+ "Weather" : "Clima",
+ "Status" : "Estatus",
+ "Good morning" : "Buenos días",
+ "Good morning, {name}" : "Buenos días, {name}",
+ "Good afternoon" : "Buenas tardes",
+ "Good afternoon, {name}" : "Buenas tardes, {name}",
+ "Good evening" : "Buenas noches",
+ "Good evening, {name}" : "Buenas noches, {name}",
+ "Hello" : "Hola",
+ "Hello, {name}" : "Hola, {name}",
+ "Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Comienza tu día informado\n\nEl Dashboard de Nextcloud es tu punto de partida del día, dándote un\nresumen de tus próximas citas, emails urgentes, mensajes de chat,\npróximos tickets, últimos tweets y mucho más! Los usuarios pueden agregr widgets\nque le gusten y cambiar el fondo a su gusto."
+},
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/dashboard/l10n/es_EC.json b/apps/dashboard/l10n/es_EC.json
new file mode 100644
index 00000000000..5cd3c41b550
--- /dev/null
+++ b/apps/dashboard/l10n/es_EC.json
@@ -0,0 +1,26 @@
+{ "translations": {
+ "Dashboard" : "Tablero de control",
+ "Dashboard app" : "App Dashboard",
+ "Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! Users can add the widgets they like and change the background to their liking." : "Comienza tu día informado\n\nEl Dashboard de Nextcloud es tu punto de partida del día, dándote un\nresumen de tus próximas citas, emails urgentes, mensajes de chat,\npróximos tickets, últimos tweets y mucho más! Los usuarios pueden agregr widgets\nque le gusten y cambiar el fondo a su gusto.",
+ "\"{title} icon\"" : "\"icono {title}\"",
+ "Customize" : "Personalizar",
+ "Edit widgets" : "Editar widgets",
+ "Get more widgets from the App Store" : "Conseguir más widgets desde la tienda de Apps",
+ "Weather service" : "Servicio meteorológico",
+ "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Por privacidad, los datos meteorológicos son solicitados por tu servidor Nextcloud en tu nombre de tal forma que el servicio no recibe información personal.",
+ "Weather data from Met.no" : "Datos meteorológicos de Met.no",
+ "geocoding with Nominatim" : "geocoding con Nominatim",
+ "elevation data from OpenTopoData" : "datos de elevación de OpenTopoData",
+ "Weather" : "Clima",
+ "Status" : "Estatus",
+ "Good morning" : "Buenos días",
+ "Good morning, {name}" : "Buenos días, {name}",
+ "Good afternoon" : "Buenas tardes",
+ "Good afternoon, {name}" : "Buenas tardes, {name}",
+ "Good evening" : "Buenas noches",
+ "Good evening, {name}" : "Buenas noches, {name}",
+ "Hello" : "Hola",
+ "Hello, {name}" : "Hola, {name}",
+ "Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Comienza tu día informado\n\nEl Dashboard de Nextcloud es tu punto de partida del día, dándote un\nresumen de tus próximas citas, emails urgentes, mensajes de chat,\npróximos tickets, últimos tweets y mucho más! Los usuarios pueden agregr widgets\nque le gusten y cambiar el fondo a su gusto."
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/dashboard/l10n/fa.js b/apps/dashboard/l10n/fa.js
index 15a848cd36c..c2a823ab4b1 100644
--- a/apps/dashboard/l10n/fa.js
+++ b/apps/dashboard/l10n/fa.js
@@ -3,12 +3,14 @@ OC.L10N.register(
{
"Dashboard" : "پیشخوان",
"Dashboard app" : "برنامه پیشخوان",
+ "\"{title} icon\"" : "«شکلک {title}»",
"Customize" : "سفارشی‌سازی",
"Edit widgets" : "ویرایش ابزارک‌ها",
"Get more widgets from the App Store" : "ویجت های بیشتر را از اپ استور دریافت کنید",
"Weather service" : "سامانه هواشناسی",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "برای حفظ حریم خصوصی شما، داده های آب و هوا توسط سرور نکست‌کلود شما از طرف شما درخواست می شود، بنابراین سرویس آب و هوا هیچ اطلاعات شخصی دریافت نمی کند.",
"Weather data from Met.no" : "اطلاعات هواشناسی از Met.no",
+ "elevation data from OpenTopoData" : "داده‌های ارتفاع از OpenTopoData",
"Weather" : "آب و هوا",
"Status" : "وضعیت",
"Good morning" : "صبح بخیر",
diff --git a/apps/dashboard/l10n/fa.json b/apps/dashboard/l10n/fa.json
index eff0030d59d..ef262e796a5 100644
--- a/apps/dashboard/l10n/fa.json
+++ b/apps/dashboard/l10n/fa.json
@@ -1,12 +1,14 @@
{ "translations": {
"Dashboard" : "پیشخوان",
"Dashboard app" : "برنامه پیشخوان",
+ "\"{title} icon\"" : "«شکلک {title}»",
"Customize" : "سفارشی‌سازی",
"Edit widgets" : "ویرایش ابزارک‌ها",
"Get more widgets from the App Store" : "ویجت های بیشتر را از اپ استور دریافت کنید",
"Weather service" : "سامانه هواشناسی",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "برای حفظ حریم خصوصی شما، داده های آب و هوا توسط سرور نکست‌کلود شما از طرف شما درخواست می شود، بنابراین سرویس آب و هوا هیچ اطلاعات شخصی دریافت نمی کند.",
"Weather data from Met.no" : "اطلاعات هواشناسی از Met.no",
+ "elevation data from OpenTopoData" : "داده‌های ارتفاع از OpenTopoData",
"Weather" : "آب و هوا",
"Status" : "وضعیت",
"Good morning" : "صبح بخیر",
diff --git a/apps/dav/openapi.json b/apps/dav/openapi.json
index 21a4500db09..d3d3ee93175 100644
--- a/apps/dav/openapi.json
+++ b/apps/dav/openapi.json
@@ -158,27 +158,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -188,27 +168,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -218,27 +178,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
diff --git a/apps/encryption/l10n/fa.js b/apps/encryption/l10n/fa.js
index 5e3f4857ec7..f8e904c5618 100644
--- a/apps/encryption/l10n/fa.js
+++ b/apps/encryption/l10n/fa.js
@@ -28,6 +28,8 @@ OC.L10N.register(
"Bad Signature" : "امضاء نامعتبر",
"Missing Signature" : "امضاء از دست رفته",
"one-time password for server-side-encryption" : "رمز عبور یک بار برای رمزگذاری سمت سرور",
+ "Encryption password" : "رمزنگاری گذرواژه",
+ "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "مدیریت، رمزنگاری سمت کارساز را فعال کرده است. پرونده‌های شما با گذرواژه <strong>%s</strong> رمزنگاری شدند.",
"Default encryption module" : "ماژول رمزگذاری پیش فرض",
"Default encryption module for server-side encryption" : "ماژول رمزگذاری پیش فرض برای رمزگذاری سمت سرور",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "برنامه رمزگذاری فعال شده است اما کلیدهای شما اولیه نیستند، لطفاً از سیستم خارج و دوباره وارد سیستم شوید.",
diff --git a/apps/encryption/l10n/fa.json b/apps/encryption/l10n/fa.json
index 5b6ae174b79..71286f5bdd7 100644
--- a/apps/encryption/l10n/fa.json
+++ b/apps/encryption/l10n/fa.json
@@ -26,6 +26,8 @@
"Bad Signature" : "امضاء نامعتبر",
"Missing Signature" : "امضاء از دست رفته",
"one-time password for server-side-encryption" : "رمز عبور یک بار برای رمزگذاری سمت سرور",
+ "Encryption password" : "رمزنگاری گذرواژه",
+ "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "مدیریت، رمزنگاری سمت کارساز را فعال کرده است. پرونده‌های شما با گذرواژه <strong>%s</strong> رمزنگاری شدند.",
"Default encryption module" : "ماژول رمزگذاری پیش فرض",
"Default encryption module for server-side encryption" : "ماژول رمزگذاری پیش فرض برای رمزگذاری سمت سرور",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "برنامه رمزگذاری فعال شده است اما کلیدهای شما اولیه نیستند، لطفاً از سیستم خارج و دوباره وارد سیستم شوید.",
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index 5334215fcd2..b1981e701df 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -49,7 +49,7 @@ OC.L10N.register(
"Pending" : "قيد الانتظار",
"Unable to determine date" : "تعذر تحديد التاريخ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
- "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر، الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
"Storage is temporarily not available" : "وحدة التخزين غير متوفرة",
"Could not move \"{file}\", target exists" : "لا يمكن نقل \"{file}\", الملف موجود بالفعل هناك",
"Could not move \"{file}\"" : "لا يمكن نقل \"{file}\"",
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 0f54e7adfed..2fe334a213b 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -47,7 +47,7 @@
"Pending" : "قيد الانتظار",
"Unable to determine date" : "تعذر تحديد التاريخ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
- "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر، الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
"Storage is temporarily not available" : "وحدة التخزين غير متوفرة",
"Could not move \"{file}\", target exists" : "لا يمكن نقل \"{file}\", الملف موجود بالفعل هناك",
"Could not move \"{file}\"" : "لا يمكن نقل \"{file}\"",
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index 1ff4c331af8..e138a2b6f9b 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -110,6 +110,7 @@ OC.L10N.register(
"Upload file" : "Pošlji datoteko",
"Recent" : "Nedavne",
"This file has the tag {tag}" : "Datoteka je označena z oznako {tag}",
+ "This file has the tags {firstTags} and {lastTag}" : "Ta datoteka ima oznake {firstTags} in {lastTag}",
"Not favorited" : "Ni priljubljeno",
"Remove from favorites" : "Odstrani iz priljubljenih",
"Add to favorites" : "Dodaj med priljubljene",
@@ -169,10 +170,17 @@ OC.L10N.register(
"in %s" : "v %s",
"File Management" : "Upravljanje datotek",
"Reload current directory" : "Ponovno naloži trenutno mapo",
+ "Go to the \"{dir}\" directory" : "Pojdi v mapo »{dir}«",
+ "Select the row for {displayName}" : "Izbor vrstice za {displayName}",
"Open folder {name}" : "Odpri mapo {name}",
"Download file {name}" : "Prejmi datoteko {name}",
+ "\"{displayName}\" action executed successfully" : "Dejanje »{displayName}« je uspešno izvedeno",
+ "\"{displayName}\" action failed" : "Dejanje »{displayName}« je spodletelo",
+ "Total rows summary" : "Skupni povzetek vrstic",
"Select all" : "izberi vse",
"Unselect all" : "Odstrani izbor",
+ "\"{displayName}\" failed on some elements " : "Dejanje »{displayName}« je pri nekaterih predmetih spodletelo",
+ "\"{displayName}\" batch action executed successfully" : "Paketno dejanje »{displayName}« je uspešno izvedeno",
"ascending" : "naraščajoče",
"descending" : "padajoče",
"Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
@@ -190,13 +198,17 @@ OC.L10N.register(
"Invalid path selected" : "Izbrana je neveljavna pot",
"Unknown error" : "Neznana napaka",
"Ownership transfer request sent" : "Zahteva za prenos lastništva je poslana",
+ "Cannot transfer ownership of a file or folder you do not own" : "Ni mogoče prenesti lastništva datotek in map, katerih niste lastnik",
"Select file or folder to link to" : "Izbor datoteke ali mape za povezavo",
"Loading current folder" : "Poteka nalaganje trenutne mape",
"No files in here" : "V mapi ni datotek",
+ "No files or folders have been deleted yet" : "Ni še izbrisanih datotek in map",
"Go to the previous folder" : "Skoči na predhodno mapo",
"Go back" : "Skoči nazaj",
+ "Open the files app settings" : "Odpri nastavitve programa Datoteke",
"Files settings" : "Nastavitve datotek",
"File cannot be accessed" : "Do datoteke dostop ni mogoč",
+ "You might not have have permissions to view it, ask the sender to share it" : "Morda ni ustreznih dovoljenj za ogled. Prosite pošiljatelja za prilagoditev.",
"Show hidden files" : "Pokaži skrite datoteke",
"Crop image previews" : "Obreži slike predogleda",
"Additional settings" : "Dodatne nastavitve",
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index 0ebe0048dda..725d6b10864 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -108,6 +108,7 @@
"Upload file" : "Pošlji datoteko",
"Recent" : "Nedavne",
"This file has the tag {tag}" : "Datoteka je označena z oznako {tag}",
+ "This file has the tags {firstTags} and {lastTag}" : "Ta datoteka ima oznake {firstTags} in {lastTag}",
"Not favorited" : "Ni priljubljeno",
"Remove from favorites" : "Odstrani iz priljubljenih",
"Add to favorites" : "Dodaj med priljubljene",
@@ -167,10 +168,17 @@
"in %s" : "v %s",
"File Management" : "Upravljanje datotek",
"Reload current directory" : "Ponovno naloži trenutno mapo",
+ "Go to the \"{dir}\" directory" : "Pojdi v mapo »{dir}«",
+ "Select the row for {displayName}" : "Izbor vrstice za {displayName}",
"Open folder {name}" : "Odpri mapo {name}",
"Download file {name}" : "Prejmi datoteko {name}",
+ "\"{displayName}\" action executed successfully" : "Dejanje »{displayName}« je uspešno izvedeno",
+ "\"{displayName}\" action failed" : "Dejanje »{displayName}« je spodletelo",
+ "Total rows summary" : "Skupni povzetek vrstic",
"Select all" : "izberi vse",
"Unselect all" : "Odstrani izbor",
+ "\"{displayName}\" failed on some elements " : "Dejanje »{displayName}« je pri nekaterih predmetih spodletelo",
+ "\"{displayName}\" batch action executed successfully" : "Paketno dejanje »{displayName}« je uspešno izvedeno",
"ascending" : "naraščajoče",
"descending" : "padajoče",
"Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
@@ -188,13 +196,17 @@
"Invalid path selected" : "Izbrana je neveljavna pot",
"Unknown error" : "Neznana napaka",
"Ownership transfer request sent" : "Zahteva za prenos lastništva je poslana",
+ "Cannot transfer ownership of a file or folder you do not own" : "Ni mogoče prenesti lastništva datotek in map, katerih niste lastnik",
"Select file or folder to link to" : "Izbor datoteke ali mape za povezavo",
"Loading current folder" : "Poteka nalaganje trenutne mape",
"No files in here" : "V mapi ni datotek",
+ "No files or folders have been deleted yet" : "Ni še izbrisanih datotek in map",
"Go to the previous folder" : "Skoči na predhodno mapo",
"Go back" : "Skoči nazaj",
+ "Open the files app settings" : "Odpri nastavitve programa Datoteke",
"Files settings" : "Nastavitve datotek",
"File cannot be accessed" : "Do datoteke dostop ni mogoč",
+ "You might not have have permissions to view it, ask the sender to share it" : "Morda ni ustreznih dovoljenj za ogled. Prosite pošiljatelja za prilagoditev.",
"Show hidden files" : "Pokaži skrite datoteke",
"Crop image previews" : "Obreži slike predogleda",
"Additional settings" : "Dodatne nastavitve",
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 4d5a70d80fd..c15a252f04d 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -228,6 +228,7 @@ OC.L10N.register(
"Blank" : "空白",
"Unable to create new file from template" : "无法从模板创建新文件",
"Delete permanently" : "彻底删除",
+ "Open folder {displayName}" : "打开文件夹{displayName}",
"Set up templates folder" : "设置模板文件夹",
"Templates" : "模板",
"Create new templates folder" : "新建模板文件夹",
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index b0c3f12393b..1435ba9b39b 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -226,6 +226,7 @@
"Blank" : "空白",
"Unable to create new file from template" : "无法从模板创建新文件",
"Delete permanently" : "彻底删除",
+ "Open folder {displayName}" : "打开文件夹{displayName}",
"Set up templates folder" : "设置模板文件夹",
"Templates" : "模板",
"Create new templates folder" : "新建模板文件夹",
diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js
index deb47cc247e..ab2fd831e0b 100644
--- a/apps/files_sharing/l10n/ko.js
+++ b/apps/files_sharing/l10n/ko.js
@@ -119,6 +119,8 @@ OC.L10N.register(
"Reject" : "거절",
"This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "이 앱을 사용하여 Nextcloud 내에서 사용자간 파일을 공유할 수 있습니다. 앱을 활성화하면 관리자가 파일 공유를 허용할 그룹을 지정할 수 있습니다. 공유가 허용된 사용자는 Nextcloud 내의 다른 사용자나 그룹과 파일이나 폴더를 공유할 수 있습니다. 추가로 관리자가 링크 공유 기능을 활성화하면 Nextcloud 외부 사용자와 파일을 공유할 수 있는 외부 링크가 생성됩니다. 관리자는 암호나 만료 날짜 사용을 강제할 수 있으며, 공유 링크로 서버간 공유 기능이나 모바일 장치에서 공유를 활성화할 수 있습니다.\n공유 기능을 비활성화하면 서버에 있는 모든 공유된 파일이나 폴더를 삭제하며, 동기화 클라이언트나 모바일 앱에도 적용됩니다. 자세한 정보를 보려면 Nextcloud 문서를 참조하십시오.",
"Sharing" : "공유",
+ "Accept user and group shares by default" : "사용자 공유나 그룹 공유를 기본으로 허용함",
+ "Set default folder for accepted shares" : "허용한 공유의 기본 경로 설정",
"Reset" : "초기화",
"Invalid path selected" : "잘못된 경로가 선택됨",
"Unknown error" : "알 수 없는 오류",
diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json
index 46e9bd455eb..acce7832d22 100644
--- a/apps/files_sharing/l10n/ko.json
+++ b/apps/files_sharing/l10n/ko.json
@@ -117,6 +117,8 @@
"Reject" : "거절",
"This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "이 앱을 사용하여 Nextcloud 내에서 사용자간 파일을 공유할 수 있습니다. 앱을 활성화하면 관리자가 파일 공유를 허용할 그룹을 지정할 수 있습니다. 공유가 허용된 사용자는 Nextcloud 내의 다른 사용자나 그룹과 파일이나 폴더를 공유할 수 있습니다. 추가로 관리자가 링크 공유 기능을 활성화하면 Nextcloud 외부 사용자와 파일을 공유할 수 있는 외부 링크가 생성됩니다. 관리자는 암호나 만료 날짜 사용을 강제할 수 있으며, 공유 링크로 서버간 공유 기능이나 모바일 장치에서 공유를 활성화할 수 있습니다.\n공유 기능을 비활성화하면 서버에 있는 모든 공유된 파일이나 폴더를 삭제하며, 동기화 클라이언트나 모바일 앱에도 적용됩니다. 자세한 정보를 보려면 Nextcloud 문서를 참조하십시오.",
"Sharing" : "공유",
+ "Accept user and group shares by default" : "사용자 공유나 그룹 공유를 기본으로 허용함",
+ "Set default folder for accepted shares" : "허용한 공유의 기본 경로 설정",
"Reset" : "초기화",
"Invalid path selected" : "잘못된 경로가 선택됨",
"Unknown error" : "알 수 없는 오류",
diff --git a/apps/files_sharing/openapi.json b/apps/files_sharing/openapi.json
index 00cc171d5d9..59f94c5a5ea 100644
--- a/apps/files_sharing/openapi.json
+++ b/apps/files_sharing/openapi.json
@@ -1473,27 +1473,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1662,27 +1642,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1692,27 +1652,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1722,27 +1662,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1824,27 +1744,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1854,27 +1754,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2025,27 +1905,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2204,27 +2064,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2234,27 +2074,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2264,27 +2084,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2362,27 +2162,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2392,27 +2172,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2492,27 +2252,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2522,27 +2262,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2685,27 +2405,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2831,27 +2531,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3136,27 +2816,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3235,27 +2895,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3335,27 +2975,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3434,27 +3054,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3464,27 +3064,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
diff --git a/apps/provisioning_api/openapi.json b/apps/provisioning_api/openapi.json
index 70515312003..82ee9b16e31 100644
--- a/apps/provisioning_api/openapi.json
+++ b/apps/provisioning_api/openapi.json
@@ -1227,27 +1227,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1257,27 +1237,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1971,27 +1931,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
diff --git a/apps/settings/l10n/ar.js b/apps/settings/l10n/ar.js
index 2dc05771bf6..91d822a073f 100644
--- a/apps/settings/l10n/ar.js
+++ b/apps/settings/l10n/ar.js
@@ -121,7 +121,7 @@ OC.L10N.register(
"Copy" : "نسخ",
"Profile" : "الملف الشخصي",
"Enable" : "تفعيل",
- "Server-side encryption" : "التشفير مِن جانب الخادوم",
+ "Server-side encryption" : "التشفير مِن جانب الخادم",
"Enable server-side encryption" : "تشغيل التشفير مِن جانب الخادوم",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "في حال تفعيل التشفير، عملية رفع الملف المشفر سيتم تفعيلها في الخادم. يمكن تعطيل التشفير في وقت لاحق فقط اذا كانت حزمة التشفير المفعلة تدعم التعطيل، وجميع الشروط الاخرى (على سبيل المثال اعداد رمز الاستعادة) مشمول ضمن الحزمة.",
"Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "التشفير لوحدها لا تضمن حماية النظام بشكل كامل. يرجى اتباع التعليمات لمزيد من المعلومات والحصول على معلومات عن عمل تطبيق التشفير، واستخداماته العديد.",
@@ -139,7 +139,7 @@ OC.L10N.register(
"Details" : "التفاصيل",
"You are a member of the following groups:" : "إنك عضو في الفِرَق التالية:",
"Your email address" : "عنوانك البريدي",
- "No email address set" : "لم يتم إدخال أي عنوان للبريد الإلكتروني",
+ "No email address set" : "لم يتم تعيين بريد الكتروني",
"Language" : "اللغة",
"Help translate" : "ساعد في الترجمة",
"Your phone number" : "رقم هاتفك",
diff --git a/apps/settings/l10n/ar.json b/apps/settings/l10n/ar.json
index fb490b85f8f..e855cff461b 100644
--- a/apps/settings/l10n/ar.json
+++ b/apps/settings/l10n/ar.json
@@ -119,7 +119,7 @@
"Copy" : "نسخ",
"Profile" : "الملف الشخصي",
"Enable" : "تفعيل",
- "Server-side encryption" : "التشفير مِن جانب الخادوم",
+ "Server-side encryption" : "التشفير مِن جانب الخادم",
"Enable server-side encryption" : "تشغيل التشفير مِن جانب الخادوم",
"Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "في حال تفعيل التشفير، عملية رفع الملف المشفر سيتم تفعيلها في الخادم. يمكن تعطيل التشفير في وقت لاحق فقط اذا كانت حزمة التشفير المفعلة تدعم التعطيل، وجميع الشروط الاخرى (على سبيل المثال اعداد رمز الاستعادة) مشمول ضمن الحزمة.",
"Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "التشفير لوحدها لا تضمن حماية النظام بشكل كامل. يرجى اتباع التعليمات لمزيد من المعلومات والحصول على معلومات عن عمل تطبيق التشفير، واستخداماته العديد.",
@@ -137,7 +137,7 @@
"Details" : "التفاصيل",
"You are a member of the following groups:" : "إنك عضو في الفِرَق التالية:",
"Your email address" : "عنوانك البريدي",
- "No email address set" : "لم يتم إدخال أي عنوان للبريد الإلكتروني",
+ "No email address set" : "لم يتم تعيين بريد الكتروني",
"Language" : "اللغة",
"Help translate" : "ساعد في الترجمة",
"Your phone number" : "رقم هاتفك",
diff --git a/apps/settings/l10n/ko.js b/apps/settings/l10n/ko.js
index 467ab75ab56..2c110478ebc 100644
--- a/apps/settings/l10n/ko.js
+++ b/apps/settings/l10n/ko.js
@@ -261,6 +261,8 @@ OC.L10N.register(
"Your biography" : "내 소개문구",
"Details" : "자세히",
"You are a member of the following groups:" : "당신은 다음 그룹의 멤버입니다:",
+ "You are using <strong>{usage}</strong>" : "<strong>{usage}</strong>를 사용하고 있습니다.",
+ "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "전체 <strong>{totalSpace}</strong> 중 <strong>{usage}</strong>(<strong>{usageRelative}%</strong>)를 사용하고 있습니다.",
"Your full name" : "내 전체 이름",
"Email options" : "이메일 옵션",
"Primary email for password reset and notifications" : "암호 초기화 및 알림 수신용 주 이메일 주소",
@@ -284,11 +286,14 @@ OC.L10N.register(
"Unable to update language" : "언어를 갱신할 수 없음",
"No language set" : "언어가 설정되지 않음",
"Locale" : "지역",
+ "Week starts on {firstDayOfWeek}" : "일주일이 {firstDayOfWeek}에 시작함",
+ "Your location" : "내 위치",
"Your organisation" : "내 조직",
"Your phone number" : "내 휴대폰 번호",
"Edit your Profile visibility" : "프로필 표시 여부 편집",
"Enable Profile" : "프로필 활성화",
"Unable to update profile enabled state" : "프로필 활성화 여부를 갱신할 수 없음",
+ "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "표시 여부나 표시 범위 설정은 더 좁은 쪽이 우선 적용됩니다. 예를 들어, 표시 여부는 \"전체 공개\", 표시 범위는 \"개인\"으로 설정되어 있다면, 해당 항목은 \"개인\"에게만 보여집니다.",
"Unable to update visibility of {displayId}" : "{displayId}의 표시 여부를 갱신할 수 없음",
"Your role" : "내 직책",
"Your Twitter handle" : "내 트위터",
diff --git a/apps/settings/l10n/ko.json b/apps/settings/l10n/ko.json
index 1ac6952a6e3..554d228786e 100644
--- a/apps/settings/l10n/ko.json
+++ b/apps/settings/l10n/ko.json
@@ -259,6 +259,8 @@
"Your biography" : "내 소개문구",
"Details" : "자세히",
"You are a member of the following groups:" : "당신은 다음 그룹의 멤버입니다:",
+ "You are using <strong>{usage}</strong>" : "<strong>{usage}</strong>를 사용하고 있습니다.",
+ "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "전체 <strong>{totalSpace}</strong> 중 <strong>{usage}</strong>(<strong>{usageRelative}%</strong>)를 사용하고 있습니다.",
"Your full name" : "내 전체 이름",
"Email options" : "이메일 옵션",
"Primary email for password reset and notifications" : "암호 초기화 및 알림 수신용 주 이메일 주소",
@@ -282,11 +284,14 @@
"Unable to update language" : "언어를 갱신할 수 없음",
"No language set" : "언어가 설정되지 않음",
"Locale" : "지역",
+ "Week starts on {firstDayOfWeek}" : "일주일이 {firstDayOfWeek}에 시작함",
+ "Your location" : "내 위치",
"Your organisation" : "내 조직",
"Your phone number" : "내 휴대폰 번호",
"Edit your Profile visibility" : "프로필 표시 여부 편집",
"Enable Profile" : "프로필 활성화",
"Unable to update profile enabled state" : "프로필 활성화 여부를 갱신할 수 없음",
+ "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "표시 여부나 표시 범위 설정은 더 좁은 쪽이 우선 적용됩니다. 예를 들어, 표시 여부는 \"전체 공개\", 표시 범위는 \"개인\"으로 설정되어 있다면, 해당 항목은 \"개인\"에게만 보여집니다.",
"Unable to update visibility of {displayId}" : "{displayId}의 표시 여부를 갱신할 수 없음",
"Your role" : "내 직책",
"Your Twitter handle" : "내 트위터",
diff --git a/apps/theming/l10n/ko.js b/apps/theming/l10n/ko.js
index 59de0a466aa..3aac6e95760 100644
--- a/apps/theming/l10n/ko.js
+++ b/apps/theming/l10n/ko.js
@@ -53,7 +53,10 @@ OC.L10N.register(
"Upload new favicon" : "새 파비콘 업로드",
"User settings" : "사용자 설정",
"Keyboard shortcuts" : "키보드 단축키",
+ "In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "특정 상황에서, 키보드 단축키는 접근성 도구의 동작과 간섭을 일으킬 수 있습니다. 간섭 방지와 접근성 도구의 정확한 동작을 위해, 이곳에서 모든 키보드 단축키를 비활성화할 수 있습니다. 이는 앱에서 사용할 수 있는 모든 단축키 또한 비활성화합니다.",
+ "Disable all keyboard shortcuts" : "모든 키보드 단축키 비활성화",
"Background" : "배경",
+ "Set a custom background" : "나만의 배경화면 설정",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "보편적 접근성은 매우 중요합니다. 저희는 웹 표준을 준수하며, 마우스 혹은 스크린리더와 같은 보조 소프트웨어 없이도 정상적인 사용이 가능한지에 대해 확인하고 있습니다. 또한, {guidelines}웹 컨텐츠 접근성 가이드라인{linkend} 2.1을 AA 수준 및 AAA 수준의 고대비 테마에서 준수하기 위해 노력하고 있습니다. ",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "사용 중 문제가 발생했을 경우, {issuetracker}이슈 트래커{linkend}에 보고해주시기 바랍니다. 또한 디자인 부분에 참여하고 싶다면, {designteam}저희 디자인 팀{linkend}과 함께해주세요!",
"Change color" : "색깔 바꾸기",
diff --git a/apps/theming/l10n/ko.json b/apps/theming/l10n/ko.json
index 95b05b6e64f..a1dfc51f901 100644
--- a/apps/theming/l10n/ko.json
+++ b/apps/theming/l10n/ko.json
@@ -51,7 +51,10 @@
"Upload new favicon" : "새 파비콘 업로드",
"User settings" : "사용자 설정",
"Keyboard shortcuts" : "키보드 단축키",
+ "In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "특정 상황에서, 키보드 단축키는 접근성 도구의 동작과 간섭을 일으킬 수 있습니다. 간섭 방지와 접근성 도구의 정확한 동작을 위해, 이곳에서 모든 키보드 단축키를 비활성화할 수 있습니다. 이는 앱에서 사용할 수 있는 모든 단축키 또한 비활성화합니다.",
+ "Disable all keyboard shortcuts" : "모든 키보드 단축키 비활성화",
"Background" : "배경",
+ "Set a custom background" : "나만의 배경화면 설정",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "보편적 접근성은 매우 중요합니다. 저희는 웹 표준을 준수하며, 마우스 혹은 스크린리더와 같은 보조 소프트웨어 없이도 정상적인 사용이 가능한지에 대해 확인하고 있습니다. 또한, {guidelines}웹 컨텐츠 접근성 가이드라인{linkend} 2.1을 AA 수준 및 AAA 수준의 고대비 테마에서 준수하기 위해 노력하고 있습니다. ",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "사용 중 문제가 발생했을 경우, {issuetracker}이슈 트래커{linkend}에 보고해주시기 바랍니다. 또한 디자인 부분에 참여하고 싶다면, {designteam}저희 디자인 팀{linkend}과 함께해주세요!",
"Change color" : "색깔 바꾸기",
diff --git a/apps/theming/openapi.json b/apps/theming/openapi.json
index 298ec5722d5..9ba6919161f 100644
--- a/apps/theming/openapi.json
+++ b/apps/theming/openapi.json
@@ -654,28 +654,8 @@
"content": {
"*/*": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- }
+ "type": "string",
+ "format": "binary"
}
}
}
@@ -685,27 +665,7 @@
"content": {
"text/html": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -772,27 +732,7 @@
"content": {
"application/json": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "$ref": "#/components/schemas/Background"
- }
- }
- }
- }
+ "$ref": "#/components/schemas/Background"
}
}
}
@@ -804,31 +744,11 @@
"schema": {
"type": "object",
"required": [
- "ocs"
+ "error"
],
"properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "error"
- ],
- "properties": {
- "error": {
- "type": "string"
- }
- }
- }
- }
+ "error": {
+ "type": "string"
}
}
}
@@ -842,31 +762,11 @@
"schema": {
"type": "object",
"required": [
- "ocs"
+ "error"
],
"properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "error"
- ],
- "properties": {
- "error": {
- "type": "string"
- }
- }
- }
- }
+ "error": {
+ "type": "string"
}
}
}
@@ -908,27 +808,7 @@
"content": {
"application/json": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "$ref": "#/components/schemas/Background"
- }
- }
- }
- }
+ "$ref": "#/components/schemas/Background"
}
}
}
@@ -1008,27 +888,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1038,27 +898,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1138,27 +978,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1168,27 +988,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index 3f120caefe6..3edeabda747 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -313,9 +313,9 @@ class Access extends LDAPUtility {
public function extractRangeData($result, $attribute) {
$keys = array_keys($result);
foreach ($keys as $key) {
- if ($key !== $attribute && strpos((string)$key, $attribute) === 0) {
+ if ($key !== $attribute && str_starts_with((string)$key, $attribute)) {
$queryData = explode(';', (string)$key);
- if (strpos($queryData[1], 'range=') === 0) {
+ if (str_starts_with($queryData[1], 'range=')) {
$high = substr($queryData[1], 1 + strpos($queryData[1], '-'));
$data = [
'values' => $result[$key],
@@ -405,7 +405,7 @@ class Access extends LDAPUtility {
$domainParts = [];
$dcFound = false;
foreach ($allParts as $part) {
- if (!$dcFound && strpos($part, 'dc=') === 0) {
+ if (!$dcFound && str_starts_with($part, 'dc=')) {
$dcFound = true;
}
if ($dcFound) {
@@ -1530,7 +1530,7 @@ class Access extends LDAPUtility {
private function getFilterPartForSearch(string $search, $searchAttributes, string $fallbackAttribute): string {
$filter = [];
$haveMultiSearchAttributes = (is_array($searchAttributes) && count($searchAttributes) > 0);
- if ($haveMultiSearchAttributes && strpos(trim($search), ' ') !== false) {
+ if ($haveMultiSearchAttributes && str_contains(trim($search), ' ')) {
try {
return $this->getAdvancedFilterPartForSearch($search, $searchAttributes);
} catch (DomainException $e) {
diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php
index ef64f75a9ef..5a0fcc79ab8 100644
--- a/apps/user_ldap/lib/Configuration.php
+++ b/apps/user_ldap/lib/Configuration.php
@@ -176,7 +176,7 @@ class Configuration {
public function setConfiguration(array $config, array &$applied = null): void {
$cta = $this->getConfigTranslationArray();
foreach ($config as $inputKey => $val) {
- if (strpos($inputKey, '_') !== false && array_key_exists($inputKey, $cta)) {
+ if (str_contains($inputKey, '_') && array_key_exists($inputKey, $cta)) {
$key = $cta[$inputKey];
} elseif (array_key_exists($inputKey, $this->config)) {
$key = $inputKey;
@@ -191,7 +191,7 @@ class Configuration {
break;
case 'homeFolderNamingRule':
$trimmedVal = trim($val);
- if ($trimmedVal !== '' && strpos($val, 'attr:') === false) {
+ if ($trimmedVal !== '' && !str_contains($val, 'attr:')) {
$val = 'attr:'.$trimmedVal;
}
break;
@@ -584,7 +584,7 @@ class Configuration {
if ($value === self::AVATAR_PREFIX_NONE) {
return [];
}
- if (strpos($value, self::AVATAR_PREFIX_DATA_ATTRIBUTE) === 0) {
+ if (str_starts_with($value, self::AVATAR_PREFIX_DATA_ATTRIBUTE)) {
$attribute = trim(substr($value, strlen(self::AVATAR_PREFIX_DATA_ATTRIBUTE)));
if ($attribute === '') {
return $defaultAttributes;
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php
index d8d00dd4d27..861fb1e246b 100644
--- a/apps/user_ldap/lib/Connection.php
+++ b/apps/user_ldap/lib/Connection.php
@@ -377,7 +377,7 @@ class Connection extends LDAPUtility {
foreach ($cta as $dbkey => $configkey) {
switch ($configkey) {
case 'homeFolderNamingRule':
- if (strpos($config[$configkey], 'attr:') === 0) {
+ if (str_starts_with($config[$configkey], 'attr:')) {
$result[$dbkey] = substr($config[$configkey], 5);
} else {
$result[$dbkey] = '';
diff --git a/apps/user_ldap/lib/Jobs/Sync.php b/apps/user_ldap/lib/Jobs/Sync.php
index f8a9b14d02f..f715a5e9fb9 100644
--- a/apps/user_ldap/lib/Jobs/Sync.php
+++ b/apps/user_ldap/lib/Jobs/Sync.php
@@ -103,7 +103,7 @@ class Sync extends TimedJob {
protected function getMinPagingSize() {
$configKeys = $this->config->getAppKeys('user_ldap');
$configKeys = array_filter($configKeys, function ($key) {
- return strpos($key, 'ldap_paging_size') !== false;
+ return str_contains($key, 'ldap_paging_size');
});
$minPagingSize = null;
foreach ($configKeys as $configKey) {
diff --git a/apps/user_ldap/lib/LDAP.php b/apps/user_ldap/lib/LDAP.php
index 41a6f651f3b..6309a0c8f91 100644
--- a/apps/user_ldap/lib/LDAP.php
+++ b/apps/user_ldap/lib/LDAP.php
@@ -204,7 +204,7 @@ class LDAP implements ILDAPWrapper {
}
$oldHandler = set_error_handler(function ($no, $message, $file, $line) use (&$oldHandler) {
- if (strpos($message, 'Partial search results returned: Sizelimit exceeded') !== false) {
+ if (str_contains($message, 'Partial search results returned: Sizelimit exceeded')) {
return true;
}
$oldHandler($no, $message, $file, $line);
diff --git a/apps/user_ldap/lib/Migration/UUIDFixInsert.php b/apps/user_ldap/lib/Migration/UUIDFixInsert.php
index a8e9d2829d7..68b33e1b95b 100644
--- a/apps/user_ldap/lib/Migration/UUIDFixInsert.php
+++ b/apps/user_ldap/lib/Migration/UUIDFixInsert.php
@@ -90,7 +90,7 @@ class UUIDFixInsert implements IRepairStep {
$this->jobList->add($jobClass, ['records' => $records]);
$offset += $batchSize;
} catch (\InvalidArgumentException $e) {
- if (strpos($e->getMessage(), 'Background job arguments can\'t exceed 4000') !== false) {
+ if (str_contains($e->getMessage(), 'Background job arguments can\'t exceed 4000')) {
$batchSize = (int)floor(count($records) * 0.8);
$retry = true;
}
diff --git a/apps/user_ldap/lib/User/Manager.php b/apps/user_ldap/lib/User/Manager.php
index 04c67a537b8..f904d829c08 100644
--- a/apps/user_ldap/lib/User/Manager.php
+++ b/apps/user_ldap/lib/User/Manager.php
@@ -165,7 +165,7 @@ class Manager {
];
$homeRule = (string)$this->access->getConnection()->homeFolderNamingRule;
- if (strpos($homeRule, 'attr:') === 0) {
+ if (str_starts_with($homeRule, 'attr:')) {
$attributes[] = substr($homeRule, strlen('attr:'));
}
diff --git a/apps/user_ldap/lib/User/OfflineUser.php b/apps/user_ldap/lib/User/OfflineUser.php
index 6801a21a1d2..e39c4b0bb99 100644
--- a/apps/user_ldap/lib/User/OfflineUser.php
+++ b/apps/user_ldap/lib/User/OfflineUser.php
@@ -253,7 +253,7 @@ class OfflineUser {
$shareConstants = $shareInterface->getConstants();
foreach ($shareConstants as $constantName => $constantValue) {
- if (strpos($constantName, 'TYPE_') !== 0
+ if (!str_starts_with($constantName, 'TYPE_')
|| $constantValue === IShare::TYPE_USERGROUP
) {
continue;
diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php
index f85e4206eff..dac8bf1cfbc 100644
--- a/apps/user_ldap/lib/User/User.php
+++ b/apps/user_ldap/lib/User/User.php
@@ -214,7 +214,7 @@ class User {
}
//homePath
- if (strpos($this->connection->homeFolderNamingRule, 'attr:') === 0) {
+ if (str_starts_with($this->connection->homeFolderNamingRule, 'attr:')) {
$attr = strtolower(substr($this->connection->homeFolderNamingRule, strlen('attr:')));
if (isset($ldapEntry[$attr])) {
$this->access->cacheUserHome(
@@ -391,7 +391,7 @@ class User {
$attr = null;
if (is_null($valueFromLDAP)
- && strpos($this->access->connection->homeFolderNamingRule, 'attr:') === 0
+ && str_starts_with($this->access->connection->homeFolderNamingRule, 'attr:')
&& $this->access->connection->homeFolderNamingRule !== 'attr:') {
$attr = substr($this->access->connection->homeFolderNamingRule, strlen('attr:'));
$homedir = $this->access->readAttribute($this->access->username2dn($this->getUsername()), $attr);
@@ -630,7 +630,7 @@ class User {
/**
* takes values from LDAP and stores it as Nextcloud user profile value
- *
+ *
* @param array $profileValues associative array of property keys and values from LDAP
*/
private function updateProfile(array $profileValues): void {
diff --git a/apps/user_ldap/tests/Group_LDAPTest.php b/apps/user_ldap/tests/Group_LDAPTest.php
index edcb4be8819..2f7c0b04cdc 100644
--- a/apps/user_ldap/tests/Group_LDAPTest.php
+++ b/apps/user_ldap/tests/Group_LDAPTest.php
@@ -157,8 +157,8 @@ class Group_LDAPTest extends TestCase {
//to analyze the "dn". All other times we just need to return
//something that is neither null or false, but once an array
//with the users in the group – so we do so all other times for
- //simplicicity.
- if (strpos($name, 'u') === 0) {
+ //simplicity.
+ if (str_starts_with($name, 'u')) {
return strpos($name, '3');
}
return ['u11', 'u22', 'u33', 'u34'];
@@ -1009,7 +1009,7 @@ class Group_LDAPTest extends TestCase {
if (!$nestedGroups) {
// When nested groups are enabled, groups cannot be filtered early as it would
// exclude intermediate groups. But we can, and should, when working with flat groups.
- $this->assertTrue(strpos($filter, $groupFilter) !== false);
+ $this->assertTrue(str_contains($filter, $groupFilter));
}
[$memberFilter] = explode('&', $filter);
if ($memberFilter === 'member='.$dn) {
diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
index e22678620c1..58475a2bea9 100644
--- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
+++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
@@ -155,7 +155,7 @@ abstract class AbstractIntegrationTest {
$methods = get_class_methods($this);
$atLeastOneCaseRan = false;
foreach ($methods as $method) {
- if (strpos($method, 'case') === 0) {
+ if (str_starts_with($method, 'case')) {
print("running $method " . PHP_EOL);
try {
if (!$this->$method()) {
diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
index 7353c5bef30..993ceec5abb 100644
--- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
+++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
@@ -71,7 +71,7 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest {
$this->prepareUser($dn, $username);
$displayName = \OC::$server->getUserManager()->get($username)->getDisplayName();
- return strpos($displayName, '(Alice@example.com)') !== false;
+ return str_contains($displayName, '(Alice@example.com)');
}
/**
@@ -88,7 +88,7 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest {
$this->prepareUser($dn, $username);
$displayName = \OC::$server->getUserManager()->get($username)->getDisplayName();
- return strpos($displayName, '(Boris@example.com)') === false;
+ return !str_contains($displayName, '(Boris@example.com)');
}
/**
diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php
index b00c93e79f0..e837471bab0 100644
--- a/apps/user_ldap/tests/User_LDAPTest.php
+++ b/apps/user_ldap/tests/User_LDAPTest.php
@@ -1312,7 +1312,7 @@ class User_LDAPTest extends TestCase {
/** @dataProvider avatarDataProvider */
public function testCanChangeAvatar($imageData, $expected) {
- $isValidImage = strpos((string)$imageData, 'valid') === 0;
+ $isValidImage = str_starts_with((string)$imageData, 'valid');
$user = $this->createMock(User::class);
$user->expects($this->once())
diff --git a/apps/user_status/openapi.json b/apps/user_status/openapi.json
index 9a3b67fb2c8..08eddd47bb3 100644
--- a/apps/user_status/openapi.json
+++ b/apps/user_status/openapi.json
@@ -349,27 +349,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -439,27 +419,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -538,27 +498,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -647,27 +587,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -765,27 +685,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
diff --git a/core/Controller/ClientFlowLoginController.php b/core/Controller/ClientFlowLoginController.php
index 85a793bd92b..2876621c97b 100644
--- a/core/Controller/ClientFlowLoginController.php
+++ b/core/Controller/ClientFlowLoginController.php
@@ -368,9 +368,9 @@ class ClientFlowLoginController extends Controller {
private function getServerPath(): string {
$serverPostfix = '';
- if (strpos($this->request->getRequestUri(), '/index.php') !== false) {
+ if (str_contains($this->request->getRequestUri(), '/index.php')) {
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/index.php'));
- } elseif (strpos($this->request->getRequestUri(), '/login/flow') !== false) {
+ } elseif (str_contains($this->request->getRequestUri(), '/login/flow')) {
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/login/flow'));
}
diff --git a/core/Controller/ClientFlowLoginV2Controller.php b/core/Controller/ClientFlowLoginV2Controller.php
index ef16cfbd04b..0c12f1a612f 100644
--- a/core/Controller/ClientFlowLoginV2Controller.php
+++ b/core/Controller/ClientFlowLoginV2Controller.php
@@ -363,9 +363,9 @@ class ClientFlowLoginV2Controller extends Controller {
private function getServerPath(): string {
$serverPostfix = '';
- if (strpos($this->request->getRequestUri(), '/index.php') !== false) {
+ if (str_contains($this->request->getRequestUri(), '/index.php')) {
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/index.php'));
- } elseif (strpos($this->request->getRequestUri(), '/login/v2') !== false) {
+ } elseif (str_contains($this->request->getRequestUri(), '/login/v2')) {
$serverPostfix = substr($this->request->getRequestUri(), 0, strpos($this->request->getRequestUri(), '/login/v2'));
}
diff --git a/core/Controller/CssController.php b/core/Controller/CssController.php
index 4cd2996835e..792be71f9e1 100644
--- a/core/Controller/CssController.php
+++ b/core/Controller/CssController.php
@@ -101,7 +101,7 @@ class CssController extends Controller {
private function getFile(ISimpleFolder $folder, string $fileName, bool &$gzip): ISimpleFile {
$encoding = $this->request->getHeader('Accept-Encoding');
- if (strpos($encoding, 'gzip') !== false) {
+ if (str_contains($encoding, 'gzip')) {
try {
$gzip = true;
return $folder->getFile($fileName . '.gzip'); # Safari doesn't like .gz
diff --git a/core/Controller/JsController.php b/core/Controller/JsController.php
index 885de5491e7..6b3e7ff2ed2 100644
--- a/core/Controller/JsController.php
+++ b/core/Controller/JsController.php
@@ -99,7 +99,7 @@ class JsController extends Controller {
private function getFile(ISimpleFolder $folder, string $fileName, bool &$gzip): ISimpleFile {
$encoding = $this->request->getHeader('Accept-Encoding');
- if (strpos($encoding, 'gzip') !== false) {
+ if (str_contains($encoding, 'gzip')) {
try {
$gzip = true;
return $folder->getFile($fileName . '.gzip'); # Safari doesn't like .gz
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index aa6617c4b6d..9c64204b898 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -275,7 +275,7 @@ class LoginController extends Controller {
$location = $this->urlGenerator->getAbsoluteURL($redirectUrl);
// Deny the redirect if the URL contains a @
// This prevents unvalidated redirects like ?redirect_url=:user@domain.com
- if (strpos($location, '@') === false) {
+ if (!str_contains($location, '@')) {
return new RedirectResponse($location);
}
}
diff --git a/core/Controller/NavigationController.php b/core/Controller/NavigationController.php
index 6b994ca33f1..a1c3f917fe3 100644
--- a/core/Controller/NavigationController.php
+++ b/core/Controller/NavigationController.php
@@ -94,10 +94,10 @@ class NavigationController extends OCSController {
*/
private function rewriteToAbsoluteUrls(array $navigation): array {
foreach ($navigation as &$entry) {
- if (0 !== strpos($entry['href'], $this->urlGenerator->getBaseUrl())) {
+ if (!str_starts_with($entry['href'], $this->urlGenerator->getBaseUrl())) {
$entry['href'] = $this->urlGenerator->getAbsoluteURL($entry['href']);
}
- if (0 !== strpos($entry['icon'], $this->urlGenerator->getBaseUrl())) {
+ if (!str_starts_with($entry['icon'], $this->urlGenerator->getBaseUrl())) {
$entry['icon'] = $this->urlGenerator->getAbsoluteURL($entry['icon']);
}
}
diff --git a/core/ajax/update.php b/core/ajax/update.php
index dae08ad0882..c28f2cdcd7c 100644
--- a/core/ajax/update.php
+++ b/core/ajax/update.php
@@ -33,6 +33,7 @@
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IEventSource;
+use OCP\IEventSourceFactory;
use OCP\IL10N;
use OCP\ILogger;
use OC\DB\MigratorExecuteSqlEvent;
@@ -43,16 +44,18 @@ use OC\Repair\Events\RepairInfoEvent;
use OC\Repair\Events\RepairStartEvent;
use OC\Repair\Events\RepairStepEvent;
use OC\Repair\Events\RepairWarningEvent;
+use OCP\L10N\IFactory;
-if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
+if (!str_contains(@ini_get('disable_functions'), 'set_time_limit')) {
@set_time_limit(0);
}
require_once '../../lib/base.php';
-$l = \OC::$server->getL10N('core');
+/** @var \OCP\IL10N $l */
+$l = \OC::$server->get(IFactory::class)->get('core');
-$eventSource = \OC::$server->createEventSource();
+$eventSource = \OC::$server->get(IEventSourceFactory::class)->create();
// need to send an initial message to force-init the event source,
// which will then trigger its own CSRF check and produces its own CSRF error
// message
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 85ec654c48d..da85845d310 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -168,7 +168,7 @@ OC.L10N.register(
"Your connection is not secure" : "Ihre Verbindung ist nicht sicher",
"Passwordless authentication is only available over a secure connection." : "Anmeldung ohne Passwort ist nur über eine sichere Verbindung möglich",
"Reset password" : "Passwort zurücksetzen",
- "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts die hinterlegte E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen sowie Ihren Spam-/Junk-Ordner oder bitten Sie Ihre lokale Administration um Hilfe.",
+ "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts an die hinterlegte E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen sowie Ihren Spam-/Junk-Ordner oder bitten Sie Ihre lokale Administration um Hilfe.",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihre Administration.",
"Password cannot be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"Back to login" : "Zurück zur Anmeldung",
@@ -310,7 +310,7 @@ OC.L10N.register(
"The profile does not exist." : "Das Profil existiert nicht.",
"Back to %s" : "Zurück zu %s",
"Page not found" : "Seite nicht gefunden",
- "The page could not be found on the server or you may not be allowed to view it." : "Die Seite konnte auf dem Server nicht gefunden werden oder Sie sind nicht berechtigt sie anzeigen.",
+ "The page could not be found on the server or you may not be allowed to view it." : "Die Seite konnte auf dem Server nicht gefunden werden oder Sie sind nicht zum Anzeigen berechtigt.",
"Too many requests" : "Zu viele Anfragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus Ihrem Netzwerk. Versuchen Sie es später erneut oder wenden Sie sich an Ihren Administrator, wenn dies ein Fehler sein sollte.",
"Error" : "Fehler",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index bce13c6d091..42eccb4253c 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -166,7 +166,7 @@
"Your connection is not secure" : "Ihre Verbindung ist nicht sicher",
"Passwordless authentication is only available over a secure connection." : "Anmeldung ohne Passwort ist nur über eine sichere Verbindung möglich",
"Reset password" : "Passwort zurücksetzen",
- "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts die hinterlegte E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen sowie Ihren Spam-/Junk-Ordner oder bitten Sie Ihre lokale Administration um Hilfe.",
+ "If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or account name, check your spam/junk folders or ask your local administration for help." : "Sofern dieses Konto existiert, wurde eine Nachricht zum Zurücksetzen des Passworts an die hinterlegte E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht erhalten, überprüfen Sie Ihre E-Mail-Adresse und/oder Ihren Kontonamen sowie Ihren Spam-/Junk-Ordner oder bitten Sie Ihre lokale Administration um Hilfe.",
"Couldn't send reset email. Please contact your administrator." : "Die E-Mail zum Zurücksetzen konnte nicht versendet werden. Bitte kontaktieren Sie Ihre Administration.",
"Password cannot be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.",
"Back to login" : "Zurück zur Anmeldung",
@@ -308,7 +308,7 @@
"The profile does not exist." : "Das Profil existiert nicht.",
"Back to %s" : "Zurück zu %s",
"Page not found" : "Seite nicht gefunden",
- "The page could not be found on the server or you may not be allowed to view it." : "Die Seite konnte auf dem Server nicht gefunden werden oder Sie sind nicht berechtigt sie anzeigen.",
+ "The page could not be found on the server or you may not be allowed to view it." : "Die Seite konnte auf dem Server nicht gefunden werden oder Sie sind nicht zum Anzeigen berechtigt.",
"Too many requests" : "Zu viele Anfragen",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus Ihrem Netzwerk. Versuchen Sie es später erneut oder wenden Sie sich an Ihren Administrator, wenn dies ein Fehler sein sollte.",
"Error" : "Fehler",
diff --git a/core/openapi.json b/core/openapi.json
index 6ffac746499..2371150caa1 100644
--- a/core/openapi.json
+++ b/core/openapi.json
@@ -1904,27 +1904,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2002,27 +1982,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2100,27 +2060,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -2191,27 +2131,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3809,27 +3729,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3839,27 +3739,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
@@ -3869,27 +3749,7 @@
"content": {
"text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "string"
- }
- }
- }
- }
+ "type": "string"
}
}
}
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index f35b9c94fbc..9f9ff8f60f3 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -453,6 +453,7 @@ return array(
'OCP\\IDateTimeZone' => $baseDir . '/lib/public/IDateTimeZone.php',
'OCP\\IEmojiHelper' => $baseDir . '/lib/public/IEmojiHelper.php',
'OCP\\IEventSource' => $baseDir . '/lib/public/IEventSource.php',
+ 'OCP\\IEventSourceFactory' => $baseDir . '/lib/public/IEventSourceFactory.php',
'OCP\\IGroup' => $baseDir . '/lib/public/IGroup.php',
'OCP\\IGroupManager' => $baseDir . '/lib/public/IGroupManager.php',
'OCP\\IImage' => $baseDir . '/lib/public/IImage.php',
@@ -1196,6 +1197,7 @@ return array(
'OC\\EventDispatcher\\GenericEventWrapper' => $baseDir . '/lib/private/EventDispatcher/GenericEventWrapper.php',
'OC\\EventDispatcher\\ServiceEventListener' => $baseDir . '/lib/private/EventDispatcher/ServiceEventListener.php',
'OC\\EventDispatcher\\SymfonyAdapter' => $baseDir . '/lib/private/EventDispatcher/SymfonyAdapter.php',
+ 'OC\\EventSourceFactory' => $baseDir . '/lib/private/EventSourceFactory.php',
'OC\\Federation\\CloudFederationFactory' => $baseDir . '/lib/private/Federation/CloudFederationFactory.php',
'OC\\Federation\\CloudFederationNotification' => $baseDir . '/lib/private/Federation/CloudFederationNotification.php',
'OC\\Federation\\CloudFederationProviderManager' => $baseDir . '/lib/private/Federation/CloudFederationProviderManager.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 8de7ef99d02..546fa72c325 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -486,6 +486,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\IDateTimeZone' => __DIR__ . '/../../..' . '/lib/public/IDateTimeZone.php',
'OCP\\IEmojiHelper' => __DIR__ . '/../../..' . '/lib/public/IEmojiHelper.php',
'OCP\\IEventSource' => __DIR__ . '/../../..' . '/lib/public/IEventSource.php',
+ 'OCP\\IEventSourceFactory' => __DIR__ . '/../../..' . '/lib/public/IEventSourceFactory.php',
'OCP\\IGroup' => __DIR__ . '/../../..' . '/lib/public/IGroup.php',
'OCP\\IGroupManager' => __DIR__ . '/../../..' . '/lib/public/IGroupManager.php',
'OCP\\IImage' => __DIR__ . '/../../..' . '/lib/public/IImage.php',
@@ -1229,6 +1230,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OC\\EventDispatcher\\GenericEventWrapper' => __DIR__ . '/../../..' . '/lib/private/EventDispatcher/GenericEventWrapper.php',
'OC\\EventDispatcher\\ServiceEventListener' => __DIR__ . '/../../..' . '/lib/private/EventDispatcher/ServiceEventListener.php',
'OC\\EventDispatcher\\SymfonyAdapter' => __DIR__ . '/../../..' . '/lib/private/EventDispatcher/SymfonyAdapter.php',
+ 'OC\\EventSourceFactory' => __DIR__ . '/../../..' . '/lib/private/EventSourceFactory.php',
'OC\\Federation\\CloudFederationFactory' => __DIR__ . '/../../..' . '/lib/private/Federation/CloudFederationFactory.php',
'OC\\Federation\\CloudFederationNotification' => __DIR__ . '/../../..' . '/lib/private/Federation/CloudFederationNotification.php',
'OC\\Federation\\CloudFederationProviderManager' => __DIR__ . '/../../..' . '/lib/private/Federation/CloudFederationProviderManager.php',
diff --git a/lib/l10n/ar.js b/lib/l10n/ar.js
index 9843f5d2b0e..d274e3054cf 100644
--- a/lib/l10n/ar.js
+++ b/lib/l10n/ar.js
@@ -72,7 +72,7 @@ OC.L10N.register(
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "يبدو أن كائن %s يعمل على بيئة PHP 32-Bit وكذلك تم تكوين open_basedir في ملف php.ini. يؤدي ذلك إلى مشاكل مع الملفات التي يزيد حجمها عن 4 غيغابايت ولا يُنصح بذلك بشدة.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "فضلاً إحذف إعداد open_basedir من ملف php.ini لديك أو حوّل إلى PHP إصدار 64 بت.",
"Set an admin username." : "اعداد اسم مستخدم للمدير",
- "Set an admin password." : "اعداد كلمة مرور للمدير",
+ "Set an admin password." : "تعيين كلمة مرور للمدير",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "يجب أن تقوم الواجهة الخلفية للمشاركة (Sharing backend) %s بتطبيق الواجهة OCP\\Share_Backend",
"Sharing backend %s not found" : "لم يتم العثور على الواجهة الخلفية (Sharing backend) %s",
"Sharing backend for %s not found" : "مشاركة الخلفية لـ %s غير موجود",
diff --git a/lib/l10n/ar.json b/lib/l10n/ar.json
index b1ef7c2cce7..a1b3cd0fa28 100644
--- a/lib/l10n/ar.json
+++ b/lib/l10n/ar.json
@@ -70,7 +70,7 @@
"It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "يبدو أن كائن %s يعمل على بيئة PHP 32-Bit وكذلك تم تكوين open_basedir في ملف php.ini. يؤدي ذلك إلى مشاكل مع الملفات التي يزيد حجمها عن 4 غيغابايت ولا يُنصح بذلك بشدة.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "فضلاً إحذف إعداد open_basedir من ملف php.ini لديك أو حوّل إلى PHP إصدار 64 بت.",
"Set an admin username." : "اعداد اسم مستخدم للمدير",
- "Set an admin password." : "اعداد كلمة مرور للمدير",
+ "Set an admin password." : "تعيين كلمة مرور للمدير",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "يجب أن تقوم الواجهة الخلفية للمشاركة (Sharing backend) %s بتطبيق الواجهة OCP\\Share_Backend",
"Sharing backend %s not found" : "لم يتم العثور على الواجهة الخلفية (Sharing backend) %s",
"Sharing backend for %s not found" : "مشاركة الخلفية لـ %s غير موجود",
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index d750cf0002e..d9cdf4a1001 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -57,6 +57,7 @@ OC.L10N.register(
"Avatar image is not square" : "头像图像不是正方形",
"Files" : "文件",
"View profile" : "查看个人资料",
+ "Local time: %s" : "当地时间:%s",
"today" : "今天",
"tomorrow" : "明天",
"yesterday" : "昨天",
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index c912cee2b76..cad9737dcf8 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -55,6 +55,7 @@
"Avatar image is not square" : "头像图像不是正方形",
"Files" : "文件",
"View profile" : "查看个人资料",
+ "Local time: %s" : "当地时间:%s",
"today" : "今天",
"tomorrow" : "明天",
"yesterday" : "昨天",
diff --git a/lib/private/EventSourceFactory.php b/lib/private/EventSourceFactory.php
new file mode 100644
index 00000000000..197c8bf9e6c
--- /dev/null
+++ b/lib/private/EventSourceFactory.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * @copyright Copyright (c) 2023 Daniel Kesselberg <mail@danielkesselberg.de>
+ *
+ * @author Daniel Kesselberg <mail@danielkesselberg.de>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC;
+
+use OCP\IEventSource;
+use OCP\IEventSourceFactory;
+use OCP\IRequest;
+
+class EventSourceFactory implements IEventSourceFactory {
+ private IRequest $request;
+
+
+ public function __construct(IRequest $request) {
+ $this->request = $request;
+ }
+
+ /**
+ * Create a new event source
+ *
+ * @return IEventSource
+ * @since 28.0.0
+ */
+ public function create(): IEventSource {
+ return new \OC_EventSource($this->request);
+ }
+}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 84860f8c494..f98ee051a32 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -211,6 +211,7 @@ use OCP\IBinaryFinder;
use OCP\IDateTimeFormatter;
use OCP\IDateTimeZone;
use OCP\IDBConnection;
+use OCP\IEventSourceFactory;
use OCP\IGroupManager;
use OCP\IInitialStateService;
use OCP\IL10N;
@@ -1467,6 +1468,8 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerAlias(ISpeechToTextManager::class, SpeechToTextManager::class);
+ $this->registerAlias(IEventSourceFactory::class, EventSourceFactory::class);
+
$this->connectDispatcher();
}
@@ -1929,16 +1932,6 @@ class Server extends ServerContainer implements IServerContainer {
}
/**
- * Create a new event source
- *
- * @return \OCP\IEventSource
- * @deprecated 20.0.0
- */
- public function createEventSource() {
- return new \OC_EventSource();
- }
-
- /**
* Get the active event logger
*
* The returned logger only logs data when debug mode is enabled
diff --git a/lib/private/legacy/OC_EventSource.php b/lib/private/legacy/OC_EventSource.php
index c733316050f..cd72ba1f2d5 100644
--- a/lib/private/legacy/OC_EventSource.php
+++ b/lib/private/legacy/OC_EventSource.php
@@ -1,4 +1,7 @@
<?php
+
+use OCP\IRequest;
+
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
@@ -42,6 +45,12 @@ class OC_EventSource implements \OCP\IEventSource {
*/
private $started = false;
+ private IRequest $request;
+
+ public function __construct(IRequest $request) {
+ $this->request = $request;
+ }
+
protected function init() {
if ($this->started) {
return;
@@ -71,11 +80,11 @@ class OC_EventSource implements \OCP\IEventSource {
} else {
header("Content-Type: text/event-stream");
}
- if (!\OC::$server->getRequest()->passesStrictCookieCheck()) {
+ if (!$this->request->passesStrictCookieCheck()) {
header('Location: '.\OC::$WEBROOT);
exit();
}
- if (!\OC::$server->getRequest()->passesCSRFCheck()) {
+ if (!$this->request->passesCSRFCheck()) {
$this->send('error', 'Possible CSRF attack. Connection will be closed.');
$this->close();
exit();
diff --git a/lib/public/IEventSourceFactory.php b/lib/public/IEventSourceFactory.php
new file mode 100644
index 00000000000..5876189cebb
--- /dev/null
+++ b/lib/public/IEventSourceFactory.php
@@ -0,0 +1,38 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Daniel Kesselberg <mail@danielkesselberg.de>
+ *
+ * @author Daniel Kesselberg <mail@danielkesselberg.de>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+namespace OCP;
+
+/**
+ * @since 28.0.0
+ */
+interface IEventSourceFactory {
+ /**
+ * Create a new event source
+ *
+ * @return IEventSource
+ * @since 28.0.0
+ */
+ public function create(): IEventSource;
+}
diff --git a/lib/public/IServerContainer.php b/lib/public/IServerContainer.php
index c69dab8b3c6..f438838b98e 100644
--- a/lib/public/IServerContainer.php
+++ b/lib/public/IServerContainer.php
@@ -396,15 +396,6 @@ interface IServerContainer extends ContainerInterface, IContainer {
public function getCertificateManager();
/**
- * Create a new event source
- *
- * @return \OCP\IEventSource
- * @since 8.0.0
- * @deprecated 20.0.0 have it injected or fetch it through \Psr\Container\ContainerInterface::get
- */
- public function createEventSource();
-
- /**
* Returns an instance of the HTTP client service
*
* @return \OCP\Http\Client\IClientService
diff --git a/package-lock.json b/package-lock.json
index 79a4921824b..3f005c28e33 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20559,9 +20559,10 @@
}
},
"node_modules/socket.io-parser": {
- "version": "4.2.2",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+ "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.1"
@@ -37713,7 +37714,9 @@
}
},
"socket.io-parser": {
- "version": "4.2.2",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+ "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
"dev": true,
"requires": {
"@socket.io/component-emitter": "~3.1.0",
diff --git a/tests/lib/EventSourceFactoryTest.php b/tests/lib/EventSourceFactoryTest.php
new file mode 100644
index 00000000000..67bc900bd4c
--- /dev/null
+++ b/tests/lib/EventSourceFactoryTest.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * @copyright Copyright (c) 2023 Daniel Kesselberg <mail@danielkesselberg.de>
+ *
+ * @author Daniel Kesselberg <mail@danielkesselberg.de>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace Test;
+
+use OC\EventSourceFactory;
+use OCP\IEventSource;
+use OCP\IRequest;
+
+class EventSourceFactoryTest extends TestCase {
+ public function testCreate(): void {
+ $request = $this->createMock(IRequest::class);
+ $factory = new EventSourceFactory($request);
+
+ $instance = $factory->create();
+ $this->assertInstanceOf(IEventSource::class, $instance);
+ }
+}
diff --git a/tests/lib/ServerTest.php b/tests/lib/ServerTest.php
index cbaa0e0762a..d9f95e9eab1 100644
--- a/tests/lib/ServerTest.php
+++ b/tests/lib/ServerTest.php
@@ -179,11 +179,6 @@ class ServerTest extends \Test\TestCase {
$this->assertInstanceOf('\OCP\ICertificateManager', $this->server->getCertificateManager(), 'service returned by "getCertificateManager" did not return the right class');
}
- public function testCreateEventSource() {
- $this->assertInstanceOf('\OC_EventSource', $this->server->createEventSource(), 'service returned by "createEventSource" did not return the right class');
- $this->assertInstanceOf('\OCP\IEventSource', $this->server->createEventSource(), 'service returned by "createEventSource" did not return the right class');
- }
-
public function testOverwriteDefaultCommentsManager() {
$config = $this->server->getConfig();
$defaultManagerFactory = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory');