summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/files/appinfo/info.xml3
-rw-r--r--apps/files/l10n/fr.php2
-rw-r--r--apps/files/l10n/zh_TW.php2
-rw-r--r--apps/files_encryption/appinfo/info.xml3
-rw-r--r--apps/files_encryption/l10n/ar.php1
-rw-r--r--apps/files_encryption/l10n/ast.php1
-rw-r--r--apps/files_encryption/l10n/az.php1
-rw-r--r--apps/files_encryption/l10n/bg_BG.php1
-rw-r--r--apps/files_encryption/l10n/bn_BD.php1
-rw-r--r--apps/files_encryption/l10n/ca.php1
-rw-r--r--apps/files_encryption/l10n/cs_CZ.php7
-rw-r--r--apps/files_encryption/l10n/da.php7
-rw-r--r--apps/files_encryption/l10n/de.php17
-rw-r--r--apps/files_encryption/l10n/de_CH.php1
-rw-r--r--apps/files_encryption/l10n/de_DE.php27
-rw-r--r--apps/files_encryption/l10n/el.php1
-rw-r--r--apps/files_encryption/l10n/en_GB.php7
-rw-r--r--apps/files_encryption/l10n/eo.php1
-rw-r--r--apps/files_encryption/l10n/es.php1
-rw-r--r--apps/files_encryption/l10n/es_AR.php1
-rw-r--r--apps/files_encryption/l10n/es_CL.php5
-rw-r--r--apps/files_encryption/l10n/es_MX.php1
-rw-r--r--apps/files_encryption/l10n/et_EE.php1
-rw-r--r--apps/files_encryption/l10n/eu.php1
-rw-r--r--apps/files_encryption/l10n/fa.php1
-rw-r--r--apps/files_encryption/l10n/fi_FI.php1
-rw-r--r--apps/files_encryption/l10n/fr.php1
-rw-r--r--apps/files_encryption/l10n/gl.php1
-rw-r--r--apps/files_encryption/l10n/he.php1
-rw-r--r--apps/files_encryption/l10n/hr.php1
-rw-r--r--apps/files_encryption/l10n/hu_HU.php1
-rw-r--r--apps/files_encryption/l10n/ia.php5
-rw-r--r--apps/files_encryption/l10n/id.php1
-rw-r--r--apps/files_encryption/l10n/it.php1
-rw-r--r--apps/files_encryption/l10n/ja.php1
-rw-r--r--apps/files_encryption/l10n/ka_GE.php1
-rw-r--r--apps/files_encryption/l10n/km.php1
-rw-r--r--apps/files_encryption/l10n/ko.php1
-rw-r--r--apps/files_encryption/l10n/lb.php2
-rw-r--r--apps/files_encryption/l10n/lt_LT.php1
-rw-r--r--apps/files_encryption/l10n/lv.php1
-rw-r--r--apps/files_encryption/l10n/mk.php1
-rw-r--r--apps/files_encryption/l10n/nb_NO.php1
-rw-r--r--apps/files_encryption/l10n/nl.php7
-rw-r--r--apps/files_encryption/l10n/nn_NO.php1
-rw-r--r--apps/files_encryption/l10n/pa.php2
-rw-r--r--apps/files_encryption/l10n/pl.php1
-rw-r--r--apps/files_encryption/l10n/pt_BR.php3
-rw-r--r--apps/files_encryption/l10n/pt_PT.php1
-rw-r--r--apps/files_encryption/l10n/ro.php1
-rw-r--r--apps/files_encryption/l10n/ru.php1
-rw-r--r--apps/files_encryption/l10n/sk_SK.php1
-rw-r--r--apps/files_encryption/l10n/sl.php1
-rw-r--r--apps/files_encryption/l10n/sq.php1
-rw-r--r--apps/files_encryption/l10n/sv.php1
-rw-r--r--apps/files_encryption/l10n/th_TH.php1
-rw-r--r--apps/files_encryption/l10n/tr.php7
-rw-r--r--apps/files_encryption/l10n/ug.php1
-rw-r--r--apps/files_encryption/l10n/uk.php1
-rw-r--r--apps/files_encryption/l10n/ur_PK.php5
-rw-r--r--apps/files_encryption/l10n/vi.php1
-rw-r--r--apps/files_encryption/l10n/zh_CN.php1
-rw-r--r--apps/files_encryption/l10n/zh_HK.php1
-rw-r--r--apps/files_encryption/l10n/zh_TW.php1
-rw-r--r--apps/files_external/appinfo/info.xml3
-rwxr-xr-xapps/files_external/lib/config.php45
-rw-r--r--apps/files_external/lib/etagpropagator.php126
-rw-r--r--apps/files_external/tests/etagpropagator.php328
-rw-r--r--apps/files_external/tests/mountconfig.php134
-rw-r--r--apps/files_sharing/l10n/fr.php6
-rw-r--r--apps/files_trashbin/appinfo/info.xml3
-rw-r--r--apps/files_versions/appinfo/info.xml3
-rw-r--r--apps/user_ldap/appinfo/info.xml2
-rw-r--r--apps/user_ldap/l10n/da.php6
-rw-r--r--apps/user_ldap/lib/access.php37
-rw-r--r--apps/user_ldap/lib/ildapwrapper.php2
-rw-r--r--apps/user_ldap/templates/part.settingcontrols.php2
-rw-r--r--apps/user_ldap/templates/part.wizard-server.php2
-rw-r--r--apps/user_ldap/templates/settings.php2
79 files changed, 821 insertions, 38 deletions
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 7f222c0cc7d..8586c6794f2 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -16,4 +16,7 @@
<files>appinfo/remote.php</files>
<webdav>appinfo/remote.php</webdav>
</remote>
+ <documentation>
+ <user>user-files</user>
+ </documentation>
</info>
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index 9a94174a617..e4f7d93aeed 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -85,7 +85,7 @@ $TRANSLATIONS = array(
"Text file" => "Fichier texte",
"New folder" => "Nouveau dossier",
"Folder" => "Dossier",
-"From link" => "Depuis le lien",
+"From link" => "Depuis un lien",
"Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
"Download" => "Télécharger",
"Upload too large" => "Téléversement trop volumineux",
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index 67084f28a55..394283b9621 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -5,6 +5,7 @@ $TRANSLATIONS = array(
"Unknown error" => "未知的錯誤",
"Could not move %s - File with this name already exists" => "無法移動 %s ,同名的檔案已經存在",
"Could not move %s" => "無法移動 %s",
+"Permission denied" => "存取被拒",
"File name cannot be empty." => "檔名不能為空",
"\"%s\" is an invalid file name." => "%s 是不合法的檔名。",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "檔名不合法,不允許 \\ / < > : \" | ? * 字元",
@@ -70,6 +71,7 @@ $TRANSLATIONS = array(
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
"{dirs} and {files}" => "{dirs} 和 {files}",
+"%s could not be renamed as it has been deleted" => "%s 已經被刪除了所以無法重新命名",
"%s could not be renamed" => "無法重新命名 %s",
"Upload (max. %s)" => "上傳(至多 %s)",
"File handling" => "檔案處理",
diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml
index 62596087db8..6fcef693bed 100644
--- a/apps/files_encryption/appinfo/info.xml
+++ b/apps/files_encryption/appinfo/info.xml
@@ -11,7 +11,8 @@
<requiremin>4</requiremin>
<shipped>true</shipped>
<documentation>
-
+ <user>user-encryption</user>
+ <admin>admin-encryption</admin>
</documentation>
<rememberlogin>false</rememberlogin>
<types>
diff --git a/apps/files_encryption/l10n/ar.php b/apps/files_encryption/l10n/ar.php
index d73b87da816..7cda7379693 100644
--- a/apps/files_encryption/l10n/ar.php
+++ b/apps/files_encryption/l10n/ar.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "خطأ غير معروف. ",
"Recovery key successfully enabled" => "تم بنجاح تفعيل مفتاح الاستعادة",
"Could not disable recovery key. Please check your recovery key password!" => "لا يمكن تعطيل مفتاح الاستعادة, يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
"Recovery key successfully disabled" => "تم تعطيل مفتاح الاستعادة بنجاح",
diff --git a/apps/files_encryption/l10n/ast.php b/apps/files_encryption/l10n/ast.php
index 0c037c67c59..d03ebb47b62 100644
--- a/apps/files_encryption/l10n/ast.php
+++ b/apps/files_encryption/l10n/ast.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Fallu desconocíu",
"Recovery key successfully enabled" => "Habilitóse la recuperación de ficheros",
"Could not disable recovery key. Please check your recovery key password!" => "Nun pudo deshabilitase la clave de recuperación. Por favor comprueba la contraseña!",
"Recovery key successfully disabled" => "Clave de recuperación deshabilitada",
diff --git a/apps/files_encryption/l10n/az.php b/apps/files_encryption/l10n/az.php
index 8a9993ad40f..2cc8bd67df4 100644
--- a/apps/files_encryption/l10n/az.php
+++ b/apps/files_encryption/l10n/az.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Bəlli olmayan səhv baş verdi",
"Recovery key successfully enabled" => "Bərpa açarı uğurla aktivləşdi",
"Could not disable recovery key. Please check your recovery key password!" => "Geriqaytarılma açarını sondürmək olmur. Xahiş edirik geriqaytarılma key açarınızı yoxlayın.",
"Recovery key successfully disabled" => "Bərpa açarı uğurla söndürüldü",
diff --git a/apps/files_encryption/l10n/bg_BG.php b/apps/files_encryption/l10n/bg_BG.php
index 46d1519e74b..0dce15dafd6 100644
--- a/apps/files_encryption/l10n/bg_BG.php
+++ b/apps/files_encryption/l10n/bg_BG.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Непозната грешка.",
"Recovery key successfully enabled" => "Успешно включване на опцията ключ за възстановяване.",
"Could not disable recovery key. Please check your recovery key password!" => "Неуспешно изключване на ключа за възстановяване. Моля, провери паролата за ключа за възстановяване!",
"Recovery key successfully disabled" => "Успешно изключване на ключа за възстановяване.",
diff --git a/apps/files_encryption/l10n/bn_BD.php b/apps/files_encryption/l10n/bn_BD.php
index 3d4c848d6ef..addbb917953 100644
--- a/apps/files_encryption/l10n/bn_BD.php
+++ b/apps/files_encryption/l10n/bn_BD.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "অজানা জটিলতা",
"Recovery key successfully enabled" => "পূনরুদ্ধার চাবি সার্থকভাবে কার্যকর করা হয়েছে",
"Recovery key successfully disabled" => "পূনরুদ্ধার চাবি সার্থকভাবে অকার্যকর করা হয়েছে",
"Password successfully changed." => "আপনার কূটশব্দটি সার্থকভাবে পরিবর্তন করা হয়েছে ",
diff --git a/apps/files_encryption/l10n/ca.php b/apps/files_encryption/l10n/ca.php
index f83fdd215c0..9d3d95c05cf 100644
--- a/apps/files_encryption/l10n/ca.php
+++ b/apps/files_encryption/l10n/ca.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Error desconegut",
"Recovery key successfully enabled" => "La clau de recuperació s'ha activat",
"Could not disable recovery key. Please check your recovery key password!" => "No s'ha pogut desactivar la calu de recuperació. Comproveu la contrasenya de la clau de recuperació!",
"Recovery key successfully disabled" => "La clau de recuperació s'ha descativat",
diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php
index 115e1553566..a0e7274926a 100644
--- a/apps/files_encryption/l10n/cs_CZ.php
+++ b/apps/files_encryption/l10n/cs_CZ.php
@@ -1,8 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Neznámá chyba",
+"Missing recovery key password" => "Chybí heslo klíče pro obnovu",
+"Please repeat the recovery key password" => "Zopakujte prosím heslo klíče pro obnovu",
+"Repeated recovery key password does not match the provided recovery key password" => "Opakované heslo pro obnovu nesouhlasí se zadaným heslem",
"Recovery key successfully enabled" => "Záchranný klíč byl úspěšně povolen",
"Could not disable recovery key. Please check your recovery key password!" => "Nelze zakázat záchranný klíč. Zkontrolujte prosím heslo vašeho záchranného klíče!",
"Recovery key successfully disabled" => "Záchranný klíč byl úspěšně zakázán",
+"Please provide the old recovery password" => "Zapište prosím staré heslo pro obnovu",
+"Please provide a new recovery password" => "Zapište prosím nové heslo pro obnovu",
+"Please repeat the new recovery password" => "Zopakujte prosím nové heslo pro obnovu",
"Password successfully changed." => "Heslo bylo úspěšně změněno.",
"Could not change the password. Maybe the old password was not correct." => "Změna hesla se nezdařila. Pravděpodobně nebylo stávající heslo zadáno správně.",
"Private key password successfully updated." => "Heslo soukromého klíče úspěšně aktualizováno.",
diff --git a/apps/files_encryption/l10n/da.php b/apps/files_encryption/l10n/da.php
index b3ff68ecfad..f63fa217dce 100644
--- a/apps/files_encryption/l10n/da.php
+++ b/apps/files_encryption/l10n/da.php
@@ -1,8 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Ukendt fejl",
+"Missing recovery key password" => "Der mangler kodeord for gendannelsesnøgle",
+"Please repeat the recovery key password" => "Gentag venligst kodeordet for gendannelsesnøglen",
+"Repeated recovery key password does not match the provided recovery key password" => "Det gentagne kodeord for gendannelsesnøglen stemmer ikke med det angivne kodeord for gendannelsesnøglen",
"Recovery key successfully enabled" => "Gendannelsesnøgle aktiveret med succes",
"Could not disable recovery key. Please check your recovery key password!" => "Kunne ikke deaktivere gendannelsesnøgle. Kontroller din gendannelsesnøgle kodeord!",
"Recovery key successfully disabled" => "Gendannelsesnøgle deaktiveret succesfuldt",
+"Please provide the old recovery password" => "Angiv venligst det gamle kodeord for gendannelsesnøglen",
+"Please provide a new recovery password" => "Angiv venligst et nyt kodeord til gendannelse",
+"Please repeat the new recovery password" => "Gentag venligst det nye kodeord til gendannelse",
"Password successfully changed." => "Kodeordet blev ændret succesfuldt",
"Could not change the password. Maybe the old password was not correct." => "Kunne ikke ændre kodeordet. Måske var det gamle kodeord ikke korrekt.",
"Private key password successfully updated." => "Privat nøgle kodeord succesfuldt opdateret.",
diff --git a/apps/files_encryption/l10n/de.php b/apps/files_encryption/l10n/de.php
index 44277f2bf89..cd6d8ea9a28 100644
--- a/apps/files_encryption/l10n/de.php
+++ b/apps/files_encryption/l10n/de.php
@@ -1,8 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Unbekannter Fehler",
+"Missing recovery key password" => "Schlüsselpasswort zur Wiederherstellung fehlt",
+"Please repeat the recovery key password" => "Schlüsselpasswort zur Wiederherstellung bitte wiederholen",
+"Repeated recovery key password does not match the provided recovery key password" => "Das wiederholte Schlüsselpasswort zur Wiederherstellung stimmt nicht mit dem geforderten Schlüsselpasswort zur Wiederherstellung überein",
"Recovery key successfully enabled" => "Wiederherstellungsschlüssel wurde erfolgreich aktiviert",
"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Überprüfe Dein Wiederherstellungspasswort!",
"Recovery key successfully disabled" => "Wiederherstellungsschlüssel deaktiviert.",
+"Please provide the old recovery password" => "Bitte das alte Passwort zur Wiederherstellung eingeben",
+"Please provide a new recovery password" => "Bitte das alte Passwort zur Wiederherstellung eingeben",
+"Please repeat the new recovery password" => "Bitte das neue Passwort zur Wiederherstellung wiederholen",
"Password successfully changed." => "Dein Passwort wurde geändert.",
"Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.",
"Private key password successfully updated." => "Passwort des privaten Schlüssels erfolgreich aktualisiert",
@@ -17,10 +24,10 @@ $TRANSLATIONS = array(
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Bitte stelle sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
"Following users are not set up for encryption:" => "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
"Initial encryption started... This can take some time. Please wait." => "Initialverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.",
-"Initial encryption running... Please try again later." => "Initiale Verschlüsselung läuft... Bitte versuche es später wieder.",
-"Go directly to your %spersonal settings%s." => "Wechsle direkt zu Deinen %spersonal settings%s.",
+"Initial encryption running... Please try again later." => "Anfangsverschlüsselung läuft … Bitte versuche es später wieder.",
+"Go directly to your %spersonal settings%s." => "Direkt zu Deinen %spersonal settings%s wechseln.",
"Encryption" => "Verschlüsselung",
-"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melden Dich nochmals ab und wieder an.",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melde Dich nochmals ab und wieder an.",
"Enable recovery key (allow to recover users files in case of password loss):" => "Wiederherstellungsschlüssel aktivieren (ermöglicht das Wiederherstellen von Dateien, falls das Passwort vergessen wurde):",
"Recovery key password" => "Wiederherstellungsschlüssel-Passwort",
"Repeat Recovery key password" => "Schlüssel-Passwort zur Wiederherstellung wiederholen",
@@ -31,8 +38,8 @@ $TRANSLATIONS = array(
"New Recovery key password" => "Neues Wiederherstellungsschlüssel-Passwort",
"Repeat New Recovery key password" => "Neues Schlüssel-Passwort zur Wiederherstellung wiederholen",
"Change Password" => "Passwort ändern",
-"Your private key password no longer matches your log-in password." => "Das Privatschlüsselpasswort darf nicht länger mit den Login-Passwort übereinstimmen.",
-"Set your old private key password to your current log-in password:" => "Setze Dein altes Passwort für Deinen privaten Schlüssel auf Dein aktuelles Login-Passwort:",
+"Your private key password no longer matches your log-in password." => "Das Privatschlüsselpasswort darf nicht länger mit dem Anmeldepasswort übereinstimmen.",
+"Set your old private key password to your current log-in password:" => "Dein altes Passwort für Deinen privaten Schlüssel auf Dein aktuelles Anmeldepasswort einstellen:",
" If you don't remember your old password you can ask your administrator to recover your files." => "Wenn Du Dein altes Passwort vergessen hast, könntest Du Deinen Administrator bitten, Deine Daten wiederherzustellen.",
"Old log-in password" => "Altes Login Passwort",
"Current log-in password" => "Aktuelles Passwort",
diff --git a/apps/files_encryption/l10n/de_CH.php b/apps/files_encryption/l10n/de_CH.php
index 2c5b51a2da7..9c2af0c93c6 100644
--- a/apps/files_encryption/l10n/de_CH.php
+++ b/apps/files_encryption/l10n/de_CH.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Unbekannter Fehler",
"Recovery key successfully enabled" => "Der Wiederherstellungsschlüssel wurde erfolgreich aktiviert.",
"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
"Recovery key successfully disabled" => "Der Wiederherstellungsschlüssel wurde erfolgreich deaktiviert.",
diff --git a/apps/files_encryption/l10n/de_DE.php b/apps/files_encryption/l10n/de_DE.php
index 3fc71671ae1..b16a4003e87 100644
--- a/apps/files_encryption/l10n/de_DE.php
+++ b/apps/files_encryption/l10n/de_DE.php
@@ -1,8 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Unbekannter Fehler",
+"Missing recovery key password" => "Schlüsselpasswort zur Wiederherstellung fehlt",
+"Please repeat the recovery key password" => "Schlüsselpasswort zur Wiederherstellung bitte wiederholen",
+"Repeated recovery key password does not match the provided recovery key password" => "Das wiederholte Schlüsselpasswort zur Wiederherstellung stimmt nicht mit dem geforderten Schlüsselpasswort zur Wiederherstellung überein",
"Recovery key successfully enabled" => "Der Wiederherstellungsschlüssel wurde erfolgreich aktiviert.",
"Could not disable recovery key. Please check your recovery key password!" => "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
"Recovery key successfully disabled" => "Der Wiederherstellungsschlüssel wurde erfolgreich deaktiviert.",
+"Please provide the old recovery password" => "Bitte das alte Passwort zur Wiederherstellung eingeben",
+"Please provide a new recovery password" => "Bitte das neue Passwort zur Wiederherstellung eingeben",
+"Please repeat the new recovery password" => "Bitte das neue Passwort zur Wiederherstellung wiederholen",
"Password successfully changed." => "Das Passwort wurde erfolgreich geändert.",
"Could not change the password. Maybe the old password was not correct." => "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.",
"Private key password successfully updated." => "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.",
@@ -11,31 +18,31 @@ $TRANSLATIONS = array(
"Could not update file recovery" => "Die Dateiwiederherstellung konnte nicht aktualisiert werden.",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Verschlüsselung-App ist nicht initialisiert! Vielleicht wurde die Verschlüsselung-App in der aktuellen Sitzung reaktiviert. Bitte versuchen Sie sich ab- und wieder anzumelden, um die Verschlüsselung-App zu initialisieren.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Ihr privater Schlüssel ist ungültig. Möglicher Weise wurde außerhalb von %s Ihr Passwort geändert (z.B. in Ihrem gemeinsamen Verzeichnis). Sie können das Passwort Ihres privaten Schlüssels in den persönlichen Einstellungen aktualisieren, um wieder an Ihre Dateien zu gelangen.",
-"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte fragen Sie den Datei-Besitzer, dass er die Datei nochmals mit Ihnen teilt.",
+"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Die Datei kann nicht entschlüsselt werden, da die Datei möglicherweise eine geteilte Datei ist. Bitte fragen Sie den Dateibesitzer, dass er die Datei nochmals mit Ihnen teilt.",
"Unknown error. Please check your system settings or contact your administrator" => "Unbekannter Fehler. Bitte prüfen Sie die Systemeinstellungen oder kontaktieren Sie Ihren Administrator",
"Missing requirements." => "Fehlende Voraussetzungen",
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Bitte stellen Sie sicher, dass PHP 5.3.3 oder neuer installiert und das OpenSSL zusammen mit der PHP-Erweiterung aktiviert und richtig konfiguriert ist. Zur Zeit ist die Verschlüsselungs-App deaktiviert.",
"Following users are not set up for encryption:" => "Für folgende Nutzer ist keine Verschlüsselung eingerichtet:",
-"Initial encryption started... This can take some time. Please wait." => "Anfangsverschlüsselung gestartet... Dies kann einige Zeit dauern. Bitte warten.",
-"Initial encryption running... Please try again later." => "Anfangsverschlüsselung läuft... Bitte versuchen Sie es später wieder.",
+"Initial encryption started... This can take some time. Please wait." => "Anfangsverschlüsselung gestartet … Dieses kann einige Zeit dauern. Bitte warten.",
+"Initial encryption running... Please try again later." => "Anfangsverschlüsselung läuft … Bitte versuchen Sie es später wieder.",
"Go directly to your %spersonal settings%s." => "Wechseln Sie direkt zu Ihren %spersonal settings%s.",
"Encryption" => "Verschlüsselung",
-"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte melden sich nochmals ab und wieder an.",
+"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.",
"Enable recovery key (allow to recover users files in case of password loss):" => "Aktivieren Sie den Wiederherstellungsschlüssel (erlaubt die Wiederherstellung des Zugangs zu den Benutzerdateien, wenn das Passwort verloren geht).",
"Recovery key password" => "Wiederherstellungschlüsselpasswort",
-"Repeat Recovery key password" => "Schlüssel-Passwort zur Wiederherstellung wiederholen",
+"Repeat Recovery key password" => "Schlüsselpasswort zur Wiederherstellung wiederholen",
"Enabled" => "Aktiviert",
"Disabled" => "Deaktiviert",
"Change recovery key password:" => "Wiederherstellungsschlüsselpasswort ändern",
"Old Recovery key password" => "Altes Wiederherstellungsschlüsselpasswort",
"New Recovery key password" => "Neues Wiederherstellungsschlüsselpasswort ",
-"Repeat New Recovery key password" => "Neues Schlüssel-Passwort zur Wiederherstellung wiederholen",
+"Repeat New Recovery key password" => "Neues Schlüsselpasswort zur Wiederherstellung wiederholen",
"Change Password" => "Passwort ändern",
-"Your private key password no longer matches your log-in password." => "Das Privatschlüsselpasswort darf nicht länger mit den Login-Passwort übereinstimmen.",
-"Set your old private key password to your current log-in password:" => "Setzen Sie Ihr altes Privatschlüsselpasswort auf Ihr aktuelles LogIn-Passwort:",
+"Your private key password no longer matches your log-in password." => "Das Privatschlüsselpasswort stimmt nicht länger mit dem Anmeldepasswort überein.",
+"Set your old private key password to your current log-in password:" => "Ihr altes Privatschlüsselpasswort auf Ihr aktuelles Anmeldepasswort stellen:",
" If you don't remember your old password you can ask your administrator to recover your files." => "Falls Sie sich nicht an Ihr altes Passwort erinnern können, fragen Sie bitte Ihren Administrator, um Ihre Dateien wiederherzustellen.",
-"Old log-in password" => "Altes Login-Passwort",
-"Current log-in password" => "Momentanes Login-Passwort",
+"Old log-in password" => "Altes Anmeldepasswort",
+"Current log-in password" => "Aktuelles Anmeldepasswort",
"Update Private Key Password" => "Das Passwort des privaten Schlüssels aktualisieren",
"Enable password recovery:" => "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben."
diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php
index ad9091e2d5b..e1fabbb169c 100644
--- a/apps/files_encryption/l10n/el.php
+++ b/apps/files_encryption/l10n/el.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Άγνωστο σφάλμα",
"Recovery key successfully enabled" => "Επιτυχής ενεργοποίηση κλειδιού ανάκτησης",
"Could not disable recovery key. Please check your recovery key password!" => "Αποτυχία απενεργοποίησης κλειδιού ανάκτησης. Παρακαλώ ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
"Recovery key successfully disabled" => "Επιτυχής απενεργοποίηση κλειδιού ανάκτησης",
diff --git a/apps/files_encryption/l10n/en_GB.php b/apps/files_encryption/l10n/en_GB.php
index a9bf8caf750..7a9b248bc43 100644
--- a/apps/files_encryption/l10n/en_GB.php
+++ b/apps/files_encryption/l10n/en_GB.php
@@ -1,8 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Unknown error",
+"Missing recovery key password" => "Missing recovery key password",
+"Please repeat the recovery key password" => "Please repeat the recovery key password",
+"Repeated recovery key password does not match the provided recovery key password" => "Repeated recovery key password does not match the provided recovery key password",
"Recovery key successfully enabled" => "Recovery key enabled successfully",
"Could not disable recovery key. Please check your recovery key password!" => "Could not disable recovery key. Please check your recovery key password!",
"Recovery key successfully disabled" => "Recovery key disabled successfully",
+"Please provide the old recovery password" => "Please provide the old recovery password",
+"Please provide a new recovery password" => "Please provide a new recovery password",
+"Please repeat the new recovery password" => "Please repeat the new recovery password",
"Password successfully changed." => "Password changed successfully.",
"Could not change the password. Maybe the old password was not correct." => "Could not change the password. Maybe the old password was incorrect.",
"Private key password successfully updated." => "Private key password updated successfully.",
diff --git a/apps/files_encryption/l10n/eo.php b/apps/files_encryption/l10n/eo.php
index 95ccafffe06..e8d50132128 100644
--- a/apps/files_encryption/l10n/eo.php
+++ b/apps/files_encryption/l10n/eo.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Nekonata eraro",
"Password successfully changed." => "La pasvorto sukcese ŝanĝiĝis.",
"Could not change the password. Maybe the old password was not correct." => "Ne eblis ŝanĝi la pasvorton. Eble la malnova pasvorto malĝustis.",
"Private key password successfully updated." => "La pasvorto de la malpublika klavo sukcese ĝisdatiĝis.",
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php
index dcf2960583e..164db17f4a7 100644
--- a/apps/files_encryption/l10n/es.php
+++ b/apps/files_encryption/l10n/es.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Error desconocido",
"Recovery key successfully enabled" => "Se ha habilitado la recuperación de archivos",
"Could not disable recovery key. Please check your recovery key password!" => "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
"Recovery key successfully disabled" => "Clave de recuperación deshabilitada",
diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php
index ee68ff6b707..d82e5fe0144 100644
--- a/apps/files_encryption/l10n/es_AR.php
+++ b/apps/files_encryption/l10n/es_AR.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Error desconocido",
"Recovery key successfully enabled" => "Se habilitó la recuperación de archivos",
"Could not disable recovery key. Please check your recovery key password!" => "No fue posible deshabilitar la clave de recuperación. Por favor, comprobá tu contraseña.",
"Recovery key successfully disabled" => "Clave de recuperación deshabilitada",
diff --git a/apps/files_encryption/l10n/es_CL.php b/apps/files_encryption/l10n/es_CL.php
new file mode 100644
index 00000000000..10621479ff2
--- /dev/null
+++ b/apps/files_encryption/l10n/es_CL.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Unknown error" => "Error desconocido"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/es_MX.php b/apps/files_encryption/l10n/es_MX.php
index d678144de8d..e25d34796e5 100644
--- a/apps/files_encryption/l10n/es_MX.php
+++ b/apps/files_encryption/l10n/es_MX.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Error desconocido",
"Recovery key successfully enabled" => "Se ha habilitado la recuperación de archivos",
"Could not disable recovery key. Please check your recovery key password!" => "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
"Recovery key successfully disabled" => "Clave de recuperación deshabilitada",
diff --git a/apps/files_encryption/l10n/et_EE.php b/apps/files_encryption/l10n/et_EE.php
index 3f1df4cc306..0d786b6ce7d 100644
--- a/apps/files_encryption/l10n/et_EE.php
+++ b/apps/files_encryption/l10n/et_EE.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Tundmatu viga",
"Recovery key successfully enabled" => "Taastevõtme lubamine õnnestus",
"Could not disable recovery key. Please check your recovery key password!" => "Ei suuda keelata taastevõtit. Palun kontrolli oma taastevõtme parooli!",
"Recovery key successfully disabled" => "Taastevõtme keelamine õnnestus",
diff --git a/apps/files_encryption/l10n/eu.php b/apps/files_encryption/l10n/eu.php
index 41dddf6846f..2927008113e 100644
--- a/apps/files_encryption/l10n/eu.php
+++ b/apps/files_encryption/l10n/eu.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Errore ezezaguna",
"Recovery key successfully enabled" => "Berreskuratze gakoa behar bezala gaitua",
"Could not disable recovery key. Please check your recovery key password!" => "Ezin da berreskuratze gako desgaitu. Egiaztatu berreskuratze gako pasahitza!",
"Recovery key successfully disabled" => "Berreskuratze gakoa behar bezala desgaitu da",
diff --git a/apps/files_encryption/l10n/fa.php b/apps/files_encryption/l10n/fa.php
index 54143f0df49..113bf65ca37 100644
--- a/apps/files_encryption/l10n/fa.php
+++ b/apps/files_encryption/l10n/fa.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "خطای نامشخص",
"Recovery key successfully enabled" => "کلید بازیابی با موفقیت فعال شده است.",
"Could not disable recovery key. Please check your recovery key password!" => "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!",
"Recovery key successfully disabled" => "کلید بازیابی با موفقیت غیر فعال شده است.",
diff --git a/apps/files_encryption/l10n/fi_FI.php b/apps/files_encryption/l10n/fi_FI.php
index 338cdb457ad..93ecf4c1ea7 100644
--- a/apps/files_encryption/l10n/fi_FI.php
+++ b/apps/files_encryption/l10n/fi_FI.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Tuntematon virhe",
"Recovery key successfully enabled" => "Palautusavain kytketty päälle onnistuneesti",
"Password successfully changed." => "Salasana vaihdettiin onnistuneesti.",
"Could not change the password. Maybe the old password was not correct." => "Salasanan vaihto epäonnistui. Kenties vanha salasana oli väärin.",
diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php
index a8ae53507c9..44919fbc0a3 100644
--- a/apps/files_encryption/l10n/fr.php
+++ b/apps/files_encryption/l10n/fr.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Erreur Inconnue ",
"Recovery key successfully enabled" => "Clé de récupération activée avec succès",
"Could not disable recovery key. Please check your recovery key password!" => "Impossible de désactiver la clé de récupération. Veuillez vérifier votre mot de passe de clé de récupération !",
"Recovery key successfully disabled" => "Clé de récupération désactivée avec succès",
diff --git a/apps/files_encryption/l10n/gl.php b/apps/files_encryption/l10n/gl.php
index b41396bc53f..bf1cea07093 100644
--- a/apps/files_encryption/l10n/gl.php
+++ b/apps/files_encryption/l10n/gl.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Produciuse un erro descoñecido",
"Recovery key successfully enabled" => "Activada satisfactoriamente a chave de recuperación",
"Could not disable recovery key. Please check your recovery key password!" => "Non foi posíbel desactivar a chave de recuperación. Comprobe o contrasinal da chave de recuperación!",
"Recovery key successfully disabled" => "Desactivada satisfactoriamente a chave de recuperación",
diff --git a/apps/files_encryption/l10n/he.php b/apps/files_encryption/l10n/he.php
index ca8783d1964..fe514f5b01d 100644
--- a/apps/files_encryption/l10n/he.php
+++ b/apps/files_encryption/l10n/he.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "שגיאה בלתי ידועה",
"Encryption" => "הצפנה"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/hr.php b/apps/files_encryption/l10n/hr.php
index 6c26c63de90..663c7940e46 100644
--- a/apps/files_encryption/l10n/hr.php
+++ b/apps/files_encryption/l10n/hr.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Nepoznata pogreška",
"Recovery key successfully enabled" => "Ključ za oporavak uspješno aktiviran",
"Could not disable recovery key. Please check your recovery key password!" => "Ključ za oporavak nije moguće deaktivirati. Molimo provjerite svoju lozinku ključa za oporavak!",
"Recovery key successfully disabled" => "Ključ za ooravak uspješno deaktiviran",
diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php
index 4cd3275a9df..6c77da95331 100644
--- a/apps/files_encryption/l10n/hu_HU.php
+++ b/apps/files_encryption/l10n/hu_HU.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Ismeretlen hiba",
"Recovery key successfully enabled" => "A helyreállítási kulcs sikeresen bekapcsolva",
"Could not disable recovery key. Please check your recovery key password!" => "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
"Recovery key successfully disabled" => "A helyreállítási kulcs sikeresen kikapcsolva",
diff --git a/apps/files_encryption/l10n/ia.php b/apps/files_encryption/l10n/ia.php
new file mode 100644
index 00000000000..513184ba1cd
--- /dev/null
+++ b/apps/files_encryption/l10n/ia.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Unknown error" => "Error Incognite"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/id.php b/apps/files_encryption/l10n/id.php
index aa948efcfc9..c31c3e52089 100644
--- a/apps/files_encryption/l10n/id.php
+++ b/apps/files_encryption/l10n/id.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Galat tidak diketahui",
"Recovery key successfully enabled" => "Kunci pemulihan berhasil diaktifkan",
"Could not disable recovery key. Please check your recovery key password!" => "Tidak dapat menonaktifkan kunci pemulihan. Silakan periksa sandi kunci pemulihan Anda!",
"Recovery key successfully disabled" => "Kunci pemulihan berhasil dinonaktifkan",
diff --git a/apps/files_encryption/l10n/it.php b/apps/files_encryption/l10n/it.php
index 819d0a42794..d727ba16123 100644
--- a/apps/files_encryption/l10n/it.php
+++ b/apps/files_encryption/l10n/it.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Errore sconosciuto",
"Recovery key successfully enabled" => "Chiave di ripristino abilitata correttamente",
"Could not disable recovery key. Please check your recovery key password!" => "Impossibile disabilitare la chiave di ripristino. Verifica la password della chiave di ripristino.",
"Recovery key successfully disabled" => "Chiave di ripristinata disabilitata correttamente",
diff --git a/apps/files_encryption/l10n/ja.php b/apps/files_encryption/l10n/ja.php
index a1b3bc2ae9f..61a2f085a08 100644
--- a/apps/files_encryption/l10n/ja.php
+++ b/apps/files_encryption/l10n/ja.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "不明なエラー",
"Recovery key successfully enabled" => "リカバリ用のキーを正常に有効にしました",
"Could not disable recovery key. Please check your recovery key password!" => "リカバリ用のキーを無効化できませんでした。リカバリ用のキーのパスワードを確認してください!",
"Recovery key successfully disabled" => "リカバリ用のキーを正常に無効化しました",
diff --git a/apps/files_encryption/l10n/ka_GE.php b/apps/files_encryption/l10n/ka_GE.php
index d0634634778..f426e9b5ce7 100644
--- a/apps/files_encryption/l10n/ka_GE.php
+++ b/apps/files_encryption/l10n/ka_GE.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "უცნობი შეცდომა",
"Encryption" => "ენკრიპცია"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_encryption/l10n/km.php b/apps/files_encryption/l10n/km.php
index e095f96faa3..9c700dfec15 100644
--- a/apps/files_encryption/l10n/km.php
+++ b/apps/files_encryption/l10n/km.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "មិន​ស្គាល់​កំហុស",
"Password successfully changed." => "បាន​ប្ដូរ​ពាក្យ​សម្ងាត់​ដោយ​ជោគជ័យ។",
"Could not change the password. Maybe the old password was not correct." => "មិន​អាច​ប្ដូរ​ពាក្យ​សម្ងាត់​បាន​ទេ។ ប្រហែល​ពាក្យ​សម្ងាត់​ចាស់​មិន​ត្រឹម​ត្រូវ។",
"Encryption" => "កូដនីយកម្ម",
diff --git a/apps/files_encryption/l10n/ko.php b/apps/files_encryption/l10n/ko.php
index 2c32d0aea61..d90a98448f9 100644
--- a/apps/files_encryption/l10n/ko.php
+++ b/apps/files_encryption/l10n/ko.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "알 수 없는 오류",
"Recovery key successfully enabled" => "복구 키가 성공적으로 활성화되었습니다",
"Could not disable recovery key. Please check your recovery key password!" => "복구 키를 비활성화 할 수 없습니다. 복구 키의 암호를 확인해주세요!",
"Recovery key successfully disabled" => "복구 키가 성공적으로 비활성화 되었습니다",
diff --git a/apps/files_encryption/l10n/lb.php b/apps/files_encryption/l10n/lb.php
index a33f4969b09..d9287f6dec9 100644
--- a/apps/files_encryption/l10n/lb.php
+++ b/apps/files_encryption/l10n/lb.php
@@ -1,5 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Saving..." => "Speicheren..."
+"Unknown error" => "Et ass en onbekannte Fehler opgetrueden"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/lt_LT.php b/apps/files_encryption/l10n/lt_LT.php
index d776abd2d70..837ace4a607 100644
--- a/apps/files_encryption/l10n/lt_LT.php
+++ b/apps/files_encryption/l10n/lt_LT.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Neatpažinta klaida",
"Recovery key successfully enabled" => "Atkūrimo raktas sėkmingai įjungtas",
"Could not disable recovery key. Please check your recovery key password!" => "Neišėjo išjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
"Recovery key successfully disabled" => "Atkūrimo raktas sėkmingai išjungtas",
diff --git a/apps/files_encryption/l10n/lv.php b/apps/files_encryption/l10n/lv.php
index cbf8b7cbdaf..367eac18795 100644
--- a/apps/files_encryption/l10n/lv.php
+++ b/apps/files_encryption/l10n/lv.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Nezināma kļūda",
"Encryption" => "Šifrēšana"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);";
diff --git a/apps/files_encryption/l10n/mk.php b/apps/files_encryption/l10n/mk.php
index 08a88ff1bbf..1a1e18f2231 100644
--- a/apps/files_encryption/l10n/mk.php
+++ b/apps/files_encryption/l10n/mk.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Непозната грешка",
"Password successfully changed." => "Лозинката е успешно променета.",
"Could not change the password. Maybe the old password was not correct." => "Лозинката не можеше да се промени. Можеби старата лозинка не беше исправна.",
"Missing requirements." => "Барања кои недостасуваат.",
diff --git a/apps/files_encryption/l10n/nb_NO.php b/apps/files_encryption/l10n/nb_NO.php
index e13297dccb8..343aeba9f08 100644
--- a/apps/files_encryption/l10n/nb_NO.php
+++ b/apps/files_encryption/l10n/nb_NO.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Ukjent feil",
"Recovery key successfully enabled" => "Gjenopprettingsnøkkel aktivert",
"Could not disable recovery key. Please check your recovery key password!" => "Klarte ikke å deaktivere gjenopprettingsnøkkel. Sjekk passordet for gjenopprettingsnøkkelen.",
"Recovery key successfully disabled" => "Gjenopprettingsnøkkel ble deaktivert",
diff --git a/apps/files_encryption/l10n/nl.php b/apps/files_encryption/l10n/nl.php
index 09b5e5147eb..3dd7665d729 100644
--- a/apps/files_encryption/l10n/nl.php
+++ b/apps/files_encryption/l10n/nl.php
@@ -1,8 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Onbekende fout",
+"Missing recovery key password" => "Ontbrekende wachtwoord herstelsleutel",
+"Please repeat the recovery key password" => "Herhaal het herstelsleutel wachtwoord",
+"Repeated recovery key password does not match the provided recovery key password" => "Het herhaalde herstelsleutel wachtwoord kwam niet overeen met het eerdere herstelsleutel wachtwoord ",
"Recovery key successfully enabled" => "Herstelsleutel succesvol geactiveerd",
"Could not disable recovery key. Please check your recovery key password!" => "Kon herstelsleutel niet deactiveren. Controleer het wachtwoord van uw herstelsleutel!",
"Recovery key successfully disabled" => "Herstelsleutel succesvol gedeactiveerd",
+"Please provide the old recovery password" => "Geef het oude herstelwachtwoord op",
+"Please provide a new recovery password" => "Geef een nieuw herstelwachtwoord op",
+"Please repeat the new recovery password" => "Herhaal het nieuwe herstelwachtwoord",
"Password successfully changed." => "Wachtwoord succesvol gewijzigd.",
"Could not change the password. Maybe the old password was not correct." => "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.",
"Private key password successfully updated." => "Privésleutel succesvol bijgewerkt.",
diff --git a/apps/files_encryption/l10n/nn_NO.php b/apps/files_encryption/l10n/nn_NO.php
index c472655c8b0..042104c5fb5 100644
--- a/apps/files_encryption/l10n/nn_NO.php
+++ b/apps/files_encryption/l10n/nn_NO.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Ukjend feil",
"Encryption" => "Kryptering"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/pa.php b/apps/files_encryption/l10n/pa.php
index 58670990409..771dd8b4497 100644
--- a/apps/files_encryption/l10n/pa.php
+++ b/apps/files_encryption/l10n/pa.php
@@ -1,5 +1,5 @@
<?php
$TRANSLATIONS = array(
-"Saving..." => "...ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+"Unknown error" => "ਅਣਜਾਣ ਗਲਤੀ"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/pl.php b/apps/files_encryption/l10n/pl.php
index d34df8a6959..b7a66462ef2 100644
--- a/apps/files_encryption/l10n/pl.php
+++ b/apps/files_encryption/l10n/pl.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Nieznany błąd",
"Recovery key successfully enabled" => "Klucz odzyskiwania włączony",
"Could not disable recovery key. Please check your recovery key password!" => "Nie można wyłączyć klucza odzyskiwania. Proszę sprawdzić swoje hasło odzyskiwania!",
"Recovery key successfully disabled" => "Klucz odzyskiwania wyłączony",
diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php
index a06f4b78426..b5403e7a4ea 100644
--- a/apps/files_encryption/l10n/pt_BR.php
+++ b/apps/files_encryption/l10n/pt_BR.php
@@ -1,5 +1,8 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Erro desconhecido",
+"Missing recovery key password" => "Senha da chave de recuperação em falta",
+"Please repeat the recovery key password" => "Por favor, repita a senha da chave de recuperação",
"Recovery key successfully enabled" => "Recuperação de chave habilitada com sucesso",
"Could not disable recovery key. Please check your recovery key password!" => "Impossível desabilitar recuperação de chave. Por favor verifique sua senha para recuperação de chave!",
"Recovery key successfully disabled" => "Recuperação de chave desabilitada com sucesso",
diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php
index a79d2d0681e..aede53f6414 100644
--- a/apps/files_encryption/l10n/pt_PT.php
+++ b/apps/files_encryption/l10n/pt_PT.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Erro Desconhecido",
"Recovery key successfully enabled" => "A chave de recuperação foi ativada com sucesso",
"Could not disable recovery key. Please check your recovery key password!" => "Não foi possível desativar a chave de recuperação. Por favor, verifique a senha da chave de recuperação.",
"Recovery key successfully disabled" => "A chave de recuperação foi desativada com sucesso",
diff --git a/apps/files_encryption/l10n/ro.php b/apps/files_encryption/l10n/ro.php
index b1da7c9bb75..07b12b0f8a8 100644
--- a/apps/files_encryption/l10n/ro.php
+++ b/apps/files_encryption/l10n/ro.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Eroare necunoscută",
"Recovery key successfully enabled" => "Cheia de recupeare a fost activata cu succes",
"Could not disable recovery key. Please check your recovery key password!" => "Nu am putut dezactiva cheia de recuperare. Verifica parola de recuperare!",
"Recovery key successfully disabled" => "Cheia de recuperare dezactivata cu succes",
diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php
index 80d996d2828..16c0f05cc71 100644
--- a/apps/files_encryption/l10n/ru.php
+++ b/apps/files_encryption/l10n/ru.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Неизвестная ошибка",
"Recovery key successfully enabled" => "Ключ восстановления успешно установлен",
"Could not disable recovery key. Please check your recovery key password!" => "Невозможно выключить ключ восстановления. Проверьте правильность пароля от ключа!",
"Recovery key successfully disabled" => "Ключ восстановления успешно отключен",
diff --git a/apps/files_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php
index 49ff28bd0c2..2a35448539f 100644
--- a/apps/files_encryption/l10n/sk_SK.php
+++ b/apps/files_encryption/l10n/sk_SK.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Neznáma chyba",
"Recovery key successfully enabled" => "Záchranný kľúč bol úspešne povolený",
"Could not disable recovery key. Please check your recovery key password!" => "Nepodarilo sa zakázať záchranný kľúč. Skontrolujte prosím Vaše heslo záchranného kľúča!",
"Recovery key successfully disabled" => "Záchranný kľúč bol úspešne zakázaný",
diff --git a/apps/files_encryption/l10n/sl.php b/apps/files_encryption/l10n/sl.php
index 5ae55fbb414..7c0f438fe4e 100644
--- a/apps/files_encryption/l10n/sl.php
+++ b/apps/files_encryption/l10n/sl.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Neznana napaka",
"Recovery key successfully enabled" => "Ključ za obnovitev gesla je uspešno nastavljen",
"Could not disable recovery key. Please check your recovery key password!" => "Ključa za obnovitev gesla ni mogoče onemogočiti. Preverite ključ!",
"Recovery key successfully disabled" => "Ključ za obnovitev gesla je uspešno onemogočen",
diff --git a/apps/files_encryption/l10n/sq.php b/apps/files_encryption/l10n/sq.php
index f53db8e151c..85cb322bd8c 100644
--- a/apps/files_encryption/l10n/sq.php
+++ b/apps/files_encryption/l10n/sq.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Gabim panjohur",
"Encryption" => "Kodifikimi"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php
index cfdda4fdcd7..896e53b1397 100644
--- a/apps/files_encryption/l10n/sv.php
+++ b/apps/files_encryption/l10n/sv.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Okänt fel",
"Recovery key successfully enabled" => "Återställningsnyckeln har framgångsrikt aktiverats",
"Could not disable recovery key. Please check your recovery key password!" => "Kunde inte inaktivera återställningsnyckeln. Vänligen kontrollera ditt lösenord för återställningsnyckeln!",
"Recovery key successfully disabled" => "Återställningsnyckeln har framgångsrikt inaktiverats",
diff --git a/apps/files_encryption/l10n/th_TH.php b/apps/files_encryption/l10n/th_TH.php
index cc670e425a6..12555767d4f 100644
--- a/apps/files_encryption/l10n/th_TH.php
+++ b/apps/files_encryption/l10n/th_TH.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "ข้อผิดพลาดที่ไม่ทราบสาเหตุ",
"Encryption" => "การเข้ารหัส"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_encryption/l10n/tr.php b/apps/files_encryption/l10n/tr.php
index 78e1447ada7..7d5553ee649 100644
--- a/apps/files_encryption/l10n/tr.php
+++ b/apps/files_encryption/l10n/tr.php
@@ -1,8 +1,15 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Bilinmeyen hata",
+"Missing recovery key password" => "Eksik kurtarma anahtarı parolası",
+"Please repeat the recovery key password" => "Lütfen kurtarma anahtarı parolasını yenileyin",
+"Repeated recovery key password does not match the provided recovery key password" => "Yenilenen kurtarma anahtarı parolası, belirtilen kurtarma anahtarı parolası ile eşleşmiyor",
"Recovery key successfully enabled" => "Kurtarma anahtarı başarıyla etkinleştirildi",
"Could not disable recovery key. Please check your recovery key password!" => "Kurtarma anahtarı devre dışı bırakılamadı. Lütfen kurtarma anahtarı parolanızı kontrol edin!",
"Recovery key successfully disabled" => "Kurtarma anahtarı başarıyla devre dışı bırakıldı",
+"Please provide the old recovery password" => "Lütfen eski kurtarma parolasını girin",
+"Please provide a new recovery password" => "Lütfen yeni bir kurtarma parolası girin",
+"Please repeat the new recovery password" => "Lütfen yeni kurtarma parolasını yenileyin",
"Password successfully changed." => "Parola başarıyla değiştirildi.",
"Could not change the password. Maybe the old password was not correct." => "Parola değiştirilemedi. Eski parolanız doğru olmayabilir.",
"Private key password successfully updated." => "Özel anahtar parolası başarıyla güncellendi.",
diff --git a/apps/files_encryption/l10n/ug.php b/apps/files_encryption/l10n/ug.php
index da9144bb930..b05008575f8 100644
--- a/apps/files_encryption/l10n/ug.php
+++ b/apps/files_encryption/l10n/ug.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "يوچۇن خاتالىق",
"Encryption" => "شىفىرلاش"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";
diff --git a/apps/files_encryption/l10n/uk.php b/apps/files_encryption/l10n/uk.php
index 179987a8567..a2f67ebec75 100644
--- a/apps/files_encryption/l10n/uk.php
+++ b/apps/files_encryption/l10n/uk.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Невідома помилка",
"Encryption" => "Шифрування",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову",
"Change Password" => "Змінити Пароль"
diff --git a/apps/files_encryption/l10n/ur_PK.php b/apps/files_encryption/l10n/ur_PK.php
new file mode 100644
index 00000000000..fab26a330e9
--- /dev/null
+++ b/apps/files_encryption/l10n/ur_PK.php
@@ -0,0 +1,5 @@
+<?php
+$TRANSLATIONS = array(
+"Unknown error" => "غیر معروف خرابی"
+);
+$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
diff --git a/apps/files_encryption/l10n/vi.php b/apps/files_encryption/l10n/vi.php
index 3c3078283bd..65c4bcf1f71 100644
--- a/apps/files_encryption/l10n/vi.php
+++ b/apps/files_encryption/l10n/vi.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "Lỗi chưa biết",
"Recovery key successfully enabled" => "Khóa khôi phục kích hoạt thành công",
"Could not disable recovery key. Please check your recovery key password!" => "Không thể vô hiệu hóa khóa khôi phục. Vui lòng kiểm tra mật khẩu khóa khôi phục!",
"Recovery key successfully disabled" => "Vô hiệu hóa khóa khôi phục thành công",
diff --git a/apps/files_encryption/l10n/zh_CN.php b/apps/files_encryption/l10n/zh_CN.php
index c20263f923e..74d7a36f569 100644
--- a/apps/files_encryption/l10n/zh_CN.php
+++ b/apps/files_encryption/l10n/zh_CN.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "未知错误",
"Recovery key successfully enabled" => "恢复密钥成功启用",
"Could not disable recovery key. Please check your recovery key password!" => "不能禁用恢复密钥。请检查恢复密钥密码!",
"Recovery key successfully disabled" => "恢复密钥成功禁用",
diff --git a/apps/files_encryption/l10n/zh_HK.php b/apps/files_encryption/l10n/zh_HK.php
index c9480c429f5..ea559b6f0db 100644
--- a/apps/files_encryption/l10n/zh_HK.php
+++ b/apps/files_encryption/l10n/zh_HK.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "不明錯誤",
"Encryption" => "加密",
"Enabled" => "啟用",
"Disabled" => "停用",
diff --git a/apps/files_encryption/l10n/zh_TW.php b/apps/files_encryption/l10n/zh_TW.php
index 0c283fc28bd..d4028b58310 100644
--- a/apps/files_encryption/l10n/zh_TW.php
+++ b/apps/files_encryption/l10n/zh_TW.php
@@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
+"Unknown error" => "未知的錯誤",
"Recovery key successfully enabled" => "還原金鑰已成功開啟",
"Could not disable recovery key. Please check your recovery key password!" => "無法停用還原金鑰。請檢查您的還原金鑰密碼!",
"Recovery key successfully disabled" => "還原金鑰已成功停用",
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index ee572561e7c..6acb58960d4 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -11,6 +11,9 @@
<author>Robin Appelman, Michael Gapczynski, Vincent Petry</author>
<requiremin>4.93</requiremin>
<shipped>true</shipped>
+ <documentation>
+ <admin>admin-external-storage</admin>
+ </documentation>
<types>
<filesystem/>
</types>
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 952463b8015..92bb891ca21 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -118,6 +118,22 @@ class OC_Mount_Config {
}
$manager->addMount($mount);
}
+
+ if ($data['user']) {
+ $user = \OC::$server->getUserManager()->get($data['user']);
+ $userView = new \OC\Files\View('/' . $user->getUID() . '/files');
+ $changePropagator = new \OC\Files\Cache\ChangePropagator($userView);
+ $etagPropagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, \OC::$server->getConfig());
+ $etagPropagator->propagateDirtyMountPoints();
+ \OCP\Util::connectHook(
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_create_mount,
+ $etagPropagator, 'updateHook');
+ \OCP\Util::connectHook(
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_delete_mount,
+ $etagPropagator, 'updateHook');
+ }
}
/**
@@ -463,6 +479,7 @@ class OC_Mount_Config {
$priority = null) {
$backends = self::getBackends();
$mountPoint = OC\Files\Filesystem::normalizePath($mountPoint);
+ $relMountPoint = $mountPoint;
if ($mountPoint === '' || $mountPoint === '/') {
// can't mount at root folder
return false;
@@ -495,6 +512,10 @@ class OC_Mount_Config {
}
$mountPoints = self::readData($isPersonal ? OCP\User::getUser() : NULL);
+ // who else loves multi-dimensional array ?
+ $isNew = !isset($mountPoints[$mountType]) ||
+ !isset($mountPoints[$mountType][$applicable]) ||
+ !isset($mountPoints[$mountType][$applicable][$mountPoint]);
$mountPoints = self::mergeMountPoints($mountPoints, $mount, $mountType);
// Set default priority if none set
@@ -510,7 +531,19 @@ class OC_Mount_Config {
self::writeData($isPersonal ? OCP\User::getUser() : NULL, $mountPoints);
- return self::getBackendStatus($class, $classOptions, $isPersonal);
+ $result = self::getBackendStatus($class, $classOptions, $isPersonal);
+ if ($result && $isNew) {
+ \OC_Hook::emit(
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_create_mount,
+ array(
+ \OC\Files\Filesystem::signal_param_path => $relMountPoint,
+ \OC\Files\Filesystem::signal_param_mount_type => $mountType,
+ \OC\Files\Filesystem::signal_param_users => $applicable,
+ )
+ );
+ }
+ return $result;
}
/**
@@ -523,6 +556,7 @@ class OC_Mount_Config {
*/
public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) {
// Verify that the mount point applies for the current user
+ $relMountPoints = $mountPoint;
if ($isPersonal) {
if ($applicable != OCP\User::getUser()) {
return false;
@@ -543,6 +577,15 @@ class OC_Mount_Config {
}
}
self::writeData($isPersonal ? OCP\User::getUser() : NULL, $mountPoints);
+ \OC_Hook::emit(
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_delete_mount,
+ array(
+ \OC\Files\Filesystem::signal_param_path => $relMountPoints,
+ \OC\Files\Filesystem::signal_param_mount_type => $mountType,
+ \OC\Files\Filesystem::signal_param_users => $applicable,
+ )
+ );
return true;
}
diff --git a/apps/files_external/lib/etagpropagator.php b/apps/files_external/lib/etagpropagator.php
new file mode 100644
index 00000000000..80a3849b150
--- /dev/null
+++ b/apps/files_external/lib/etagpropagator.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_External;
+
+use OC\Files\Filesystem;
+
+/**
+ * Updates the etag of parent folders whenever a new external storage mount
+ * point has been created or deleted. Updates need to be triggered using
+ * the updateHook() method.
+ *
+ * There are two modes of operation:
+ * - for personal mount points, the etag is propagated directly
+ * - for system mount points, a dirty flag is saved in the configuration and
+ * the etag will be updated the next time propagateDirtyMountPoints() is called
+ */
+class EtagPropagator {
+ /**
+ * @var \OCP\IUser
+ */
+ protected $user;
+
+ /**
+ * @var \OC\Files\Cache\ChangePropagator
+ */
+ protected $changePropagator;
+
+ /**
+ * @var \OCP\IConfig
+ */
+ protected $config;
+
+ /**
+ * @param \OCP\IUser $user current user, must match the propagator's
+ * user
+ * @param \OC\Files\Cache\ChangePropagator $changePropagator change propagator
+ * initialized with a view for $user
+ * @param \OCP\IConfig $config
+ */
+ public function __construct($user, $changePropagator, $config) {
+ $this->user = $user;
+ $this->changePropagator = $changePropagator;
+ $this->config = $config;
+ }
+
+ /**
+ * Propagate the etag changes for all mountpoints marked as dirty and mark the mountpoints as clean
+ *
+ * @param int $time
+ */
+ public function propagateDirtyMountPoints($time = null) {
+ if ($time === null) {
+ $time = time();
+ }
+ $mountPoints = $this->getDirtyMountPoints();
+ foreach ($mountPoints as $mountPoint) {
+ $this->changePropagator->addChange($mountPoint);
+ $this->config->setUserValue($this->user->getUID(), 'files_external', $mountPoint, $time);
+ }
+ if (count($mountPoints)) {
+ $this->changePropagator->propagateChanges($time);
+ }
+ }
+
+ /**
+ * Get all mountpoints we need to update the etag for
+ *
+ * @return string[]
+ */
+ protected function getDirtyMountPoints() {
+ $dirty = array();
+ $mountPoints = $this->config->getAppKeys('files_external');
+ foreach ($mountPoints as $mountPoint) {
+ if (substr($mountPoint, 0, 1) === '/') {
+ $updateTime = $this->config->getAppValue('files_external', $mountPoint);
+ $userTime = $this->config->getUserValue($this->user->getUID(), 'files_external', $mountPoint);
+ if ($updateTime > $userTime) {
+ $dirty[] = $mountPoint;
+ }
+ }
+ }
+ return $dirty;
+ }
+
+ /**
+ * @param string $mountPoint
+ * @param int $time
+ */
+ protected function markDirty($mountPoint, $time = null) {
+ if ($time === null) {
+ $time = time();
+ }
+ $this->config->setAppValue('files_external', $mountPoint, $time);
+ }
+
+ /**
+ * Update etags for mount points for known user
+ * For global or group mount points, updating the etag for every user is not feasible
+ * instead we mark the mount point as dirty and update the etag when the filesystem is loaded for the user
+ * For personal mount points, the change is propagated directly
+ *
+ * @param array $params hook parameters
+ * @param int $time update time to use when marking a mount point as dirty
+ */
+ public function updateHook($params, $time = null) {
+ if ($time === null) {
+ $time = time();
+ }
+ $users = $params[Filesystem::signal_param_users];
+ $type = $params[Filesystem::signal_param_mount_type];
+ $mountPoint = $params[Filesystem::signal_param_path];
+ $mountPoint = Filesystem::normalizePath($mountPoint);
+ if ($type === \OC_Mount_Config::MOUNT_TYPE_GROUP or $users === 'all') {
+ $this->markDirty($mountPoint, $time);
+ } else {
+ $this->changePropagator->addChange($mountPoint);
+ $this->changePropagator->propagateChanges($time);
+ }
+ }
+}
diff --git a/apps/files_external/tests/etagpropagator.php b/apps/files_external/tests/etagpropagator.php
new file mode 100644
index 00000000000..7fa1863f962
--- /dev/null
+++ b/apps/files_external/tests/etagpropagator.php
@@ -0,0 +1,328 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Tests\Files_External;
+
+use OC\Files\Filesystem;
+use OC\User\User;
+
+class EtagPropagator extends \PHPUnit_Framework_TestCase {
+ protected function getUser() {
+ return new User(uniqid(), null);
+ }
+
+ /**
+ * @return \PHPUnit_Framework_MockObject_MockObject | \OC\Files\Cache\ChangePropagator
+ */
+ protected function getChangePropagator() {
+ return $this->getMockBuilder('\OC\Files\Cache\ChangePropagator')
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ /**
+ * @return \PHPUnit_Framework_MockObject_MockObject | \OCP\IConfig
+ */
+ protected function getConfig() {
+ $appConfig = array();
+ $userConfig = array();
+ $mock = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $mock->expects($this->any())
+ ->method('getAppValue')
+ ->will($this->returnCallback(function ($appId, $key, $default = null) use (&$appConfig) {
+ if (isset($appConfig[$appId]) and isset($appConfig[$appId][$key])) {
+ return $appConfig[$appId][$key];
+ } else {
+ return $default;
+ }
+ }));
+ $mock->expects($this->any())
+ ->method('setAppValue')
+ ->will($this->returnCallback(function ($appId, $key, $value) use (&$appConfig) {
+ if (!isset($appConfig[$appId])) {
+ $appConfig[$appId] = array();
+ }
+ $appConfig[$appId][$key] = $value;
+ }));
+ $mock->expects($this->any())
+ ->method('getAppKeys')
+ ->will($this->returnCallback(function ($appId) use (&$appConfig) {
+ if (!isset($appConfig[$appId])) {
+ $appConfig[$appId] = array();
+ }
+ return array_keys($appConfig[$appId]);
+ }));
+
+ $mock->expects($this->any())
+ ->method('getUserValue')
+ ->will($this->returnCallback(function ($userId, $appId, $key, $default = null) use (&$userConfig) {
+ if (isset($userConfig[$userId]) and isset($userConfig[$userId][$appId]) and isset($userConfig[$userId][$appId][$key])) {
+ return $userConfig[$userId][$appId][$key];
+ } else {
+ return $default;
+ }
+ }));
+ $mock->expects($this->any())
+ ->method('setUserValue')
+ ->will($this->returnCallback(function ($userId, $appId, $key, $value) use (&$userConfig) {
+ if (!isset($userConfig[$userId])) {
+ $userConfig[$userId] = array();
+ }
+ if (!isset($userConfig[$userId][$appId])) {
+ $userConfig[$userId][$appId] = array();
+ }
+ $userConfig[$userId][$appId][$key] = $value;
+ }));
+
+ return $mock;
+ }
+
+ public function testSingleUserMount() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ $changePropagator->expects($this->once())
+ ->method('addChange')
+ ->with('/test');
+ $changePropagator->expects($this->once())
+ ->method('propagateChanges')
+ ->with($time);
+
+ $propagator->updateHook(array(
+ Filesystem::signal_param_path => '/test',
+ Filesystem::signal_param_mount_type => \OC_Mount_Config::MOUNT_TYPE_USER,
+ Filesystem::signal_param_users => $user->getUID(),
+ ), $time);
+ }
+
+ public function testGlobalMountNoDirectUpdate() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ // not updated directly
+ $changePropagator->expects($this->never())
+ ->method('addChange');
+ $changePropagator->expects($this->never())
+ ->method('propagateChanges');
+
+ $propagator->updateHook(array(
+ Filesystem::signal_param_path => '/test',
+ Filesystem::signal_param_mount_type => \OC_Mount_Config::MOUNT_TYPE_USER,
+ Filesystem::signal_param_users => 'all',
+ ), $time);
+
+ // mount point marked as dirty
+ $this->assertEquals(array('/test'), $config->getAppKeys('files_external'));
+ $this->assertEquals($time, $config->getAppValue('files_external', '/test'));
+ }
+
+ public function testGroupMountNoDirectUpdate() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ // not updated directly
+ $changePropagator->expects($this->never())
+ ->method('addChange');
+ $changePropagator->expects($this->never())
+ ->method('propagateChanges');
+
+ $propagator->updateHook(array(
+ Filesystem::signal_param_path => '/test',
+ Filesystem::signal_param_mount_type => \OC_Mount_Config::MOUNT_TYPE_GROUP,
+ Filesystem::signal_param_users => 'test',
+ ), $time);
+
+ // mount point marked as dirty
+ $this->assertEquals(array('/test'), $config->getAppKeys('files_external'));
+ $this->assertEquals($time, $config->getAppValue('files_external', '/test'));
+ }
+
+ public function testGlobalMountNoDirtyMountPoint() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ $changePropagator->expects($this->never())
+ ->method('addChange');
+ $changePropagator->expects($this->never())
+ ->method('propagateChanges');
+
+ $propagator->propagateDirtyMountPoints($time);
+
+ $this->assertEquals(0, $config->getUserValue($user->getUID(), 'files_external', '/test', 0));
+ }
+
+ public function testGlobalMountDirtyMountPointFirstTime() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ $config->setAppValue('files_external', '/test', $time - 10);
+
+ $changePropagator->expects($this->once())
+ ->method('addChange')
+ ->with('/test');
+ $changePropagator->expects($this->once())
+ ->method('propagateChanges')
+ ->with($time);
+
+ $propagator->propagateDirtyMountPoints($time);
+
+ $this->assertEquals($time, $config->getUserValue($user->getUID(), 'files_external', '/test'));
+ }
+
+ public function testGlobalMountNonDirtyMountPoint() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ $config->setAppValue('files_external', '/test', $time - 10);
+ $config->setUserValue($user->getUID(), 'files_external', '/test', $time - 10);
+
+ $changePropagator->expects($this->never())
+ ->method('addChange');
+ $changePropagator->expects($this->never())
+ ->method('propagateChanges');
+
+ $propagator->propagateDirtyMountPoints($time);
+
+ $this->assertEquals($time - 10, $config->getUserValue($user->getUID(), 'files_external', '/test'));
+ }
+
+ public function testGlobalMountNonDirtyMountPointOtherUser() {
+ $time = time();
+ $user = $this->getUser();
+ $user2 = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ $config->setAppValue('files_external', '/test', $time - 10);
+ $config->setUserValue($user2->getUID(), 'files_external', '/test', $time - 10);
+
+ $changePropagator->expects($this->once())
+ ->method('addChange')
+ ->with('/test');
+ $changePropagator->expects($this->once())
+ ->method('propagateChanges')
+ ->with($time);
+
+ $propagator->propagateDirtyMountPoints($time);
+
+ $this->assertEquals($time, $config->getUserValue($user->getUID(), 'files_external', '/test'));
+ }
+
+ public function testGlobalMountDirtyMountPointSecondTime() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ $config->setAppValue('files_external', '/test', $time - 10);
+ $config->setUserValue($user->getUID(), 'files_external', '/test', $time - 20);
+
+ $changePropagator->expects($this->once())
+ ->method('addChange')
+ ->with('/test');
+ $changePropagator->expects($this->once())
+ ->method('propagateChanges')
+ ->with($time);
+
+ $propagator->propagateDirtyMountPoints($time);
+
+ $this->assertEquals($time, $config->getUserValue($user->getUID(), 'files_external', '/test'));
+ }
+
+ public function testGlobalMountMultipleUsers() {
+ $time = time();
+ $config = $this->getConfig();
+ $user1 = $this->getUser();
+ $user2 = $this->getUser();
+ $user3 = $this->getUser();
+ $changePropagator1 = $this->getChangePropagator();
+ $changePropagator2 = $this->getChangePropagator();
+ $changePropagator3 = $this->getChangePropagator();
+ $propagator1 = new \OCA\Files_External\EtagPropagator($user1, $changePropagator1, $config);
+ $propagator2 = new \OCA\Files_External\EtagPropagator($user2, $changePropagator2, $config);
+ $propagator3 = new \OCA\Files_External\EtagPropagator($user3, $changePropagator3, $config);
+
+ $config->setAppValue('files_external', '/test', $time - 10);
+
+ $changePropagator1->expects($this->once())
+ ->method('addChange')
+ ->with('/test');
+ $changePropagator1->expects($this->once())
+ ->method('propagateChanges')
+ ->with($time);
+
+ $propagator1->propagateDirtyMountPoints($time);
+
+ $this->assertEquals($time, $config->getUserValue($user1->getUID(), 'files_external', '/test'));
+ $this->assertEquals(0, $config->getUserValue($user2->getUID(), 'files_external', '/test', 0));
+ $this->assertEquals(0, $config->getUserValue($user3->getUID(), 'files_external', '/test', 0));
+
+ $changePropagator2->expects($this->once())
+ ->method('addChange')
+ ->with('/test');
+ $changePropagator2->expects($this->once())
+ ->method('propagateChanges')
+ ->with($time);
+
+ $propagator2->propagateDirtyMountPoints($time);
+
+ $this->assertEquals($time, $config->getUserValue($user1->getUID(), 'files_external', '/test'));
+ $this->assertEquals($time, $config->getUserValue($user2->getUID(), 'files_external', '/test', 0));
+ $this->assertEquals(0, $config->getUserValue($user3->getUID(), 'files_external', '/test', 0));
+ }
+
+ public function testGlobalMountMultipleDirtyMountPoints() {
+ $time = time();
+ $user = $this->getUser();
+ $config = $this->getConfig();
+ $changePropagator = $this->getChangePropagator();
+ $propagator = new \OCA\Files_External\EtagPropagator($user, $changePropagator, $config);
+
+ $config->setAppValue('files_external', '/test', $time - 10);
+ $config->setAppValue('files_external', '/foo', $time - 50);
+ $config->setAppValue('files_external', '/bar', $time - 70);
+
+ $config->setUserValue($user->getUID(), 'files_external', '/foo', $time - 70);
+ $config->setUserValue($user->getUID(), 'files_external', '/bar', $time - 70);
+
+ $changePropagator->expects($this->exactly(2))
+ ->method('addChange');
+ $changePropagator->expects($this->once())
+ ->method('propagateChanges')
+ ->with($time);
+
+ $propagator->propagateDirtyMountPoints($time);
+
+ $this->assertEquals($time, $config->getUserValue($user->getUID(), 'files_external', '/test'));
+ $this->assertEquals($time, $config->getUserValue($user->getUID(), 'files_external', '/foo'));
+ $this->assertEquals($time - 70, $config->getUserValue($user->getUID(), 'files_external', '/bar'));
+ }
+}
diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php
index fc482823843..c11e48b82f3 100644
--- a/apps/files_external/tests/mountconfig.php
+++ b/apps/files_external/tests/mountconfig.php
@@ -26,6 +26,42 @@ class Test_Mount_Config_Dummy_Storage {
}
}
+class Test_Mount_Config_Hook_Test {
+ static $signal;
+ static $params;
+
+ public static function setUpHooks() {
+ self::clear();
+ \OCP\Util::connectHook(
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_create_mount,
+ '\Test_Mount_Config_Hook_Test', 'createHookCallback');
+ \OCP\Util::connectHook(
+ \OC\Files\Filesystem::CLASSNAME,
+ \OC\Files\Filesystem::signal_delete_mount,
+ '\Test_Mount_Config_Hook_Test', 'deleteHookCallback');
+ }
+
+ public static function clear() {
+ self::$signal = null;
+ self::$params = null;
+ }
+
+ public static function createHookCallback($params) {
+ self::$signal = \OC\Files\Filesystem::signal_create_mount;
+ self::$params = $params;
+ }
+
+ public static function deleteHookCallback($params) {
+ self::$signal = \OC\Files\Filesystem::signal_delete_mount;
+ self::$params = $params;
+ }
+
+ public static function getLastCall() {
+ return array(self::$signal, self::$params);
+ }
+}
+
/**
* Class Test_Mount_Config
*/
@@ -77,9 +113,11 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
);
OC_Mount_Config::$skipTest = true;
+ Test_Mount_Config_Hook_Test::setupHooks();
}
public function tearDown() {
+ Test_Mount_Config_Hook_Test::clear();
OC_Mount_Config::$skipTest = false;
\OC_User::deleteUser(self::TEST_USER2);
@@ -337,6 +375,102 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase {
$this->assertEquals(array_keys($options), array_keys($savedOptions));
}
+ public function testHooks() {
+ $mountPoint = '/test';
+ $mountType = 'user';
+ $applicable = 'all';
+ $isPersonal = false;
+
+ $mountConfig = array(
+ 'host' => 'smbhost',
+ 'user' => 'smbuser',
+ 'password' => 'smbpassword',
+ 'share' => 'smbshare',
+ 'root' => 'smbroot'
+ );
+
+ // write config
+ $this->assertTrue(
+ OC_Mount_Config::addMountPoint(
+ $mountPoint,
+ '\OC\Files\Storage\SMB',
+ $mountConfig,
+ $mountType,
+ $applicable,
+ $isPersonal
+ )
+ );
+
+ list($hookName, $params) = Test_Mount_Config_Hook_Test::getLastCall();
+ $this->assertEquals(
+ \OC\Files\Filesystem::signal_create_mount,
+ $hookName
+ );
+ $this->assertEquals(
+ $mountPoint,
+ $params[\OC\Files\Filesystem::signal_param_path]
+ );
+ $this->assertEquals(
+ $mountType,
+ $params[\OC\Files\Filesystem::signal_param_mount_type]
+ );
+ $this->assertEquals(
+ $applicable,
+ $params[\OC\Files\Filesystem::signal_param_users]
+ );
+
+ Test_Mount_Config_Hook_Test::clear();
+
+ // edit
+ $mountConfig['host'] = 'anothersmbhost';
+ $this->assertTrue(
+ OC_Mount_Config::addMountPoint(
+ $mountPoint,
+ '\OC\Files\Storage\SMB',
+ $mountConfig,
+ $mountType,
+ $applicable,
+ $isPersonal
+ )
+ );
+
+ // hook must not be called on edit
+ list($hookName, $params) = Test_Mount_Config_Hook_Test::getLastCall();
+ $this->assertEquals(
+ null,
+ $hookName
+ );
+
+ Test_Mount_Config_Hook_Test::clear();
+
+ $this->assertTrue(
+ OC_Mount_Config::removeMountPoint(
+ $mountPoint,
+ $mountType,
+ $applicable,
+ $isPersonal
+ )
+ );
+
+ list($hookName, $params) = Test_Mount_Config_Hook_Test::getLastCall();
+ $this->assertEquals(
+ \OC\Files\Filesystem::signal_delete_mount,
+ $hookName
+ );
+ $this->assertEquals(
+ $mountPoint,
+ $params[\OC\Files\Filesystem::signal_param_path]
+ );
+ $this->assertEquals(
+ $mountType,
+ $params[\OC\Files\Filesystem::signal_param_mount_type]
+ );
+ $this->assertEquals(
+ $applicable,
+ $params[\OC\Files\Filesystem::signal_param_users]
+ );
+ }
+
/**
* Test password obfuscation
*/
diff --git a/apps/files_sharing/l10n/fr.php b/apps/files_sharing/l10n/fr.php
index 27dd4bcbc67..608f8a4cc24 100644
--- a/apps/files_sharing/l10n/fr.php
+++ b/apps/files_sharing/l10n/fr.php
@@ -9,7 +9,7 @@ $TRANSLATIONS = array(
"Shared by link" => "Partagés par lien",
"No files have been shared with you yet." => "Aucun fichier n'est partagé avec vous pour l'instant.",
"You haven't shared any files yet." => "Vous ne partagez pas de fichier pour l'instant.",
-"You haven't shared any files by link yet." => "Vous n'avez aucun partage de fichier par lien pour le moment.",
+"You haven't shared any files by link yet." => "Vous ne partagez pas de fichier par lien pour l'instant.",
"Do you want to add the remote share {name} from {owner}@{remote}?" => "Voulez-vous ajouter le partage distant {name} de {owner}@{remote} ?",
"Remote share" => "Partage distant",
"Remote share password" => "Mot de passe du partage distant",
@@ -34,7 +34,7 @@ $TRANSLATIONS = array(
"Download %s" => "Télécharger %s",
"Direct link" => "Lien direct",
"Remote Shares" => "Partages distants",
-"Allow other instances to mount public links shared from this server" => "Autoriser d'autres instances à monter des liens publics, partagés depuis ce serveur",
-"Allow users to mount public link shares" => "Autoriser des utilisateurs à monter des liens de partages publics"
+"Allow other instances to mount public links shared from this server" => "Autoriser d'autres instances à monter les liens publics partagés depuis ce serveur",
+"Allow users to mount public link shares" => "Autoriser vos utilisateurs à monter les liens publics"
);
$PLURAL_FORMS = "nplurals=2; plural=(n > 1);";
diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml
index f15056908f1..8735b61e2db 100644
--- a/apps/files_trashbin/appinfo/info.xml
+++ b/apps/files_trashbin/appinfo/info.xml
@@ -15,5 +15,8 @@ To prevent a user from running out of disk space, the ownCloud Deleted files app
<types>
<filesystem/>
</types>
+ <documentation>
+ <user>user-trashbin</user>
+ </documentation>
<ocsid>166052</ocsid>
</info>
diff --git a/apps/files_versions/appinfo/info.xml b/apps/files_versions/appinfo/info.xml
index 605ef5ccc37..9aed8069b9b 100644
--- a/apps/files_versions/appinfo/info.xml
+++ b/apps/files_versions/appinfo/info.xml
@@ -14,6 +14,9 @@ In addition to the expiry of versions, ownCloud’s versions app makes certain n
<types>
<filesystem/>
</types>
+ <documentation>
+ <user>user-versions</user>
+ </documentation>
<default_enable/>
<ocsid>166053</ocsid>
</info>
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index 2b069d14e3d..a1a934f0140 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -15,7 +15,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce
<authentication/>
</types>
<documentation>
- <admin>http://doc.owncloud.org/server/7.0/go.php?to=admin-ldap</admin>
+ <admin>admin-ldap</admin>
</documentation>
<ocsid>166061</ocsid>
</info>
diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php
index 401a5ca0598..31dbd08d1b3 100644
--- a/apps/user_ldap/l10n/da.php
+++ b/apps/user_ldap/l10n/da.php
@@ -78,9 +78,9 @@ $TRANSLATIONS = array(
"Connection Settings" => "Forbindelsesindstillinger ",
"Configuration Active" => "Konfiguration Aktiv",
"When unchecked, this configuration will be skipped." => "Hvis der ikke er markeret, så springes denne konfiguration over.",
-"Backup (Replica) Host" => "Backup (Replika) Vært",
-"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Opgiv en ikke obligatorisk backup server. Denne skal være en replikation af hoved-LDAP/AD serveren.",
-"Backup (Replica) Port" => "Backup (Replika) Port",
+"Backup (Replica) Host" => "Vært for sikkerhedskopier (replika)",
+"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Angiv valgfrit en vært for sikkerhedskopiering. Dette skal være en replikering af den primære LDAP/AD-server.",
+"Backup (Replica) Port" => "Port for sikkerhedskopi (replika)",
"Disable Main Server" => "Deaktiver Hovedserver",
"Only connect to the replica server." => "Forbind kun til replika serveren.",
"Case insensitive LDAP server (Windows)" => "LDAP-server som ikke er versalfølsom (Windows)",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 570f445650d..159b0d73000 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -36,8 +36,16 @@ class Access extends LDAPUtility implements user\IUserTools {
//never ever check this var directly, always use getPagedSearchResultState
protected $pagedSearchedSuccessful;
+ /**
+ * @var string[] $cookies an array of returned Paged Result cookies
+ */
protected $cookies = array();
+ /**
+ * @var string $lastCookie the last cookie returned from a Paged Results
+ * operation, defaults to an empty string
+ */
+ protected $lastCookie = '';
public function __construct(Connection $connection, ILDAPWrapper $ldap,
user\Manager $userManager) {
@@ -84,7 +92,12 @@ class Access extends LDAPUtility implements user\IUserTools {
\OCP\Util::writeLog('user_ldap', 'LDAP resource not available.', \OCP\Util::DEBUG);
return false;
}
- //all or nothing! otherwise we get in trouble with.
+ //Cancel possibly running Paged Results operation, otherwise we run in
+ //LDAP protocol errors
+ $this->abandonPagedSearch();
+ // openLDAP requires that we init a new Paged Search. Not needed by AD,
+ // but does not hurt either.
+ $this->initPagedSearch($filter, array($dn), array($attr), 1, 0);
$dn = $this->DNasBaseParameter($dn);
$rr = @$this->ldap->read($cr, $dn, $filter, array($attr));
if(!$this->ldap->isResource($rr)) {
@@ -805,9 +818,6 @@ class Access extends LDAPUtility implements user\IUserTools {
$linkResources = array_pad(array(), count($base), $cr);
$sr = $this->ldap->search($linkResources, $base, $filter, $attr);
$error = $this->ldap->errno($cr);
- if ($pagedSearchOK) {
- $this->ldap->controlPagedResult($cr, 999999, false, "");
- }
if(!is_array($sr) || $error !== 0) {
\OCP\Util::writeLog('user_ldap',
'Error when searching: '.$this->ldap->error($cr).
@@ -1366,6 +1376,19 @@ class Access extends LDAPUtility implements user\IUserTools {
}
/**
+ * resets a running Paged Search operation
+ */
+ private function abandonPagedSearch() {
+ if($this->connection->hasPagedResultSupport) {
+ $cr = $this->connection->getConnectionResource();
+ $this->ldap->controlPagedResult($cr, 0, false, $this->lastCookie);
+ $this->getPagedSearchResultState();
+ $this->lastCookie = '';
+ $this->cookies = array();
+ }
+ }
+
+ /**
* get a cookie for the next LDAP paged search
* @param string $base a string with the base DN for the search
* @param string $filter the search filter to identify the correct search
@@ -1403,6 +1426,7 @@ class Access extends LDAPUtility implements user\IUserTools {
if(!empty($cookie)) {
$cacheKey = 'lc' . crc32($base) . '-' . crc32($filter) . '-' .intval($limit) . '-' . intval($offset);
$this->cookies[$cacheKey] = $cookie;
+ $this->lastCookie = $cookie;
}
}
@@ -1454,9 +1478,8 @@ class Access extends LDAPUtility implements user\IUserTools {
}
}
if(!is_null($cookie)) {
- if($offset > 0) {
- \OCP\Util::writeLog('user_ldap', 'Cookie '.CRC32($cookie), \OCP\Util::INFO);
- }
+ //since offset = 0, this is a new search. We abandon other searches that might be ongoing.
+ $this->abandonPagedSearch();
$pagedSearchOK = $this->ldap->controlPagedResult(
$this->connection->getConnectionResource(), $limit,
false, $cookie);
diff --git a/apps/user_ldap/lib/ildapwrapper.php b/apps/user_ldap/lib/ildapwrapper.php
index 590f6d7ac7a..a64bcd6b95b 100644
--- a/apps/user_ldap/lib/ildapwrapper.php
+++ b/apps/user_ldap/lib/ildapwrapper.php
@@ -51,7 +51,7 @@ interface ILDAPWrapper {
* @param resource $link LDAP link resource
* @param int $pageSize number of results per page
* @param bool $isCritical Indicates whether the pagination is critical of not.
- * @param array $cookie structure sent by LDAP server
+ * @param string $cookie structure sent by LDAP server
* @return bool true on success, false otherwise
*/
public function controlPagedResult($link, $pageSize, $isCritical, $cookie);
diff --git a/apps/user_ldap/templates/part.settingcontrols.php b/apps/user_ldap/templates/part.settingcontrols.php
index ddf65e8a754..bcccb59a7dd 100644
--- a/apps/user_ldap/templates/part.settingcontrols.php
+++ b/apps/user_ldap/templates/part.settingcontrols.php
@@ -1,6 +1,6 @@
<div class="ldapSettingControls">
<input class="ldap_submit" value="<?php p($l->t('Save'));?>" type="submit">
- <button class="ldap_action_test_connection" name="ldap_action_test_connection">
+ <button type="button" class="ldap_action_test_connection" name="ldap_action_test_connection">
<?php p($l->t('Test Configuration'));?>
</button>
<a href="<?php p(\OC_Helper::linkToDocs('admin-ldap')); ?>"
diff --git a/apps/user_ldap/templates/part.wizard-server.php b/apps/user_ldap/templates/part.wizard-server.php
index 422faad028b..bee2b874178 100644
--- a/apps/user_ldap/templates/part.wizard-server.php
+++ b/apps/user_ldap/templates/part.wizard-server.php
@@ -24,7 +24,7 @@
?>
<option value="NEW"><?php p($l->t('Add Server Configuration'));?></option>
</select>
- <button id="ldap_action_delete_configuration"
+ <button type="button" id="ldap_action_delete_configuration"
name="ldap_action_delete_configuration"><?php p($l->t('Delete Configuration'));?></button>
</p>
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index 38043fb34a8..6a02b795258 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -59,7 +59,7 @@
<p class="ldapIndent"><label for="ldap_expert_uuid_group_attr"><?php p($l->t('UUID Attribute for Groups:'));?></label><input type="text" id="ldap_expert_uuid_group_attr" name="ldap_expert_uuid_group_attr" data-default="<?php p($_['ldap_expert_uuid_group_attr_default']); ?>" /></p>
<p><strong><?php p($l->t('Username-LDAP User Mapping'));?></strong></p>
<p class="ldapIndent"><?php p($l->t('Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.'));?></p>
- <p class="ldapIndent"><button id="ldap_action_clear_user_mappings" name="ldap_action_clear_user_mappings"><?php p($l->t('Clear Username-LDAP User Mapping'));?></button><br/><button id="ldap_action_clear_group_mappings" name="ldap_action_clear_group_mappings"><?php p($l->t('Clear Groupname-LDAP Group Mapping'));?></button></p>
+ <p class="ldapIndent"><button type="button" id="ldap_action_clear_user_mappings" name="ldap_action_clear_user_mappings"><?php p($l->t('Clear Username-LDAP User Mapping'));?></button><br/><button type="button" id="ldap_action_clear_group_mappings" name="ldap_action_clear_group_mappings"><?php p($l->t('Clear Groupname-LDAP Group Mapping'));?></button></p>
<?php print_unescaped($_['settingControls']); ?>
</fieldset>
</div>