summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md4
-rw-r--r--apps/files/l10n/sk_SK.js13
-rw-r--r--apps/files/l10n/sk_SK.json13
-rw-r--r--apps/files_encryption/l10n/fr.js24
-rw-r--r--apps/files_encryption/l10n/fr.json24
-rw-r--r--apps/files_encryption/templates/settings-admin.php6
-rw-r--r--apps/files_encryption/templates/settings-personal.php6
-rw-r--r--apps/files_external/l10n/fr.js2
-rw-r--r--apps/files_external/l10n/fr.json2
-rw-r--r--apps/files_sharing/js/external.js137
-rw-r--r--apps/files_sharing/js/public.js12
-rw-r--r--apps/files_sharing/l10n/it.js6
-rw-r--r--apps/files_sharing/l10n/it.json6
-rw-r--r--apps/files_sharing/l10n/sk_SK.js22
-rw-r--r--apps/files_sharing/l10n/sk_SK.json22
-rw-r--r--apps/files_sharing/lib/controllers/sharecontroller.php5
-rw-r--r--apps/files_sharing/lib/external/cache.php3
-rw-r--r--apps/files_sharing/lib/external/manager.php27
-rw-r--r--apps/files_sharing/lib/external/storage.php2
-rw-r--r--apps/files_sharing/lib/helper.php2
-rw-r--r--apps/files_sharing/lib/hooks.php39
-rw-r--r--apps/files_sharing/templates/public.php2
-rw-r--r--apps/files_sharing/tests/controller/sharecontroller.php4
-rw-r--r--apps/files_sharing/tests/external/cache.php114
-rw-r--r--apps/files_sharing/tests/js/externalSpec.js123
-rw-r--r--apps/files_sharing/tests/server2server.php76
-rw-r--r--apps/files_trashbin/l10n/sk_SK.js2
-rw-r--r--apps/files_trashbin/l10n/sk_SK.json2
-rw-r--r--apps/user_ldap/l10n/fr.js6
-rw-r--r--apps/user_ldap/l10n/fr.json6
-rw-r--r--apps/user_ldap/lib/access.php2
-rw-r--r--config/config.sample.php10
-rw-r--r--core/ajax/share.php17
-rw-r--r--core/l10n/es.js2
-rw-r--r--core/l10n/es.json2
-rw-r--r--core/l10n/hi.js1
-rw-r--r--core/l10n/hi.json1
-rw-r--r--core/l10n/it.js4
-rw-r--r--core/l10n/it.json4
-rw-r--r--lib/l10n/fr.js8
-rw-r--r--lib/l10n/fr.json8
-rw-r--r--lib/l10n/sk_SK.js5
-rw-r--r--lib/l10n/sk_SK.json5
-rw-r--r--lib/private/connector/sabre/auth.php6
-rw-r--r--lib/private/mail.php1
-rw-r--r--lib/private/memcache/redis.php8
-rw-r--r--lib/private/request.php2
-rw-r--r--lib/private/user.php2
-rw-r--r--settings/admin.php2
-rw-r--r--settings/css/settings.css5
-rw-r--r--settings/js/users/users.js3
-rw-r--r--settings/l10n/fr.js2
-rw-r--r--settings/l10n/fr.json2
-rw-r--r--settings/templates/admin.php21
-rw-r--r--settings/templates/personal.php2
-rw-r--r--tests/karma.config.js3
-rw-r--r--tests/lib/memcache/cache.php6
-rw-r--r--tests/lib/request.php1
58 files changed, 685 insertions, 162 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a0ebd7c2fc9..fcf2319f699 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -44,6 +44,10 @@ Before we're able to merge your code into the ownCloud core, you need to sign ou
Please read the [Developer Manuals][devmanual] to learn how to create your first application or how to test the ownCloud code with PHPUnit.
+In order to constantly increase the quality of our software we can no longer accept pull request which submit un-tested code.
+It is a must have that changed and added code segments are unit tested.
+In some areas unit testing is hard (aka almost impossible) as of today - in these areas refactoring WHILE fixing a bug is encouraged to enable unit testing.
+
[agreement]: http://owncloud.org/about/contributor-agreement/
[devmanual]: http://owncloud.org/dev
diff --git a/apps/files/l10n/sk_SK.js b/apps/files/l10n/sk_SK.js
index 2f3e7928e92..3dd7dd1b27a 100644
--- a/apps/files/l10n/sk_SK.js
+++ b/apps/files/l10n/sk_SK.js
@@ -55,11 +55,13 @@ OC.L10N.register(
"Download" : "Sťahovanie",
"Select" : "Vybrať",
"Pending" : "Čaká",
+ "Unable to determine date" : "Nemožno určiť dátum",
"Error moving file." : "Chyba pri presune súboru.",
"Error moving file" : "Chyba pri presúvaní súboru",
"Error" : "Chyba",
"Could not rename file" : "Nemožno premenovať súbor",
"Error deleting file." : "Chyba pri mazaní súboru.",
+ "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'",
"Name" : "Názov",
"Size" : "Veľkosť",
"Modified" : "Upravené",
@@ -73,8 +75,9 @@ OC.L10N.register(
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
- "_matches '{filter}'_::_match '{filter}'_" : ["","",""],
+ "_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
+ "Favorited" : "Pridané k obľúbeným",
"Favorite" : "Obľúbené",
"%s could not be renamed as it has been deleted" : "%s nebolo možné premenovať, pretože bol zmazaný",
"%s could not be renamed" : "%s nemohol byť premenovaný",
@@ -94,9 +97,15 @@ OC.L10N.register(
"From link" : "Z odkazu",
"Upload" : "Nahrať",
"Cancel upload" : "Zrušiť nahrávanie",
+ "No files yet" : "Zatiaľ žiadne súbory.",
+ "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
+ "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
+ "Select all" : "Vybrať všetko",
"Upload too large" : "Nahrávanie je príliš veľké",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
"Files are being scanned, please wait." : "Čakajte, súbory sú prehľadávané.",
- "Currently scanning" : "Prehľadáva sa"
+ "Currently scanning" : "Prehľadáva sa",
+ "No favorites" : "Žiadne obľúbené",
+ "Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json
index e025a02504e..ab2cf57be75 100644
--- a/apps/files/l10n/sk_SK.json
+++ b/apps/files/l10n/sk_SK.json
@@ -53,11 +53,13 @@
"Download" : "Sťahovanie",
"Select" : "Vybrať",
"Pending" : "Čaká",
+ "Unable to determine date" : "Nemožno určiť dátum",
"Error moving file." : "Chyba pri presune súboru.",
"Error moving file" : "Chyba pri presúvaní súboru",
"Error" : "Chyba",
"Could not rename file" : "Nemožno premenovať súbor",
"Error deleting file." : "Chyba pri mazaní súboru.",
+ "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'",
"Name" : "Názov",
"Size" : "Veľkosť",
"Modified" : "Upravené",
@@ -71,8 +73,9 @@
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." : "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
- "_matches '{filter}'_::_match '{filter}'_" : ["","",""],
+ "_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"],
"{dirs} and {files}" : "{dirs} a {files}",
+ "Favorited" : "Pridané k obľúbeným",
"Favorite" : "Obľúbené",
"%s could not be renamed as it has been deleted" : "%s nebolo možné premenovať, pretože bol zmazaný",
"%s could not be renamed" : "%s nemohol byť premenovaný",
@@ -92,9 +95,15 @@
"From link" : "Z odkazu",
"Upload" : "Nahrať",
"Cancel upload" : "Zrušiť nahrávanie",
+ "No files yet" : "Zatiaľ žiadne súbory.",
+ "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!",
+ "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
+ "Select all" : "Vybrať všetko",
"Upload too large" : "Nahrávanie je príliš veľké",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
"Files are being scanned, please wait." : "Čakajte, súbory sú prehľadávané.",
- "Currently scanning" : "Prehľadáva sa"
+ "Currently scanning" : "Prehľadáva sa",
+ "No favorites" : "Žiadne obľúbené",
+ "Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_encryption/l10n/fr.js b/apps/files_encryption/l10n/fr.js
index 7ee71d80f64..3e973065110 100644
--- a/apps/files_encryption/l10n/fr.js
+++ b/apps/files_encryption/l10n/fr.js
@@ -3,20 +3,20 @@ OC.L10N.register(
{
"Unknown error" : "Erreur Inconnue ",
"Missing recovery key password" : "Mot de passe de la clef de récupération manquant",
- "Please repeat the recovery key password" : "Répétez le mot de passe de la clé de récupération",
- "Repeated recovery key password does not match the provided recovery key password" : "Le mot de passe de la clé de récupération et sa répétition ne sont pas identiques.",
- "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 le mot de passe de votre clé de récupération !",
- "Recovery key successfully disabled" : "Clé de récupération désactivée avec succès",
+ "Please repeat the recovery key password" : "Répétez le mot de passe de la clef de récupération",
+ "Repeated recovery key password does not match the provided recovery key password" : "Le mot de passe de la clef de récupération et sa répétition ne sont pas identiques.",
+ "Recovery key successfully enabled" : "Clef 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 clef de récupération. Veuillez vérifier le mot de passe de votre clef de récupération !",
+ "Recovery key successfully disabled" : "Clef de récupération désactivée avec succès",
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
"Password successfully changed." : "Mot de passe changé avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
- "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clé privée.",
+ "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clef privée.",
"The old password was not correct, please try again." : "L'ancien mot de passe est incorrect. Veuillez réessayer.",
"The current log-in password was not correct, please try again." : "Le mot de passe actuel n'est pas correct, veuillez réessayer.",
- "Private key password successfully updated." : "Mot de passe de la clé privée mis à jour avec succès.",
+ "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.",
"File recovery settings updated" : "Paramètres de récupération de fichiers mis à jour",
"Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération",
"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." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.",
@@ -30,23 +30,23 @@ OC.L10N.register(
"Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Go directly to your %spersonal settings%s." : "Aller à %svos paramètres personnels%s.",
"Encryption" : "Chiffrement",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
"Enable recovery key (allow to recover users files in case of password loss):" : "Activer la clef de récupération (permet de récupérer les fichiers des utilisateurs en cas de perte de mot de passe).",
"Recovery key password" : "Mot de passe de la clef de récupération",
- "Repeat Recovery key password" : "Répétez le mot de passe de la clé de récupération",
+ "Repeat Recovery key password" : "Répétez le mot de passe de la clef de récupération",
"Enabled" : "Activé",
"Disabled" : "Désactivé",
"Change recovery key password:" : "Modifier le mot de passe de la clef de récupération :",
"Old Recovery key password" : "Ancien mot de passe de la clef de récupération",
"New Recovery key password" : "Nouveau mot de passe de la clef de récupération",
- "Repeat New Recovery key password" : "Répétez le nouveau mot de passe de la clé de récupération",
+ "Repeat New Recovery key password" : "Répétez le nouveau mot de passe de la clef de récupération",
"Change Password" : "Changer de mot de passe",
"Your private key password no longer matches your log-in password." : "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion.",
- "Set your old private key password to your current log-in password:" : "Configurez le mot de passe de votre ancienne clef privée avec votre mot de passe courant de connexion :",
+ "Set your old private key password to your current log-in password:" : "Faites de votre mot de passe de connexion le mot de passe de votre clef privée :",
" If you don't remember your old password you can ask your administrator to recover your files." : "Si vous ne vous souvenez plus de votre ancien mot de passe, vous pouvez demander à votre administrateur de récupérer vos fichiers.",
"Old log-in password" : "Ancien mot de passe de connexion",
"Current log-in password" : "Actuel mot de passe de connexion",
- "Update Private Key Password" : "Mettre à jour le mot de passe de votre clé privée",
+ "Update Private Key Password" : "Mettre à jour le mot de passe de votre clef privée",
"Enable password recovery:" : "Activer la récupération du mot de passe :",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Activer cette option vous permettra d'obtenir à nouveau l'accès à vos fichiers chiffrés en cas de perte de mot de passe"
},
diff --git a/apps/files_encryption/l10n/fr.json b/apps/files_encryption/l10n/fr.json
index 72e57fda5ea..1c5f2600356 100644
--- a/apps/files_encryption/l10n/fr.json
+++ b/apps/files_encryption/l10n/fr.json
@@ -1,20 +1,20 @@
{ "translations": {
"Unknown error" : "Erreur Inconnue ",
"Missing recovery key password" : "Mot de passe de la clef de récupération manquant",
- "Please repeat the recovery key password" : "Répétez le mot de passe de la clé de récupération",
- "Repeated recovery key password does not match the provided recovery key password" : "Le mot de passe de la clé de récupération et sa répétition ne sont pas identiques.",
- "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 le mot de passe de votre clé de récupération !",
- "Recovery key successfully disabled" : "Clé de récupération désactivée avec succès",
+ "Please repeat the recovery key password" : "Répétez le mot de passe de la clef de récupération",
+ "Repeated recovery key password does not match the provided recovery key password" : "Le mot de passe de la clef de récupération et sa répétition ne sont pas identiques.",
+ "Recovery key successfully enabled" : "Clef 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 clef de récupération. Veuillez vérifier le mot de passe de votre clef de récupération !",
+ "Recovery key successfully disabled" : "Clef de récupération désactivée avec succès",
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
"Password successfully changed." : "Mot de passe changé avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
- "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clé privée.",
+ "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clef privée.",
"The old password was not correct, please try again." : "L'ancien mot de passe est incorrect. Veuillez réessayer.",
"The current log-in password was not correct, please try again." : "Le mot de passe actuel n'est pas correct, veuillez réessayer.",
- "Private key password successfully updated." : "Mot de passe de la clé privée mis à jour avec succès.",
+ "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.",
"File recovery settings updated" : "Paramètres de récupération de fichiers mis à jour",
"Could not update file recovery" : "Impossible de mettre à jour les fichiers de récupération",
"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." : "L'application de chiffrement n'est pas initialisée ! Peut-être que cette application a été réactivée pendant votre session. Veuillez essayer de vous déconnecter et ensuite de vous reconnecter pour initialiser l'application de chiffrement.",
@@ -28,23 +28,23 @@
"Following users are not set up for encryption:" : "Les utilisateurs suivants ne sont pas configurés pour le chiffrement :",
"Go directly to your %spersonal settings%s." : "Aller à %svos paramètres personnels%s.",
"Encryption" : "Chiffrement",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clés ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.",
"Enable recovery key (allow to recover users files in case of password loss):" : "Activer la clef de récupération (permet de récupérer les fichiers des utilisateurs en cas de perte de mot de passe).",
"Recovery key password" : "Mot de passe de la clef de récupération",
- "Repeat Recovery key password" : "Répétez le mot de passe de la clé de récupération",
+ "Repeat Recovery key password" : "Répétez le mot de passe de la clef de récupération",
"Enabled" : "Activé",
"Disabled" : "Désactivé",
"Change recovery key password:" : "Modifier le mot de passe de la clef de récupération :",
"Old Recovery key password" : "Ancien mot de passe de la clef de récupération",
"New Recovery key password" : "Nouveau mot de passe de la clef de récupération",
- "Repeat New Recovery key password" : "Répétez le nouveau mot de passe de la clé de récupération",
+ "Repeat New Recovery key password" : "Répétez le nouveau mot de passe de la clef de récupération",
"Change Password" : "Changer de mot de passe",
"Your private key password no longer matches your log-in password." : "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion.",
- "Set your old private key password to your current log-in password:" : "Configurez le mot de passe de votre ancienne clef privée avec votre mot de passe courant de connexion :",
+ "Set your old private key password to your current log-in password:" : "Faites de votre mot de passe de connexion le mot de passe de votre clef privée :",
" If you don't remember your old password you can ask your administrator to recover your files." : "Si vous ne vous souvenez plus de votre ancien mot de passe, vous pouvez demander à votre administrateur de récupérer vos fichiers.",
"Old log-in password" : "Ancien mot de passe de connexion",
"Current log-in password" : "Actuel mot de passe de connexion",
- "Update Private Key Password" : "Mettre à jour le mot de passe de votre clé privée",
+ "Update Private Key Password" : "Mettre à jour le mot de passe de votre clef privée",
"Enable password recovery:" : "Activer la récupération du mot de passe :",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Activer cette option vous permettra d'obtenir à nouveau l'accès à vos fichiers chiffrés en cas de perte de mot de passe"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/apps/files_encryption/templates/settings-admin.php b/apps/files_encryption/templates/settings-admin.php
index 4c1d724b6dd..b686912bf4d 100644
--- a/apps/files_encryption/templates/settings-admin.php
+++ b/apps/files_encryption/templates/settings-admin.php
@@ -1,5 +1,9 @@
+<?php
+ /** @var array $_ */
+ /** @var OC_L10N $l */
+?>
<form id="encryption" class="section">
- <h2><?php p($l->t('Encryption')); ?></h2>
+ <h2><?php p($l->t('Server-side Encryption')); ?></h2>
<?php if($_["initStatus"] === \OCA\Files_Encryption\Session::NOT_INITIALIZED): ?>
<?php p($l->t("Encryption App is enabled but your keys are not initialized, please log-out and log-in again")); ?>
diff --git a/apps/files_encryption/templates/settings-personal.php b/apps/files_encryption/templates/settings-personal.php
index 17123a154d9..3c8034c968f 100644
--- a/apps/files_encryption/templates/settings-personal.php
+++ b/apps/files_encryption/templates/settings-personal.php
@@ -1,5 +1,9 @@
+<?php
+ /** @var array $_ */
+ /** @var OC_L10N $l */
+?>
<form id="encryption" class="section">
- <h2><?php p( $l->t( 'Encryption' ) ); ?></h2>
+ <h2><?php p($l->t('Server-side Encryption')); ?></h2>
<?php if ( $_["initialized"] === \OCA\Files_Encryption\Session::NOT_INITIALIZED ): ?>
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index eb4b6cb0d12..23c31636fce 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -69,6 +69,6 @@ OC.L10N.register(
"Add storage" : "Ajouter un support de stockage",
"Delete" : "Supprimer",
"Enable User External Storage" : "Autoriser les utilisateurs à ajouter des stockages externes",
- "Allow users to mount the following external storage" : "Autorise les utilisateurs à monter les stockage externes suivants"
+ "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index 07551cca9c5..e29f032fc4e 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -67,6 +67,6 @@
"Add storage" : "Ajouter un support de stockage",
"Delete" : "Supprimer",
"Enable User External Storage" : "Autoriser les utilisateurs à ajouter des stockages externes",
- "Allow users to mount the following external storage" : "Autorise les utilisateurs à monter les stockage externes suivants"
+ "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/js/external.js b/apps/files_sharing/js/external.js
index aeb4b2461f8..31407f28ffd 100644
--- a/apps/files_sharing/js/external.js
+++ b/apps/files_sharing/js/external.js
@@ -44,7 +44,8 @@
{name: name, owner: owner, remote: remoteClean}
),
t('files_sharing','Remote share'),
- function (result) {
+ function (result, password) {
+ share.password = password;
callback(result, share);
},
true,
@@ -62,72 +63,92 @@
$buttons.eq(0).text(t('core', 'Cancel'));
$buttons.eq(1).text(t('files_sharing', 'Add remote share'));
};
-})();
-$(document).ready(function () {
- // FIXME: HACK: do not init when running unit tests, need a better way
- if (!window.TESTING && OCA.Files) {// only run in the files app
- var params = OC.Util.History.parseUrlQuery();
+ OCA.Sharing.ExternalShareDialogPlugin = {
- //manually add server-to-server share
- if (params.remote && params.token && params.owner && params.name) {
+ filesApp: null,
- var callbackAddShare = function(result, share) {
- var password = share.password || '';
- if (result) {
- //$.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id});
- $.post(OC.generateUrl('apps/files_sharing/external'), {
- remote: share.remote,
- token: share.token,
- owner: share.owner,
- name: share.name,
- password: password}, function(result) {
- if (result.status === 'error') {
- OC.Notification.show(result.data.message);
- } else {
- FileList.reload();
- }
- });
- }
- };
+ attach: function(filesApp) {
+ this.filesApp = filesApp;
+ this.processIncomingShareFromUrl();
+ this.processSharesToConfirm();
+ },
- // clear hash, it is unlikely that it contain any extra parameters
- location.hash = '';
- params.passwordProtected = parseInt(params.protected, 10) === 1;
- OCA.Sharing.showAddExternalDialog(
- params,
- params.passwordProtected,
- callbackAddShare
- );
- }
+ /**
+ * Process incoming remote share that might have been passed
+ * through the URL
+ */
+ processIncomingShareFromUrl: function() {
+ var fileList = this.filesApp.fileList;
+ var params = OC.Util.History.parseUrlQuery();
+ //manually add server-to-server share
+ if (params.remote && params.token && params.owner && params.name) {
- // check for new server-to-server shares which need to be approved
- $.get(OC.generateUrl('/apps/files_sharing/api/externalShares'),
- {},
- function(shares) {
- var index;
- for (index = 0; index < shares.length; ++index) {
- OCA.Sharing.showAddExternalDialog(
- shares[index],
- false,
- function(result, share) {
- if (result) {
- // Accept
- $.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id});
- FileList.reload();
+ var callbackAddShare = function(result, share) {
+ var password = share.password || '';
+ if (result) {
+ //$.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id});
+ $.post(OC.generateUrl('apps/files_sharing/external'), {
+ remote: share.remote,
+ token: share.token,
+ owner: share.owner,
+ name: share.name,
+ password: password}, function(result) {
+ if (result.status === 'error') {
+ OC.Notification.show(result.data.message);
} else {
- // Delete
- $.ajax({
- url: OC.generateUrl('/apps/files_sharing/api/externalShares/'+share.id),
- type: 'DELETE'
- });
+ fileList.reload();
}
- }
+ });
+ }
+ };
+
+ // clear hash, it is unlikely that it contain any extra parameters
+ location.hash = '';
+ params.passwordProtected = parseInt(params.protected, 10) === 1;
+ OCA.Sharing.showAddExternalDialog(
+ params,
+ params.passwordProtected,
+ callbackAddShare
);
}
+ },
- });
+ /**
+ * Retrieve a list of remote shares that need to be approved
+ */
+ processSharesToConfirm: function() {
+ var fileList = this.filesApp.fileList;
+ // check for new server-to-server shares which need to be approved
+ $.get(OC.generateUrl('/apps/files_sharing/api/externalShares'),
+ {},
+ function(shares) {
+ var index;
+ for (index = 0; index < shares.length; ++index) {
+ OCA.Sharing.showAddExternalDialog(
+ shares[index],
+ false,
+ function(result, share) {
+ if (result) {
+ // Accept
+ $.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id});
+ fileList.reload();
+ } else {
+ // Delete
+ $.ajax({
+ url: OC.generateUrl('/apps/files_sharing/api/externalShares/'+share.id),
+ type: 'DELETE'
+ });
+ }
+ }
+ );
+ }
+
+ });
+
+ }
+ };
+})();
- }
+OC.Plugins.register('OCA.Files.App', OCA.Sharing.ExternalShareDialogPlugin);
-});
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index cbd135028f1..bec43a4fb57 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -97,7 +97,17 @@ OCA.Sharing.PublicApp = {
};
var img = $('<img class="publicpreview" alt="">');
- if (previewSupported === 'true' || mimetype.substr(0, mimetype.indexOf('/')) === 'image' && mimetype !== 'image/svg+xml') {
+
+ var fileSize = parseInt($('#filesize').val(), 10);
+ var maxGifSize = parseInt($('#maxSizeAnimateGif').val(), 10);
+
+ if (mimetype === 'image/gif' &&
+ (maxGifSize === -1 || fileSize <= (maxGifSize * 1024 * 1024))) {
+ img.attr('src', $('#downloadURL').val());
+ img.appendTo('#imgframe');
+ } else if (previewSupported === 'true' ||
+ mimetype.substr(0, mimetype.indexOf('/')) === 'image' &&
+ mimetype !== 'image/svg+xml') {
img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
img.appendTo('#imgframe');
} else if (mimetype.substr(0, mimetype.indexOf('/')) !== 'video') {
diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js
index 9341dad30f8..a5f2a0fe7f9 100644
--- a/apps/files_sharing/l10n/it.js
+++ b/apps/files_sharing/l10n/it.js
@@ -5,9 +5,9 @@ OC.L10N.register(
"The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
"Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
"Couldn't add remote share" : "Impossibile aggiungere la condivisione remota",
- "Shared with you" : "Condiviso con te",
- "Shared with others" : "Condiviso con altri",
- "Shared by link" : "Condiviso tramite collegamento",
+ "Shared with you" : "Condivisi con te",
+ "Shared with others" : "Condivisi con altri",
+ "Shared by link" : "Condivisi tramite collegamento",
"Nothing shared with you yet" : "Non è stato condiviso ancora niente con te",
"Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui",
"Nothing shared yet" : "Ancora nessuna condivisione",
diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json
index a1b8410bc9e..0b1702bc368 100644
--- a/apps/files_sharing/l10n/it.json
+++ b/apps/files_sharing/l10n/it.json
@@ -3,9 +3,9 @@
"The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.",
"Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile",
"Couldn't add remote share" : "Impossibile aggiungere la condivisione remota",
- "Shared with you" : "Condiviso con te",
- "Shared with others" : "Condiviso con altri",
- "Shared by link" : "Condiviso tramite collegamento",
+ "Shared with you" : "Condivisi con te",
+ "Shared with others" : "Condivisi con altri",
+ "Shared by link" : "Condivisi tramite collegamento",
"Nothing shared with you yet" : "Non è stato condiviso ancora niente con te",
"Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui",
"Nothing shared yet" : "Ancora nessuna condivisione",
diff --git a/apps/files_sharing/l10n/sk_SK.js b/apps/files_sharing/l10n/sk_SK.js
index b9ed2765bf5..d7df97d53ea 100644
--- a/apps/files_sharing/l10n/sk_SK.js
+++ b/apps/files_sharing/l10n/sk_SK.js
@@ -2,22 +2,39 @@ OC.L10N.register(
"files_sharing",
{
"Server to server sharing is not enabled on this server" : "Zdieľanie server-server nie je na tomto serveri povolené",
+ "The mountpoint name contains invalid characters." : "Názov pripojovacieho bodu obsahuje nepovolené znaky.",
"Invalid or untrusted SSL certificate" : "Neplatný alebo nedôveryhodný certifikát SSL",
"Couldn't add remote share" : "Nemožno pridať vzdialené zdieľanie",
"Shared with you" : "Zdieľané s vami",
"Shared with others" : "Zdieľané s ostanými",
"Shared by link" : "Zdieľané pomocou odkazu",
+ "Nothing shared with you yet" : "Zatiaľ s vami nikto nič nezdieľal.",
+ "Files and folders others share with you will show up here" : "Tu budú zobrazené súbory a priečinky, ktoré s vami zdieľajú ostatní",
+ "Nothing shared yet" : "Zatiaľ nie je nič zdieľané",
+ "Files and folders you share will show up here" : "Súbory a priečinky, ktoré zdieľate, budú zobrazené tu",
+ "No shared links" : "Žiadne zdieľané odkazy",
+ "Files and folders you share by link will show up here" : "Súbory a priečinky, ktoré zdieľate ako odkazy, budú zobrazené tu",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
"Remote share" : "Vzdialené úložisko",
"Remote share password" : "Heslo k vzdialenému úložisku",
"Cancel" : "Zrušiť",
"Add remote share" : "Pridať vzdialené úložisko",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nebola nájdená inštalácia ownCloudu (7 alebo vyššia) {remote}",
"Invalid ownCloud url" : "Chybná ownCloud url",
"Share" : "Zdieľať",
"Shared by" : "Zdieľa",
+ "A file or folder was shared from <strong>another server</strong>" : "Súbor alebo priečinok bol vyzdieľaný z <strong>iného servera</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Verejne zdieľaný súbor alebo priečinok bol <strong>stiahnutý</strong>",
+ "You received a new remote share from %s" : "Dostali ste nové vzdialené zdieľanie z %s",
+ "%1$s accepted remote share %2$s" : "%1$s povolil vzdialené zdieľanie %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmietol vzdialené zdieľanie %2$s",
+ "%1$s unshared %2$s from you" : "%1$s už s vami nezdieľa %2$s",
+ "Public shared folder %1$s was downloaded" : "Verejne zdieľaný priečinok %1$s bol stiahnutý",
+ "Public shared file %1$s was downloaded" : "Verejne zdieľaný súbor %1$s bol stiahnutý",
"This share is password-protected" : "Toto zdieľanie je chránené heslom",
"The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.",
"Password" : "Heslo",
+ "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
"Name" : "Názov",
"Share time" : "Čas zdieľania",
"Sorry, this link doesn’t seem to work anymore." : "To je nepríjemné, ale tento odkaz už nie je funkčný.",
@@ -29,6 +46,9 @@ OC.L10N.register(
"Add to your ownCloud" : "Pridať do svojho ownCloudu",
"Download" : "Sťahovanie",
"Download %s" : "Stiahnuť %s",
- "Direct link" : "Priama linka"
+ "Direct link" : "Priama linka",
+ "Server-to-Server Sharing" : "Zdieľanie medzi servermi",
+ "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohoto servera posielať zdieľania na iné servery",
+ "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_sharing/l10n/sk_SK.json b/apps/files_sharing/l10n/sk_SK.json
index aacd55cc2a5..b88d2cfca15 100644
--- a/apps/files_sharing/l10n/sk_SK.json
+++ b/apps/files_sharing/l10n/sk_SK.json
@@ -1,21 +1,38 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "Zdieľanie server-server nie je na tomto serveri povolené",
+ "The mountpoint name contains invalid characters." : "Názov pripojovacieho bodu obsahuje nepovolené znaky.",
"Invalid or untrusted SSL certificate" : "Neplatný alebo nedôveryhodný certifikát SSL",
"Couldn't add remote share" : "Nemožno pridať vzdialené zdieľanie",
"Shared with you" : "Zdieľané s vami",
"Shared with others" : "Zdieľané s ostanými",
"Shared by link" : "Zdieľané pomocou odkazu",
+ "Nothing shared with you yet" : "Zatiaľ s vami nikto nič nezdieľal.",
+ "Files and folders others share with you will show up here" : "Tu budú zobrazené súbory a priečinky, ktoré s vami zdieľajú ostatní",
+ "Nothing shared yet" : "Zatiaľ nie je nič zdieľané",
+ "Files and folders you share will show up here" : "Súbory a priečinky, ktoré zdieľate, budú zobrazené tu",
+ "No shared links" : "Žiadne zdieľané odkazy",
+ "Files and folders you share by link will show up here" : "Súbory a priečinky, ktoré zdieľate ako odkazy, budú zobrazené tu",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete pridať vzdialené úložisko {name} patriace používateľovi {owner}@{remote}?",
"Remote share" : "Vzdialené úložisko",
"Remote share password" : "Heslo k vzdialenému úložisku",
"Cancel" : "Zrušiť",
"Add remote share" : "Pridať vzdialené úložisko",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nebola nájdená inštalácia ownCloudu (7 alebo vyššia) {remote}",
"Invalid ownCloud url" : "Chybná ownCloud url",
"Share" : "Zdieľať",
"Shared by" : "Zdieľa",
+ "A file or folder was shared from <strong>another server</strong>" : "Súbor alebo priečinok bol vyzdieľaný z <strong>iného servera</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Verejne zdieľaný súbor alebo priečinok bol <strong>stiahnutý</strong>",
+ "You received a new remote share from %s" : "Dostali ste nové vzdialené zdieľanie z %s",
+ "%1$s accepted remote share %2$s" : "%1$s povolil vzdialené zdieľanie %2$s",
+ "%1$s declined remote share %2$s" : "%1$s odmietol vzdialené zdieľanie %2$s",
+ "%1$s unshared %2$s from you" : "%1$s už s vami nezdieľa %2$s",
+ "Public shared folder %1$s was downloaded" : "Verejne zdieľaný priečinok %1$s bol stiahnutý",
+ "Public shared file %1$s was downloaded" : "Verejne zdieľaný súbor %1$s bol stiahnutý",
"This share is password-protected" : "Toto zdieľanie je chránené heslom",
"The password is wrong. Try again." : "Heslo je chybné. Skúste to znova.",
"Password" : "Heslo",
+ "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
"Name" : "Názov",
"Share time" : "Čas zdieľania",
"Sorry, this link doesn’t seem to work anymore." : "To je nepríjemné, ale tento odkaz už nie je funkčný.",
@@ -27,6 +44,9 @@
"Add to your ownCloud" : "Pridať do svojho ownCloudu",
"Download" : "Sťahovanie",
"Download %s" : "Stiahnuť %s",
- "Direct link" : "Priama linka"
+ "Direct link" : "Priama linka",
+ "Server-to-Server Sharing" : "Zdieľanie medzi servermi",
+ "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohoto servera posielať zdieľania na iné servery",
+ "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php
index 69de717611c..1d8eabc1984 100644
--- a/apps/files_sharing/lib/controllers/sharecontroller.php
+++ b/apps/files_sharing/lib/controllers/sharecontroller.php
@@ -176,7 +176,9 @@ class ShareController extends Controller {
$shareTmpl['server2serversharing'] = Helper::isOutgoingServer2serverShareEnabled();
$shareTmpl['protected'] = isset($linkItem['share_with']) ? 'true' : 'false';
$shareTmpl['dir'] = '';
- $shareTmpl['fileSize'] = \OCP\Util::humanFileSize(\OC\Files\Filesystem::filesize($originalSharePath));
+ $nonHumanFileSize = \OC\Files\Filesystem::filesize($originalSharePath);
+ $shareTmpl['nonHumanFileSize'] = $nonHumanFileSize;
+ $shareTmpl['fileSize'] = \OCP\Util::humanFileSize($nonHumanFileSize);
// Show file list
if (Filesystem::is_dir($originalSharePath)) {
@@ -202,6 +204,7 @@ class ShareController extends Controller {
}
$shareTmpl['downloadURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.downloadShare', array('token' => $token));
+ $shareTmpl['maxSizeAnimateGif'] = $this->config->getSystemValue('max_filesize_animated_gifs_public_sharing', 10);
return new TemplateResponse($this->appName, 'public', $shareTmpl, 'base');
}
diff --git a/apps/files_sharing/lib/external/cache.php b/apps/files_sharing/lib/external/cache.php
index cd06bfb1272..2f5f7a59dbd 100644
--- a/apps/files_sharing/lib/external/cache.php
+++ b/apps/files_sharing/lib/external/cache.php
@@ -28,6 +28,9 @@ class Cache extends \OC\Files\Cache\Cache {
public function get($file) {
$result = parent::get($file);
+ if (!$result) {
+ return false;
+ }
$result['displayname_owner'] = $this->remoteUser . '@' . $this->remote;
if (!$file || $file === '') {
$result['is_share_mount_point'] = true;
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 665e47c0fe9..57dc38a9954 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -261,6 +261,33 @@ class Manager {
}
/**
+ * remove all shares for user $uid if the user was deleted
+ *
+ * @param string $uid
+ * @return bool
+ */
+ public function removeUserShares($uid) {
+ $getShare = $this->connection->prepare('
+ SELECT `remote`, `share_token`, `remote_id`
+ FROM `*PREFIX*share_external`
+ WHERE `user` = ?');
+ $result = $getShare->execute(array($uid));
+
+ if ($result) {
+ $shares = $getShare->fetchAll();
+ foreach($shares as $share) {
+ $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $share['remote_id'], 'decline');
+ }
+ }
+
+ $query = $this->connection->prepare('
+ DELETE FROM `*PREFIX*share_external`
+ WHERE `user` = ?
+ ');
+ return (bool)$query->execute(array($uid));
+ }
+
+ /**
* return a list of shares which are not yet accepted by the user
*
* @return array list of open server-to-server shares
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 306a7b8db8a..0d41176e45a 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -103,7 +103,7 @@ class Storage extends DAV implements ISharedStorage {
}
public function getCache($path = '', $storage = null) {
- if (!$storage) {
+ if (is_null($this->cache)) {
$this->cache = new Cache($this, $this->remote, $this->remoteUser);
}
return $this->cache;
diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php
index 001d0387fa4..8fabd8d42d7 100644
--- a/apps/files_sharing/lib/helper.php
+++ b/apps/files_sharing/lib/helper.php
@@ -16,6 +16,8 @@ class Helper {
\OCP\Util::connectHook('OCP\Share', 'post_shared', '\OC\Files\Cache\Shared_Updater', 'postShareHook');
\OCP\Util::connectHook('OCP\Share', 'post_unshare', '\OC\Files\Cache\Shared_Updater', 'postUnshareHook');
\OCP\Util::connectHook('OCP\Share', 'post_unshareFromSelf', '\OC\Files\Cache\Shared_Updater', 'postUnshareFromSelfHook');
+
+ \OCP\Util::connectHook('OC_User', 'post_deleteUser', '\OCA\Files_Sharing\Hooks', 'deleteUser');
}
/**
diff --git a/apps/files_sharing/lib/hooks.php b/apps/files_sharing/lib/hooks.php
new file mode 100644
index 00000000000..6f23c103b1d
--- /dev/null
+++ b/apps/files_sharing/lib/hooks.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2015 ownCloud, Inc.
+ *
+ * @author Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library 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 library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OCA\Files_Sharing;
+
+class Hooks {
+
+ public static function deleteUser($params) {
+ $manager = new External\Manager(
+ \OC::$server->getDatabaseConnection(),
+ \OC\Files\Filesystem::getMountManager(),
+ \OC\Files\Filesystem::getLoader(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getHTTPHelper());
+
+ $manager->removeUserShares($params['uid']);
+ }
+
+}
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 0384d9a60aa..4ec4d264b31 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -40,6 +40,8 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
<input type="hidden" name="mimetype" value="<?php p($_['mimetype']) ?>" id="mimetype">
<input type="hidden" name="previewSupported" value="<?php p($previewSupported); ?>" id="previewSupported">
<input type="hidden" name="mimetypeIcon" value="<?php p(OC_Helper::mimetypeIcon($_['mimetype'])); ?>" id="mimetypeIcon">
+<input type="hidden" name="filesize" value="<?php p($_['nonHumanFileSize']); ?>" id="filesize">
+<input type="hidden" name="maxSizeAnimateGif" value="<?php p($_['maxSizeAnimateGif']); ?>" id="maxSizeAnimateGif">
<header><div id="header" class="<?php p((isset($_['folder']) ? 'share-folder' : 'share-file')) ?>">
diff --git a/apps/files_sharing/tests/controller/sharecontroller.php b/apps/files_sharing/tests/controller/sharecontroller.php
index f13e5b2e497..931cd506d43 100644
--- a/apps/files_sharing/tests/controller/sharecontroller.php
+++ b/apps/files_sharing/tests/controller/sharecontroller.php
@@ -155,7 +155,9 @@ class ShareControllerTest extends \PHPUnit_Framework_TestCase {
'protected' => 'true',
'dir' => '',
'downloadURL' => null,
- 'fileSize' => '33 B'
+ 'fileSize' => '33 B',
+ 'nonHumanFileSize' => 33,
+ 'maxSizeAnimateGif' => 10,
);
$expectedResponse = new TemplateResponse($this->container['AppName'], 'public', $sharedTmplParams, 'base');
$this->assertEquals($expectedResponse, $response);
diff --git a/apps/files_sharing/tests/external/cache.php b/apps/files_sharing/tests/external/cache.php
new file mode 100644
index 00000000000..33f59cf70f1
--- /dev/null
+++ b/apps/files_sharing/tests/external/cache.php
@@ -0,0 +1,114 @@
+<?php
+namespace OCA\Files_sharing\Tests\External;
+
+use OCA\Files_sharing\Tests\TestCase;
+
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library 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 library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+class Cache extends TestCase {
+
+ /**
+ * @var \OC\Files\Storage\Storage
+ **/
+ private $storage;
+
+ /**
+ * @var \OCA\Files_Sharing\External\Cache
+ */
+ private $cache;
+
+ /**
+ * @var string
+ */
+ private $remoteUser;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->remoteUser = $this->getUniqueID('remoteuser');
+
+ $this->storage = $this->getMockBuilder('\OCA\Files_Sharing\External\Storage')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->storage
+ ->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue('dummystorage::'));
+ $this->cache = new \OCA\Files_Sharing\External\Cache(
+ $this->storage,
+ 'http://example.com/owncloud',
+ $this->remoteUser
+ );
+ $this->cache->put(
+ 'test.txt',
+ array(
+ 'mimetype' => 'text/plain',
+ 'size' => 5,
+ 'mtime' => 123,
+ )
+ );
+ }
+
+ protected function tearDown() {
+ $this->cache->clear();
+ parent::tearDown();
+ }
+
+ public function testGetInjectsOwnerDisplayName() {
+ $info = $this->cache->get('test.txt');
+ $this->assertEquals(
+ $this->remoteUser . '@example.com/owncloud',
+ $info['displayname_owner']
+ );
+ }
+
+ public function testGetReturnsFalseIfNotFound() {
+ $info = $this->cache->get('unexisting-entry.txt');
+ $this->assertFalse($info);
+ }
+
+ public function testGetFolderPopulatesOwner() {
+ $dirId = $this->cache->put(
+ 'subdir',
+ array(
+ 'mimetype' => 'httpd/unix-directory',
+ 'size' => 5,
+ 'mtime' => 123,
+ )
+ );
+ $this->cache->put(
+ 'subdir/contents.txt',
+ array(
+ 'mimetype' => 'text/plain',
+ 'size' => 5,
+ 'mtime' => 123,
+ )
+ );
+
+ $results = $this->cache->getFolderContentsById($dirId);
+ $this->assertEquals(1, count($results));
+ $this->assertEquals(
+ $this->remoteUser . '@example.com/owncloud',
+ $results[0]['displayname_owner']
+ );
+ }
+
+}
diff --git a/apps/files_sharing/tests/js/externalSpec.js b/apps/files_sharing/tests/js/externalSpec.js
new file mode 100644
index 00000000000..2f8f4508d46
--- /dev/null
+++ b/apps/files_sharing/tests/js/externalSpec.js
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+describe('OCA.Sharing external tests', function() {
+ var plugin;
+ var urlQueryStub;
+ var promptDialogStub;
+ var confirmDialogStub;
+
+ function dummyShowDialog() {
+ var deferred = $.Deferred();
+ deferred.resolve();
+ return deferred.promise();
+ }
+
+ beforeEach(function() {
+ plugin = OCA.Sharing.ExternalShareDialogPlugin;
+ urlQueryStub = sinon.stub(OC.Util.History, 'parseUrlQuery');
+
+ confirmDialogStub = sinon.stub(OC.dialogs, 'confirm', dummyShowDialog);
+ promptDialogStub = sinon.stub(OC.dialogs, 'prompt', dummyShowDialog);
+
+ plugin.filesApp = {
+ fileList: {
+ reload: sinon.stub()
+ }
+ }
+ });
+ afterEach(function() {
+ urlQueryStub.restore();
+ confirmDialogStub.restore();
+ promptDialogStub.restore();
+ plugin = null;
+ });
+ describe('confirmation dialog from URL', function() {
+ var testShare;
+
+ /**
+ * Checks that the server call's query matches what is
+ * expected.
+ *
+ * @param {Object} expectedQuery expected query params
+ */
+ function checkRequest(expectedQuery) {
+ var request = fakeServer.requests[0];
+ var query = OC.parseQueryString(request.requestBody);
+ expect(request.method).toEqual('POST');
+ expect(query).toEqual(expectedQuery);
+
+ request.respond(
+ 200,
+ {'Content-Type': 'application/json'},
+ JSON.stringify({status: 'success'})
+ );
+ expect(plugin.filesApp.fileList.reload.calledOnce).toEqual(true);
+ }
+
+ beforeEach(function() {
+ testShare = {
+ remote: 'http://example.com/owncloud',
+ token: 'abcdefg',
+ owner: 'theowner',
+ name: 'the share name'
+ };
+ });
+ it('does nothing when no share was passed in URL', function() {
+ urlQueryStub.returns({});
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.notCalled).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ it('sends share info to server on confirm', function() {
+ urlQueryStub.returns(testShare);
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.calledOnce).toEqual(true);
+ confirmDialogStub.getCall(0).args[2](true);
+ expect(fakeServer.requests.length).toEqual(1);
+ checkRequest({
+ remote: 'http://example.com/owncloud',
+ token: 'abcdefg',
+ owner: 'theowner',
+ name: 'the share name',
+ password: ''
+ });
+ });
+ it('sends share info with password to server on confirm', function() {
+ testShare = _.extend(testShare, {protected: 1});
+ urlQueryStub.returns(testShare);
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.calledOnce).toEqual(true);
+ expect(confirmDialogStub.notCalled).toEqual(true);
+ promptDialogStub.getCall(0).args[2](true, 'thepassword');
+ expect(fakeServer.requests.length).toEqual(1);
+ checkRequest({
+ remote: 'http://example.com/owncloud',
+ token: 'abcdefg',
+ owner: 'theowner',
+ name: 'the share name',
+ password: 'thepassword'
+ });
+ });
+ it('does not send share info on cancel', function() {
+ urlQueryStub.returns(testShare);
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.calledOnce).toEqual(true);
+ confirmDialogStub.getCall(0).args[2](false);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ });
+ describe('show dialog for each share to confirm', function() {
+ // TODO test plugin.processSharesToConfirm()
+ });
+});
diff --git a/apps/files_sharing/tests/server2server.php b/apps/files_sharing/tests/server2server.php
index 0400d357b82..2d59f7be9cd 100644
--- a/apps/files_sharing/tests/server2server.php
+++ b/apps/files_sharing/tests/server2server.php
@@ -30,6 +30,14 @@ class Test_Files_Sharing_S2S_OCS_API extends TestCase {
const TEST_FOLDER_NAME = '/folder_share_api_test';
+ /**
+ * @var \OCP\IDBConnection
+ */
+ private $connection;
+
+ /**
+ * @var \OCA\Files_Sharing\API\Server2Server
+ */
private $s2s;
protected function setUp() {
@@ -49,6 +57,8 @@ class Test_Files_Sharing_S2S_OCS_API extends TestCase {
$this->registerHttpHelper($httpHelperMock);
$this->s2s = new \OCA\Files_Sharing\API\Server2Server();
+
+ $this->connection = \OC::$server->getDatabaseConnection();
}
protected function tearDown() {
@@ -132,4 +142,70 @@ class Test_Files_Sharing_S2S_OCS_API extends TestCase {
$data = $result->fetchAll();
$this->assertEmpty($data);
}
+
+ /**
+ * @dataProvider dataTestDeleteUser
+ */
+ function testDeleteUser($toDelete, $expected, $remainingUsers) {
+ $this->createDummyS2SShares();
+
+ $manager = new OCA\Files_Sharing\External\Manager(
+ \OC::$server->getDatabaseConnection(),
+ \OC\Files\Filesystem::getMountManager(),
+ \OC\Files\Filesystem::getLoader(),
+ \OC::$server->getUserSession(),
+ \OC::$server->getHTTPHelper());
+
+ $manager->removeUserShares($toDelete);
+
+ $query = $this->connection->prepare('SELECT `user` FROM `*PREFIX*share_external`');
+ $query->execute();
+ $result = $query->fetchAll();
+
+ foreach ($result as $r) {
+ $remainingShares[$r['user']] = isset($remainingShares[$r['user']]) ? $remainingShares[$r['user']] + 1 : 1;
+ }
+
+ $this->assertSame($remainingUsers, count($remainingShares));
+
+ foreach ($expected as $key => $value) {
+ if ($key === $toDelete) {
+ $this->assertArrayNotHasKey($key, $remainingShares);
+ } else {
+ $this->assertSame($value, $remainingShares[$key]);
+ }
+ }
+
+ }
+
+ function dataTestDeleteUser() {
+ return array(
+ array('user1', array('user1' => 0, 'user2' => 3, 'user3' => 3), 2),
+ array('user2', array('user1' => 4, 'user2' => 0, 'user3' => 3), 2),
+ array('user3', array('user1' => 4, 'user2' => 3, 'user3' => 0), 2),
+ array('user4', array('user1' => 4, 'user2' => 3, 'user3' => 3), 3),
+ );
+ }
+
+ private function createDummyS2SShares() {
+ $query = $this->connection->prepare('
+ INSERT INTO `*PREFIX*share_external`
+ (`remote`, `share_token`, `password`, `name`, `owner`, `user`, `mountpoint`, `mountpoint_hash`, `remote_id`, `accepted`)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ ');
+
+ $users = array('user1', 'user2', 'user3');
+
+ for ($i = 0; $i < 10; $i++) {
+ $user = $users[$i%3];
+ $query->execute(array('remote', 'token', 'password', 'name', 'owner', $user, 'mount point', $i, $i, 0));
+ }
+
+ $query = $this->connection->prepare('SELECT `id` FROM `*PREFIX*share_external`');
+ $query->execute();
+ $dummyEntries = $query->fetchAll();
+
+ $this->assertSame(10, count($dummyEntries));
+ }
+
}
diff --git a/apps/files_trashbin/l10n/sk_SK.js b/apps/files_trashbin/l10n/sk_SK.js
index 4cca753fc79..2ab3d37de34 100644
--- a/apps/files_trashbin/l10n/sk_SK.js
+++ b/apps/files_trashbin/l10n/sk_SK.js
@@ -8,6 +8,8 @@ OC.L10N.register(
"Delete permanently" : "Zmazať trvalo",
"Error" : "Chyba",
"restored" : "obnovené",
+ "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
+ "Select all" : "Vybrať všetko",
"Name" : "Názov",
"Deleted" : "Zmazané",
"Delete" : "Zmazať"
diff --git a/apps/files_trashbin/l10n/sk_SK.json b/apps/files_trashbin/l10n/sk_SK.json
index a014537a968..6366b7e4c78 100644
--- a/apps/files_trashbin/l10n/sk_SK.json
+++ b/apps/files_trashbin/l10n/sk_SK.json
@@ -6,6 +6,8 @@
"Delete permanently" : "Zmazať trvalo",
"Error" : "Chyba",
"restored" : "obnovené",
+ "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené",
+ "Select all" : "Vybrať všetko",
"Name" : "Názov",
"Deleted" : "Zmazané",
"Delete" : "Zmazať"
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index 2e9e7501ced..4424ef2bba8 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -100,13 +100,13 @@ OC.L10N.register(
"The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"Base User Tree" : "DN racine de l'arbre utilisateurs",
"One User Base DN per line" : "Un DN racine utilisateur par ligne",
- "User Search Attributes" : "Recherche des attributs utilisateur",
+ "User Search Attributes" : "Attributs de recherche utilisateurs",
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
"The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
- "Base Group Tree" : "DN racine de l'arbre groupes",
+ "Base Group Tree" : "Base Group Tree",
"One Group Base DN per line" : "Un DN racine groupe par ligne",
- "Group Search Attributes" : "Recherche des attributs du groupe",
+ "Group Search Attributes" : "Attributs de recherche des groupes",
"Group-Member association" : "Association groupe-membre",
"Nested Groups" : "Groupes imbriqués",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DNs).",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index ce24bbdeeae..5494a072fee 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -98,13 +98,13 @@
"The LDAP attribute to use to generate the user's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage de l'utilisateur.",
"Base User Tree" : "DN racine de l'arbre utilisateurs",
"One User Base DN per line" : "Un DN racine utilisateur par ligne",
- "User Search Attributes" : "Recherche des attributs utilisateur",
+ "User Search Attributes" : "Attributs de recherche utilisateurs",
"Optional; one attribute per line" : "Optionnel, un attribut par ligne",
"Group Display Name Field" : "Champ \"nom d'affichage\" du groupe",
"The LDAP attribute to use to generate the groups's display name." : "L'attribut LDAP utilisé pour générer le nom d'affichage du groupe.",
- "Base Group Tree" : "DN racine de l'arbre groupes",
+ "Base Group Tree" : "Base Group Tree",
"One Group Base DN per line" : "Un DN racine groupe par ligne",
- "Group Search Attributes" : "Recherche des attributs du groupe",
+ "Group Search Attributes" : "Attributs de recherche des groupes",
"Group-Member association" : "Association groupe-membre",
"Nested Groups" : "Groupes imbriqués",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Si activé, les groupes contenant d'autres groupes sont pris en charge (fonctionne uniquement si l'attribut membre du groupe contient des DNs).",
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 0fb968cebe7..b6394823947 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -152,7 +152,7 @@ class Access extends LDAPUtility implements user\IUserTools {
$pagingSize = intval($this->connection->ldapPagingSize);
// 0 won't result in replies, small numbers may leave out groups
// (cf. #12306), 500 is default for paging and should work everywhere.
- $maxResults = $pagingSize < 20 ? $pagingSize : 500;
+ $maxResults = $pagingSize > 20 ? $pagingSize : 500;
$this->initPagedSearch($filter, array($dn), array($attr), $maxResults, 0);
$dn = $this->DNasBaseParameter($dn);
$rr = @$this->ldap->read($cr, $dn, $filter, array($attr));
diff --git a/config/config.sample.php b/config/config.sample.php
index 98da8aed356..ae22f3b1355 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -944,6 +944,16 @@ $CONFIG = array(
'forwarded_for_headers' => array('HTTP_X_FORWARDED', 'HTTP_FORWARDED_FOR'),
/**
+ * max file size for animating gifs on public-sharing-site.
+ * If the gif is bigger, it'll show a static preview
+ *
+ * Value represents the maximum filesize in megabytes
+ * Default is 10
+ * Set to -1 for no limit
+ */
+'max_filesize_animated_gifs_public_sharing' => 10,
+
+/**
* This entry is just here to show a warning in case somebody copied the sample
* configuration. DO NOT ADD THIS SWITCH TO YOUR CONFIGURATION!
*
diff --git a/core/ajax/share.php b/core/ajax/share.php
index 1a2faa75dac..6d0a6a4e3b9 100644
--- a/core/ajax/share.php
+++ b/core/ajax/share.php
@@ -236,23 +236,6 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo
if (isset($_GET['search'])) {
$shareWithinGroupOnly = OC\Share\Share::shareWithGroupMembersOnly();
$shareWith = array();
-// if (OC_App::isEnabled('contacts')) {
-// // TODO Add function to contacts to only get the 'fullname' column to improve performance
-// $ids = OC_Contacts_Addressbook::activeIds();
-// foreach ($ids as $id) {
-// $vcards = OC_Contacts_VCard::all($id);
-// foreach ($vcards as $vcard) {
-// $contact = $vcard['fullname'];
-// if (stripos($contact, $_GET['search']) !== false
-// && (!isset($_GET['itemShares'])
-// || !isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_CONTACT])
-// || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_CONTACT])
-// || !in_array($contact, $_GET['itemShares'][OCP\Share::SHARE_TYPE_CONTACT]))) {
-// $shareWith[] = array('label' => $contact, 'value' => array('shareType' => 5, 'shareWith' => $vcard['id']));
-// }
-// }
-// }
-// }
$groups = OC_Group::getGroups($_GET['search']);
if ($shareWithinGroupOnly) {
$usergroups = OC_Group::getUserGroups(OC_User::getUser());
diff --git a/core/l10n/es.js b/core/l10n/es.js
index ca30043774e..b0f96a4079b 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -37,7 +37,7 @@ OC.L10N.register(
"Saving..." : "Guardando...",
"Couldn't send reset email. Please contact your administrator." : "No pudo enviarse un correo de reinicio. Por favor, contacte con su administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un enlace para reiniciar su contraseña ha sido enviado a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta para spam/chatarra.<br>Si no lo encuentra, pregunte a su administrador local.",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no has activado la clave de recuperación, no habrá manera de recuperar los datos despues de que tu contraseña seá restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte a su administrador antes de continuar.<br />¿Realmente desea continuar?",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos despues de que su contraseña será restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"I know what I'm doing" : "Sé lo que estoy haciendo",
"Password can not be changed. Please contact your administrator." : "La contraseña no se puede cambiar. Por favor, contacte a su administrador.",
"No" : "No",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index 28e19336e44..3a10f78238b 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -35,7 +35,7 @@
"Saving..." : "Guardando...",
"Couldn't send reset email. Please contact your administrator." : "No pudo enviarse un correo de reinicio. Por favor, contacte con su administrador.",
"The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un enlace para reiniciar su contraseña ha sido enviado a su correo electrónico. Si usted no lo recibe en un tiempo razonable, revise su carpeta para spam/chatarra.<br>Si no lo encuentra, pregunte a su administrador local.",
- "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no has activado la clave de recuperación, no habrá manera de recuperar los datos despues de que tu contraseña seá restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte a su administrador antes de continuar.<br />¿Realmente desea continuar?",
+ "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Sus archivos están cifrados. Si no ha activado la clave de recuperación, no habrá manera de recuperar los datos despues de que su contraseña será restablecida.<br /> Si no está seguro de lo que debe hacer, por favor contacte con su administrador antes de continuar.<br />¿Realmente desea continuar?",
"I know what I'm doing" : "Sé lo que estoy haciendo",
"Password can not be changed. Please contact your administrator." : "La contraseña no se puede cambiar. Por favor, contacte a su administrador.",
"No" : "No",
diff --git a/core/l10n/hi.js b/core/l10n/hi.js
index cb1438cb389..bc4eba4e83e 100644
--- a/core/l10n/hi.js
+++ b/core/l10n/hi.js
@@ -21,6 +21,7 @@ OC.L10N.register(
"November" : "नवंबर",
"December" : "दिसम्बर",
"Settings" : "सेटिंग्स",
+ "Saving..." : "सहेज रहे हैं...",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
"Cancel" : "रद्द करें ",
"Share" : "साझा करें",
diff --git a/core/l10n/hi.json b/core/l10n/hi.json
index 89377becb8a..80926b9b190 100644
--- a/core/l10n/hi.json
+++ b/core/l10n/hi.json
@@ -19,6 +19,7 @@
"November" : "नवंबर",
"December" : "दिसम्बर",
"Settings" : "सेटिंग्स",
+ "Saving..." : "सहेज रहे हैं...",
"_{count} file conflict_::_{count} file conflicts_" : ["",""],
"Cancel" : "रद्द करें ",
"Share" : "साझा करें",
diff --git a/core/l10n/it.js b/core/l10n/it.js
index dadba893113..b526cef0c3d 100644
--- a/core/l10n/it.js
+++ b/core/l10n/it.js
@@ -67,7 +67,7 @@ OC.L10N.register(
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
- "Shared" : "Condivisi",
+ "Shared" : "Condiviso",
"Shared with {recipients}" : "Condiviso con {recipients}",
"Share" : "Condividi",
"Error" : "Errore",
@@ -190,7 +190,7 @@ OC.L10N.register(
"Database tablespace" : "Spazio delle tabelle del database",
"Database host" : "Host del database",
"SQLite will be used as database. For larger installations we recommend to change this." : "SQLite sarà utilizzato come database. Per installazioni più grandi consigliamo di cambiarlo.",
- "Finish setup" : "Termina la configurazione",
+ "Finish setup" : "Termina configurazione",
"Finishing …" : "Completamento...",
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Abilita JavaScript</a> e ricarica questa pagina.",
"%s is available. Get more information on how to update." : "%s è disponibile. Ottieni ulteriori informazioni sull'aggiornamento.",
diff --git a/core/l10n/it.json b/core/l10n/it.json
index 65d9e5b169b..fd54b18891b 100644
--- a/core/l10n/it.json
+++ b/core/l10n/it.json
@@ -65,7 +65,7 @@
"This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.",
"Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o spostare la cartella fuori dalla radice del server web.",
"Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server",
- "Shared" : "Condivisi",
+ "Shared" : "Condiviso",
"Shared with {recipients}" : "Condiviso con {recipients}",
"Share" : "Condividi",
"Error" : "Errore",
@@ -188,7 +188,7 @@
"Database tablespace" : "Spazio delle tabelle del database",
"Database host" : "Host del database",
"SQLite will be used as database. For larger installations we recommend to change this." : "SQLite sarà utilizzato come database. Per installazioni più grandi consigliamo di cambiarlo.",
- "Finish setup" : "Termina la configurazione",
+ "Finish setup" : "Termina configurazione",
"Finishing …" : "Completamento...",
"This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. <a href=\"http://enable-javascript.com/\" target=\"_blank\">Abilita JavaScript</a> e ricarica questa pagina.",
"%s is available. Get more information on how to update." : "%s è disponibile. Ottieni ulteriori informazioni sull'aggiornamento.",
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 24aac44d42d..1a4ea3c1310 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -94,13 +94,13 @@ OC.L10N.register(
"Setting permissions for %s failed, because the item was not found" : "Le réglage des permissions pour %s a échoué car l'objet n'a pas été trouvé",
"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Impossible de configurer la date d'expiration. Un partage ne peut expirer plus de %s après sa création",
"Cannot set expiration date. Expiration date is in the past" : "Impossible de configurer la date d'expiration. La date d'expiration est dans le passé.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "L'emplacement du partage %s doit implémenter l'interface OCP\\Share_Backend",
- "Sharing backend %s not found" : "Emplacement de partage %s introuvable",
- "Sharing backend for %s not found" : "L'emplacement du partage %s est introuvable",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Le service de partage %s doit implémenter l'interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Service de partage %s non trouvé",
+ "Sharing backend for %s not found" : "Le service de partage pour %s est introuvable",
"Sharing %s failed, because the user %s is the original sharer" : "Le partage de %s a échoué car l'utilisateur %s est l'utilisateur à l'origine du partage.",
"Sharing %s failed, because the permissions exceed permissions granted to %s" : "Le partage de %s a échoué car les permissions dépassent les permissions accordées à %s",
"Sharing %s failed, because resharing is not allowed" : "Le partage de %s a échoué car le repartage n'est pas autorisé",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Le partage %s a échoué parce que la source n'a été trouvée pour le partage %s.",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Le partage de %s a échoué parce que la source n'a été trouvée pour le partage %s.",
"Sharing %s failed, because the file could not be found in the file cache" : "Le partage de %s a échoué car le fichier n'a pas été trouvé dans les fichiers mis en cache.",
"Could not find category \"%s\"" : "Impossible de trouver la catégorie \"%s\"",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Seuls les caractères suivants sont autorisés dans un nom d'utilisateur : \"a-z\", \"A-Z\", \"0-9\", et \"_.@-\"",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 527b58b909d..6370bad1253 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -92,13 +92,13 @@
"Setting permissions for %s failed, because the item was not found" : "Le réglage des permissions pour %s a échoué car l'objet n'a pas été trouvé",
"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Impossible de configurer la date d'expiration. Un partage ne peut expirer plus de %s après sa création",
"Cannot set expiration date. Expiration date is in the past" : "Impossible de configurer la date d'expiration. La date d'expiration est dans le passé.",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "L'emplacement du partage %s doit implémenter l'interface OCP\\Share_Backend",
- "Sharing backend %s not found" : "Emplacement de partage %s introuvable",
- "Sharing backend for %s not found" : "L'emplacement du partage %s est introuvable",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Le service de partage %s doit implémenter l'interface OCP\\Share_Backend",
+ "Sharing backend %s not found" : "Service de partage %s non trouvé",
+ "Sharing backend for %s not found" : "Le service de partage pour %s est introuvable",
"Sharing %s failed, because the user %s is the original sharer" : "Le partage de %s a échoué car l'utilisateur %s est l'utilisateur à l'origine du partage.",
"Sharing %s failed, because the permissions exceed permissions granted to %s" : "Le partage de %s a échoué car les permissions dépassent les permissions accordées à %s",
"Sharing %s failed, because resharing is not allowed" : "Le partage de %s a échoué car le repartage n'est pas autorisé",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Le partage %s a échoué parce que la source n'a été trouvée pour le partage %s.",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Le partage de %s a échoué parce que la source n'a été trouvée pour le partage %s.",
"Sharing %s failed, because the file could not be found in the file cache" : "Le partage de %s a échoué car le fichier n'a pas été trouvé dans les fichiers mis en cache.",
"Could not find category \"%s\"" : "Impossible de trouver la catégorie \"%s\"",
"Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Seuls les caractères suivants sont autorisés dans un nom d'utilisateur : \"a-z\", \"A-Z\", \"0-9\", et \"_.@-\"",
diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js
index 1a4ad8c6293..a848a084bf8 100644
--- a/lib/l10n/sk_SK.js
+++ b/lib/l10n/sk_SK.js
@@ -8,6 +8,7 @@ OC.L10N.register(
"Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
"PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
+ "PHP with a version lower than %s is required." : "PHP je vyžadované vo vyššej verzii ako %s.",
"Help" : "Pomoc",
"Personal" : "Osobné",
"Settings" : "Nastavenia",
@@ -20,11 +21,11 @@ OC.L10N.register(
"Invalid image" : "Chybný obrázok",
"today" : "dnes",
"yesterday" : "včera",
- "_%n day ago_::_%n days ago_" : ["","",""],
+ "_%n day ago_::_%n days ago_" : ["včera","pred %n dňami","pred %n dňami"],
"last month" : "minulý mesiac",
"_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
"last year" : "minulý rok",
- "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n year ago_::_%n years ago_" : ["vlani","pred %n rokmi","pred %n rokmi"],
"_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
"seconds ago" : "pred sekundami",
diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json
index 3d7fb6e7c83..a844bd0b973 100644
--- a/lib/l10n/sk_SK.json
+++ b/lib/l10n/sk_SK.json
@@ -6,6 +6,7 @@
"Sample configuration detected" : "Detekovaná bola vzorová konfigurácia",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Zistilo sa, že konfigurácia bola skopírovaná zo vzorových súborov. Takáto konfigurácia nie je podporovaná a môže poškodiť vašu inštaláciu. Prečítajte si dokumentáciu pred vykonaním zmien v config.php",
"PHP %s or higher is required." : "Požadovaná verzia PHP %s alebo vyššia.",
+ "PHP with a version lower than %s is required." : "PHP je vyžadované vo vyššej verzii ako %s.",
"Help" : "Pomoc",
"Personal" : "Osobné",
"Settings" : "Nastavenia",
@@ -18,11 +19,11 @@
"Invalid image" : "Chybný obrázok",
"today" : "dnes",
"yesterday" : "včera",
- "_%n day ago_::_%n days ago_" : ["","",""],
+ "_%n day ago_::_%n days ago_" : ["včera","pred %n dňami","pred %n dňami"],
"last month" : "minulý mesiac",
"_%n month ago_::_%n months ago_" : ["pred %n mesiacom","pred %n mesiacmi","pred %n mesiacmi"],
"last year" : "minulý rok",
- "_%n year ago_::_%n years ago_" : ["","",""],
+ "_%n year ago_::_%n years ago_" : ["vlani","pred %n rokmi","pred %n rokmi"],
"_%n hour ago_::_%n hours ago_" : ["pred %n hodinou","pred %n hodinami","pred %n hodinami"],
"_%n minute ago_::_%n minutes ago_" : ["pred %n minútou","pred %n minútami","pred %n minútami"],
"seconds ago" : "pred sekundami",
diff --git a/lib/private/connector/sabre/auth.php b/lib/private/connector/sabre/auth.php
index f40706b73e3..533d250d68e 100644
--- a/lib/private/connector/sabre/auth.php
+++ b/lib/private/connector/sabre/auth.php
@@ -101,7 +101,6 @@ class OC_Connector_Sabre_Auth extends \Sabre\DAV\Auth\Backend\AbstractBasic {
public function authenticate(\Sabre\DAV\Server $server, $realm) {
$result = $this->auth($server, $realm);
-
return $result;
}
@@ -111,10 +110,13 @@ class OC_Connector_Sabre_Auth extends \Sabre\DAV\Auth\Backend\AbstractBasic {
* @return bool
*/
private function auth(\Sabre\DAV\Server $server, $realm) {
- if (OC_User::handleApacheAuth()) {
+ if (OC_User::handleApacheAuth() ||
+ (OC_User::isLoggedIn() && is_null(\OC::$server->getSession()->get(self::DAV_AUTHENTICATED)))
+ ) {
$user = OC_User::getUser();
OC_Util::setupFS($user);
$this->currentUser = $user;
+ \OC::$server->getSession()->close();
return true;
}
diff --git a/lib/private/mail.php b/lib/private/mail.php
index 691ae1dd33f..8ba7343e011 100644
--- a/lib/private/mail.php
+++ b/lib/private/mail.php
@@ -61,6 +61,7 @@ class OC_Mail {
$mailo->Port = $SMTPPORT;
$mailo->SMTPAuth = $SMTPAUTH;
$mailo->SMTPDebug = $SMTPDEBUG;
+ $mailo->Debugoutput = 'error_log';
$mailo->SMTPSecure = $SMTPSECURE;
$mailo->AuthType = $SMTPAUTHTYPE;
$mailo->Username = $SMTPUSERNAME;
diff --git a/lib/private/memcache/redis.php b/lib/private/memcache/redis.php
index f21619887d0..78ddd081338 100644
--- a/lib/private/memcache/redis.php
+++ b/lib/private/memcache/redis.php
@@ -49,18 +49,18 @@ class Redis extends Cache {
public function get($key) {
$result = self::$cache->get($this->getNamespace() . $key);
- if ($result === false and ! self::$cache->exists($this->getNamespace() . $key)) {
+ if ($result === false && !self::$cache->exists($this->getNamespace() . $key)) {
return null;
} else {
- return $result;
+ return json_decode($result, true);
}
}
public function set($key, $value, $ttl = 0) {
if ($ttl > 0) {
- return self::$cache->setex($this->getNamespace() . $key, $ttl, $value);
+ return self::$cache->setex($this->getNamespace() . $key, $ttl, json_encode($value));
} else {
- return self::$cache->set($this->getNamespace() . $key, $value);
+ return self::$cache->set($this->getNamespace() . $key, json_encode($value));
}
}
diff --git a/lib/private/request.php b/lib/private/request.php
index 3c33dfc340a..3bf7d94d9cf 100644
--- a/lib/private/request.php
+++ b/lib/private/request.php
@@ -278,6 +278,8 @@ class OC_Request {
$requestUri = '/' . ltrim($requestUri, '/');
}
+ $requestUri = preg_replace('%/{2,}%', '/', $requestUri);
+
// Remove the query string from REQUEST_URI
if ($pos = strpos($requestUri, '?')) {
$requestUri = substr($requestUri, 0, $pos);
diff --git a/lib/private/user.php b/lib/private/user.php
index d66354b247d..d1fedffcaaf 100644
--- a/lib/private/user.php
+++ b/lib/private/user.php
@@ -320,7 +320,7 @@ class OC_User {
* Tries to login the user with HTTP Basic Authentication
*/
public static function tryBasicAuthLogin() {
- if(!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_USER'])) {
+ if(!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) {
\OC_User::login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
}
}
diff --git a/settings/admin.php b/settings/admin.php
index 01cab1fa1f4..bb20c665f56 100644
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -81,6 +81,8 @@ $template->assign('onlyShareWithGroupMembers', \OC\Share\Share::shareWithGroupMe
$databaseOverload = (strpos(\OCP\Config::getSystemValue('dbtype'), 'sqlite') !== false);
$template->assign('databaseOverload', $databaseOverload);
+// warn if Windows is used
+$template->assign('WindowsWarning', OC_Util::runningOnWindows());
// add hardcoded forms from the template
$forms = OC_App::getForms('admin');
diff --git a/settings/css/settings.css b/settings/css/settings.css
index 9a4e54971c5..55367e716c2 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -228,7 +228,10 @@ span.version { margin-left:1em; margin-right:1em; color:#555; }
/* LOG */
-#log { white-space:normal; }
+#log {
+ white-space:normal;
+ margin-bottom: 14px;
+}
#lessLog { display:none; }
table.grid td.date{
white-space: nowrap;
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index 87d8b1801c1..f21c660b41f 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -773,7 +773,6 @@ $(document).ready(function () {
return false;
}
var groups = $('#newusergroups').val() || [];
- $('#newuser').get(0).reset();
$.post(
OC.generateUrl('/settings/users/users'),
{
@@ -801,6 +800,8 @@ $(document).ready(function () {
GroupList.incEveryoneCount();
}).fail(function(result, textStatus, errorThrown) {
OC.dialogs.alert(result.responseJSON.message, t('settings', 'Error creating user'));
+ }).success(function(){
+ $('#newuser').get(0).reset();
});
});
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 881ffde6035..72f7126a2e4 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -118,7 +118,7 @@ OC.L10N.register(
"Module 'fileinfo' missing" : "Module 'fileinfo' manquant",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats pour la détection des types de fichiers.",
"PHP charset is not set to UTF-8" : "Le jeu de caractères PHP n'est pas réglé sur UTF-8",
- "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractère non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractères non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
"Locale not working" : "Localisation non fonctionnelle",
"System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec prise en charge d'UTF-8.",
"This means that there might be problems with certain characters in file names." : "Cela signifie qu'il pourrait y avoir des problèmes avec certains caractères dans les noms de fichier.",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 06e82e1875f..70317116bb6 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -116,7 +116,7 @@
"Module 'fileinfo' missing" : "Module 'fileinfo' manquant",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats pour la détection des types de fichiers.",
"PHP charset is not set to UTF-8" : "Le jeu de caractères PHP n'est pas réglé sur UTF-8",
- "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractère non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
+ "PHP charset is not set to UTF-8. This can cause major issues with non-ASCII characters in file names. We highly recommend to change the value of 'default_charset' php.ini to 'UTF-8'." : "Le jeu de caractères PHP n'est pas réglé sur UTF-8. Ceci peut entraîner des problèmes majeurs avec les noms de fichiers contenant des caractères non-ASCII. Nous recommandons fortement de changer la valeur de 'default_charset' dans php.ini par 'UTF-8'.",
"Locale not working" : "Localisation non fonctionnelle",
"System locale can not be set to a one which supports UTF-8." : "Les paramètres régionaux ne peuvent pas être configurés avec prise en charge d'UTF-8.",
"This means that there might be problems with certain characters in file names." : "Cela signifie qu'il pourrait y avoir des problèmes avec certains caractères dans les noms de fichier.",
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 41b60b64428..65c6359e509 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -10,13 +10,10 @@
*/
style('settings', 'settings');
-script('settings', 'settings');
-script( "settings", "admin" );
-script( "settings", "log" );
-script( 'core', 'multiselect' );
+script('settings', [ 'settings', 'admin', 'log'] );
+script('core', ['multiselect', 'setupchecks']);
vendor_script('select2/select2');
vendor_style('select2/select2');
-script('core', 'setupchecks');
$levels = array('Debug', 'Info', 'Warning', 'Error', 'Fatal');
$levelLabels = array(
@@ -125,6 +122,20 @@ if ($_['databaseOverload']) {
<?php
}
+// Windows Warning
+if ($_['WindowsWarning']) {
+ ?>
+<div class="section">
+ <h2><?php p($l->t('Microsoft Windows Platform'));?></h2>
+
+ <p class="securitywarning">
+ <?php p($l->t('Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience.')); ?>
+ </p>
+
+</div>
+<?php
+}
+
// if module fileinfo available?
if (!$_['has_fileinfo']) {
?>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 7d7b6ec8176..3bd5971f44e 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -285,7 +285,7 @@ if($_['passwordChangeSupported']) {
<div class="section">
<h2><?php p($l->t('Version'));?></h2>
- <strong><?php p($theme->getName()); ?></strong> <?php p(OC_Util::getHumanVersion()) ?><br />
+ <strong><?php p($theme->getTitle()); ?></strong> <?php p(OC_Util::getHumanVersion()) ?><br />
<?php if (OC_Util::getEditionString() === ''): ?>
<?php print_unescaped($l->t('Developed by the <a href="http://ownCloud.org/contact" target="_blank">ownCloud community</a>, the <a href="https://github.com/owncloud" target="_blank">source code</a> is licensed under the <a href="http://www.gnu.org/licenses/agpl-3.0.html" target="_blank"><abbr title="Affero General Public License">AGPL</abbr></a>.')); ?>
<?php endif; ?>
diff --git a/tests/karma.config.js b/tests/karma.config.js
index 414f1552584..e4f8b3ea68f 100644
--- a/tests/karma.config.js
+++ b/tests/karma.config.js
@@ -53,7 +53,8 @@ module.exports = function(config) {
// up with the global namespace/classes/state
'apps/files_sharing/js/app.js',
'apps/files_sharing/js/sharedfilelist.js',
- 'apps/files_sharing/js/share.js'
+ 'apps/files_sharing/js/share.js',
+ 'apps/files_sharing/js/external.js'
],
testFiles: ['apps/files_sharing/tests/js/*.js']
},
diff --git a/tests/lib/memcache/cache.php b/tests/lib/memcache/cache.php
index 8a4a708e4b7..e5ceae52fb0 100644
--- a/tests/lib/memcache/cache.php
+++ b/tests/lib/memcache/cache.php
@@ -22,6 +22,12 @@ abstract class Cache extends \Test_Cache {
$this->assertEquals('bar', $this->instance->get('foo'));
}
+ public function testGetArrayAfterSet() {
+ $this->assertNull($this->instance->get('foo'));
+ $this->instance->set('foo', ['bar']);
+ $this->assertEquals(['bar'], $this->instance->get('foo'));
+ }
+
public function testDoesNotExistAfterRemove() {
$this->instance->set('foo', 'bar');
$this->instance->remove('foo');
diff --git a/tests/lib/request.php b/tests/lib/request.php
index ea3722b90a6..dd6d1e47cd5 100644
--- a/tests/lib/request.php
+++ b/tests/lib/request.php
@@ -84,6 +84,7 @@ class Test_Request extends \Test\TestCase {
array('/core/ajax/translations.php', '/core/ajax/translations.php', 'index.php'),
array('/core/ajax/translations.php', '//core/ajax/translations.php', '/index.php'),
array('/core/ajax/translations.php', '/oc/core/ajax/translations.php', '/oc/index.php'),
+ array('/core/ajax/translations.php', '/oc//index.php/core/ajax/translations.php', '/oc/index.php'),
array('/1', '/oc/core/1', '/oc/core/index.php'),
);
}