Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/composer/composer/autoload_classmap.php1
-rw-r--r--lib/composer/composer/autoload_static.php1
-rw-r--r--lib/l10n/an.js15
-rw-r--r--lib/l10n/an.json15
-rw-r--r--lib/l10n/bg.js2
-rw-r--r--lib/l10n/bg.json2
-rw-r--r--lib/l10n/cs.js2
-rw-r--r--lib/l10n/cs.json2
-rw-r--r--lib/l10n/de.js1
-rw-r--r--lib/l10n/de.json1
-rw-r--r--lib/l10n/de_DE.js2
-rw-r--r--lib/l10n/de_DE.json2
-rw-r--r--lib/l10n/el.js1
-rw-r--r--lib/l10n/el.json1
-rw-r--r--lib/l10n/es.js1
-rw-r--r--lib/l10n/es.json1
-rw-r--r--lib/l10n/eu.js1
-rw-r--r--lib/l10n/eu.json1
-rw-r--r--lib/l10n/fi.js1
-rw-r--r--lib/l10n/fi.json1
-rw-r--r--lib/l10n/fr.js1
-rw-r--r--lib/l10n/fr.json1
-rw-r--r--lib/l10n/hu.js2
-rw-r--r--lib/l10n/hu.json2
-rw-r--r--lib/l10n/pl.js2
-rw-r--r--lib/l10n/pl.json2
-rw-r--r--lib/l10n/pt_BR.js1
-rw-r--r--lib/l10n/pt_BR.json1
-rw-r--r--lib/l10n/sl.js1
-rw-r--r--lib/l10n/sl.json1
-rw-r--r--lib/l10n/tr.js2
-rw-r--r--lib/l10n/tr.json2
-rw-r--r--lib/l10n/uk.js6
-rw-r--r--lib/l10n/uk.json6
-rw-r--r--lib/l10n/uz.js32
-rw-r--r--lib/l10n/uz.json32
-rw-r--r--lib/l10n/zh_HK.js4
-rw-r--r--lib/l10n/zh_HK.json4
-rw-r--r--lib/l10n/zh_TW.js2
-rw-r--r--lib/l10n/zh_TW.json2
-rw-r--r--lib/private/Calendar/Manager.php17
-rw-r--r--lib/private/Federation/CloudIdManager.php79
-rw-r--r--lib/private/Files/SetupManager.php8
-rw-r--r--lib/private/Files/Storage/Wrapper/Quota.php71
-rw-r--r--lib/private/Files/Stream/HashWrapper.php11
-rw-r--r--lib/private/NavigationManager.php2
-rw-r--r--lib/private/Repair/MoveUpdaterStepFile.php4
-rw-r--r--lib/private/Server.php8
-rw-r--r--lib/private/Settings/Manager.php7
-rw-r--r--lib/private/User/Database.php4
-rw-r--r--lib/private/User/Session.php8
-rw-r--r--lib/private/User/User.php8
-rw-r--r--lib/public/AppFramework/Http/Response.php6
-rw-r--r--lib/public/Collaboration/Reference/RenderReferenceEvent.php36
-rw-r--r--lib/public/IUser.php3
-rw-r--r--lib/public/Settings/IIconSection.php4
-rw-r--r--lib/public/Settings/IManager.php6
-rw-r--r--lib/public/User/Backend/ISetDisplayNameBackend.php3
58 files changed, 375 insertions, 70 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 8c485fe53d9..47ffd81f751 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -145,6 +145,7 @@ return array(
'OCP\\Collaboration\\Reference\\IReference' => $baseDir . '/lib/public/Collaboration/Reference/IReference.php',
'OCP\\Collaboration\\Reference\\IReferenceManager' => $baseDir . '/lib/public/Collaboration/Reference/IReferenceManager.php',
'OCP\\Collaboration\\Reference\\IReferenceProvider' => $baseDir . '/lib/public/Collaboration/Reference/IReferenceProvider.php',
+ 'OCP\\Collaboration\\Reference\\RenderReferenceEvent' => $baseDir . '/lib/public/Collaboration/Reference/RenderReferenceEvent.php',
'OCP\\Collaboration\\Resources\\CollectionException' => $baseDir . '/lib/public/Collaboration/Resources/CollectionException.php',
'OCP\\Collaboration\\Resources\\ICollection' => $baseDir . '/lib/public/Collaboration/Resources/ICollection.php',
'OCP\\Collaboration\\Resources\\IManager' => $baseDir . '/lib/public/Collaboration/Resources/IManager.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 0dd18e5ddbf..a84bab472a5 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -178,6 +178,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\Collaboration\\Reference\\IReference' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Reference/IReference.php',
'OCP\\Collaboration\\Reference\\IReferenceManager' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Reference/IReferenceManager.php',
'OCP\\Collaboration\\Reference\\IReferenceProvider' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Reference/IReferenceProvider.php',
+ 'OCP\\Collaboration\\Reference\\RenderReferenceEvent' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Reference/RenderReferenceEvent.php',
'OCP\\Collaboration\\Resources\\CollectionException' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/CollectionException.php',
'OCP\\Collaboration\\Resources\\ICollection' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/ICollection.php',
'OCP\\Collaboration\\Resources\\IManager' => __DIR__ . '/../../..' . '/lib/public/Collaboration/Resources/IManager.php',
diff --git a/lib/l10n/an.js b/lib/l10n/an.js
index 8ddba74c09f..49222b95d78 100644
--- a/lib/l10n/an.js
+++ b/lib/l10n/an.js
@@ -1,6 +1,19 @@
OC.L10N.register(
"lib",
{
- "Settings" : "Configurazión"
+ "See %s" : "Veyer %s",
+ "Unknown filetype" : "Tipo de fichero esconoxiu",
+ "Invalid image" : "Imachen no valida",
+ "today" : "Hue",
+ "yesterday" : "Ayer",
+ "last month" : "Zaguero mes",
+ "last year" : "Zaguero año",
+ "Help" : "Aduya",
+ "Apps" : "Aplicazions",
+ "Settings" : "Configurazión",
+ "Users" : "Usuarios",
+ "Email" : "Correu electronico",
+ "Full name" : "Nombre completo",
+ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 requeriu"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/an.json b/lib/l10n/an.json
index 08fd0a1abf7..3ee3c9bb029 100644
--- a/lib/l10n/an.json
+++ b/lib/l10n/an.json
@@ -1,4 +1,17 @@
{ "translations": {
- "Settings" : "Configurazión"
+ "See %s" : "Veyer %s",
+ "Unknown filetype" : "Tipo de fichero esconoxiu",
+ "Invalid image" : "Imachen no valida",
+ "today" : "Hue",
+ "yesterday" : "Ayer",
+ "last month" : "Zaguero mes",
+ "last year" : "Zaguero año",
+ "Help" : "Aduya",
+ "Apps" : "Aplicazions",
+ "Settings" : "Configurazión",
+ "Users" : "Usuarios",
+ "Email" : "Correu electronico",
+ "Full name" : "Nombre completo",
+ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 requeriu"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/bg.js b/lib/l10n/bg.js
index 1f31e9e0504..4081facf7e8 100644
--- a/lib/l10n/bg.js
+++ b/lib/l10n/bg.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Имейлът е генериран автоматично, моля не отговаряйте.",
"Help" : "Помощ",
"Apps" : "Приложения",
+ "Personal settings" : "Лични настройки",
+ "Administration settings" : "Административни настройки",
"Settings" : "Настройки",
"Log out" : "Отписване",
"Users" : "Потребители",
diff --git a/lib/l10n/bg.json b/lib/l10n/bg.json
index 41507e49a44..35a4bf1a7a9 100644
--- a/lib/l10n/bg.json
+++ b/lib/l10n/bg.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "Имейлът е генериран автоматично, моля не отговаряйте.",
"Help" : "Помощ",
"Apps" : "Приложения",
+ "Personal settings" : "Лични настройки",
+ "Administration settings" : "Административни настройки",
"Settings" : "Настройки",
"Log out" : "Отписване",
"Users" : "Потребители",
diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js
index c772b9db74a..f10d57e78ff 100644
--- a/lib/l10n/cs.js
+++ b/lib/l10n/cs.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Toto je automaticky odesílaný e-mail, neodpovídejte na něj.",
"Help" : "Nápověda",
"Apps" : "Aplikace",
+ "Personal settings" : "Osobní nastavení",
+ "Administration settings" : "Nastavení pro správu",
"Settings" : "Nastavení",
"Log out" : "Odhlásit se",
"Users" : "Uživatelé",
diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json
index a2e89fae911..7ed239f07af 100644
--- a/lib/l10n/cs.json
+++ b/lib/l10n/cs.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "Toto je automaticky odesílaný e-mail, neodpovídejte na něj.",
"Help" : "Nápověda",
"Apps" : "Aplikace",
+ "Personal settings" : "Osobní nastavení",
+ "Administration settings" : "Nastavení pro správu",
"Settings" : "Nastavení",
"Log out" : "Odhlásit se",
"Users" : "Uživatelé",
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index f7f736b8d24..941beea683a 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versandte E-Mail, bitte nicht antworten.",
"Help" : "Hilfe",
"Apps" : "Apps",
+ "Personal settings" : "Persönliche Einstellungen",
"Settings" : "Einstellungen",
"Log out" : "Abmelden",
"Users" : "Benutzer",
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index c24b6770eac..0c59b2523c6 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -89,6 +89,7 @@
"This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versandte E-Mail, bitte nicht antworten.",
"Help" : "Hilfe",
"Apps" : "Apps",
+ "Personal settings" : "Persönliche Einstellungen",
"Settings" : "Einstellungen",
"Log out" : "Abmelden",
"Users" : "Benutzer",
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 2fc511f01fc..929b6adc36d 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versandte E-Mail, bitte nicht antworten.",
"Help" : "Hilfe",
"Apps" : "Apps",
+ "Personal settings" : "Persönliche Einstellungen",
+ "Administration settings" : "Administrationseinstellungen",
"Settings" : "Einstellungen",
"Log out" : "Abmelden",
"Users" : "Benutzer",
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 95f217f8968..149a5429896 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "Dies ist eine automatisch versandte E-Mail, bitte nicht antworten.",
"Help" : "Hilfe",
"Apps" : "Apps",
+ "Personal settings" : "Persönliche Einstellungen",
+ "Administration settings" : "Administrationseinstellungen",
"Settings" : "Einstellungen",
"Log out" : "Abmelden",
"Users" : "Benutzer",
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
index d0011407a62..1d758d80473 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Αυτό είναι ένα μήνυμα ηλεκτρονικού ταχυδρομείου που στάλθηκε αυτόματα, παρακαλούμε μην απαντήσετε.",
"Help" : "Βοήθεια",
"Apps" : "Εφαρμογές",
+ "Personal settings" : "Προσωπικές ρυθμίσεις",
"Settings" : "Ρυθμίσεις",
"Log out" : "Έξοδος",
"Users" : "Χρήστες",
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index d52815ac6f6..88b0022aa60 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -89,6 +89,7 @@
"This is an automatically sent email, please do not reply." : "Αυτό είναι ένα μήνυμα ηλεκτρονικού ταχυδρομείου που στάλθηκε αυτόματα, παρακαλούμε μην απαντήσετε.",
"Help" : "Βοήθεια",
"Apps" : "Εφαρμογές",
+ "Personal settings" : "Προσωπικές ρυθμίσεις",
"Settings" : "Ρυθμίσεις",
"Log out" : "Έξοδος",
"Users" : "Χρήστες",
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index efd49e6c020..ffa65189c8e 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no responda.",
"Help" : "Ayuda",
"Apps" : "Aplicaciones",
+ "Personal settings" : "Ajustes personales",
"Settings" : "Ajustes",
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index ae9b87df314..24809243385 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -89,6 +89,7 @@
"This is an automatically sent email, please do not reply." : "Este es un correo enviado automáticamente, por favor no responda.",
"Help" : "Ayuda",
"Apps" : "Aplicaciones",
+ "Personal settings" : "Ajustes personales",
"Settings" : "Ajustes",
"Log out" : "Cerrar sesión",
"Users" : "Usuarios",
diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js
index 94244be5607..bbef4fead98 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Hau automatikoki bidalitako e-posta bat da, ez erantzun mesedez.",
"Help" : "Laguntza",
"Apps" : "Aplikazioak",
+ "Personal settings" : "Ezarpen pertsonalak",
"Settings" : "Ezarpenak",
"Log out" : "Amaitu saioa",
"Users" : "Erabiltzaileak",
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index 0eac90e1da9..1afbdf9cf14 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -89,6 +89,7 @@
"This is an automatically sent email, please do not reply." : "Hau automatikoki bidalitako e-posta bat da, ez erantzun mesedez.",
"Help" : "Laguntza",
"Apps" : "Aplikazioak",
+ "Personal settings" : "Ezarpen pertsonalak",
"Settings" : "Ezarpenak",
"Log out" : "Amaitu saioa",
"Users" : "Erabiltzaileak",
diff --git a/lib/l10n/fi.js b/lib/l10n/fi.js
index 13ebcfcffeb..f01cae12c98 100644
--- a/lib/l10n/fi.js
+++ b/lib/l10n/fi.js
@@ -79,6 +79,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Tämä on automaattisesti lähetetty viesti. Älä vastaa tähän viestiin.",
"Help" : "Ohje",
"Apps" : "Sovellukset",
+ "Personal settings" : "Henkilökohtaiset asetukset",
"Settings" : "Asetukset",
"Log out" : "Kirjaudu ulos",
"Users" : "Käyttäjät",
diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json
index 2aa4fdcd0d5..fc4606693d9 100644
--- a/lib/l10n/fi.json
+++ b/lib/l10n/fi.json
@@ -77,6 +77,7 @@
"This is an automatically sent email, please do not reply." : "Tämä on automaattisesti lähetetty viesti. Älä vastaa tähän viestiin.",
"Help" : "Ohje",
"Apps" : "Sovellukset",
+ "Personal settings" : "Henkilökohtaiset asetukset",
"Settings" : "Asetukset",
"Log out" : "Kirjaudu ulos",
"Users" : "Käyttäjät",
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index fce71090c61..7a2c82ebbbf 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Ceci est un e-mail envoyé automatiquement, veuillez ne pas y répondre.",
"Help" : "Aide",
"Apps" : "Applications",
+ "Personal settings" : "Paramètres personnels",
"Settings" : "Paramètres",
"Log out" : "Se déconnecter",
"Users" : "Utilisateurs",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index f9ff67188b0..3c560d11f55 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -89,6 +89,7 @@
"This is an automatically sent email, please do not reply." : "Ceci est un e-mail envoyé automatiquement, veuillez ne pas y répondre.",
"Help" : "Aide",
"Apps" : "Applications",
+ "Personal settings" : "Paramètres personnels",
"Settings" : "Paramètres",
"Log out" : "Se déconnecter",
"Users" : "Utilisateurs",
diff --git a/lib/l10n/hu.js b/lib/l10n/hu.js
index 6d37257854c..fc3561d2169 100644
--- a/lib/l10n/hu.js
+++ b/lib/l10n/hu.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Ez egy automatikusan küldött levél, ne válaszoljon rá.",
"Help" : "Súgó",
"Apps" : "Alkalmazások",
+ "Personal settings" : "Személyes beállítások",
+ "Administration settings" : "Rendszergazdai beállítások",
"Settings" : "Beállítások",
"Log out" : "Kijelentkezés",
"Users" : "Felhasználók",
diff --git a/lib/l10n/hu.json b/lib/l10n/hu.json
index 09245fbe1e5..9b262142578 100644
--- a/lib/l10n/hu.json
+++ b/lib/l10n/hu.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "Ez egy automatikusan küldött levél, ne válaszoljon rá.",
"Help" : "Súgó",
"Apps" : "Alkalmazások",
+ "Personal settings" : "Személyes beállítások",
+ "Administration settings" : "Rendszergazdai beállítások",
"Settings" : "Beállítások",
"Log out" : "Kijelentkezés",
"Users" : "Felhasználók",
diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js
index eb9255cda36..e29e83d3c51 100644
--- a/lib/l10n/pl.js
+++ b/lib/l10n/pl.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Jest to wiadomość e-mail wysłana automatycznie, prosimy nie odpowiadać na nią.",
"Help" : "Pomoc",
"Apps" : "Aplikacje",
+ "Personal settings" : "Ustawienia osobiste",
+ "Administration settings" : "Ustawienia administracyjne",
"Settings" : "Ustawienia",
"Log out" : "Wyloguj",
"Users" : "Użytkownicy",
diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json
index 208cfee7853..c9d619331d7 100644
--- a/lib/l10n/pl.json
+++ b/lib/l10n/pl.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "Jest to wiadomość e-mail wysłana automatycznie, prosimy nie odpowiadać na nią.",
"Help" : "Pomoc",
"Apps" : "Aplikacje",
+ "Personal settings" : "Ustawienia osobiste",
+ "Administration settings" : "Ustawienia administracyjne",
"Settings" : "Ustawienia",
"Log out" : "Wyloguj",
"Users" : "Użytkownicy",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 68f00800412..71deeea2397 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -91,6 +91,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Este e-mail é enviado automaticamente. Por favor, não responda.",
"Help" : "Ajuda",
"Apps" : "Aplicativos",
+ "Personal settings" : "Configurações pessoais",
"Settings" : "Configurações",
"Log out" : "Sair",
"Users" : "Usuários",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index 4e4bf30845b..80b7285aa26 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -89,6 +89,7 @@
"This is an automatically sent email, please do not reply." : "Este e-mail é enviado automaticamente. Por favor, não responda.",
"Help" : "Ajuda",
"Apps" : "Aplicativos",
+ "Personal settings" : "Configurações pessoais",
"Settings" : "Configurações",
"Log out" : "Sair",
"Users" : "Usuários",
diff --git a/lib/l10n/sl.js b/lib/l10n/sl.js
index eb2fe3434ba..cf0a09ce781 100644
--- a/lib/l10n/sl.js
+++ b/lib/l10n/sl.js
@@ -85,6 +85,7 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "To sporočilo je samodejno poslano, nanj se nima smisla odzvati.",
"Help" : "Pomoč",
"Apps" : "Programi",
+ "Personal settings" : "Osebne nastavitve",
"Settings" : "Nastavitve",
"Log out" : "Odjava",
"Users" : "Uporabniki",
diff --git a/lib/l10n/sl.json b/lib/l10n/sl.json
index 175d8246b3c..8b3d781934d 100644
--- a/lib/l10n/sl.json
+++ b/lib/l10n/sl.json
@@ -83,6 +83,7 @@
"This is an automatically sent email, please do not reply." : "To sporočilo je samodejno poslano, nanj se nima smisla odzvati.",
"Help" : "Pomoč",
"Apps" : "Programi",
+ "Personal settings" : "Osebne nastavitve",
"Settings" : "Nastavitve",
"Log out" : "Odjava",
"Users" : "Uporabniki",
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index 53de08e4f73..96d2e08716a 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "Bu ileti otomatik olarak gönderildiğinden lütfen yanıtlamayın.",
"Help" : "Yardım",
"Apps" : "Uygulamalar",
+ "Personal settings" : "Kişisel ayarlar",
+ "Administration settings" : "Yönetim ayarları",
"Settings" : "Ayarlar",
"Log out" : "Oturumu kapat",
"Users" : "Kullanıcılar",
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index eb666c3b364..7bd36c0e54b 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "Bu ileti otomatik olarak gönderildiğinden lütfen yanıtlamayın.",
"Help" : "Yardım",
"Apps" : "Uygulamalar",
+ "Personal settings" : "Kişisel ayarlar",
+ "Administration settings" : "Yönetim ayarları",
"Settings" : "Ayarlar",
"Log out" : "Oturumu kapat",
"Users" : "Kullanıcılar",
diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js
index 8f204020c65..c5076a56cb2 100644
--- a/lib/l10n/uk.js
+++ b/lib/l10n/uk.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"The command line tool %s could not be found" : "Утиліту командного рядка %s не знайдено",
"The library %s is not available." : "Бібліотека %s недоступна.",
"Server version %s or higher is required." : "Потрібна версія сервера %s або вище.",
+ "Server version %s or lower is required." : "Потрібна версія сервера %s або нижча.",
"Remote wipe started" : "Розпочато віддалене стирання",
"Remote wipe finished" : "Віддалене стирання завершено",
"Authentication" : "Автентифікація",
@@ -34,19 +35,24 @@ OC.L10N.register(
"last year" : "минулого року",
"_%n year ago_::_%n years ago_" : ["%n рік тому","%n років тому","%n років тому","%n років тому"],
"_%n hour ago_::_%n hours ago_" : ["%nгодину тому","%n годин тому","%n годин тому","%n годин тому"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n хвилину тому","%n хвилин тому","%n хвилин тому","%n хвилин тому"],
"in a few seconds" : "через кілька секунд",
"seconds ago" : "секунди тому",
"Empty file" : "Порожній файл",
"File already exists" : "Файл вже існує",
+ "Templates" : "Шаблони",
"File name is a reserved word" : "Ім’я файлу є зарезервованим словом",
"File name contains at least one invalid character" : "Ім’я файлу містить принаймні один некоректний символ",
"File name is too long" : "Ім’я файлу занадто довге",
"Dot files are not allowed" : "Файли які починаються з крапки не допустимі",
"Empty filename is not allowed" : "Порожні імена файлів не допускаються",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Застосунок \"%s\" не може бути встановлений через те, що файл appinfo не може бути прочитано.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Програму \"%s\" неможливо встановити, оскільки вона не сумісна з цією версією сервера.",
"__language_name__" : "Українська",
"Help" : "Допомога",
"Apps" : "Застосунки",
+ "Personal settings" : "Персональні налаштування",
+ "Administration settings" : "Налаштування адміністрування",
"Settings" : "Налаштування",
"Log out" : "Вихід",
"Users" : "Користувачі",
diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json
index 24ae8d496ba..51f70256612 100644
--- a/lib/l10n/uk.json
+++ b/lib/l10n/uk.json
@@ -14,6 +14,7 @@
"The command line tool %s could not be found" : "Утиліту командного рядка %s не знайдено",
"The library %s is not available." : "Бібліотека %s недоступна.",
"Server version %s or higher is required." : "Потрібна версія сервера %s або вище.",
+ "Server version %s or lower is required." : "Потрібна версія сервера %s або нижча.",
"Remote wipe started" : "Розпочато віддалене стирання",
"Remote wipe finished" : "Віддалене стирання завершено",
"Authentication" : "Автентифікація",
@@ -32,19 +33,24 @@
"last year" : "минулого року",
"_%n year ago_::_%n years ago_" : ["%n рік тому","%n років тому","%n років тому","%n років тому"],
"_%n hour ago_::_%n hours ago_" : ["%nгодину тому","%n годин тому","%n годин тому","%n годин тому"],
+ "_%n minute ago_::_%n minutes ago_" : ["%n хвилину тому","%n хвилин тому","%n хвилин тому","%n хвилин тому"],
"in a few seconds" : "через кілька секунд",
"seconds ago" : "секунди тому",
"Empty file" : "Порожній файл",
"File already exists" : "Файл вже існує",
+ "Templates" : "Шаблони",
"File name is a reserved word" : "Ім’я файлу є зарезервованим словом",
"File name contains at least one invalid character" : "Ім’я файлу містить принаймні один некоректний символ",
"File name is too long" : "Ім’я файлу занадто довге",
"Dot files are not allowed" : "Файли які починаються з крапки не допустимі",
"Empty filename is not allowed" : "Порожні імена файлів не допускаються",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "Застосунок \"%s\" не може бути встановлений через те, що файл appinfo не може бути прочитано.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Програму \"%s\" неможливо встановити, оскільки вона не сумісна з цією версією сервера.",
"__language_name__" : "Українська",
"Help" : "Допомога",
"Apps" : "Застосунки",
+ "Personal settings" : "Персональні налаштування",
+ "Administration settings" : "Налаштування адміністрування",
"Settings" : "Налаштування",
"Log out" : "Вихід",
"Users" : "Користувачі",
diff --git a/lib/l10n/uz.js b/lib/l10n/uz.js
index ff0e1f54a36..41cb4509e83 100644
--- a/lib/l10n/uz.js
+++ b/lib/l10n/uz.js
@@ -1,17 +1,25 @@
OC.L10N.register(
"lib",
{
- "Cannot write into \"config\" directory!" : "\"Config\" katalogiga yozish mumkin emas!",
- "Unknown filetype" : "Noma'lum filetype",
- "Invalid image" : "Tasdiqlanmagan tasvir",
- "seconds ago" : "soniya oldin",
- "Help" : "Yordam",
- "Apps" : "Ilovalar",
- "Settings" : "Sozlamalar",
- "Users" : "Foydalanuvchilar",
- "About" : "Biz haqimizda",
- "Unknown user" : "Noma'lum foydalanuvchi",
- "January" : "Yanvar",
- "Storage is temporarily not available" : "Saqlash vaqti-vaqti bilan mavjud emas"
+ "Cannot write into \"config\" directory!" : "Cannot write into \"config\" directory!",
+ "Unknown filetype" : "Unknown filetype",
+ "Invalid image" : "Invalid image",
+ "View profile" : "View profile",
+ "last month" : "last month",
+ "seconds ago" : "seconds ago",
+ "File name is too long" : "File name is too long",
+ "Help" : "Help",
+ "Apps" : "Apps",
+ "Settings" : "Settings",
+ "Users" : "Users",
+ "Address" : "Address",
+ "Profile picture" : "Profil rasmi",
+ "About" : "About",
+ "Full name" : "Full name",
+ "Unknown user" : "Unknown user",
+ "Set an admin password." : "Set an admin password.",
+ "January" : "January",
+ "Authentication error" : "Authentication error",
+ "Storage is temporarily not available" : "Storage is temporarily not available"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/uz.json b/lib/l10n/uz.json
index eaf3a38a9b4..bbddc8953c7 100644
--- a/lib/l10n/uz.json
+++ b/lib/l10n/uz.json
@@ -1,15 +1,23 @@
{ "translations": {
- "Cannot write into \"config\" directory!" : "\"Config\" katalogiga yozish mumkin emas!",
- "Unknown filetype" : "Noma'lum filetype",
- "Invalid image" : "Tasdiqlanmagan tasvir",
- "seconds ago" : "soniya oldin",
- "Help" : "Yordam",
- "Apps" : "Ilovalar",
- "Settings" : "Sozlamalar",
- "Users" : "Foydalanuvchilar",
- "About" : "Biz haqimizda",
- "Unknown user" : "Noma'lum foydalanuvchi",
- "January" : "Yanvar",
- "Storage is temporarily not available" : "Saqlash vaqti-vaqti bilan mavjud emas"
+ "Cannot write into \"config\" directory!" : "Cannot write into \"config\" directory!",
+ "Unknown filetype" : "Unknown filetype",
+ "Invalid image" : "Invalid image",
+ "View profile" : "View profile",
+ "last month" : "last month",
+ "seconds ago" : "seconds ago",
+ "File name is too long" : "File name is too long",
+ "Help" : "Help",
+ "Apps" : "Apps",
+ "Settings" : "Settings",
+ "Users" : "Users",
+ "Address" : "Address",
+ "Profile picture" : "Profil rasmi",
+ "About" : "About",
+ "Full name" : "Full name",
+ "Unknown user" : "Unknown user",
+ "Set an admin password." : "Set an admin password.",
+ "January" : "January",
+ "Authentication error" : "Authentication error",
+ "Storage is temporarily not available" : "Storage is temporarily not available"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/zh_HK.js b/lib/l10n/zh_HK.js
index b83d186a24d..ee5352413f5 100644
--- a/lib/l10n/zh_HK.js
+++ b/lib/l10n/zh_HK.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "此為自動寄送的電子郵件,請勿回覆。",
"Help" : "說明",
"Apps" : "應用程式",
+ "Personal settings" : "個人設定",
+ "Administration settings" : "管理設定",
"Settings" : "設定",
"Log out" : "登出",
"Users" : "用戶",
@@ -103,7 +105,7 @@ OC.L10N.register(
"Website" : "網站",
"Visit %s" : "探訪 %s",
"Address" : "地址",
- "Profile picture" : "個人檔案圖片",
+ "Profile picture" : "個人資料圖片",
"About" : "關於",
"Full name" : "全名",
"Headline" : "標題",
diff --git a/lib/l10n/zh_HK.json b/lib/l10n/zh_HK.json
index b9335c27727..6f2f3e90bfd 100644
--- a/lib/l10n/zh_HK.json
+++ b/lib/l10n/zh_HK.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "此為自動寄送的電子郵件,請勿回覆。",
"Help" : "說明",
"Apps" : "應用程式",
+ "Personal settings" : "個人設定",
+ "Administration settings" : "管理設定",
"Settings" : "設定",
"Log out" : "登出",
"Users" : "用戶",
@@ -101,7 +103,7 @@
"Website" : "網站",
"Visit %s" : "探訪 %s",
"Address" : "地址",
- "Profile picture" : "個人檔案圖片",
+ "Profile picture" : "個人資料圖片",
"About" : "關於",
"Full name" : "全名",
"Headline" : "標題",
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index 7d04bd7d3e7..80f3aac3a7a 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -91,6 +91,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "此為自動寄送的電子郵件,請不要回覆。",
"Help" : "說明",
"Apps" : "應用程式",
+ "Personal settings" : "個人設定",
+ "Administration settings" : "管理設定",
"Settings" : "設定",
"Log out" : "登出",
"Users" : "使用者",
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index c522a9f7277..524c950c704 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -89,6 +89,8 @@
"This is an automatically sent email, please do not reply." : "此為自動寄送的電子郵件,請不要回覆。",
"Help" : "說明",
"Apps" : "應用程式",
+ "Personal settings" : "個人設定",
+ "Administration settings" : "管理設定",
"Settings" : "設定",
"Log out" : "登出",
"Users" : "使用者",
diff --git a/lib/private/Calendar/Manager.php b/lib/private/Calendar/Manager.php
index f0b8e9fd50d..550ba36dd6b 100644
--- a/lib/private/Calendar/Manager.php
+++ b/lib/private/Calendar/Manager.php
@@ -330,12 +330,27 @@ class Manager implements IManager {
// to the email address in the ORGANIZER.
// We don't want to accept a CANCEL request from just anyone
$organizer = substr($vEvent->{'ORGANIZER'}->getValue(), 7);
- if (strcasecmp($sender, $organizer) !== 0 && strcasecmp($replyTo, $organizer) !== 0) {
+ $isNotOrganizer = ($replyTo !== null) ? (strcasecmp($sender, $organizer) !== 0 && strcasecmp($replyTo, $organizer) !== 0) : (strcasecmp($sender, $organizer) !== 0);
+ if ($isNotOrganizer) {
$this->logger->warning('Sender must be the ORGANIZER of this event');
return false;
}
+ //check if the event is in the future
+ /** @var DateTime $eventTime */
+ $eventTime = $vEvent->{'DTSTART'};
+ if ($eventTime->getDateTime()->getTimeStamp() < $this->timeFactory->getTime()) { // this might cause issues with recurrences
+ $this->logger->warning('Only events in the future are processed');
+ return false;
+ }
+
+ // Check if we have a calendar to work with
$calendars = $this->getCalendarsForPrincipal($principalUri);
+ if (empty($calendars)) {
+ $this->logger->warning('Could not find any calendars for principal ' . $principalUri);
+ return false;
+ }
+
$found = null;
// if the attendee has been found in at least one calendar event with the UID of the iMIP event
// we process it.
diff --git a/lib/private/Federation/CloudIdManager.php b/lib/private/Federation/CloudIdManager.php
index 77bb9437ba2..e4e42cb1293 100644
--- a/lib/private/Federation/CloudIdManager.php
+++ b/lib/private/Federation/CloudIdManager.php
@@ -30,11 +30,17 @@ declare(strict_types=1);
*/
namespace OC\Federation;
+use OCA\DAV\Events\CardUpdatedEvent;
use OCP\Contacts\IManager;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventDispatcher;
use OCP\Federation\ICloudId;
use OCP\Federation\ICloudIdManager;
+use OCP\ICache;
+use OCP\ICacheFactory;
use OCP\IURLGenerator;
use OCP\IUserManager;
+use OCP\User\Events\UserChangedEvent;
class CloudIdManager implements ICloudIdManager {
/** @var IManager */
@@ -43,11 +49,48 @@ class CloudIdManager implements ICloudIdManager {
private $urlGenerator;
/** @var IUserManager */
private $userManager;
-
- public function __construct(IManager $contactsManager, IURLGenerator $urlGenerator, IUserManager $userManager) {
+ private ICache $memCache;
+ /** @var array[] */
+ private array $cache = [];
+
+ public function __construct(
+ IManager $contactsManager,
+ IURLGenerator $urlGenerator,
+ IUserManager $userManager,
+ ICacheFactory $cacheFactory,
+ IEventDispatcher $eventDispatcher
+ ) {
$this->contactsManager = $contactsManager;
$this->urlGenerator = $urlGenerator;
$this->userManager = $userManager;
+ $this->memCache = $cacheFactory->createDistributed('cloud_id_');
+ $eventDispatcher->addListener(UserChangedEvent::class, [$this, 'handleUserEvent']);
+ $eventDispatcher->addListener(CardUpdatedEvent::class, [$this, 'handleCardEvent']);
+ }
+
+ public function handleUserEvent(Event $event): void {
+ if ($event instanceof UserChangedEvent && $event->getFeature() === 'displayName') {
+ $userId = $event->getUser()->getUID();
+ $key = $userId . '@local';
+ unset($this->cache[$key]);
+ $this->memCache->remove($key);
+ }
+ }
+
+ public function handleCardEvent(Event $event): void {
+ if ($event instanceof CardUpdatedEvent) {
+ $data = $event->getCardData()['carddata'];
+ foreach (explode("\r\n", $data) as $line) {
+ if (strpos($line, "CLOUD;") === 0) {
+ $parts = explode(':', $line, 2);
+ if (isset($parts[1])) {
+ $key = $parts[1];
+ unset($this->cache[$key]);
+ $this->memCache->remove($key);
+ }
+ }
+ }
+ }
}
/**
@@ -120,18 +163,42 @@ class CloudIdManager implements ICloudIdManager {
* @return CloudId
*/
public function getCloudId(string $user, ?string $remote): ICloudId {
- if ($remote === null) {
+ $isLocal = $remote === null;
+ if ($isLocal) {
$remote = rtrim($this->removeProtocolFromUrl($this->urlGenerator->getAbsoluteURL('/')), '/');
$fixedRemote = $this->fixRemoteURL($remote);
- $localUser = $this->userManager->get($user);
- $displayName = !is_null($localUser) ? $localUser->getDisplayName() : '';
+ $host = $fixedRemote;
} else {
- // TODO check what the correct url is for remote (asking the remote)
+ // note that for remote id's we don't strip the protocol for the remote we use to construct the CloudId
+ // this way if a user has an explicit non-https cloud id this will be preserved
+ // we do still use the version without protocol for looking up the display name
$fixedRemote = $this->fixRemoteURL($remote);
$host = $this->removeProtocolFromUrl($fixedRemote);
+ }
+
+ $key = $user . '@' . ($isLocal ? 'local' : $host);
+ $cached = $this->cache[$key] ?? $this->memCache->get($key);
+ if ($cached) {
+ $this->cache[$key] = $cached; // put items from memcache into local cache
+ return new CloudId($cached['id'], $cached['user'], $cached['remote'], $cached['displayName']);
+ }
+
+ if ($isLocal) {
+ $localUser = $this->userManager->get($user);
+ $displayName = $localUser ? $localUser->getDisplayName() : '';
+ } else {
$displayName = $this->getDisplayNameFromContact($user . '@' . $host);
}
$id = $user . '@' . $remote;
+
+ $data = [
+ 'id' => $id,
+ 'user' => $user,
+ 'remote' => $fixedRemote,
+ 'displayName' => $displayName,
+ ];
+ $this->cache[$key] = $data;
+ $this->memCache->set($key, $data, 15 * 60);
return new CloudId($id, $user, $fixedRemote, $displayName);
}
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php
index 5782a5a72a6..d52a291cd99 100644
--- a/lib/private/Files/SetupManager.php
+++ b/lib/private/Files/SetupManager.php
@@ -172,10 +172,10 @@ class SetupManager {
*/
if ($storage->instanceOfStorage(HomeObjectStoreStorage::class) || $storage->instanceOfStorage(Home::class)) {
if (is_object($storage->getUser())) {
- $quota = OC_Util::getUserQuota($storage->getUser());
- if ($quota !== \OCP\Files\FileInfo::SPACE_UNLIMITED) {
- return new Quota(['storage' => $storage, 'quota' => $quota, 'root' => 'files']);
- }
+ $user = $storage->getUser();
+ return new Quota(['storage' => $storage, 'quotaCallback' => function () use ($user) {
+ return OC_Util::getUserQuota($user);
+ }, 'root' => 'files']);
}
}
diff --git a/lib/private/Files/Storage/Wrapper/Quota.php b/lib/private/Files/Storage/Wrapper/Quota.php
index 4cd0a5e0b4a..8b129472eb0 100644
--- a/lib/private/Files/Storage/Wrapper/Quota.php
+++ b/lib/private/Files/Storage/Wrapper/Quota.php
@@ -33,40 +33,47 @@
namespace OC\Files\Storage\Wrapper;
use OC\Files\Filesystem;
+use OC\SystemConfig;
use OCP\Files\Cache\ICacheEntry;
+use OCP\Files\FileInfo;
use OCP\Files\Storage\IStorage;
class Quota extends Wrapper {
-
- /**
- * @var int $quota
- */
- protected $quota;
-
- /**
- * @var string $sizeRoot
- */
- protected $sizeRoot;
-
- private $config;
+ /** @var callable|null */
+ protected $quotaCallback;
+ protected ?int $quota;
+ protected string $sizeRoot;
+ private SystemConfig $config;
/**
* @param array $parameters
*/
public function __construct($parameters) {
parent::__construct($parameters);
- $this->quota = $parameters['quota'];
- $this->sizeRoot = isset($parameters['root']) ? $parameters['root'] : '';
- $this->config = \OC::$server->getSystemConfig();
+ $this->quota = $parameters['quota'] ?? null;
+ $this->quotaCallback = $parameters['quotaCallback'] ?? null;
+ $this->sizeRoot = $parameters['root'] ?? '';
+ $this->config = \OC::$server->get(SystemConfig::class);
}
/**
* @return int quota value
*/
- public function getQuota() {
+ public function getQuota(): int {
+ if ($this->quota === null) {
+ $quotaCallback = $this->quotaCallback;
+ if ($quotaCallback === null) {
+ throw new \Exception("No quota or quota callback provider");
+ }
+ $this->quota = $quotaCallback();
+ }
return $this->quota;
}
+ private function hasQuota(): bool {
+ return $this->getQuota() !== FileInfo::SPACE_UNLIMITED;
+ }
+
/**
* @param string $path
* @param \OC\Files\Storage\Storage $storage
@@ -100,7 +107,10 @@ class Quota extends Wrapper {
* @return int|bool
*/
public function free_space($path) {
- if ($this->quota < 0 || strpos($path, 'cache') === 0 || strpos($path, 'uploads') === 0) {
+ if (!$this->hasQuota()) {
+ return $this->storage->free_space($path);
+ }
+ if ($this->getQuota() < 0 || strpos($path, 'cache') === 0 || strpos($path, 'uploads') === 0) {
return $this->storage->free_space($path);
} else {
$used = $this->getSize($this->sizeRoot);
@@ -108,7 +118,7 @@ class Quota extends Wrapper {
return \OCP\Files\FileInfo::SPACE_NOT_COMPUTED;
} else {
$free = $this->storage->free_space($path);
- $quotaFree = max($this->quota - $used, 0);
+ $quotaFree = max($this->getQuota() - $used, 0);
// if free space is known
if ($free >= 0) {
$free = min($free, $quotaFree);
@@ -128,6 +138,9 @@ class Quota extends Wrapper {
* @return int|false
*/
public function file_put_contents($path, $data) {
+ if (!$this->hasQuota()) {
+ return $this->storage->file_put_contents($path, $data);
+ }
$free = $this->free_space($path);
if ($free < 0 or strlen($data) < $free) {
return $this->storage->file_put_contents($path, $data);
@@ -144,6 +157,9 @@ class Quota extends Wrapper {
* @return bool
*/
public function copy($source, $target) {
+ if (!$this->hasQuota()) {
+ return $this->storage->copy($source, $target);
+ }
$free = $this->free_space($target);
if ($free < 0 or $this->getSize($source) < $free) {
return $this->storage->copy($source, $target);
@@ -160,6 +176,9 @@ class Quota extends Wrapper {
* @return resource|bool
*/
public function fopen($path, $mode) {
+ if (!$this->hasQuota()) {
+ return $this->storage->fopen($path, $mode);
+ }
$source = $this->storage->fopen($path, $mode);
// don't apply quota for part files
@@ -202,6 +221,9 @@ class Quota extends Wrapper {
* @return bool
*/
public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) {
+ if (!$this->hasQuota()) {
+ return $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
+ }
$free = $this->free_space($targetInternalPath);
if ($free < 0 or $this->getSize($sourceInternalPath, $sourceStorage) < $free) {
return $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
@@ -217,6 +239,9 @@ class Quota extends Wrapper {
* @return bool
*/
public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) {
+ if (!$this->hasQuota()) {
+ return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
+ }
$free = $this->free_space($targetInternalPath);
if ($free < 0 or $this->getSize($sourceInternalPath, $sourceStorage) < $free) {
return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
@@ -226,8 +251,11 @@ class Quota extends Wrapper {
}
public function mkdir($path) {
+ if (!$this->hasQuota()) {
+ return $this->storage->mkdir($path);
+ }
$free = $this->free_space($path);
- if ($this->shouldApplyQuota($path) && $free === 0.0) {
+ if ($this->shouldApplyQuota($path) && $free == 0) {
return false;
}
@@ -235,8 +263,11 @@ class Quota extends Wrapper {
}
public function touch($path, $mtime = null) {
+ if (!$this->hasQuota()) {
+ return $this->storage->touch($path, $mtime);
+ }
$free = $this->free_space($path);
- if ($free === 0.0) {
+ if ($free == 0) {
return false;
}
diff --git a/lib/private/Files/Stream/HashWrapper.php b/lib/private/Files/Stream/HashWrapper.php
index fd9bb3cdd0b..4060d74de7d 100644
--- a/lib/private/Files/Stream/HashWrapper.php
+++ b/lib/private/Files/Stream/HashWrapper.php
@@ -67,7 +67,16 @@ class HashWrapper extends Wrapper {
public function stream_close() {
if (is_callable($this->callback)) {
- call_user_func($this->callback, hash_final($this->hash));
+ // if the stream is closed as a result of the end-of-request GC, the hash context might be cleaned up before this stream
+ if ($this->hash instanceof \HashContext) {
+ try {
+ $hash = @hash_final($this->hash);
+ if ($hash) {
+ call_user_func($this->callback, $hash);
+ }
+ } catch (\Throwable $e) {
+ }
+ }
// prevent further calls by potential PHP 7 GC ghosts
$this->callback = null;
}
diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php
index bbf28d2c142..7fd76850816 100644
--- a/lib/private/NavigationManager.php
+++ b/lib/private/NavigationManager.php
@@ -228,7 +228,7 @@ class NavigationManager implements INavigationManager {
'id' => 'admin_settings',
'order' => 3,
'href' => $this->urlGenerator->linkToRoute('settings.AdminSettings.index', ['section' => 'overview']),
- 'name' => $l->t('Admin settings'),
+ 'name' => $l->t('Administration settings'),
'icon' => $this->urlGenerator->imagePath('settings', 'admin.svg'),
]);
} else {
diff --git a/lib/private/Repair/MoveUpdaterStepFile.php b/lib/private/Repair/MoveUpdaterStepFile.php
index bc7430d7a7f..020510804d7 100644
--- a/lib/private/Repair/MoveUpdaterStepFile.php
+++ b/lib/private/Repair/MoveUpdaterStepFile.php
@@ -43,14 +43,14 @@ class MoveUpdaterStepFile implements IRepairStep {
}
public function run(IOutput $output) {
- $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data');
+ $updateDir = $this->config->getSystemValue('updatedirectory') ?? $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data');
$instanceId = $this->config->getSystemValue('instanceid', null);
if (!is_string($instanceId) || empty($instanceId)) {
return;
}
- $updaterFolderPath = $dataDir . '/updater-' . $instanceId;
+ $updaterFolderPath = $updateDir . '/updater-' . $instanceId;
$stepFile = $updaterFolderPath . '/.step';
if (file_exists($stepFile)) {
$output->info('.step file exists');
diff --git a/lib/private/Server.php b/lib/private/Server.php
index f18ac7b6534..c1a50cfcaff 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -1365,7 +1365,13 @@ class Server extends ServerContainer implements IServerContainer {
});
$this->registerService(ICloudIdManager::class, function (ContainerInterface $c) {
- return new CloudIdManager($c->get(\OCP\Contacts\IManager::class), $c->get(IURLGenerator::class), $c->get(IUserManager::class));
+ return new CloudIdManager(
+ $c->get(\OCP\Contacts\IManager::class),
+ $c->get(IURLGenerator::class),
+ $c->get(IUserManager::class),
+ $c->get(ICacheFactory::class),
+ $c->get(IEventDispatcher::class),
+ );
});
$this->registerAlias(\OCP\GlobalScale\IConfig::class, \OC\GlobalScale\Config::class);
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 05a286e4758..44f1df09c15 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -150,6 +150,13 @@ class Manager implements IManager {
return $this->sections[$type];
}
+ public function getSection(string $type, string $sectionId): ?IIconSection {
+ if (isset($this->sections[$type]) && isset($this->sections[$type][$sectionId])) {
+ return $this->sections[$type][$sectionId];
+ }
+ return null;
+ }
+
protected function isKnownDuplicateSectionId(string $sectionID): bool {
return in_array($sectionID, [
'connected-accounts',
diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php
index 0b38f04bfe3..f106c2e8b6d 100644
--- a/lib/private/User/Database.php
+++ b/lib/private/User/Database.php
@@ -212,11 +212,13 @@ class Database extends ABackend implements
* @param string $displayName The new display name
* @return bool
*
+ * @throws \InvalidArgumentException
+ *
* Change the display name of a user
*/
public function setDisplayName(string $uid, string $displayName): bool {
if (mb_strlen($displayName) > 64) {
- return false;
+ throw new \InvalidArgumentException('Invalid displayname');
}
$this->fixDI();
diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php
index 626ddca2dad..65a213d4bf8 100644
--- a/lib/private/User/Session.php
+++ b/lib/private/User/Session.php
@@ -865,6 +865,10 @@ class Session implements IUserSession, Emitter {
$tokens = $this->config->getUserKeys($uid, 'login_token');
// test cookies token against stored tokens
if (!in_array($currentToken, $tokens, true)) {
+ $this->logger->error('Tried to log in {uid} but could not verify token', [
+ 'app' => 'core',
+ 'uid' => $uid,
+ ]);
return false;
}
// replace successfully used token with a new one
@@ -876,6 +880,10 @@ class Session implements IUserSession, Emitter {
$sessionId = $this->session->getId();
$token = $this->tokenProvider->renewSessionToken($oldSessionId, $sessionId);
} catch (SessionNotAvailableException $ex) {
+ $this->logger->warning('Could not renew session token for {uid} because the session is unavailable', [
+ 'app' => 'core',
+ 'uid' => $uid,
+ ]);
return false;
} catch (InvalidTokenException $ex) {
$this->logger->warning('Renewing session token failed', ['app' => 'core']);
diff --git a/lib/private/User/User.php b/lib/private/User/User.php
index 7f7d6273e30..f5d93dcd680 100644
--- a/lib/private/User/User.php
+++ b/lib/private/User/User.php
@@ -154,6 +154,9 @@ class User implements IUser {
*
* @param string $displayName
* @return bool
+ *
+ * @since 25.0.0 Throw InvalidArgumentException
+ * @throws \InvalidArgumentException
*/
public function setDisplayName($displayName) {
$displayName = trim($displayName);
@@ -196,7 +199,7 @@ class User implements IUser {
$this->setPrimaryEMailAddress('');
}
- if ($oldMailAddress !== $mailAddress) {
+ if ($oldMailAddress !== strtolower($mailAddress)) {
$this->triggerChange('eMailAddress', $mailAddress, $oldMailAddress);
}
}
@@ -556,6 +559,9 @@ class User implements IUser {
public function getCloudId() {
$uid = $this->getUID();
$server = $this->urlGenerator->getAbsoluteURL('/');
+ if (substr($server, -10) === '/index.php') {
+ $server = substr($server, 0, -10);
+ }
$server = rtrim($this->removeProtocolFromUrl($server), '/');
return $uid . '@' . $server;
}
diff --git a/lib/public/AppFramework/Http/Response.php b/lib/public/AppFramework/Http/Response.php
index 6febef838cf..9dd84a16649 100644
--- a/lib/public/AppFramework/Http/Response.php
+++ b/lib/public/AppFramework/Http/Response.php
@@ -105,8 +105,10 @@ class Response {
/**
* Caches the response
- * @param int $cacheSeconds the amount of seconds that should be cached
- * if 0 then caching will be disabled
+ *
+ * @param int $cacheSeconds amount of seconds the response is fresh, 0 to disable cache.
+ * @param bool $public whether the page should be cached by public proxy. Usually should be false, unless this is a static resources.
+ * @param bool $immutable whether browser should treat the resource as immutable and not ask the server for each page load if the resource changed.
* @return $this
* @since 6.0.0 - return value was added in 7.0.0
*/
diff --git a/lib/public/Collaboration/Reference/RenderReferenceEvent.php b/lib/public/Collaboration/Reference/RenderReferenceEvent.php
new file mode 100644
index 00000000000..b6d312636c4
--- /dev/null
+++ b/lib/public/Collaboration/Reference/RenderReferenceEvent.php
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OCP\Collaboration\Reference;
+
+use OCP\EventDispatcher\Event;
+
+/**
+ * Event that apps can emit on their page rendering to trigger loading of aditional
+ * scripts for reference widget rendering
+ *
+ * @since 25.0.0
+ */
+class RenderReferenceEvent extends Event {
+}
diff --git a/lib/public/IUser.php b/lib/public/IUser.php
index daf993df6cd..bb7bdf3304a 100644
--- a/lib/public/IUser.php
+++ b/lib/public/IUser.php
@@ -58,6 +58,9 @@ interface IUser {
* @param string $displayName
* @return bool
* @since 8.0.0
+ *
+ * @since 25.0.0 Throw InvalidArgumentException
+ * @throws \InvalidArgumentException
*/
public function setDisplayName($displayName);
diff --git a/lib/public/Settings/IIconSection.php b/lib/public/Settings/IIconSection.php
index c56565fbf85..bb9b2e94b0d 100644
--- a/lib/public/Settings/IIconSection.php
+++ b/lib/public/Settings/IIconSection.php
@@ -31,7 +31,7 @@ interface IIconSection {
* returns the ID of the section. It is supposed to be a lower case string,
* e.g. 'ldap'
*
- * @returns string
+ * @return string
* @since 9.1
*/
public function getID();
@@ -59,7 +59,7 @@ interface IIconSection {
* returns the relative path to an 16*16 icon describing the section.
* e.g. '/core/img/places/files.svg'
*
- * @returns string
+ * @return string
* @since 12
*/
public function getIcon();
diff --git a/lib/public/Settings/IManager.php b/lib/public/Settings/IManager.php
index 2ec3fb0fd21..10de596dbea 100644
--- a/lib/public/Settings/IManager.php
+++ b/lib/public/Settings/IManager.php
@@ -116,4 +116,10 @@ interface IManager {
* @since 13.0.0
*/
public function getPersonalSettings($section): array;
+
+ /**
+ * Get a specific section by type and id
+ * @since 25.0.0
+ */
+ public function getSection(string $type, string $sectionId): ?IIconSection;
}
diff --git a/lib/public/User/Backend/ISetDisplayNameBackend.php b/lib/public/User/Backend/ISetDisplayNameBackend.php
index 922d356bfd7..db62223ad52 100644
--- a/lib/public/User/Backend/ISetDisplayNameBackend.php
+++ b/lib/public/User/Backend/ISetDisplayNameBackend.php
@@ -36,6 +36,9 @@ interface ISetDisplayNameBackend {
* @param string $uid The username
* @param string $displayName The new display name
* @return bool
+ *
+ * @since 25.0.0 Throw InvalidArgumentException
+ * @throws \InvalidArgumentException
*/
public function setDisplayName(string $uid, string $displayName): bool;
}