summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/accessibility/l10n/ja.js3
-rw-r--r--apps/accessibility/l10n/ja.json3
-rw-r--r--apps/accessibility/l10n/sl.js18
-rw-r--r--apps/accessibility/l10n/sl.json16
-rw-r--r--apps/comments/l10n/eo.js1
-rw-r--r--apps/comments/l10n/eo.json1
-rw-r--r--apps/files_sharing/l10n/ca.js15
-rw-r--r--apps/files_sharing/l10n/ca.json15
-rw-r--r--apps/files_trashbin/l10n/ar.js1
-rw-r--r--apps/files_trashbin/l10n/ar.json1
-rw-r--r--apps/files_trashbin/l10n/ca.js25
-rw-r--r--apps/files_trashbin/l10n/ca.json25
-rw-r--r--apps/user_ldap/l10n/sl.js1
-rw-r--r--apps/user_ldap/l10n/sl.json1
-rw-r--r--build/package-lock.json20
-rw-r--r--build/package.json2
-rw-r--r--core/Command/Maintenance/Repair.php1
-rw-r--r--core/l10n/eo.js2
-rw-r--r--core/l10n/eo.json2
-rw-r--r--core/l10n/tr.js2
-rw-r--r--core/l10n/tr.json2
-rw-r--r--lib/private/Contacts/ContactsMenu/Manager.php20
-rw-r--r--lib/private/Http/Client/Client.php98
-rw-r--r--lib/private/Http/Client/ClientService.php3
-rw-r--r--settings/l10n/ja.js2
-rw-r--r--settings/l10n/ja.json2
-rw-r--r--tests/lib/Contacts/ContactsMenu/ManagerTest.php81
-rw-r--r--tests/lib/Http/Client/ClientServiceTest.php11
-rw-r--r--tests/lib/Http/Client/ClientTest.php101
29 files changed, 325 insertions, 150 deletions
diff --git a/apps/accessibility/l10n/ja.js b/apps/accessibility/l10n/ja.js
index b6d9de2c30d..bfaa6dfa0ef 100644
--- a/apps/accessibility/l10n/ja.js
+++ b/apps/accessibility/l10n/ja.js
@@ -6,9 +6,12 @@ OC.L10N.register(
"Dark theme (beta)" : "ダークテーマ (ベータ版)",
"A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "ダークテーマは目の負担になりにくいです。このテーマは開発中のためバグを見つけたら報告してください。",
"Dyslexia font" : "Dyslexia フォント",
+ "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexicはdyslexiaによっとおこる読み込みエラーを軽減するためにデザインされた無料版活字/フォントである。",
"Accessibility" : "アクセシビリティ",
"Accessibility options for nextcloud" : "nextcloudのアクセシビリティオプション",
+ "Provides multiple accessibilities options to ease your use of Nextcloud" : "あなたのNextcloudの利用を簡単にするための複数のユーザー補助のオプションを提供します。",
"Web Content Accessibility Guidelines" : "Webコンテンツ アクセシビリティガイドライン",
+ "our issue tracker" : "問題追跡",
"our design team" : "デザインチーム",
"Enable" : "有効にする"
},
diff --git a/apps/accessibility/l10n/ja.json b/apps/accessibility/l10n/ja.json
index c8cc6901953..e4ec865ff73 100644
--- a/apps/accessibility/l10n/ja.json
+++ b/apps/accessibility/l10n/ja.json
@@ -4,9 +4,12 @@
"Dark theme (beta)" : "ダークテーマ (ベータ版)",
"A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "ダークテーマは目の負担になりにくいです。このテーマは開発中のためバグを見つけたら報告してください。",
"Dyslexia font" : "Dyslexia フォント",
+ "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexicはdyslexiaによっとおこる読み込みエラーを軽減するためにデザインされた無料版活字/フォントである。",
"Accessibility" : "アクセシビリティ",
"Accessibility options for nextcloud" : "nextcloudのアクセシビリティオプション",
+ "Provides multiple accessibilities options to ease your use of Nextcloud" : "あなたのNextcloudの利用を簡単にするための複数のユーザー補助のオプションを提供します。",
"Web Content Accessibility Guidelines" : "Webコンテンツ アクセシビリティガイドライン",
+ "our issue tracker" : "問題追跡",
"our design team" : "デザインチーム",
"Enable" : "有効にする"
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/accessibility/l10n/sl.js b/apps/accessibility/l10n/sl.js
new file mode 100644
index 00000000000..df00906f117
--- /dev/null
+++ b/apps/accessibility/l10n/sl.js
@@ -0,0 +1,18 @@
+OC.L10N.register(
+ "accessibility",
+ {
+ "High contrast theme" : "Visoko kontrastna tema",
+ "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Visoko kontrastna tema omogoča nazornejši prikaz vmesnika. Pogled se poenostavi, povečajo pa se možnosti hitre uporabe.",
+ "Dark theme (beta)" : "Temna tema (preizkusno)",
+ "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Temna tema zmanjša splošno svetlost vmesnika. Tema je še v razvoju, zato je priporočljivo poslati tudi poročila o napakah, ki jih opazite.",
+ "Dyslexia font" : "Pisava za posameznike z disleksijo",
+ "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "Pisava OpenDyslexic je brezplačna pisava, zasnovana in oblikovana po priporočilih za posameznike z disleksijo. Zmanjša nekatere splošne težave pri branju.",
+ "Accessibility" : "Dostopnost",
+ "Accessibility options for nextcloud" : "Možnosti dostopnosti za okolje Nextcloud",
+ "Provides multiple accessibilities options to ease your use of Nextcloud" : "Omogoča več možnosti dostopnosti za lažje delo v okolju Nextcloud.",
+ "Web Content Accessibility Guidelines" : "Priporočila dostopnosti za spletno vsebino",
+ "our issue tracker" : "sledilnik napak",
+ "our design team" : "oblikovalska skupina",
+ "Enable" : "Omogoči"
+},
+"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/accessibility/l10n/sl.json b/apps/accessibility/l10n/sl.json
new file mode 100644
index 00000000000..aa074430e9b
--- /dev/null
+++ b/apps/accessibility/l10n/sl.json
@@ -0,0 +1,16 @@
+{ "translations": {
+ "High contrast theme" : "Visoko kontrastna tema",
+ "A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Visoko kontrastna tema omogoča nazornejši prikaz vmesnika. Pogled se poenostavi, povečajo pa se možnosti hitre uporabe.",
+ "Dark theme (beta)" : "Temna tema (preizkusno)",
+ "A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Temna tema zmanjša splošno svetlost vmesnika. Tema je še v razvoju, zato je priporočljivo poslati tudi poročila o napakah, ki jih opazite.",
+ "Dyslexia font" : "Pisava za posameznike z disleksijo",
+ "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "Pisava OpenDyslexic je brezplačna pisava, zasnovana in oblikovana po priporočilih za posameznike z disleksijo. Zmanjša nekatere splošne težave pri branju.",
+ "Accessibility" : "Dostopnost",
+ "Accessibility options for nextcloud" : "Možnosti dostopnosti za okolje Nextcloud",
+ "Provides multiple accessibilities options to ease your use of Nextcloud" : "Omogoča več možnosti dostopnosti za lažje delo v okolju Nextcloud.",
+ "Web Content Accessibility Guidelines" : "Priporočila dostopnosti za spletno vsebino",
+ "our issue tracker" : "sledilnik napak",
+ "our design team" : "oblikovalska skupina",
+ "Enable" : "Omogoči"
+},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
+} \ No newline at end of file
diff --git a/apps/comments/l10n/eo.js b/apps/comments/l10n/eo.js
index e18d986a6a1..3e0cedd10fc 100644
--- a/apps/comments/l10n/eo.js
+++ b/apps/comments/l10n/eo.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Error occurred while updating comment with id {id}" : "Eraro dum ĝisdatigo de komento kun identigilo {id}",
"Error occurred while posting comment" : "Eraro dum sendo de komento",
"_%n unread comment_::_%n unread comments_" : ["%n nelegataj komentoj","%n nelegataj komentoj"],
+ "_1 new comment_::_{unread} new comments_" : ["1 nova komento","{unread} novaj komentoj"],
"Comment" : "Komento",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Vi estis menciita en „%s“, en komento de uzanto, kiu ekde tiam estis forigita",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s menciis vin en komento pri „%2$s“"
diff --git a/apps/comments/l10n/eo.json b/apps/comments/l10n/eo.json
index 0f508beccf9..6326dbb5f18 100644
--- a/apps/comments/l10n/eo.json
+++ b/apps/comments/l10n/eo.json
@@ -25,6 +25,7 @@
"Error occurred while updating comment with id {id}" : "Eraro dum ĝisdatigo de komento kun identigilo {id}",
"Error occurred while posting comment" : "Eraro dum sendo de komento",
"_%n unread comment_::_%n unread comments_" : ["%n nelegataj komentoj","%n nelegataj komentoj"],
+ "_1 new comment_::_{unread} new comments_" : ["1 nova komento","{unread} novaj komentoj"],
"Comment" : "Komento",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Vi estis menciita en „%s“, en komento de uzanto, kiu ekde tiam estis forigita",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s menciis vin en komento pri „%2$s“"
diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js
index d1a796f4438..f79a036aade 100644
--- a/apps/files_sharing/l10n/ca.js
+++ b/apps/files_sharing/l10n/ca.js
@@ -110,23 +110,30 @@ OC.L10N.register(
"Add to your Nextcloud" : "Afegeix al vostre NextCloud",
"Share API is disabled" : "Compartir l'API està desactivat",
"File sharing" : "Compartició de fitxers",
+ "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Aquesta aplicació permet als usuaris compartir fitxers a Nextcloud. Si està activat, l'administrador pot triar quins grups poden compartir fitxers. Els usuaris aplicables poden compartir fitxers i carpetes amb altres usuaris i grups de Nextcloud. A més, si l’administrador activa la funció d’enllaç compartit, es pot fer servir un enllaç extern per compartir fitxers amb altres usuaris fora de Nextcloud. Els administradors també poden aplicar contrasenyes, dates de caducitat i activar la compartició de servidor a servidor mitjançant enllaços compartits, així com la compartició de dispositius mòbils.\nDesactivant la funcionalitat suprimirà els fitxers compartits i les carpetes del servidor per a tots els destinataris compartits i també per als clients de sincronització i les aplicacions per a mòbils. Podeu trobar més informació a la documentació de Nextcloud.",
+ "Link to a file" : "Enllaça a un fitxer",
+ "Shared" : "Compartit",
"Share" : "Comparteix",
- "Sharing" : "Compartir",
+ "Sharing" : "Compartint",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
"Name" : "Nom",
"Share time" : "Temps de compartició",
- "Expiration date" : "Data d'expiració",
+ "Expiration date" : "Data de caducitat",
"Sorry, this link doesn’t seem to work anymore." : "Aquest enllaç sembla que no funciona.",
"Reasons might be:" : "Les raons podrien ser:",
"the item was removed" : "l'element ha estat eliminat",
"the link expired" : "l'enllaç ha vençut",
"sharing is disabled" : "s'ha desactivat la compartició",
"For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.",
+ "Share note" : "Comparteix nota",
+ "Toggle grid view" : "Commuta la vista de la graella",
"Download %s" : "Baixa %s",
"Upload files to %s" : "Carrega fitxers a %s",
+ "Note" : "Nota",
"Select or drop files" : "Selecciona o deixa anar els fitxers",
- "Uploading files…" : "Pujant arxius...",
- "Uploaded files:" : "Arxius pujats:",
+ "Uploading files…" : "S'estan carregant fitxers...",
+ "Uploaded files:" : "Fitxers carregats:",
+ "By uploading files, you agree to the %1$sterms of service%2$s." : "Si carregueu els fitxers accepteu les %1$scondicions del servei%2$s.",
"Sharing %s failed because the back end does not allow shares from type %s" : "S'ha produït un error en compartir %s perquè la part posterior no permet que les accions del tipus%s"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json
index 4c8a16852c3..dba0a60b5f7 100644
--- a/apps/files_sharing/l10n/ca.json
+++ b/apps/files_sharing/l10n/ca.json
@@ -108,23 +108,30 @@
"Add to your Nextcloud" : "Afegeix al vostre NextCloud",
"Share API is disabled" : "Compartir l'API està desactivat",
"File sharing" : "Compartició de fitxers",
+ "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Aquesta aplicació permet als usuaris compartir fitxers a Nextcloud. Si està activat, l'administrador pot triar quins grups poden compartir fitxers. Els usuaris aplicables poden compartir fitxers i carpetes amb altres usuaris i grups de Nextcloud. A més, si l’administrador activa la funció d’enllaç compartit, es pot fer servir un enllaç extern per compartir fitxers amb altres usuaris fora de Nextcloud. Els administradors també poden aplicar contrasenyes, dates de caducitat i activar la compartició de servidor a servidor mitjançant enllaços compartits, així com la compartició de dispositius mòbils.\nDesactivant la funcionalitat suprimirà els fitxers compartits i les carpetes del servidor per a tots els destinataris compartits i també per als clients de sincronització i les aplicacions per a mòbils. Podeu trobar més informació a la documentació de Nextcloud.",
+ "Link to a file" : "Enllaça a un fitxer",
+ "Shared" : "Compartit",
"Share" : "Comparteix",
- "Sharing" : "Compartir",
+ "Sharing" : "Compartint",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
"Name" : "Nom",
"Share time" : "Temps de compartició",
- "Expiration date" : "Data d'expiració",
+ "Expiration date" : "Data de caducitat",
"Sorry, this link doesn’t seem to work anymore." : "Aquest enllaç sembla que no funciona.",
"Reasons might be:" : "Les raons podrien ser:",
"the item was removed" : "l'element ha estat eliminat",
"the link expired" : "l'enllaç ha vençut",
"sharing is disabled" : "s'ha desactivat la compartició",
"For more info, please ask the person who sent this link." : "Per més informació contacteu amb qui us ha enviat l'enllaç.",
+ "Share note" : "Comparteix nota",
+ "Toggle grid view" : "Commuta la vista de la graella",
"Download %s" : "Baixa %s",
"Upload files to %s" : "Carrega fitxers a %s",
+ "Note" : "Nota",
"Select or drop files" : "Selecciona o deixa anar els fitxers",
- "Uploading files…" : "Pujant arxius...",
- "Uploaded files:" : "Arxius pujats:",
+ "Uploading files…" : "S'estan carregant fitxers...",
+ "Uploaded files:" : "Fitxers carregats:",
+ "By uploading files, you agree to the %1$sterms of service%2$s." : "Si carregueu els fitxers accepteu les %1$scondicions del servei%2$s.",
"Sharing %s failed because the back end does not allow shares from type %s" : "S'ha produït un error en compartir %s perquè la part posterior no permet que les accions del tipus%s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/ar.js b/apps/files_trashbin/l10n/ar.js
index 3f411721c95..e0458396eeb 100644
--- a/apps/files_trashbin/l10n/ar.js
+++ b/apps/files_trashbin/l10n/ar.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Select all" : "تحديد الكل ",
"Name" : "اسم",
+ "Actions" : "الإجراءات",
"Deleted" : "تم الحذف",
"Delete" : "إلغاء",
"Couldn't delete %s permanently" : "تعذّر حذف%s بشكل دائم",
diff --git a/apps/files_trashbin/l10n/ar.json b/apps/files_trashbin/l10n/ar.json
index 3e8e65ac132..5be25649314 100644
--- a/apps/files_trashbin/l10n/ar.json
+++ b/apps/files_trashbin/l10n/ar.json
@@ -10,6 +10,7 @@
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Select all" : "تحديد الكل ",
"Name" : "اسم",
+ "Actions" : "الإجراءات",
"Deleted" : "تم الحذف",
"Delete" : "إلغاء",
"Couldn't delete %s permanently" : "تعذّر حذف%s بشكل دائم",
diff --git a/apps/files_trashbin/l10n/ca.js b/apps/files_trashbin/l10n/ca.js
index 8fae3f54600..f78ef3bfab5 100644
--- a/apps/files_trashbin/l10n/ca.js
+++ b/apps/files_trashbin/l10n/ca.js
@@ -1,21 +1,28 @@
OC.L10N.register(
"files_trashbin",
{
- "Deleted files" : "Fitxers esborrats",
- "restored" : "restaurat",
+ "Deleted files" : "Fitxers suprimits",
+ "restored" : "s'ha restaurat",
+ "This application enables users to restore files that were deleted from the system." : "Aquesta aplicació permet als usuaris restaurar fitxers que s’han suprimit del sistema.",
+ "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Aquesta aplicació permet als usuaris restaurar fitxers que s’han suprimit del sistema. Mostra una llista de fitxers suprimits a la interfície web i té opcions per restaurar els fitxers suprimits als directoris de fitxers dels usuaris o eliminar-los permanentment del sistema. La restauració d’un fitxer també restaura les versions de fitxers relacionades, si l’aplicació de versions està activada. Quan se suprimeix un fitxer d’una compartició, es pot restaurar de la mateixa manera, tot i que ja no es comparteix. Per defecte, aquests fitxers romanen a la paperera durant 30 dies.\nPer evitar que un usuari es quedi sense espai en disc, l’aplicació de fitxers suprimits no utilitzarà més del 50% de la quota gratuïta disponible actualment per als fitxers suprimits. Si els fitxers suprimits superen aquest límit, l’aplicació suprimeix els fitxers més antics fins que quedi per sota d’aquest límit. Podeu trobar més informació a la documentació dels Fitxers Suprimits.",
"Restore" : "Recupera",
- "Delete permanently" : "Esborra permanentment",
+ "Delete permanently" : "Suprimeix permanentment",
+ "Error while restoring file from trashbin" : "S'ha produït un error mentre es restaurava el fitxer des de la paperera",
+ "Error while removing file from trashbin" : "S'ha produït un error mentre se suprimia el fitxer de la paperera",
+ "Error while restoring files from trashbin" : "S'ha produït un error mentre es restauraven els fitxers des de la paperera",
+ "Error while emptying trashbin" : "S'ha produït un error mentre es buidava la paperera",
+ "Error while removing files from trashbin" : "S'ha produït un error mentre se suprimien els fitxers de la paperera",
"This operation is forbidden" : "Aquesta operació està prohibida",
"This directory is unavailable, please check the logs or contact the administrator" : "Aquesta carpeta no està disponible. Comproveu els registres o contacteu amb l'administrador.",
- "No deleted files" : "No hi ha cap fitxer eliminat",
- "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar fitxers eliminats",
+ "No deleted files" : "No hi ha cap fitxer suprimit",
+ "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar fitxers suprimits",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
- "Select all" : "Seleccionar tot",
+ "Select all" : "Selecciona-ho tot",
"Name" : "Nom",
"Actions" : "Accions",
- "Deleted" : "Eliminat",
- "Delete" : "Esborra",
- "Couldn't delete %s permanently" : "No s'ha pogut esborrar permanentment %s",
+ "Deleted" : "Suprimit",
+ "Delete" : "Suprimeix",
+ "Couldn't delete %s permanently" : "No s'ha pogut suprimir %s permanentment",
"Couldn't restore %s" : "No s'ha pogut restaurar %s",
"Error" : "Error"
},
diff --git a/apps/files_trashbin/l10n/ca.json b/apps/files_trashbin/l10n/ca.json
index dd8d8e773e2..4459482b2c7 100644
--- a/apps/files_trashbin/l10n/ca.json
+++ b/apps/files_trashbin/l10n/ca.json
@@ -1,19 +1,26 @@
{ "translations": {
- "Deleted files" : "Fitxers esborrats",
- "restored" : "restaurat",
+ "Deleted files" : "Fitxers suprimits",
+ "restored" : "s'ha restaurat",
+ "This application enables users to restore files that were deleted from the system." : "Aquesta aplicació permet als usuaris restaurar fitxers que s’han suprimit del sistema.",
+ "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Aquesta aplicació permet als usuaris restaurar fitxers que s’han suprimit del sistema. Mostra una llista de fitxers suprimits a la interfície web i té opcions per restaurar els fitxers suprimits als directoris de fitxers dels usuaris o eliminar-los permanentment del sistema. La restauració d’un fitxer també restaura les versions de fitxers relacionades, si l’aplicació de versions està activada. Quan se suprimeix un fitxer d’una compartició, es pot restaurar de la mateixa manera, tot i que ja no es comparteix. Per defecte, aquests fitxers romanen a la paperera durant 30 dies.\nPer evitar que un usuari es quedi sense espai en disc, l’aplicació de fitxers suprimits no utilitzarà més del 50% de la quota gratuïta disponible actualment per als fitxers suprimits. Si els fitxers suprimits superen aquest límit, l’aplicació suprimeix els fitxers més antics fins que quedi per sota d’aquest límit. Podeu trobar més informació a la documentació dels Fitxers Suprimits.",
"Restore" : "Recupera",
- "Delete permanently" : "Esborra permanentment",
+ "Delete permanently" : "Suprimeix permanentment",
+ "Error while restoring file from trashbin" : "S'ha produït un error mentre es restaurava el fitxer des de la paperera",
+ "Error while removing file from trashbin" : "S'ha produït un error mentre se suprimia el fitxer de la paperera",
+ "Error while restoring files from trashbin" : "S'ha produït un error mentre es restauraven els fitxers des de la paperera",
+ "Error while emptying trashbin" : "S'ha produït un error mentre es buidava la paperera",
+ "Error while removing files from trashbin" : "S'ha produït un error mentre se suprimien els fitxers de la paperera",
"This operation is forbidden" : "Aquesta operació està prohibida",
"This directory is unavailable, please check the logs or contact the administrator" : "Aquesta carpeta no està disponible. Comproveu els registres o contacteu amb l'administrador.",
- "No deleted files" : "No hi ha cap fitxer eliminat",
- "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar fitxers eliminats",
+ "No deleted files" : "No hi ha cap fitxer suprimit",
+ "You will be able to recover deleted files from here" : "Des d'aquí es podran recuperar fitxers suprimits",
"No entries found in this folder" : "No hi ha entrades en aquesta carpeta",
- "Select all" : "Seleccionar tot",
+ "Select all" : "Selecciona-ho tot",
"Name" : "Nom",
"Actions" : "Accions",
- "Deleted" : "Eliminat",
- "Delete" : "Esborra",
- "Couldn't delete %s permanently" : "No s'ha pogut esborrar permanentment %s",
+ "Deleted" : "Suprimit",
+ "Delete" : "Suprimeix",
+ "Couldn't delete %s permanently" : "No s'ha pogut suprimir %s permanentment",
"Couldn't restore %s" : "No s'ha pogut restaurar %s",
"Error" : "Error"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js
index 84fb166a5a0..ce4bcb985dd 100644
--- a/apps/user_ldap/l10n/sl.js
+++ b/apps/user_ldap/l10n/sl.js
@@ -40,6 +40,7 @@ OC.L10N.register(
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupina je onemogočena, ker na strežniku ni omogočena podpora atributu memberOf.",
"Please login with the new password" : "Prijavite se z novim geslom",
"Your password will expire tomorrow." : "Vaše geslo bo poteklo naslednji dan",
+ "Your password will expire today." : "Geslo vam poteče danes!",
"_%s group found_::_%s groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"],
"_%s user found_::_%s users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"],
"Could not find the desired feature" : "Želene zmožnosti ni mogoče najti",
diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json
index badd4e39d4e..22469a23c3d 100644
--- a/apps/user_ldap/l10n/sl.json
+++ b/apps/user_ldap/l10n/sl.json
@@ -38,6 +38,7 @@
"The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupina je onemogočena, ker na strežniku ni omogočena podpora atributu memberOf.",
"Please login with the new password" : "Prijavite se z novim geslom",
"Your password will expire tomorrow." : "Vaše geslo bo poteklo naslednji dan",
+ "Your password will expire today." : "Geslo vam poteče danes!",
"_%s group found_::_%s groups found_" : ["%s najdena skupina","%s najdeni skupini","%s najdene skupine","%s najdenih skupin"],
"_%s user found_::_%s users found_" : ["%s najden uporabnik","%s najdena uporabnika","%s najdeni uporabniki","%s najdenih uporabnikov"],
"Could not find the desired feature" : "Želene zmožnosti ni mogoče najti",
diff --git a/build/package-lock.json b/build/package-lock.json
index 19a511ebc36..90748bcceb9 100644
--- a/build/package-lock.json
+++ b/build/package-lock.json
@@ -653,9 +653,9 @@
}
},
"commander": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
"dev": true,
"optional": true
},
@@ -2080,9 +2080,9 @@
"dev": true
},
"handlebars": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz",
- "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
+ "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
"dev": true,
"requires": {
"neo-async": "^2.6.0",
@@ -4549,13 +4549,13 @@
"dev": true
},
"uglify-js": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.1.tgz",
- "integrity": "sha512-kI+3c+KphOAKIikQsZoT2oDsVYH5qvhpTtFObfMCdhPAYnjSvmW4oTWMhvDD4jtAGHJwztlBXQgozGcq3Xw9oQ==",
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.4.tgz",
+ "integrity": "sha512-GpKo28q/7Bm5BcX9vOu4S46FwisbPbAmkkqPnGIpKvKTM96I85N6XHQV+k4I6FA2wxgLhcsSyHoNhzucwCflvA==",
"dev": true,
"optional": true,
"requires": {
- "commander": "~2.19.0",
+ "commander": "~2.20.0",
"source-map": "~0.6.1"
}
},
diff --git a/build/package.json b/build/package.json
index 86d42ad68f3..a045afc6297 100644
--- a/build/package.json
+++ b/build/package.json
@@ -11,7 +11,7 @@
"contributors": [],
"dependencies": {},
"devDependencies": {
- "handlebars": "^4.1.1",
+ "handlebars": "^4.1.2",
"jasmine-core": "~2.5.2",
"jasmine-sinon": "^0.4.0",
"jsdoc": "^3.5.5",
diff --git a/core/Command/Maintenance/Repair.php b/core/Command/Maintenance/Repair.php
index 460bc6880c1..a013ade99c5 100644
--- a/core/Command/Maintenance/Repair.php
+++ b/core/Command/Maintenance/Repair.php
@@ -96,6 +96,7 @@ class Repair extends Command {
if (!is_array($info)) {
continue;
}
+ \OC_App::loadApp($app);
$steps = $info['repair-steps']['post-migration'];
foreach ($steps as $step) {
try {
diff --git a/core/l10n/eo.js b/core/l10n/eo.js
index 243429d226b..cfdf0332b54 100644
--- a/core/l10n/eo.js
+++ b/core/l10n/eo.js
@@ -318,6 +318,8 @@ OC.L10N.register(
"Finishing …" : "Finante...",
"Need help?" : "Ĉu necesas helpo?",
"See the documentation" : "Vidi la dokumentaron",
+ "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Ŝajnas, ke vi provas reinstali vian Nextcloud. Sed la dosiero CAN_INSTALL (angle por „eblo instali“) mankas en via dosierujo „config“. Bv. krei dosieron CAN_INSTALL ene de via dosierujo „config“ por daŭrigi.",
+ "Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Ne eblis forigi la dosieron „CAN_INSTALL“ el via dosierujo „config“. Bv. forigi ĝin permane.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tiu aplikaĵo bezonas Ĝavoskripton („Javascript“) por funkcii. Bonvolu {linkstart}ŝalti Ĝavoskripton{linkend} kaj poste reŝargi la paĝon.",
"Get your own free account" : "Ekhavu vian propran senpagan konton",
"Skip to main content" : "Iru al la ĉefa enhavo",
diff --git a/core/l10n/eo.json b/core/l10n/eo.json
index fdfb692288b..dbaf80778d8 100644
--- a/core/l10n/eo.json
+++ b/core/l10n/eo.json
@@ -316,6 +316,8 @@
"Finishing …" : "Finante...",
"Need help?" : "Ĉu necesas helpo?",
"See the documentation" : "Vidi la dokumentaron",
+ "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Ŝajnas, ke vi provas reinstali vian Nextcloud. Sed la dosiero CAN_INSTALL (angle por „eblo instali“) mankas en via dosierujo „config“. Bv. krei dosieron CAN_INSTALL ene de via dosierujo „config“ por daŭrigi.",
+ "Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Ne eblis forigi la dosieron „CAN_INSTALL“ el via dosierujo „config“. Bv. forigi ĝin permane.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tiu aplikaĵo bezonas Ĝavoskripton („Javascript“) por funkcii. Bonvolu {linkstart}ŝalti Ĝavoskripton{linkend} kaj poste reŝargi la paĝon.",
"Get your own free account" : "Ekhavu vian propran senpagan konton",
"Skip to main content" : "Iru al la ĉefa enhavo",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 2bc3a204b48..c68b73ee9aa 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -318,6 +318,8 @@ OC.L10N.register(
"Finishing …" : "Tamamlanıyor ...",
"Need help?" : "Yardım gerekiyor mu?",
"See the documentation" : "Belgelere bakın",
+ "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Nextcloud kurulumunu yeniden yapmayı deniyorsunuz gibi görünüyor. Ancak config klasöründe CAN_INSTALL dosyası eksik. Lütfen config klasöründe CAN_INSTALL dosyasını oluşturun.",
+ "Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Config klasöründeki CAN_INSTALL dosyası silinemedi. Lütfen bu dosyayı el ile silin.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulamanın düzgün çalışabilmesi için JavaScript gereklidir. Lütfen {linkstart}JavaScript uygulamasını etkinleştirip{linkend} sayfayı yeniden yükleyin.",
"Get your own free account" : "Ücretsiz hesabınızı açın",
"Skip to main content" : "Ana içeriğe geç",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 094ef09af20..25d383a8f7e 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -316,6 +316,8 @@
"Finishing …" : "Tamamlanıyor ...",
"Need help?" : "Yardım gerekiyor mu?",
"See the documentation" : "Belgelere bakın",
+ "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Nextcloud kurulumunu yeniden yapmayı deniyorsunuz gibi görünüyor. Ancak config klasöründe CAN_INSTALL dosyası eksik. Lütfen config klasöründe CAN_INSTALL dosyasını oluşturun.",
+ "Could not remove CAN_INSTALL from the config folder. Please remove this file manually." : "Config klasöründeki CAN_INSTALL dosyası silinemedi. Lütfen bu dosyayı el ile silin.",
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulamanın düzgün çalışabilmesi için JavaScript gereklidir. Lütfen {linkstart}JavaScript uygulamasını etkinleştirip{linkend} sayfayı yeniden yükleyin.",
"Get your own free account" : "Ücretsiz hesabınızı açın",
"Skip to main content" : "Ana içeriğe geç",
diff --git a/lib/private/Contacts/ContactsMenu/Manager.php b/lib/private/Contacts/ContactsMenu/Manager.php
index 676ba602894..15f724e6ee6 100644
--- a/lib/private/Contacts/ContactsMenu/Manager.php
+++ b/lib/private/Contacts/ContactsMenu/Manager.php
@@ -26,6 +26,7 @@ namespace OC\Contacts\ContactsMenu;
use OCP\App\IAppManager;
use OCP\Contacts\ContactsMenu\IEntry;
+use OCP\IConfig;
use OCP\IUser;
class Manager {
@@ -39,15 +40,19 @@ class Manager {
/** @var IAppManager */
private $appManager;
+ /** @var IConfig */
+ private $config;
+
/**
* @param ContactsStore $store
* @param ActionProviderStore $actionProviderStore
* @param IAppManager $appManager
*/
- public function __construct(ContactsStore $store, ActionProviderStore $actionProviderStore, IAppManager $appManager) {
+ public function __construct(ContactsStore $store, ActionProviderStore $actionProviderStore, IAppManager $appManager, IConfig $config) {
$this->store = $store;
$this->actionProviderStore = $actionProviderStore;
$this->appManager = $appManager;
+ $this->config = $config;
}
/**
@@ -56,11 +61,16 @@ class Manager {
* @return array
*/
public function getEntries(IUser $user, $filter) {
- $entries = $this->store->getContacts($user, $filter);
+ $maxAutocompleteResults = $this->config->getSystemValueInt('sharing.maxAutocompleteResults', 25);
+ $minSearchStringLength = $this->config->getSystemValueInt('sharing.minSearchStringLength', 0);
+ $topEntries = [];
+ if (strlen($filter) >= $minSearchStringLength) {
+ $entries = $this->store->getContacts($user, $filter);
- $sortedEntries = $this->sortEntries($entries);
- $topEntries = array_slice($sortedEntries, 0, 25);
- $this->processEntries($topEntries, $user);
+ $sortedEntries = $this->sortEntries($entries);
+ $topEntries = array_slice($sortedEntries, 0, $maxAutocompleteResults);
+ $this->processEntries($topEntries, $user);
+ }
$contactsEnabled = $this->appManager->isEnabledForUser('contacts', $user);
return [
diff --git a/lib/private/Http/Client/Client.php b/lib/private/Http/Client/Client.php
index 03b09bf54b7..ad51feca0be 100644
--- a/lib/private/Http/Client/Client.php
+++ b/lib/private/Http/Client/Client.php
@@ -25,13 +25,11 @@ declare(strict_types=1);
namespace OC\Http\Client;
use GuzzleHttp\Client as GuzzleClient;
-use GuzzleHttp\HandlerStack;
-use GuzzleHttp\Middleware;
+use GuzzleHttp\RequestOptions;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IResponse;
use OCP\ICertificateManager;
use OCP\IConfig;
-use Psr\Http\Message\RequestInterface;
/**
* Class Client
@@ -45,9 +43,6 @@ class Client implements IClient {
private $config;
/** @var ICertificateManager */
private $certificateManager;
- private $configured = false;
- /** @var HandlerStack */
- private $stack;
/**
* @param IConfig $config
@@ -57,74 +52,62 @@ class Client implements IClient {
public function __construct(
IConfig $config,
ICertificateManager $certificateManager,
- GuzzleClient $client,
- HandlerStack $stack
+ GuzzleClient $client
) {
$this->config = $config;
$this->client = $client;
- $this->stack = $stack;
$this->certificateManager = $certificateManager;
}
- /**
- * Sets the default options to the client
- */
- private function setDefaultOptions() {
- if ($this->configured) {
- return;
- }
- $this->configured = true;
+ private function buildRequestOptions(array $options): array {
+ $defaults = [
+ RequestOptions::PROXY => $this->getProxyUri(),
+ RequestOptions::VERIFY => $this->getCertBundle(),
+ ];
- $this->stack->push(Middleware::mapRequest(function (RequestInterface $request) {
- return $request
- ->withHeader('User-Agent', 'Nextcloud Server Crawler');
- }));
- }
+ $options = array_merge($defaults, $options);
- private function getRequestOptions() {
- $options = [
- 'verify' => $this->getCertBundle(),
- ];
- $proxyUri = $this->getProxyUri();
- if ($proxyUri !== '') {
- $options['proxy'] = $proxyUri;
+ if (!isset($options[RequestOptions::HEADERS]['User-Agent'])) {
+ $options[RequestOptions::HEADERS]['User-Agent'] = 'Nextcloud Server Crawler';
}
+
return $options;
}
- private function getCertBundle() {
+ private function getCertBundle(): string {
if ($this->certificateManager->listCertificates() !== []) {
return $this->certificateManager->getAbsoluteBundlePath();
- } else {
- // If the instance is not yet setup we need to use the static path as
- // $this->certificateManager->getAbsoluteBundlePath() tries to instantiiate
- // a view
- if ($this->config->getSystemValue('installed', false)) {
- return $this->certificateManager->getAbsoluteBundlePath(null);
- } else {
- return \OC::$SERVERROOT . '/resources/config/ca-bundle.crt';
- }
}
+
+ // If the instance is not yet setup we need to use the static path as
+ // $this->certificateManager->getAbsoluteBundlePath() tries to instantiiate
+ // a view
+ if ($this->config->getSystemValue('installed', false)) {
+ return $this->certificateManager->getAbsoluteBundlePath(null);
+ }
+
+ return \OC::$SERVERROOT . '/resources/config/ca-bundle.crt';
}
/**
* Get the proxy URI
*
- * @return string
+ * @return string|null
*/
- private function getProxyUri(): string {
+ private function getProxyUri(): ?string {
$proxyHost = $this->config->getSystemValue('proxy', null);
- $proxyUserPwd = $this->config->getSystemValue('proxyuserpwd', null);
- $proxyUri = '';
- if ($proxyUserPwd !== null) {
- $proxyUri .= $proxyUserPwd . '@';
+ if ($proxyHost === null) {
+ return null;
}
- if ($proxyHost !== null) {
- $proxyUri .= $proxyHost;
+
+ $proxyUserPwd = $this->config->getSystemValue('proxyuserpwd', null);
+
+ if ($proxyUserPwd === null) {
+ return $proxyHost;
}
- return $proxyUri;
+ return $proxyUserPwd . '@' . $proxyHost;
}
/**
@@ -157,8 +140,7 @@ class Client implements IClient {
* @throws \Exception If the request could not get completed
*/
public function get(string $uri, array $options = []): IResponse {
- $this->setDefaultOptions();
- $response = $this->client->request('get', $uri, array_merge($this->getRequestOptions(), $options));
+ $response = $this->client->request('get', $uri, $this->buildRequestOptions($options));
$isStream = isset($options['stream']) && $options['stream'];
return new Response($response, $isStream);
}
@@ -188,8 +170,7 @@ class Client implements IClient {
* @throws \Exception If the request could not get completed
*/
public function head(string $uri, array $options = []): IResponse {
- $this->setDefaultOptions();
- $response = $this->client->request('head', $uri, array_merge($this->getRequestOptions(), $options));
+ $response = $this->client->request('head', $uri, $this->buildRequestOptions($options));
return new Response($response);
}
@@ -223,12 +204,11 @@ class Client implements IClient {
* @throws \Exception If the request could not get completed
*/
public function post(string $uri, array $options = []): IResponse {
- $this->setDefaultOptions();
if (isset($options['body']) && is_array($options['body'])) {
$options['form_params'] = $options['body'];
unset($options['body']);
}
- $response = $this->client->request('post', $uri, array_merge($this->getRequestOptions(), $options));
+ $response = $this->client->request('post', $uri, $this->buildRequestOptions($options));
return new Response($response);
}
@@ -262,8 +242,7 @@ class Client implements IClient {
* @throws \Exception If the request could not get completed
*/
public function put(string $uri, array $options = []): IResponse {
- $this->setDefaultOptions();
- $response = $this->client->request('put', $uri, array_merge($this->getRequestOptions(), $options));
+ $response = $this->client->request('put', $uri, $this->buildRequestOptions($options));
return new Response($response);
}
@@ -297,12 +276,10 @@ class Client implements IClient {
* @throws \Exception If the request could not get completed
*/
public function delete(string $uri, array $options = []): IResponse {
- $this->setDefaultOptions();
- $response = $this->client->request('delete', $uri, array_merge($this->getRequestOptions(), $options));
+ $response = $this->client->request('delete', $uri, $this->buildRequestOptions($options));
return new Response($response);
}
-
/**
* Sends a options request
*
@@ -333,8 +310,7 @@ class Client implements IClient {
* @throws \Exception If the request could not get completed
*/
public function options(string $uri, array $options = []): IResponse {
- $this->setDefaultOptions();
- $response = $this->client->request('options', $uri, array_merge($this->getRequestOptions(), $options));
+ $response = $this->client->request('options', $uri, $this->buildRequestOptions($options));
return new Response($response);
}
}
diff --git a/lib/private/Http/Client/ClientService.php b/lib/private/Http/Client/ClientService.php
index fa8544f07a5..1df54010a2d 100644
--- a/lib/private/Http/Client/ClientService.php
+++ b/lib/private/Http/Client/ClientService.php
@@ -24,7 +24,6 @@ declare(strict_types=1);
namespace OC\Http\Client;
use GuzzleHttp\Client as GuzzleClient;
-use GuzzleHttp\HandlerStack;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\ICertificateManager;
@@ -55,6 +54,6 @@ class ClientService implements IClientService {
* @return Client
*/
public function newClient(): IClient {
- return new Client($this->config, $this->certificateManager, new GuzzleClient(), HandlerStack::create());
+ return new Client($this->config, $this->certificateManager, new GuzzleClient());
}
}
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index d4bf7af7ec7..82c08f40a6e 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -119,6 +119,7 @@ OC.L10N.register(
"Copy" : "コピー",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "公式アプリは Nextcloud コミュニティにより開発されています。公式アプリは Nextcloud の中心的な機能を提供し、製品として可能です。",
"Official" : "公式",
+ "Update to {version}" : "{version} にアップデート",
"Remove" : "削除",
"Disable" : "無効にする",
"All" : "すべて",
@@ -132,6 +133,7 @@ OC.L10N.register(
"User documentation" : "ユーザードキュメント",
"Admin documentation" : "管理者ドキュメント",
"Developer documentation" : "開発者ドキュメント",
+ "Update to {update}" : "{update} にアップデート",
"No apps found for your version" : "現在のバージョンに対応するアプリはありません",
"Disable all" : "すべて無効にする",
"Enable all" : "すべて有効にする",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index 6d9c3011675..72555a57378 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -117,6 +117,7 @@
"Copy" : "コピー",
"Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "公式アプリは Nextcloud コミュニティにより開発されています。公式アプリは Nextcloud の中心的な機能を提供し、製品として可能です。",
"Official" : "公式",
+ "Update to {version}" : "{version} にアップデート",
"Remove" : "削除",
"Disable" : "無効にする",
"All" : "すべて",
@@ -130,6 +131,7 @@
"User documentation" : "ユーザードキュメント",
"Admin documentation" : "管理者ドキュメント",
"Developer documentation" : "開発者ドキュメント",
+ "Update to {update}" : "{update} にアップデート",
"No apps found for your version" : "現在のバージョンに対応するアプリはありません",
"Disable all" : "すべて無効にする",
"Enable all" : "すべて有効にする",
diff --git a/tests/lib/Contacts/ContactsMenu/ManagerTest.php b/tests/lib/Contacts/ContactsMenu/ManagerTest.php
index 783e5590a29..d1630e8ddeb 100644
--- a/tests/lib/Contacts/ContactsMenu/ManagerTest.php
+++ b/tests/lib/Contacts/ContactsMenu/ManagerTest.php
@@ -30,6 +30,7 @@ use OC\Contacts\ContactsMenu\Manager;
use OCP\App\IAppManager;
use OCP\Contacts\ContactsMenu\IEntry;
use OCP\Contacts\ContactsMenu\IProvider;
+use OCP\IConfig;
use OCP\IUser;
use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
@@ -42,6 +43,9 @@ class ManagerTest extends TestCase {
/** @var IAppManager|PHPUnit_Framework_MockObject_MockObject */
private $appManager;
+ /** @var IConfig|PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+
/** @var ActionProviderStore|PHPUnit_Framework_MockObject_MockObject */
private $actionProviderStore;
@@ -54,8 +58,9 @@ class ManagerTest extends TestCase {
$this->contactsStore = $this->createMock(ContactsStore::class);
$this->actionProviderStore = $this->createMock(ActionProviderStore::class);
$this->appManager = $this->createMock(IAppManager::class);
+ $this->config = $this->createMock(IConfig::class);
- $this->manager = new Manager($this->contactsStore, $this->actionProviderStore, $this->appManager);
+ $this->manager = new Manager($this->contactsStore, $this->actionProviderStore, $this->appManager, $this->config);
}
private function generateTestEntries() {
@@ -75,6 +80,15 @@ class ManagerTest extends TestCase {
$user = $this->createMock(IUser::class);
$entries = $this->generateTestEntries();
$provider = $this->createMock(IProvider::class);
+
+ $this->config->expects($this->at(0))
+ ->method('getSystemValueInt')
+ ->with('sharing.maxAutocompleteResults', 25)
+ ->willReturn(25);
+ $this->config->expects($this->at(1))
+ ->method('getSystemValueInt')
+ ->with('sharing.minSearchStringLength', 0)
+ ->willReturn(0);
$this->contactsStore->expects($this->once())
->method('getContacts')
->with($user, $filter)
@@ -99,6 +113,71 @@ class ManagerTest extends TestCase {
$this->assertEquals($expected, $data);
}
+ public function testGetFilteredEntriesLimit() {
+ $filter = 'con';
+ $user = $this->createMock(IUser::class);
+ $entries = $this->generateTestEntries();
+ $provider = $this->createMock(IProvider::class);
+
+ $this->config->expects($this->at(0))
+ ->method('getSystemValueInt')
+ ->with('sharing.maxAutocompleteResults', 25)
+ ->willReturn(3);
+ $this->config->expects($this->at(1))
+ ->method('getSystemValueInt')
+ ->with('sharing.minSearchStringLength', 0)
+ ->willReturn(0);
+ $this->contactsStore->expects($this->once())
+ ->method('getContacts')
+ ->with($user, $filter)
+ ->willReturn($entries);
+ $this->actionProviderStore->expects($this->once())
+ ->method('getProviders')
+ ->with($user)
+ ->willReturn([$provider]);
+ $provider->expects($this->exactly(3))
+ ->method('process');
+ $this->appManager->expects($this->once())
+ ->method('isEnabledForUser')
+ ->with($this->equalTo('contacts'), $user)
+ ->willReturn(false);
+ $expected = [
+ 'contacts' => array_slice($entries, 0, 3),
+ 'contactsAppEnabled' => false,
+ ];
+
+ $data = $this->manager->getEntries($user, $filter);
+
+ $this->assertEquals($expected, $data);
+ }
+
+ public function testGetFilteredEntriesMinSearchStringLength() {
+ $filter = 'con';
+ $user = $this->createMock(IUser::class);
+ $provider = $this->createMock(IProvider::class);
+
+ $this->config->expects($this->at(0))
+ ->method('getSystemValueInt')
+ ->with('sharing.maxAutocompleteResults', 25)
+ ->willReturn(3);
+ $this->config->expects($this->at(1))
+ ->method('getSystemValueInt')
+ ->with('sharing.minSearchStringLength', 0)
+ ->willReturn(4);
+ $this->appManager->expects($this->once())
+ ->method('isEnabledForUser')
+ ->with($this->equalTo('contacts'), $user)
+ ->willReturn(false);
+ $expected = [
+ 'contacts' => [],
+ 'contactsAppEnabled' => false,
+ ];
+
+ $data = $this->manager->getEntries($user, $filter);
+
+ $this->assertEquals($expected, $data);
+ }
+
public function testFindOne() {
$shareTypeFilter = 42;
$shareWithFilter = 'foobar';
diff --git a/tests/lib/Http/Client/ClientServiceTest.php b/tests/lib/Http/Client/ClientServiceTest.php
index 1bfaf050355..02f331483de 100644
--- a/tests/lib/Http/Client/ClientServiceTest.php
+++ b/tests/lib/Http/Client/ClientServiceTest.php
@@ -9,7 +9,6 @@
namespace Test\Http\Client;
use GuzzleHttp\Client as GuzzleClient;
-use GuzzleHttp\HandlerStack;
use OC\Http\Client\Client;
use OC\Http\Client\ClientService;
use OCP\ICertificateManager;
@@ -19,12 +18,16 @@ use OCP\IConfig;
* Class ClientServiceTest
*/
class ClientServiceTest extends \Test\TestCase {
- public function testNewClient() {
+ public function testNewClient(): void {
+ /** @var IConfig $config */
$config = $this->createMock(IConfig::class);
+ /** @var ICertificateManager $certificateManager */
$certificateManager = $this->createMock(ICertificateManager::class);
- $expected = new Client($config, $certificateManager, new GuzzleClient(), HandlerStack::create());
$clientService = new ClientService($config, $certificateManager);
- $this->assertEquals($expected, $clientService->newClient());
+ $this->assertEquals(
+ new Client($config, $certificateManager, new GuzzleClient()),
+ $clientService->newClient()
+ );
}
}
diff --git a/tests/lib/Http/Client/ClientTest.php b/tests/lib/Http/Client/ClientTest.php
index 7f12a824d17..f43958ab865 100644
--- a/tests/lib/Http/Client/ClientTest.php
+++ b/tests/lib/Http/Client/ClientTest.php
@@ -8,7 +8,6 @@
namespace Test\Http\Client;
-use GuzzleHttp\HandlerStack;
use GuzzleHttp\Psr7\Response;
use OC\Http\Client\Client;
use OC\Security\CertificateManager;
@@ -33,33 +32,27 @@ class ClientTest extends \Test\TestCase {
public function setUp() {
parent::setUp();
$this->config = $this->createMock(IConfig::class);
- $this->guzzleClient = $this->getMockBuilder('\GuzzleHttp\Client')
+ $this->guzzleClient = $this->getMockBuilder(\GuzzleHttp\Client::class)
->disableOriginalConstructor()
->getMock();
$this->certificateManager = $this->createMock(ICertificateManager::class);
$this->client = new Client(
$this->config,
$this->certificateManager,
- $this->guzzleClient,
- HandlerStack::create()
+ $this->guzzleClient
);
}
- public function testGetProxyUri() {
+ public function testGetProxyUri(): void {
$this->config
->expects($this->at(0))
->method('getSystemValue')
->with('proxy', null)
->willReturn(null);
- $this->config
- ->expects($this->at(1))
- ->method('getSystemValue')
- ->with('proxyuserpwd', null)
- ->willReturn(null);
- $this->assertSame('', self::invokePrivate($this->client, 'getProxyUri'));
+ $this->assertNull(self::invokePrivate($this->client, 'getProxyUri'));
}
- public function testGetProxyUriProxyHostEmptyPassword() {
+ public function testGetProxyUriProxyHostEmptyPassword(): void {
$this->config
->expects($this->at(0))
->method('getSystemValue')
@@ -73,7 +66,7 @@ class ClientTest extends \Test\TestCase {
$this->assertSame('foo', self::invokePrivate($this->client, 'getProxyUri'));
}
- public function testGetProxyUriProxyHostWithPassword() {
+ public function testGetProxyUriProxyHostWithPassword(): void {
$this->config
->expects($this->at(0))
->method('getSystemValue')
@@ -87,7 +80,7 @@ class ClientTest extends \Test\TestCase {
$this->assertSame('username:password@foo', self::invokePrivate($this->client, 'getProxyUri'));
}
- private function setUpDefaultRequestOptions() {
+ private function setUpDefaultRequestOptions(): void {
$this->config
->expects($this->at(0))
->method('getSystemValue')
@@ -106,11 +99,14 @@ class ClientTest extends \Test\TestCase {
$this->defaultRequestOptions = [
'verify' => '/my/path.crt',
- 'proxy' => 'foo'
+ 'proxy' => 'foo',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
];
}
- public function testGet() {
+ public function testGet(): void {
$this->setUpDefaultRequestOptions();
$this->guzzleClient->method('request')
@@ -119,12 +115,15 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->get('http://localhost/', [])->getStatusCode());
}
- public function testGetWithOptions() {
+ public function testGetWithOptions(): void {
$this->setUpDefaultRequestOptions();
$options = [
'verify' => false,
- 'proxy' => 'bar'
+ 'proxy' => 'bar',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
];
$this->guzzleClient->method('request')
@@ -133,7 +132,7 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->get('http://localhost/', $options)->getStatusCode());
}
- public function testPost() {
+ public function testPost(): void {
$this->setUpDefaultRequestOptions();
$this->guzzleClient->method('request')
@@ -142,12 +141,15 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->post('http://localhost/', [])->getStatusCode());
}
- public function testPostWithOptions() {
+ public function testPostWithOptions(): void {
$this->setUpDefaultRequestOptions();
$options = [
'verify' => false,
- 'proxy' => 'bar'
+ 'proxy' => 'bar',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
];
$this->guzzleClient->method('request')
@@ -156,7 +158,7 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->post('http://localhost/', $options)->getStatusCode());
}
- public function testPut() {
+ public function testPut(): void {
$this->setUpDefaultRequestOptions();
$this->guzzleClient->method('request')
@@ -165,12 +167,15 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->put('http://localhost/', [])->getStatusCode());
}
- public function testPutWithOptions() {
+ public function testPutWithOptions(): void {
$this->setUpDefaultRequestOptions();
$options = [
'verify' => false,
- 'proxy' => 'bar'
+ 'proxy' => 'bar',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
];
$this->guzzleClient->method('request')
@@ -179,7 +184,7 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->put('http://localhost/', $options)->getStatusCode());
}
- public function testDelete() {
+ public function testDelete(): void {
$this->setUpDefaultRequestOptions();
$this->guzzleClient->method('request')
@@ -188,12 +193,15 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->delete('http://localhost/', [])->getStatusCode());
}
- public function testDeleteWithOptions() {
+ public function testDeleteWithOptions(): void {
$this->setUpDefaultRequestOptions();
$options = [
'verify' => false,
- 'proxy' => 'bar'
+ 'proxy' => 'bar',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
];
$this->guzzleClient->method('request')
@@ -202,7 +210,7 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->delete('http://localhost/', $options)->getStatusCode());
}
- public function testOptions() {
+ public function testOptions(): void {
$this->setUpDefaultRequestOptions();
$this->guzzleClient->method('request')
@@ -211,12 +219,15 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->options('http://localhost/', [])->getStatusCode());
}
- public function testOptionsWithOptions() {
+ public function testOptionsWithOptions(): void {
$this->setUpDefaultRequestOptions();
$options = [
'verify' => false,
- 'proxy' => 'bar'
+ 'proxy' => 'bar',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
];
$this->guzzleClient->method('request')
@@ -225,7 +236,7 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->options('http://localhost/', $options)->getStatusCode());
}
- public function testHead() {
+ public function testHead(): void {
$this->setUpDefaultRequestOptions();
$this->guzzleClient->method('request')
@@ -234,12 +245,15 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->head('http://localhost/', [])->getStatusCode());
}
- public function testHeadWithOptions() {
+ public function testHeadWithOptions(): void {
$this->setUpDefaultRequestOptions();
$options = [
'verify' => false,
- 'proxy' => 'bar'
+ 'proxy' => 'bar',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
];
$this->guzzleClient->method('request')
@@ -248,9 +262,9 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals(1337, $this->client->head('http://localhost/', $options)->getStatusCode());
}
- public function testSetDefaultOptionsWithNotInstalled() {
+ public function testSetDefaultOptionsWithNotInstalled(): void {
$this->config
- ->expects($this->at(0))
+ ->expects($this->at(1))
->method('getSystemValue')
->with('installed', false)
->willReturn(false);
@@ -260,11 +274,15 @@ class ClientTest extends \Test\TestCase {
->willReturn([]);
$this->assertEquals([
- 'verify' => \OC::$SERVERROOT . '/resources/config/ca-bundle.crt'
- ], self::invokePrivate($this->client, 'getRequestOptions'));
+ 'verify' => \OC::$SERVERROOT . '/resources/config/ca-bundle.crt',
+ 'proxy' => null,
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
+ ], self::invokePrivate($this->client, 'buildRequestOptions', [[]]));
}
- public function testSetDefaultOptionsWithProxy() {
+ public function testSetDefaultOptionsWithProxy(): void {
$this->config
->expects($this->at(0))
->method('getSystemValue')
@@ -283,7 +301,10 @@ class ClientTest extends \Test\TestCase {
$this->assertEquals([
'verify' => '/my/path.crt',
- 'proxy' => 'foo'
- ], self::invokePrivate($this->client, 'getRequestOptions'));
+ 'proxy' => 'foo',
+ 'headers' => [
+ 'User-Agent' => 'Nextcloud Server Crawler'
+ ]
+ ], self::invokePrivate($this->client, 'buildRequestOptions', [[]]));
}
}