From 709bf3e882a696413f0949f20aba9a8e3a06ffb8 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Thu, 6 Aug 2020 02:38:05 +0000 Subject: [PATCH 01/55] [tx-robot] updated from transifex --- l10n/br.js | 3 ++- l10n/br.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/l10n/br.js b/l10n/br.js index f3d8f52..de153bd 100644 --- a/l10n/br.js +++ b/l10n/br.js @@ -6,6 +6,7 @@ OC.L10N.register( "Description" : "Diskrivadur", "Settings" : "Arventennoù", "Set expiration date" : "Lakaat un deizat termen", - "Expiration date" : "Deizad termen" + "Expiration date" : "Deizad termen", + "Submit" : "Kinnig" }, "nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); diff --git a/l10n/br.json b/l10n/br.json index f027af4..486e5f2 100644 --- a/l10n/br.json +++ b/l10n/br.json @@ -4,6 +4,7 @@ "Description" : "Diskrivadur", "Settings" : "Arventennoù", "Set expiration date" : "Lakaat un deizat termen", - "Expiration date" : "Deizad termen" + "Expiration date" : "Deizad termen", + "Submit" : "Kinnig" },"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" } \ No newline at end of file From 0e384d51b3c83825a91123b46a9db1ea0d0cdc00 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Fri, 7 Aug 2020 02:37:48 +0000 Subject: [PATCH 02/55] [tx-robot] updated from transifex --- l10n/eu.js | 10 +++++----- l10n/eu.json | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/l10n/eu.js b/l10n/eu.js index 567f7ad..bc4945f 100644 --- a/l10n/eu.js +++ b/l10n/eu.js @@ -89,18 +89,18 @@ OC.L10N.register( "This question needs a title and at least one answer!" : "Galdera honek izenburua behar du eta gutxienez erantzun bat!", "Multiple choice" : "Aukera anitz", "Multiple choice question title" : "Aukera anitzeko galderaren izenburua", - "Dropdown" : "Zabalgarria", - "Dropdown question title" : "Galdera zabalgarriaren izenburua", + "Dropdown" : "Goitibeherakoa", + "Dropdown question title" : "Goitibeherako galderaren izenburua", "People can pick one option" : "Jendeak aukera bat hautatu dezake", "Pick an option" : "Aukeratu bat", "Short answer" : "Erantzun laburra", "Short answer question title" : "Erantzun laburreko galderaren izenburua", "People can enter a short answer" : "Jendeak erantzun laburra idatz dezake", "Enter a short answer" : "Idatzi erantzun laburra", - "Long text" : "Testu luzea", - "Long text question title" : "Testu luzeko galderaren izenburua", + "Long text" : "Erantzun luzea", + "Long text question title" : "Erantzun luzeko galderaren izenburua", "People can enter a long text" : "Jendeak testu luzea idatz dezake", - "Enter a long text" : "Idatzi testu luzea", + "Enter a long text" : "Idatzi erantzun luzea", "Form expired" : "Inprimakia iraungita", "This form has expired and is no longer taking answers" : "Inprimaki hau iraungi da eta ez du erantzunik onartzen", "Form not found" : "Ez da inprimakia aurkitu", diff --git a/l10n/eu.json b/l10n/eu.json index 2d9aece..ef18204 100644 --- a/l10n/eu.json +++ b/l10n/eu.json @@ -87,18 +87,18 @@ "This question needs a title and at least one answer!" : "Galdera honek izenburua behar du eta gutxienez erantzun bat!", "Multiple choice" : "Aukera anitz", "Multiple choice question title" : "Aukera anitzeko galderaren izenburua", - "Dropdown" : "Zabalgarria", - "Dropdown question title" : "Galdera zabalgarriaren izenburua", + "Dropdown" : "Goitibeherakoa", + "Dropdown question title" : "Goitibeherako galderaren izenburua", "People can pick one option" : "Jendeak aukera bat hautatu dezake", "Pick an option" : "Aukeratu bat", "Short answer" : "Erantzun laburra", "Short answer question title" : "Erantzun laburreko galderaren izenburua", "People can enter a short answer" : "Jendeak erantzun laburra idatz dezake", "Enter a short answer" : "Idatzi erantzun laburra", - "Long text" : "Testu luzea", - "Long text question title" : "Testu luzeko galderaren izenburua", + "Long text" : "Erantzun luzea", + "Long text question title" : "Erantzun luzeko galderaren izenburua", "People can enter a long text" : "Jendeak testu luzea idatz dezake", - "Enter a long text" : "Idatzi testu luzea", + "Enter a long text" : "Idatzi erantzun luzea", "Form expired" : "Inprimakia iraungita", "This form has expired and is no longer taking answers" : "Inprimaki hau iraungi da eta ez du erantzunik onartzen", "Form not found" : "Ez da inprimakia aurkitu", From 95fd7e34bec30b7e45c603857da7413701b06ca2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 8 Aug 2020 01:17:24 +0000 Subject: [PATCH 03/55] Bump vue-router from 3.3.4 to 3.4.2 Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.4 to 3.4.2. - [Release notes](https://github.com/vuejs/vue-router/releases) - [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md) - [Commits](https://github.com/vuejs/vue-router/compare/v3.3.4...v3.4.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5265e8f..06229a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12561,9 +12561,9 @@ "integrity": "sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==" }, "vue-router": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.3.4.tgz", - "integrity": "sha512-SdKRBeoXUjaZ9R/8AyxsdTqkOfMcI5tWxPZOUX5Ie1BTL5rPSZ0O++pbiZCeYeythiZIdLEfkDiQPKIaWk5hDg==" + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.2.tgz", + "integrity": "sha512-n3Ok70hW0EpcJF4lcWIwSHAQbFTnIOLl/fhO8+oTs4jHNtBNsovcVvPZeTOyKEd8C3xF1Crft2ASuOiVT5K1mw==" }, "vue-style-loader": { "version": "4.1.2", diff --git a/package.json b/package.json index ed5be39..02f3d78 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "v-click-outside": "^3.0.1", "v-clipboard": "^2.2.3", "vue": "^2.6.11", - "vue-router": "^3.3.4", + "vue-router": "^3.4.2", "vuedraggable": "^2.24.0" }, "browserslist": [ From 31bc857c839cc72ba27a7ec4ac00196943903c79 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 8 Aug 2020 01:18:01 +0000 Subject: [PATCH 04/55] Bump webpack-merge from 5.0.9 to 5.1.1 Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.0.9 to 5.1.1. - [Release notes](https://github.com/survivejs/webpack-merge/releases) - [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md) - [Commits](https://github.com/survivejs/webpack-merge/compare/v5.0.9...v5.1.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5265e8f..c7dfd7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12981,9 +12981,9 @@ } }, "webpack-merge": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.0.9.tgz", - "integrity": "sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.1.1.tgz", + "integrity": "sha512-UhIkHAVqeG9EqFfYo7dRELrVfH6HYaOTYM7ssKCwfIIHYnWepGVOFp1E166GwgPGFqV6M68UgRiKOERjVOKIXA==", "dev": true, "requires": { "clone-deep": "^4.0.1", diff --git a/package.json b/package.json index ed5be39..cb7e48e 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,6 @@ "vue-template-compiler": "^2.6.11", "webpack": "^4.44.1", "webpack-cli": "^3.3.12", - "webpack-merge": "^5.0.9" + "webpack-merge": "^5.1.1" } } From 69909e442dfd156c4e4171f890dca81b2d8a1ee8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 8 Aug 2020 01:18:41 +0000 Subject: [PATCH 05/55] Bump @babel/core from 7.11.0 to 7.11.1 Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.0 to 7.11.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.11.1/packages/babel-core) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 34 ++++++++++------------------------ package.json | 2 +- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5265e8f..1943503 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,15 +52,15 @@ } }, "@babel/core": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.0.tgz", - "integrity": "sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.11.0", "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.0", + "@babel/parser": "^7.11.1", "@babel/template": "^7.10.4", "@babel/traverse": "^7.11.0", "@babel/types": "^7.11.0", @@ -110,20 +110,6 @@ "@babel/types": "^7.10.4" } }, - "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" - } - }, "@babel/helper-split-export-declaration": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", @@ -148,9 +134,9 @@ } }, "@babel/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==" + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.2.tgz", + "integrity": "sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw==" }, "@babel/template": { "version": "7.10.4", @@ -1354,9 +1340,9 @@ } }, "@babel/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==" + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.2.tgz", + "integrity": "sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw==" }, "@babel/template": { "version": "7.10.4", diff --git a/package.json b/package.json index ed5be39..f576054 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "node": ">=10.0.0" }, "devDependencies": { - "@babel/core": "^7.11.0", + "@babel/core": "^7.11.1", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/preset-env": "^7.11.0", "@nextcloud/browserslist-config": "^1.0.0", From d6ea2efaf50e1750d9dc81bd58b47ea2dddb2f23 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sat, 8 Aug 2020 02:38:00 +0000 Subject: [PATCH 06/55] [tx-robot] updated from transifex --- l10n/ja.js | 13 +++++++++++++ l10n/ja.json | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/l10n/ja.js b/l10n/ja.js index 8fdf389..7c5ef42 100644 --- a/l10n/ja.js +++ b/l10n/ja.js @@ -15,9 +15,19 @@ OC.L10N.register( "Responses" : "回答", "Clone form" : "フォームを複製", "Delete form" : "フォームを削除", + "Form link copied" : "フォームのリンクをコピーしました", "Cannot copy, please copy the link manually" : "コピーできませんでした。手動でリンクをコピーしてください。", + "Copy share link" : "共有リンクをコピー", "Are you sure you want to delete {title}?" : "本当に [title] を削除してもよろしいですか?", + "Delete answer" : "回答を削除", + "Error while saving the answer" : "回答を保存中にエラーが発生しました", + "Drag to reorder the questions" : "質問の順序を掴んで変更", "Required" : "必須", + "Delete question" : "質問の削除", + "This question needs a title!" : "この質問にはタイトルが必須です!", + "Add a new answer" : "回答を追加", + "A long answer for the question “{text}”" : "質問“{text}”の複数行回答", + "A short answer for the question “{text}”" : "質問“{text}”の1行回答", "No recommendations. Start typing." : "推奨事項はありません。 入力を開始します。", "Searching …" : "検索しています…", "No elements found." : "要素が見つかりませんでした。", @@ -26,9 +36,12 @@ OC.L10N.register( "Summary" : "要約", "Options" : "オプション", "Settings" : "設定", + "Anonymous responses" : "匿名回答", "Set expiration date" : "有効期限を設定", "Expiration date" : "有効期限", + "Select expiration date" : "回答期限日の選択", "Submit" : "送信", + "Error while saving question" : "質問の保存中にエラーが発生しました", "Checkboxes" : "チェックボックス" }, "nplurals=1; plural=0;"); diff --git a/l10n/ja.json b/l10n/ja.json index 0fcfa4b..ce9e58c 100644 --- a/l10n/ja.json +++ b/l10n/ja.json @@ -13,9 +13,19 @@ "Responses" : "回答", "Clone form" : "フォームを複製", "Delete form" : "フォームを削除", + "Form link copied" : "フォームのリンクをコピーしました", "Cannot copy, please copy the link manually" : "コピーできませんでした。手動でリンクをコピーしてください。", + "Copy share link" : "共有リンクをコピー", "Are you sure you want to delete {title}?" : "本当に [title] を削除してもよろしいですか?", + "Delete answer" : "回答を削除", + "Error while saving the answer" : "回答を保存中にエラーが発生しました", + "Drag to reorder the questions" : "質問の順序を掴んで変更", "Required" : "必須", + "Delete question" : "質問の削除", + "This question needs a title!" : "この質問にはタイトルが必須です!", + "Add a new answer" : "回答を追加", + "A long answer for the question “{text}”" : "質問“{text}”の複数行回答", + "A short answer for the question “{text}”" : "質問“{text}”の1行回答", "No recommendations. Start typing." : "推奨事項はありません。 入力を開始します。", "Searching …" : "検索しています…", "No elements found." : "要素が見つかりませんでした。", @@ -24,9 +34,12 @@ "Summary" : "要約", "Options" : "オプション", "Settings" : "設定", + "Anonymous responses" : "匿名回答", "Set expiration date" : "有効期限を設定", "Expiration date" : "有効期限", + "Select expiration date" : "回答期限日の選択", "Submit" : "送信", + "Error while saving question" : "質問の保存中にエラーが発生しました", "Checkboxes" : "チェックボックス" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file From a16dc9d7eb648a27d46b7dc085f5a6e3d2edaf6a Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sun, 9 Aug 2020 02:36:54 +0000 Subject: [PATCH 07/55] [tx-robot] updated from transifex --- l10n/fr.js | 1 + l10n/fr.json | 1 + 2 files changed, 2 insertions(+) diff --git a/l10n/fr.js b/l10n/fr.js index a6919fc..94fcfe3 100644 --- a/l10n/fr.js +++ b/l10n/fr.js @@ -5,6 +5,7 @@ OC.L10N.register( "Forms" : "Formulaires", "Shared by %s" : "Partagé par %s", "📝 Simple surveys and questionnaires, self-hosted" : "📝 Sondage et questionnaire simple, auto hébergé", + "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!" : "**Sondage et questionnaire simple, auto hébergé !**\n\n- **📝 Design simple :** Pas d'excès d'options, juste l'essentiel. Fonctionne très bien sous mobile.\n- **💾 Export des résultats :** Les résultats peuvent être exportés au format CSV, le même que celui des Google Forms.\n- **🙋 Contribuez !** Nous avons prévu beaucoup de choses comme plus de type de questions, l'édition collaborative et [bien plus encore](https://github.com/nextcloud/forms/milestones) !", "New form" : "Nouveau formulaire", "Loading forms …" : "Chargement des formulaires …", "No forms created yet" : "Aucun formulaire créé pour le moment", diff --git a/l10n/fr.json b/l10n/fr.json index e3aa013..cf0eeb6 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -3,6 +3,7 @@ "Forms" : "Formulaires", "Shared by %s" : "Partagé par %s", "📝 Simple surveys and questionnaires, self-hosted" : "📝 Sondage et questionnaire simple, auto hébergé", + "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!" : "**Sondage et questionnaire simple, auto hébergé !**\n\n- **📝 Design simple :** Pas d'excès d'options, juste l'essentiel. Fonctionne très bien sous mobile.\n- **💾 Export des résultats :** Les résultats peuvent être exportés au format CSV, le même que celui des Google Forms.\n- **🙋 Contribuez !** Nous avons prévu beaucoup de choses comme plus de type de questions, l'édition collaborative et [bien plus encore](https://github.com/nextcloud/forms/milestones) !", "New form" : "Nouveau formulaire", "Loading forms …" : "Chargement des formulaires …", "No forms created yet" : "Aucun formulaire créé pour le moment", From 9fa05b9b322232b1573d06366c73efe49a318f18 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Wed, 12 Aug 2020 02:37:36 +0000 Subject: [PATCH 08/55] [tx-robot] updated from transifex --- l10n/fi.js | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++- l10n/fi.json | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 176 insertions(+), 2 deletions(-) diff --git a/l10n/fi.js b/l10n/fi.js index c3f18c1..d188649 100644 --- a/l10n/fi.js +++ b/l10n/fi.js @@ -1,19 +1,106 @@ OC.L10N.register( "forms", { + "Anonymous response" : "Anonyymi vastaus", "Forms" : "Lomakkeet", + "Shared by %s" : "Jakanut %s", + "New form" : "Uusi lomake", + "Loading forms …" : "Ladataan lomakkeita…", + "No forms created yet" : "Lomakkeita ei ole vielä luotu", + "Create a form" : "Luo lomake", + "Select a form or create a new one" : "Valitse lomake tai luo uusi", "Create new form" : "Luo uusi lomake", + "An error occurred while loading the forms list" : "Lomakelistausta ladatessa tapahtui virhe", + "Unable to create a new form" : "Uuden lomakkeen luominen ei onnistunut", + "Responses" : "Vastaukset", + "Clone form" : "Kloonaa lomake", "Delete form" : "Poista lomake", + "Form link copied" : "Lomakkeen linkki kopioitu", + "Cannot copy, please copy the link manually" : "Kopioiminen ei onnistu. Kopioi linkki manuaalisesti", + "Copy share link" : "Kopioi jakolinkki", + "Are you sure you want to delete {title}?" : "Haluatko varmasti poistaa {title}?", + "Error while deleting {title}" : "Virhe poistaessa {title}", + "Answer number {index}" : "Vastausnumero {index}", + "Delete answer" : "Poista vastaus", + "Error while saving the answer" : "Virhe vastausta tallennettaessa", + "Question number {index}" : "Kysymys numero {index}", + "Drag to reorder the questions" : "Vedä järjestääksesi kysymykset uuteen järjestykseen", + "Title of question number {index}" : "Otsikko kysymykselle numero {index}", "Required" : "Vaadittu", + "Delete question" : "Poista kysymys", + "This question needs a title!" : "Tämä kysymys vaatii otsikon!", + "Add a new answer" : "Lisää uusi vastaus", + "There was an issue deleting this option" : "Tätä valintaa poistaessa ilmeni ongelma", + "A long answer for the question “{text}”" : "Pitkä vastaus kysymykseen “{text}”", + "A short answer for the question “{text}”" : "Lyhyt vastaus kysymykseen “{text}”", + "Delete this response" : "Poista tämä vastaus", + "No response" : "Ei vastausta", + "User or group name …" : "Käyttäjän tai ryhmän nimi…", "No recommendations. Start typing." : "Ei suosituksia. Aloita kirjoittaminen.", "Searching …" : "Haetaan…", + "No elements found." : "Elementtejä ei löytynyt.", "Group" : "Ryhmä", + "Loading {title} …" : "Ladataan {title}…", + "Toggle settings" : "Asetukset päälle/pois", + "Form title" : "Lomakkeen otsikko", "Description" : "Kuvaus", + "Required questions" : "Vaaditut kysymykset", + "Add a question" : "Lisää kysymys", + "There was an error while adding the new question" : "Uutta kysymystä lisättäessä tapahtui virhe", + "There was an error while removing the question" : "Kysymystä poistaessa tapahtui virhe", + "Error while saving form" : "Virhe lomaketta tallennettaessa", + "Loading responses …" : "Ladataan vastauksia…", + "Back to questions" : "Takaisin kysymyksiin", + "{amount} responses" : "{amount} vastausta", "Summary" : "Yhteenveto", "Options" : "Valinnat", + "Export to CSV" : "Vie CSV-muotoon", + "Delete all responses" : "Poista kaikki vastaukset", + "No responses yet" : "Ei vielä vastauksia", + "Results of submitted forms will show up here" : "Lähetettyjen lomakkeiden tulokset näkyvät täällä", + "There was an error while loading the results" : "Tuloksia ladattaessa tapahtui virhe", + "There was an error while removing this response" : "Tätä vastausta poistaessa tapahtui virhe", + "Are you sure you want to delete all responses of {title}?" : "Haluatko varmasti poistaa kaikki lomakkeen {title} vastaukset?", + "There was an error while removing responses" : "Vastauksia poistaessa tapahtui virhe", + "responses" : "vastausta", + "Share form" : "Jaa lomake", + "Share via link" : "Jaa linkin kautta", + "Show to all users of this instance" : "Näytä kaikille tämän instanssin käyttäjille", + "Choose users to share with" : "Valitse käyttäjät, joille jaetaan", "Settings" : "Asetukset", + "Anonymous responses" : "Anonyymit vastaukset", + "Allow multiple responses per person" : "Salli useita vastauksia yhdeltä henkilöltä", "Set expiration date" : "Aseta vanhenemispäivä", "Expiration date" : "Vanhenemispäivä", - "Submit" : "Lähetä" + "Select expiration date" : "Valitse vanhenemispäivä", + "Expired on {date}" : "Vanheni {date}", + "Expires on {date}" : "Vanhenee {date}", + "Submit" : "Lähetä", + "Submit form" : "Lähetä lomake", + "Submitting form …" : "Lähetetään lomaketta…", + "Thank you for completing the form!" : "Kiitos kun täytit lomakkeen!", + "There was an error submitting the form" : "Lomaketta lähettäessä tapahtui virhe", + "Error while saving question" : "Virhe kysymystä tallennettaessa", + "Checkboxes" : "Valintaruudut", + "Checkbox question title" : "Valintaruutu-kysymyksen otsikko", + "This question needs a title and at least one answer!" : "Tämä kysymys vaatii otsikon ja vähintään yhden vastauksen!", + "Multiple choice" : "Monivalinta", + "Multiple choice question title" : "Monivalinta-kysymyksen otsikko", + "Dropdown" : "Pudotusvalikko", + "Dropdown question title" : "Pudotusvalikko-kysymyksen otsikko", + "People can pick one option" : "Ihmiset voivat valita yhden vaihtoehdon", + "Pick an option" : "Valitse vaihtoehto", + "Short answer" : "Lyhyt vastaus", + "Short answer question title" : "Lyhyt vastaus -kysymyksen otsikko", + "People can enter a short answer" : "Ihmiset voivat kirjoittaa lyhyen vastauksen", + "Enter a short answer" : "Kirjoita lyhyt vastaus", + "Long text" : "Pitkä teksti", + "Long text question title" : "Pitkä teksti -kysymyksen otsikko", + "People can enter a long text" : "Ihmiset voivat kirjoittaa pitkän tekstin", + "Enter a long text" : "Kirjoita pitkä teksti", + "Form expired" : "Lomake vanheni", + "This form has expired and is no longer taking answers" : "Lomake vanhentui, eikä se vastaanota enää vastauksia", + "Form not found" : "Lomaketta ei löytynyt", + "This form does not exist" : "Tätä lomaketta ei ole olemassa" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/fi.json b/l10n/fi.json index 80f3d1f..33cbb21 100644 --- a/l10n/fi.json +++ b/l10n/fi.json @@ -1,17 +1,104 @@ { "translations": { + "Anonymous response" : "Anonyymi vastaus", "Forms" : "Lomakkeet", + "Shared by %s" : "Jakanut %s", + "New form" : "Uusi lomake", + "Loading forms …" : "Ladataan lomakkeita…", + "No forms created yet" : "Lomakkeita ei ole vielä luotu", + "Create a form" : "Luo lomake", + "Select a form or create a new one" : "Valitse lomake tai luo uusi", "Create new form" : "Luo uusi lomake", + "An error occurred while loading the forms list" : "Lomakelistausta ladatessa tapahtui virhe", + "Unable to create a new form" : "Uuden lomakkeen luominen ei onnistunut", + "Responses" : "Vastaukset", + "Clone form" : "Kloonaa lomake", "Delete form" : "Poista lomake", + "Form link copied" : "Lomakkeen linkki kopioitu", + "Cannot copy, please copy the link manually" : "Kopioiminen ei onnistu. Kopioi linkki manuaalisesti", + "Copy share link" : "Kopioi jakolinkki", + "Are you sure you want to delete {title}?" : "Haluatko varmasti poistaa {title}?", + "Error while deleting {title}" : "Virhe poistaessa {title}", + "Answer number {index}" : "Vastausnumero {index}", + "Delete answer" : "Poista vastaus", + "Error while saving the answer" : "Virhe vastausta tallennettaessa", + "Question number {index}" : "Kysymys numero {index}", + "Drag to reorder the questions" : "Vedä järjestääksesi kysymykset uuteen järjestykseen", + "Title of question number {index}" : "Otsikko kysymykselle numero {index}", "Required" : "Vaadittu", + "Delete question" : "Poista kysymys", + "This question needs a title!" : "Tämä kysymys vaatii otsikon!", + "Add a new answer" : "Lisää uusi vastaus", + "There was an issue deleting this option" : "Tätä valintaa poistaessa ilmeni ongelma", + "A long answer for the question “{text}”" : "Pitkä vastaus kysymykseen “{text}”", + "A short answer for the question “{text}”" : "Lyhyt vastaus kysymykseen “{text}”", + "Delete this response" : "Poista tämä vastaus", + "No response" : "Ei vastausta", + "User or group name …" : "Käyttäjän tai ryhmän nimi…", "No recommendations. Start typing." : "Ei suosituksia. Aloita kirjoittaminen.", "Searching …" : "Haetaan…", + "No elements found." : "Elementtejä ei löytynyt.", "Group" : "Ryhmä", + "Loading {title} …" : "Ladataan {title}…", + "Toggle settings" : "Asetukset päälle/pois", + "Form title" : "Lomakkeen otsikko", "Description" : "Kuvaus", + "Required questions" : "Vaaditut kysymykset", + "Add a question" : "Lisää kysymys", + "There was an error while adding the new question" : "Uutta kysymystä lisättäessä tapahtui virhe", + "There was an error while removing the question" : "Kysymystä poistaessa tapahtui virhe", + "Error while saving form" : "Virhe lomaketta tallennettaessa", + "Loading responses …" : "Ladataan vastauksia…", + "Back to questions" : "Takaisin kysymyksiin", + "{amount} responses" : "{amount} vastausta", "Summary" : "Yhteenveto", "Options" : "Valinnat", + "Export to CSV" : "Vie CSV-muotoon", + "Delete all responses" : "Poista kaikki vastaukset", + "No responses yet" : "Ei vielä vastauksia", + "Results of submitted forms will show up here" : "Lähetettyjen lomakkeiden tulokset näkyvät täällä", + "There was an error while loading the results" : "Tuloksia ladattaessa tapahtui virhe", + "There was an error while removing this response" : "Tätä vastausta poistaessa tapahtui virhe", + "Are you sure you want to delete all responses of {title}?" : "Haluatko varmasti poistaa kaikki lomakkeen {title} vastaukset?", + "There was an error while removing responses" : "Vastauksia poistaessa tapahtui virhe", + "responses" : "vastausta", + "Share form" : "Jaa lomake", + "Share via link" : "Jaa linkin kautta", + "Show to all users of this instance" : "Näytä kaikille tämän instanssin käyttäjille", + "Choose users to share with" : "Valitse käyttäjät, joille jaetaan", "Settings" : "Asetukset", + "Anonymous responses" : "Anonyymit vastaukset", + "Allow multiple responses per person" : "Salli useita vastauksia yhdeltä henkilöltä", "Set expiration date" : "Aseta vanhenemispäivä", "Expiration date" : "Vanhenemispäivä", - "Submit" : "Lähetä" + "Select expiration date" : "Valitse vanhenemispäivä", + "Expired on {date}" : "Vanheni {date}", + "Expires on {date}" : "Vanhenee {date}", + "Submit" : "Lähetä", + "Submit form" : "Lähetä lomake", + "Submitting form …" : "Lähetetään lomaketta…", + "Thank you for completing the form!" : "Kiitos kun täytit lomakkeen!", + "There was an error submitting the form" : "Lomaketta lähettäessä tapahtui virhe", + "Error while saving question" : "Virhe kysymystä tallennettaessa", + "Checkboxes" : "Valintaruudut", + "Checkbox question title" : "Valintaruutu-kysymyksen otsikko", + "This question needs a title and at least one answer!" : "Tämä kysymys vaatii otsikon ja vähintään yhden vastauksen!", + "Multiple choice" : "Monivalinta", + "Multiple choice question title" : "Monivalinta-kysymyksen otsikko", + "Dropdown" : "Pudotusvalikko", + "Dropdown question title" : "Pudotusvalikko-kysymyksen otsikko", + "People can pick one option" : "Ihmiset voivat valita yhden vaihtoehdon", + "Pick an option" : "Valitse vaihtoehto", + "Short answer" : "Lyhyt vastaus", + "Short answer question title" : "Lyhyt vastaus -kysymyksen otsikko", + "People can enter a short answer" : "Ihmiset voivat kirjoittaa lyhyen vastauksen", + "Enter a short answer" : "Kirjoita lyhyt vastaus", + "Long text" : "Pitkä teksti", + "Long text question title" : "Pitkä teksti -kysymyksen otsikko", + "People can enter a long text" : "Ihmiset voivat kirjoittaa pitkän tekstin", + "Enter a long text" : "Kirjoita pitkä teksti", + "Form expired" : "Lomake vanheni", + "This form has expired and is no longer taking answers" : "Lomake vanhentui, eikä se vastaanota enää vastauksia", + "Form not found" : "Lomaketta ei löytynyt", + "This form does not exist" : "Tätä lomaketta ei ole olemassa" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file From 07b6d3124d4631a9118b87da925cf4302b30b627 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Thu, 13 Aug 2020 02:37:57 +0000 Subject: [PATCH 09/55] [tx-robot] updated from transifex --- l10n/es.js | 8 ++++---- l10n/es.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/l10n/es.js b/l10n/es.js index 7633771..c798a3d 100644 --- a/l10n/es.js +++ b/l10n/es.js @@ -76,8 +76,8 @@ OC.L10N.register( "Set expiration date" : "Fijar fecha de caducidad", "Expiration date" : "Fecha de expiración", "Select expiration date" : "Selecciona fecha de expiración", - "Expired on {date}" : "Expirado el {date}", - "Expires on {date}" : "Expira el {date}", + "Expired on {date}" : "Caducado el {date}", + "Expires on {date}" : "Caduca el {date}", "Submit" : "Enviar", "Submit form" : "Enviar formulario", "Submitting form …" : "Enviando formulario…", @@ -101,8 +101,8 @@ OC.L10N.register( "Long text question title" : "Título de pregunta de respuesta extensa", "People can enter a long text" : "Quien responde puede introducir una respuesta extensa", "Enter a long text" : "Introduzca una respuesta extensa", - "Form expired" : "Formulario expirado", - "This form has expired and is no longer taking answers" : "Este formulario ha expirado y ya no acepta respuestas", + "Form expired" : "Formulario caducado", + "This form has expired and is no longer taking answers" : "Este formulario ha caducado y ya no acepta respuestas", "Form not found" : "Formulario no encontrado", "This form does not exist" : "Este formulario no existe" }, diff --git a/l10n/es.json b/l10n/es.json index 602c618..087a3c9 100644 --- a/l10n/es.json +++ b/l10n/es.json @@ -74,8 +74,8 @@ "Set expiration date" : "Fijar fecha de caducidad", "Expiration date" : "Fecha de expiración", "Select expiration date" : "Selecciona fecha de expiración", - "Expired on {date}" : "Expirado el {date}", - "Expires on {date}" : "Expira el {date}", + "Expired on {date}" : "Caducado el {date}", + "Expires on {date}" : "Caduca el {date}", "Submit" : "Enviar", "Submit form" : "Enviar formulario", "Submitting form …" : "Enviando formulario…", @@ -99,8 +99,8 @@ "Long text question title" : "Título de pregunta de respuesta extensa", "People can enter a long text" : "Quien responde puede introducir una respuesta extensa", "Enter a long text" : "Introduzca una respuesta extensa", - "Form expired" : "Formulario expirado", - "This form has expired and is no longer taking answers" : "Este formulario ha expirado y ya no acepta respuestas", + "Form expired" : "Formulario caducado", + "This form has expired and is no longer taking answers" : "Este formulario ha caducado y ya no acepta respuestas", "Form not found" : "Formulario no encontrado", "This form does not exist" : "Este formulario no existe" },"pluralForm" :"nplurals=2; plural=(n != 1);" From 840b5f9a1bdaffb6f415516d32a86a0fb90cd631 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 15 Aug 2020 01:15:39 +0000 Subject: [PATCH 10/55] Bump vue-router from 3.4.2 to 3.4.3 Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.2 to 3.4.3. - [Release notes](https://github.com/vuejs/vue-router/releases) - [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md) - [Commits](https://github.com/vuejs/vue-router/compare/v3.4.2...v3.4.3) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c07ef1..1400063 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12547,9 +12547,9 @@ "integrity": "sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==" }, "vue-router": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.2.tgz", - "integrity": "sha512-n3Ok70hW0EpcJF4lcWIwSHAQbFTnIOLl/fhO8+oTs4jHNtBNsovcVvPZeTOyKEd8C3xF1Crft2ASuOiVT5K1mw==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", + "integrity": "sha512-BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A==" }, "vue-style-loader": { "version": "4.1.2", diff --git a/package.json b/package.json index ce90f3d..7aa9af6 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "v-click-outside": "^3.0.1", "v-clipboard": "^2.2.3", "vue": "^2.6.11", - "vue-router": "^3.4.2", + "vue-router": "^3.4.3", "vuedraggable": "^2.24.0" }, "browserslist": [ From 103ec0ba1b89c7917a5649c9f38cbd556241c21c Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Wed, 19 Aug 2020 02:39:03 +0000 Subject: [PATCH 11/55] [tx-robot] updated from transifex --- l10n/nl.js | 15 +++++++++++++++ l10n/nl.json | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/l10n/nl.js b/l10n/nl.js index 5f16072..6a8d102 100644 --- a/l10n/nl.js +++ b/l10n/nl.js @@ -5,6 +5,7 @@ OC.L10N.register( "Forms" : "Formulieren", "Shared by %s" : "Gedeeld door %s", "📝 Simple surveys and questionnaires, self-hosted" : "📝 Eenvoudige enquête en vragenlijst, zelf gehost", + "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!" : "**Eenvoudige enquêtes en vragenlijsten, zelf gehost!**\n\n- **📝 Simpel design:** Geen massa opties, alleen de essentie. Werkt natuurlijk goed op mobiel.\n- **📊 Bekijk en exporteer resultaten:** Resultaten worden gevisualiseerd en kunnen ook worden geëxporteerd als CSV in hetzelfde formaat dat wordt gebruikt door Google Formulieren.\n- **🔒 Gegevens onder uw controle!**In tegenstelling tot Google Forms, Typeform, Doodle en anderen, worden de enquêtegegevens en antwoorden op uw instantie privé gehouden.\n- **🙋 Raak betrokken!** We hebben veel dingen gepland, zoals meer vraagtypen, samenwerking aan formulieren, [en nog veel meer](https://github.com/nextcloud/forms/milestones)!", "New form" : "Nieuw formulier", "Loading forms …" : "Formulieren laden ...", "No forms created yet" : "Nog geen formulieren gecreëerd", @@ -30,11 +31,13 @@ OC.L10N.register( "Title of question number {index}" : "Titel van vraag nummer {index}", "Required" : "Vereist", "Delete question" : "Verwijder vraag", + "This question needs a title!" : "Deze vraag heeft een titel nodig!", "Add a new answer" : "Voeg een nieuw antwoord toe", "There was an issue deleting this option" : "Er is een fout opgetreden bij het verwijderen van deze optie", "A long answer for the question “{text}”" : "Een lang antwoord voor vraag “{text}”", "A short answer for the question “{text}”" : "Een kort antwoord voor vraag “{text}”", "Delete this response" : "Verwijder dit antwoord", + "No response" : "Geen antwoord", "User or group name …" : "Gebruiker of groepsnaam …", "No recommendations. Start typing." : "Geen aanbevelingen. Begin te typen.", "Searching …" : "Zoeken ...", @@ -44,25 +47,32 @@ OC.L10N.register( "Toggle settings" : "Omschakelen instellingen", "Form title" : "Formuliertitel", "Description" : "Beschrijving", + "Required questions" : "Vereiste vragen", "Add a question" : "Voeg een vraag toe", "There was an error while adding the new question" : "Er trad een fout op bij het toevoegen van de nieuwe vraag", "There was an error while removing the question" : "Er trad een fout op bij het verwijderen van de vraag", "Error while saving form" : "Fout bij opslaan formulier", "Loading responses …" : "Laden reacties ...", "Back to questions" : "Terug naar vragen", + "{amount} responses" : "{amount} reacties", "Summary" : "Samenvatting", "Options" : "Opties", "Export to CSV" : "Exporteren naar CSV", "Delete all responses" : "Verwijder alle antwoorden", "No responses yet" : "Nog geen antwoorden", "Results of submitted forms will show up here" : "Resultaten van ingeleverde formulieren worden hier getoond", + "There was an error while loading the results" : "Er is een fout opgetreden bij het laden van de resultaten", "There was an error while removing this response" : "Er trad een fout op bij het verwijderen van deze reactie", "Are you sure you want to delete all responses of {title}?" : "Weet je zeker dat je alle reacties op {title} wilt verwijderen?", "There was an error while removing responses" : "Er trad een fout op bij het verwijderen van reacties", + "responses" : "reacties", + "Share form" : "Deel formulier", + "Share via link" : "Deel via link", "Show to all users of this instance" : "Toon alle gebruikers op deze server", "Choose users to share with" : "Kies gebruikers om mee te delen", "Settings" : "Instellingen", "Anonymous responses" : "Anonieme antwoorden", + "Allow multiple responses per person" : "Meerdere reacties per persoon toestaan", "Set expiration date" : "Stel vervaldatum in", "Expiration date" : "Vervaldatum", "Select expiration date" : "Selecteer vervaldatum", @@ -76,8 +86,13 @@ OC.L10N.register( "Error while saving question" : "Fout bij opslaan vraag", "Checkboxes" : "Aanvinkvakjes", "Checkbox question title" : "Aaanvinkvakje vraagtitel", + "This question needs a title and at least one answer!" : "Deze vraag heeft een titel en minimaal één antwoord nodig!", "Multiple choice" : "Meerkeuze", "Multiple choice question title" : "Meerkeuze vraag titel", + "Dropdown" : "Dropdown", + "Dropdown question title" : "Dropdown titel van de vraag", + "People can pick one option" : "Mensen kunnen één optie kiezen", + "Pick an option" : "Kies een optie", "Short answer" : "Kort antwoord", "Short answer question title" : "Kort antwoord vraagtitel", "People can enter a short answer" : "Er kan een kort antwoord worden gegeven", diff --git a/l10n/nl.json b/l10n/nl.json index 216f011..393663b 100644 --- a/l10n/nl.json +++ b/l10n/nl.json @@ -3,6 +3,7 @@ "Forms" : "Formulieren", "Shared by %s" : "Gedeeld door %s", "📝 Simple surveys and questionnaires, self-hosted" : "📝 Eenvoudige enquête en vragenlijst, zelf gehost", + "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!" : "**Eenvoudige enquêtes en vragenlijsten, zelf gehost!**\n\n- **📝 Simpel design:** Geen massa opties, alleen de essentie. Werkt natuurlijk goed op mobiel.\n- **📊 Bekijk en exporteer resultaten:** Resultaten worden gevisualiseerd en kunnen ook worden geëxporteerd als CSV in hetzelfde formaat dat wordt gebruikt door Google Formulieren.\n- **🔒 Gegevens onder uw controle!**In tegenstelling tot Google Forms, Typeform, Doodle en anderen, worden de enquêtegegevens en antwoorden op uw instantie privé gehouden.\n- **🙋 Raak betrokken!** We hebben veel dingen gepland, zoals meer vraagtypen, samenwerking aan formulieren, [en nog veel meer](https://github.com/nextcloud/forms/milestones)!", "New form" : "Nieuw formulier", "Loading forms …" : "Formulieren laden ...", "No forms created yet" : "Nog geen formulieren gecreëerd", @@ -28,11 +29,13 @@ "Title of question number {index}" : "Titel van vraag nummer {index}", "Required" : "Vereist", "Delete question" : "Verwijder vraag", + "This question needs a title!" : "Deze vraag heeft een titel nodig!", "Add a new answer" : "Voeg een nieuw antwoord toe", "There was an issue deleting this option" : "Er is een fout opgetreden bij het verwijderen van deze optie", "A long answer for the question “{text}”" : "Een lang antwoord voor vraag “{text}”", "A short answer for the question “{text}”" : "Een kort antwoord voor vraag “{text}”", "Delete this response" : "Verwijder dit antwoord", + "No response" : "Geen antwoord", "User or group name …" : "Gebruiker of groepsnaam …", "No recommendations. Start typing." : "Geen aanbevelingen. Begin te typen.", "Searching …" : "Zoeken ...", @@ -42,25 +45,32 @@ "Toggle settings" : "Omschakelen instellingen", "Form title" : "Formuliertitel", "Description" : "Beschrijving", + "Required questions" : "Vereiste vragen", "Add a question" : "Voeg een vraag toe", "There was an error while adding the new question" : "Er trad een fout op bij het toevoegen van de nieuwe vraag", "There was an error while removing the question" : "Er trad een fout op bij het verwijderen van de vraag", "Error while saving form" : "Fout bij opslaan formulier", "Loading responses …" : "Laden reacties ...", "Back to questions" : "Terug naar vragen", + "{amount} responses" : "{amount} reacties", "Summary" : "Samenvatting", "Options" : "Opties", "Export to CSV" : "Exporteren naar CSV", "Delete all responses" : "Verwijder alle antwoorden", "No responses yet" : "Nog geen antwoorden", "Results of submitted forms will show up here" : "Resultaten van ingeleverde formulieren worden hier getoond", + "There was an error while loading the results" : "Er is een fout opgetreden bij het laden van de resultaten", "There was an error while removing this response" : "Er trad een fout op bij het verwijderen van deze reactie", "Are you sure you want to delete all responses of {title}?" : "Weet je zeker dat je alle reacties op {title} wilt verwijderen?", "There was an error while removing responses" : "Er trad een fout op bij het verwijderen van reacties", + "responses" : "reacties", + "Share form" : "Deel formulier", + "Share via link" : "Deel via link", "Show to all users of this instance" : "Toon alle gebruikers op deze server", "Choose users to share with" : "Kies gebruikers om mee te delen", "Settings" : "Instellingen", "Anonymous responses" : "Anonieme antwoorden", + "Allow multiple responses per person" : "Meerdere reacties per persoon toestaan", "Set expiration date" : "Stel vervaldatum in", "Expiration date" : "Vervaldatum", "Select expiration date" : "Selecteer vervaldatum", @@ -74,8 +84,13 @@ "Error while saving question" : "Fout bij opslaan vraag", "Checkboxes" : "Aanvinkvakjes", "Checkbox question title" : "Aaanvinkvakje vraagtitel", + "This question needs a title and at least one answer!" : "Deze vraag heeft een titel en minimaal één antwoord nodig!", "Multiple choice" : "Meerkeuze", "Multiple choice question title" : "Meerkeuze vraag titel", + "Dropdown" : "Dropdown", + "Dropdown question title" : "Dropdown titel van de vraag", + "People can pick one option" : "Mensen kunnen één optie kiezen", + "Pick an option" : "Kies een optie", "Short answer" : "Kort antwoord", "Short answer question title" : "Kort antwoord vraagtitel", "People can enter a short answer" : "Er kan een kort antwoord worden gegeven", From dd7dcdd3d31748814155dc73f2d575d3eaabb637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Thu, 20 Aug 2020 14:50:10 +0200 Subject: [PATCH 12/55] 2.0.3 --- CHANGELOG.md | 8 ++++++++ appinfo/info.xml | 2 +- package-lock.json | 2 +- package.json | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ea186a..4a82cc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## v2.0.3 - 2020-08-20 + +[Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.2...v2.0.3) + +### Merged +- Translations update +- Dependencies update + ## v2.0.2 - 2020-07-30 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.1...v2.0.2) diff --git a/appinfo/info.xml b/appinfo/info.xml index 3de70d8..ef42f78 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -11,7 +11,7 @@ - **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance. - **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)! ]]> - 2.0.2 + 2.0.3 agpl Affan Hussain diff --git a/package-lock.json b/package-lock.json index 1400063..9c8635b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "forms", - "version": "2.0.2", + "version": "2.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7aa9af6..05df3a8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "forms", "description": "Forms app for nextcloud", - "version": "2.0.2", + "version": "2.0.3", "repository": { "type": "git", "url": "git+https://github.com/nextcloud/forms.git" From f66731d463cd2e03310717e034729caacd30065e Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Fri, 21 Aug 2020 02:37:45 +0000 Subject: [PATCH 13/55] [tx-robot] updated from transifex --- l10n/sl.js | 7 +++++++ l10n/sl.json | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/l10n/sl.js b/l10n/sl.js index 733ae83..676528b 100644 --- a/l10n/sl.js +++ b/l10n/sl.js @@ -19,6 +19,9 @@ OC.L10N.register( "Cannot copy, please copy the link manually" : "Povezave ni mogoče kopirati. Storite to ročno.", "Copy share link" : "Kopiraj povezavo souporabe", "Are you sure you want to delete {title}?" : "Ali ste prepričani, da želite izbrisati vprašalnik {title}?", + "Error while deleting {title}" : "Napaka med brisanjem {title}", + "An answer for the {index} option" : "Odgovor za možnost {index}", + "Answer number {index}" : "Odgovor številka {index}", "Delete answer" : "Izbriši odgovor", "Error while saving the answer" : "Prišlo je do napake med shranjevanjem odgovora", "Question number {index}" : "Vprašanje številka {index}", @@ -26,11 +29,13 @@ OC.L10N.register( "Title of question number {index}" : "Naslov vprašanja številka {index}", "Required" : "Zahtevano", "Delete question" : "Izbriši vprašanje", + "This question needs a title!" : "To vprašanje zahteva naslov", "Add a new answer" : "Dodaj nov odgovor", "There was an issue deleting this option" : "Prišlo je do napake med brisanjem možnosti", "A long answer for the question “{text}”" : "Dolg odgovor na vprašanje »{text}«", "A short answer for the question “{text}”" : "Kratek odgovor na vprašanje »{text}«", "Delete this response" : "Izbriši ta odziv", + "No response" : "Ni odziva", "User or group name …" : "Ime uporabnika oziroma skupine ...", "No recommendations. Start typing." : "Ni priporočil; začnite vpisovati", "Searching …" : "Poteka iskanje ...", @@ -40,12 +45,14 @@ OC.L10N.register( "Toggle settings" : "Preklopi nastavitve", "Form title" : "Naslov vprašalnika", "Description" : "Opis", + "Required questions" : "Zahtevana vprašanja", "Add a question" : "Dodaj vprašanje", "There was an error while adding the new question" : "Prišlo je do napake med dodajanjem novega vprašanja", "There was an error while removing the question" : "Prišlo je do napake med odstranjevanjem vprašanja", "Error while saving form" : "Prišlo je do napake med shranjevanjem vprašalnika", "Loading responses …" : "Poteka nalaganje odzivov ...", "Back to questions" : "Nazaj na vprašanja", + "{amount} responses" : "odzivov {amount}", "Summary" : "Povzetek", "Options" : "Možnosti", "Export to CSV" : "Izvozi v datoteko CSV", diff --git a/l10n/sl.json b/l10n/sl.json index c0ad1de..9c4f34c 100644 --- a/l10n/sl.json +++ b/l10n/sl.json @@ -17,6 +17,9 @@ "Cannot copy, please copy the link manually" : "Povezave ni mogoče kopirati. Storite to ročno.", "Copy share link" : "Kopiraj povezavo souporabe", "Are you sure you want to delete {title}?" : "Ali ste prepričani, da želite izbrisati vprašalnik {title}?", + "Error while deleting {title}" : "Napaka med brisanjem {title}", + "An answer for the {index} option" : "Odgovor za možnost {index}", + "Answer number {index}" : "Odgovor številka {index}", "Delete answer" : "Izbriši odgovor", "Error while saving the answer" : "Prišlo je do napake med shranjevanjem odgovora", "Question number {index}" : "Vprašanje številka {index}", @@ -24,11 +27,13 @@ "Title of question number {index}" : "Naslov vprašanja številka {index}", "Required" : "Zahtevano", "Delete question" : "Izbriši vprašanje", + "This question needs a title!" : "To vprašanje zahteva naslov", "Add a new answer" : "Dodaj nov odgovor", "There was an issue deleting this option" : "Prišlo je do napake med brisanjem možnosti", "A long answer for the question “{text}”" : "Dolg odgovor na vprašanje »{text}«", "A short answer for the question “{text}”" : "Kratek odgovor na vprašanje »{text}«", "Delete this response" : "Izbriši ta odziv", + "No response" : "Ni odziva", "User or group name …" : "Ime uporabnika oziroma skupine ...", "No recommendations. Start typing." : "Ni priporočil; začnite vpisovati", "Searching …" : "Poteka iskanje ...", @@ -38,12 +43,14 @@ "Toggle settings" : "Preklopi nastavitve", "Form title" : "Naslov vprašalnika", "Description" : "Opis", + "Required questions" : "Zahtevana vprašanja", "Add a question" : "Dodaj vprašanje", "There was an error while adding the new question" : "Prišlo je do napake med dodajanjem novega vprašanja", "There was an error while removing the question" : "Prišlo je do napake med odstranjevanjem vprašanja", "Error while saving form" : "Prišlo je do napake med shranjevanjem vprašalnika", "Loading responses …" : "Poteka nalaganje odzivov ...", "Back to questions" : "Nazaj na vprašanja", + "{amount} responses" : "odzivov {amount}", "Summary" : "Povzetek", "Options" : "Možnosti", "Export to CSV" : "Izvozi v datoteko CSV", From fc9ed31f15d64aa11fbb1cf6a12e460eec0893b7 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:17:36 +0000 Subject: [PATCH 14/55] Bump vue and vue-template-compiler Bumps [vue](https://github.com/vuejs/vue) and [vue-template-compiler](https://github.com/vuejs/vue). These dependencies needed to be updated together. Updates `vue` from 2.6.11 to 2.6.12 - [Release notes](https://github.com/vuejs/vue/releases) - [Commits](https://github.com/vuejs/vue/compare/v2.6.11...v2.6.12) Updates `vue-template-compiler` from 2.6.11 to 2.6.12 - [Release notes](https://github.com/vuejs/vue/releases) - [Commits](https://github.com/vuejs/vue/compare/v2.6.11...v2.6.12) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 12 ++++++------ package.json | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c8635b..866c8a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12456,9 +12456,9 @@ "dev": true }, "vue": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", - "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" }, "vue-color": { "version": "2.7.1", @@ -12562,9 +12562,9 @@ } }, "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", diff --git a/package.json b/package.json index 05df3a8..3c28fa1 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "regenerator-runtime": "^0.13.7", "v-click-outside": "^3.0.1", "v-clipboard": "^2.2.3", - "vue": "^2.6.11", + "vue": "^2.6.12", "vue-router": "^3.4.3", "vuedraggable": "^2.24.0" }, @@ -80,7 +80,7 @@ "url-loader": "^4.1.0", "vue-loader": "^15.9.3", "vue-style-loader": "^4.1.1", - "vue-template-compiler": "^2.6.11", + "vue-template-compiler": "^2.6.12", "webpack": "^4.44.1", "webpack-cli": "^3.3.12", "webpack-merge": "^5.1.1" From 3a412e11619c55ca9e13c940f46052403cdeee98 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:18:15 +0000 Subject: [PATCH 15/55] Bump webpack-merge from 5.1.1 to 5.1.2 Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.1.1 to 5.1.2. - [Release notes](https://github.com/survivejs/webpack-merge/releases) - [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md) - [Commits](https://github.com/survivejs/webpack-merge/compare/v5.1.1...v5.1.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c8635b..26d89b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12967,9 +12967,9 @@ } }, "webpack-merge": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.1.1.tgz", - "integrity": "sha512-UhIkHAVqeG9EqFfYo7dRELrVfH6HYaOTYM7ssKCwfIIHYnWepGVOFp1E166GwgPGFqV6M68UgRiKOERjVOKIXA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.1.2.tgz", + "integrity": "sha512-/slG0Kh0OKTf0zxdFJlhQHzv8bU9gUYVK5DkBjB3i/yoc1Xx4ADG0KITGO5S/6cqn2Ug43+8VR6Sz8daA/c+5g==", "dev": true, "requires": { "clone-deep": "^4.0.1", diff --git a/package.json b/package.json index 05df3a8..ef35c06 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,6 @@ "vue-template-compiler": "^2.6.11", "webpack": "^4.44.1", "webpack-cli": "^3.3.12", - "webpack-merge": "^5.1.1" + "webpack-merge": "^5.1.2" } } From 339b245a009221432d63f1c8cd5b4b1bf0f1ee7f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:19:03 +0000 Subject: [PATCH 16/55] Bump @babel/core from 7.11.1 to 7.11.4 Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.1 to 7.11.4. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.11.4/packages/babel-core) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 34 +++++++++++++++++----------------- package.json | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c8635b..109917a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,15 +52,15 @@ } }, "@babel/core": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", - "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", + "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.11.4", "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.1", + "@babel/parser": "^7.11.4", "@babel/template": "^7.10.4", "@babel/traverse": "^7.11.0", "@babel/types": "^7.11.0", @@ -83,9 +83,9 @@ } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", + "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", "requires": { "@babel/types": "^7.11.0", "jsesc": "^2.5.1", @@ -134,9 +134,9 @@ } }, "@babel/parser": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.2.tgz", - "integrity": "sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw==" + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==" }, "@babel/template": { "version": "7.10.4", @@ -1289,9 +1289,9 @@ } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", + "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", "requires": { "@babel/types": "^7.11.0", "jsesc": "^2.5.1", @@ -1340,9 +1340,9 @@ } }, "@babel/parser": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.2.tgz", - "integrity": "sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw==" + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", + "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==" }, "@babel/template": { "version": "7.10.4", diff --git a/package.json b/package.json index 05df3a8..4dea17c 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "node": ">=10.0.0" }, "devDependencies": { - "@babel/core": "^7.11.1", + "@babel/core": "^7.11.4", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/preset-env": "^7.11.0", "@nextcloud/browserslist-config": "^1.0.0", From 137a152e90d14b26aeb494d358d6472802c47ee7 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:19:56 +0000 Subject: [PATCH 17/55] Bump p-queue from 6.6.0 to 6.6.1 Bumps [p-queue](https://github.com/sindresorhus/p-queue) from 6.6.0 to 6.6.1. - [Release notes](https://github.com/sindresorhus/p-queue/releases) - [Commits](https://github.com/sindresorhus/p-queue/compare/v6.6.0...v6.6.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c8635b..e77adb4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9167,9 +9167,9 @@ } }, "p-queue": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.0.tgz", - "integrity": "sha512-zPHXPNy9jZsiym0PpJjvnHQysx1fSd/QdaNVwiDRLU2KFChD6h9CkCB6b8i3U8lBwJyA+mHgNZCzcy77glUssQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.1.tgz", + "integrity": "sha512-miQiSxLYPYBxGkrldecZC18OTLjdUqnlRebGzPRiVxB8mco7usCmm7hFuxiTvp93K18JnLtE4KMMycjAu/cQQg==", "requires": { "eventemitter3": "^4.0.4", "p-timeout": "^3.1.0" diff --git a/package.json b/package.json index 05df3a8..1d72c28 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "debounce": "^1.2.0", "json2csv": "5.0.1", "p-debounce": "^2.1.0", - "p-queue": "^6.6.0", + "p-queue": "^6.6.1", "regenerator-runtime": "^0.13.7", "v-click-outside": "^3.0.1", "v-clipboard": "^2.2.3", From 2497148d32aac821c60585627990948c8ee44f78 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:20:49 +0000 Subject: [PATCH 18/55] Bump @nextcloud/vue from 2.3.0 to 2.6.0 Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.3.0 to 2.6.0. - [Release notes](https://github.com/nextcloud/nextcloud-vue/releases) - [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.3.0...v2.6.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 52 +++++++++++++++++++++++++++++++---------------- package.json | 2 +- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c8635b..a17908a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2723,6 +2723,15 @@ "integrity": "sha512-f+sKpdLZXkODV+OY39K1M+Spmd4RgxmtEXmNn4Bviv4R7uBFHXuw+JX9ZdfDeOryfHjJ/TRQxQEp0GMpBwZFUw==", "dev": true }, + "@nextcloud/capabilities": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.0.2.tgz", + "integrity": "sha512-HR5vnT2GKTvoQla/WdP+V0/MD1eAGUNWCM0QXVGXQ0TCHb0AORYYMdEQafROsjNSH2kriArFnS/l3YZQrUa9yA==", + "requires": { + "@nextcloud/initial-state": "^1.1.2", + "core-js": "^3.6.4" + } + }, "@nextcloud/dialogs": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-1.4.0.tgz", @@ -2852,20 +2861,22 @@ } }, "@nextcloud/vue": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-2.3.0.tgz", - "integrity": "sha512-6uf7Hu4Obaet7BOs9H/Ng63xAYqks9CL7hsOOHGUzWFYrPPBxgt79iD9OOPpPfJuLQ3Nnuibh942X1QreCBRkw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-2.6.0.tgz", + "integrity": "sha512-SzPXwxtbbc4BIUl4BhC7+8kDzgXG+Adr9W7x+hQdr/TuOhunVwcXOKGhyZgWew17oOCsd2c2ltrojhUiCmWjjg==", "requires": { "@nextcloud/auth": "^1.2.3", "@nextcloud/axios": "^1.3.2", - "@nextcloud/dialogs": "^1.3.0", + "@nextcloud/capabilities": "^1.0.2", + "@nextcloud/dialogs": "^1.4.0", "@nextcloud/event-bus": "^1.1.4", "@nextcloud/l10n": "^1.2.3", "@nextcloud/router": "^1.0.2", "core-js": "^3.6.5", "debounce": "1.2.0", - "emoji-mart-vue-fast": "^7.0.2", + "emoji-mart-vue-fast": "^7.0.4", "hammerjs": "^2.0.8", + "linkifyjs": "~2.1.9", "md5": "^2.2.1", "regenerator-runtime": "^0.13.5", "v-click-outside": "^3.0.1", @@ -2874,7 +2885,7 @@ "vue-color": "^2.7.1", "vue-multiselect": "^2.1.6", "vue-visible": "^1.0.2", - "vue2-datepicker": "^3.4.1" + "vue2-datepicker": "^3.6.2" } }, "@nextcloud/webpack-vue-config": { @@ -5192,9 +5203,9 @@ } }, "emoji-mart-vue-fast": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-7.0.2.tgz", - "integrity": "sha512-7OftneG98Jb9wkJgPBeUdEWrMMdGvd08erHMjNviKSuQSBsBAIFnQyW7lroBZ+dLT7uTZKuZfWdWwUfWpk965w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-7.0.4.tgz", + "integrity": "sha512-VZuyclCe7ZNPhSvt7WT258MscqRBZTB2Is/7vBilCXgpiZqByaA4AhM1xdIIZZik/aA+5BQiZVmbsDK0jk78Eg==", "requires": { "@babel/polyfill": "7.2.5", "@babel/runtime": "7.3.4", @@ -8168,6 +8179,11 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "linkifyjs": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz", + "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==" + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -8391,13 +8407,13 @@ "dev": true }, "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, "md5.js": { @@ -12593,9 +12609,9 @@ "integrity": "sha512-yaX2its9XAJKGuQqf7LsiZHHSkxsIK8rmCOQOvEGEoF41blKRK8qr9my4qYoD6ikdLss4n8tKqYBecmaY0+WJg==" }, "vue2-datepicker": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.6.1.tgz", - "integrity": "sha512-U6iQWSDsNoq/u6QJCtAMcyWlcZSx0rmPmqaJ8LQtGvwu9x12jXDoe3YNeG4y7E45OYAMLXs9WzGkDqDmNj3jkw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.6.2.tgz", + "integrity": "sha512-J2fCwUmCxIOPUvwQ12e8evFY9cCv6vJmgxRD9fGeUv6JeMMeLwkdpeQZOcqbMf/4mk1cSrY2/9Fr8DaB30LBpA==", "requires": { "date-fns": "^2.0.1", "date-format-parse": "^0.2.5" diff --git a/package.json b/package.json index 05df3a8..8cb8d3c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@nextcloud/l10n": "^1.3.0", "@nextcloud/moment": "^1.1.1", "@nextcloud/router": "^1.1.0", - "@nextcloud/vue": "^2.3.0", + "@nextcloud/vue": "^2.6.0", "core-js": "^3.6.5", "crypto-js": "^4.0.0", "debounce": "^1.2.0", From 9eac12fdab7a09f7fb273ec17009aa29dedc9795 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:26:15 +0000 Subject: [PATCH 19/55] Bump vuedraggable from 2.24.0 to 2.24.1 Bumps [vuedraggable](https://github.com/SortableJS/Vue.Draggable) from 2.24.0 to 2.24.1. - [Release notes](https://github.com/SortableJS/Vue.Draggable/releases) - [Commits](https://github.com/SortableJS/Vue.Draggable/commits) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b7ac35..7f5ff46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12602,9 +12602,9 @@ } }, "vuedraggable": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.0.tgz", - "integrity": "sha512-IlslPpc+iZ2zPNSJbydFZIDrE+don5u+Nc/bjT2YaF+Azidc+wxxJKfKT0NwE68AKk0syb0YbZneAcnynqREZQ==", + "version": "2.24.1", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.1.tgz", + "integrity": "sha512-G1fxO1oshx+WLdieSGl6jSJdlHOQFga1FpjuUpgXldbpKNzxpjsGn4xYNnRHVrOAqm8aG5FfpdQlh5LHesxCeA==", "requires": { "sortablejs": "^1.10.1" } diff --git a/package.json b/package.json index 0d46296..97eb1ed 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "v-clipboard": "^2.2.3", "vue": "^2.6.12", "vue-router": "^3.4.3", - "vuedraggable": "^2.24.0" + "vuedraggable": "^2.24.1" }, "browserslist": [ "extends @nextcloud/browserslist-config" From 292edb7e98b8aa02a8da046deda3c00b254100f8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:31:33 +0000 Subject: [PATCH 20/55] Bump @nextcloud/dialogs from 1.4.0 to 2.0.0 Bumps [@nextcloud/dialogs](https://github.com/nextcloud/nextcloud-dialogs) from 1.4.0 to 2.0.0. - [Release notes](https://github.com/nextcloud/nextcloud-dialogs/releases) - [Changelog](https://github.com/nextcloud/nextcloud-dialogs/blob/master/CHANGELOG.md) - [Commits](https://github.com/nextcloud/nextcloud-dialogs/compare/v1.4.0...v2.0.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 38 ++++++++++++++++++++++++++++++-------- package.json | 2 +- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5753585..3569c40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2733,12 +2733,23 @@ } }, "@nextcloud/dialogs": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-1.4.0.tgz", - "integrity": "sha512-Rx4x+al/sy+vXu2p3qvEuVeeUDm5JVwa84S21Hxa+pDV3Pd93E2dJGWlZ6h++5fSXbee1sDX9t957B20kYiP3Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-2.0.0.tgz", + "integrity": "sha512-iPZMKAYs09g+zJXzrkHo71RVXAhtSw4+YSA/2FhUeWBtlJBcFYsxUW6gmgnhGU+3UTptjyPrl4hvIqgLU8p6BA==", "requires": { - "core-js": "^3.6.4", - "toastify-js": "^1.7.0" + "@nextcloud/l10n": "^1.3.0", + "@nextcloud/typings": "^0.2.2", + "core-js": "^3.6.4" + }, + "dependencies": { + "@nextcloud/typings": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-0.2.2.tgz", + "integrity": "sha512-LZrv1VV3vyDaKw4UKMcGM9dvLMpdI2tfMexHf/ixVn6OrsRDsRTbxByWMMdRF2ArHD5Q8RsICa72p6BcG9b80Q==", + "requires": { + "@types/jquery": "2.0.54" + } + } } }, "@nextcloud/eslint-config": { @@ -2886,6 +2897,17 @@ "vue-multiselect": "^2.1.6", "vue-visible": "^1.0.2", "vue2-datepicker": "^3.6.2" + }, + "dependencies": { + "@nextcloud/dialogs": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-1.4.0.tgz", + "integrity": "sha512-Rx4x+al/sy+vXu2p3qvEuVeeUDm5JVwa84S21Hxa+pDV3Pd93E2dJGWlZ6h++5fSXbee1sDX9t957B20kYiP3Q==", + "requires": { + "core-js": "^3.6.4", + "toastify-js": "^1.7.0" + } + } } }, "@nextcloud/webpack-vue-config": { @@ -11939,9 +11961,9 @@ } }, "toastify-js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.8.0.tgz", - "integrity": "sha512-0Zf1sQ6Cs5RrRRDox00+6XdgS2tOtn01P9zhxDcJIpDS0KbXg/dFE1F0Mo6b/o63oJsxIhleeZv9LeZb31yKSg==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.9.1.tgz", + "integrity": "sha512-B3LTJURySMix/xWqVHyj2XGVsIHesb4euGVuIaFfKxfmjM4F6HMgbW9V66DHUEt98jGlGpeTWSiSJ78UfrJVbA==" }, "tough-cookie": { "version": "2.5.0", diff --git a/package.json b/package.json index 8f01a5c..387cd7f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@nextcloud/auth": "^1.3.0", "@nextcloud/axios": "^1.3.3", - "@nextcloud/dialogs": "^1.4.0", + "@nextcloud/dialogs": "^2.0.0", "@nextcloud/event-bus": "^1.2.0", "@nextcloud/initial-state": "^1.1.2", "@nextcloud/l10n": "^1.3.0", From 8adeb4c892adb8a469a25dbd3513029bdd5def80 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sat, 22 Aug 2020 02:37:20 +0000 Subject: [PATCH 21/55] [tx-robot] updated from transifex --- l10n/pt_BR.js | 2 +- l10n/pt_BR.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js index 315828f..c3f6d9c 100644 --- a/l10n/pt_BR.js +++ b/l10n/pt_BR.js @@ -29,7 +29,7 @@ OC.L10N.register( "Question number {index}" : "Pergunta número {index}", "Drag to reorder the questions" : "Arraste para reordenar as perguntas", "Title of question number {index}" : "O título da pergunta número {index}", - "Required" : "Requerido", + "Required" : "Obrigatório", "Delete question" : "Excluir pergunta", "This question needs a title!" : "Esta pergunta precisa de um título!", "Add a new answer" : "Adicionar uma nova resposta", diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json index af0f4e8..2f116ba 100644 --- a/l10n/pt_BR.json +++ b/l10n/pt_BR.json @@ -27,7 +27,7 @@ "Question number {index}" : "Pergunta número {index}", "Drag to reorder the questions" : "Arraste para reordenar as perguntas", "Title of question number {index}" : "O título da pergunta número {index}", - "Required" : "Requerido", + "Required" : "Obrigatório", "Delete question" : "Excluir pergunta", "This question needs a title!" : "Esta pergunta precisa de um título!", "Add a new answer" : "Adicionar uma nova resposta", From b42991eff2281ff300c3b1b850144d6424e08625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Sat, 22 Aug 2020 09:20:29 +0200 Subject: [PATCH 22/55] Add url loader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- webpack.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/webpack.js b/webpack.js index 0926799..ada8c4c 100644 --- a/webpack.js +++ b/webpack.js @@ -7,6 +7,14 @@ const config = { entry: { submit: path.resolve(path.join('src', 'submit.js')), }, + module: { + rules: [ + { + test: /\.svg$/, + use: 'url-loader', + }, + ], + }, plugins: [ new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), ], From ca05e8c39fa90ebcb6e116fde8a3f778e713c8fd Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sun, 23 Aug 2020 02:37:43 +0000 Subject: [PATCH 23/55] [tx-robot] updated from transifex --- l10n/gl.js | 2 +- l10n/gl.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/l10n/gl.js b/l10n/gl.js index dad5fe4..22a008b 100644 --- a/l10n/gl.js +++ b/l10n/gl.js @@ -85,7 +85,7 @@ OC.L10N.register( "There was an error submitting the form" : "Produciuse un erro no envío do formulario", "Error while saving question" : "Produciuse un erro ao gardar a pregunta", "Checkboxes" : "Caixas de verificación", - "Checkbox question title" : "Título da pregunta da caixa de verificación", + "Checkbox question title" : "Título da pregunta da caixa de selección", "This question needs a title and at least one answer!" : "Esta pregunta necesita un título e polo menos unha resposta.", "Multiple choice" : "Escolla múltiple", "Multiple choice question title" : "Título da pregunta de escolla múltiple", diff --git a/l10n/gl.json b/l10n/gl.json index 12eca08..d4fa583 100644 --- a/l10n/gl.json +++ b/l10n/gl.json @@ -83,7 +83,7 @@ "There was an error submitting the form" : "Produciuse un erro no envío do formulario", "Error while saving question" : "Produciuse un erro ao gardar a pregunta", "Checkboxes" : "Caixas de verificación", - "Checkbox question title" : "Título da pregunta da caixa de verificación", + "Checkbox question title" : "Título da pregunta da caixa de selección", "This question needs a title and at least one answer!" : "Esta pregunta necesita un título e polo menos unha resposta.", "Multiple choice" : "Escolla múltiple", "Multiple choice question title" : "Título da pregunta de escolla múltiple", From 73df98c2265e966f75a4bc4b228d48981a549cf5 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Mon, 24 Aug 2020 02:37:48 +0000 Subject: [PATCH 24/55] [tx-robot] updated from transifex --- l10n/ca.js | 28 ++++++++++++++++++++++++++-- l10n/ca.json | 28 ++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/l10n/ca.js b/l10n/ca.js index 68e27fe..9d3db55 100644 --- a/l10n/ca.js +++ b/l10n/ca.js @@ -4,6 +4,8 @@ OC.L10N.register( "Anonymous response" : "Resposta anònima", "Forms" : "Formularis", "Shared by %s" : "Compartit per %s", + "📝 Simple surveys and questionnaires, self-hosted" : "📝 Simples enquestes i qüestionaris, auto-allotjats", + "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!" : "**Enquestes simples i qüestionaris, auto-allotjats!**\n\n- **📝 Disseny simple:** No hi ha massa d'opcions, només l'essencial. Funciona bé en mòbil, per descomptat.\n- **📊 Veure i exportar resultats:** Els resultats es visualitzen i també es poden exportar com CSV en el mateix format utilitzat per Google Forms.\n- **🔒 Dades sota el seu control!** A diferència de Google Forms, Typeform, Doodle i altres, la informació de l'enquesta i respostes es mantenen privades en la seva instància.\n- **🙋 Involucra't!** Tenim un munt de coses planificades com més tipus de preguntes, col·laboració en formularis, [i molt més](https://github.com/nextcloud/forms/milestones)!", "New form" : "Nou formulari", "Loading forms …" : "Carregant formularis …", "No forms created yet" : "No hi ha formularis creats encara", @@ -29,39 +31,48 @@ OC.L10N.register( "Title of question number {index}" : "Títol del número de pregunta {index}", "Required" : "Obligatori", "Delete question" : "Suprimeix la pregunta", + "This question needs a title!" : "Aquesta pregunta necessita un títol!", "Add a new answer" : "Afegir una nova resposta", "There was an issue deleting this option" : "Hi ha hagut un problema en suprimir aquesta opció", "A long answer for the question “{text}”" : "Una resposta llarga per a la pregunta \"{text}\"", "A short answer for the question “{text}”" : "Una resposta curta per a la pregunta \"{text}\"", "Delete this response" : "Suprimir aquesta resposta", - "User or group name …" : "Nom d'usuari o de grup ...", + "No response" : "Cap resposta", + "User or group name …" : "Nom d'usuari o de grup …", "No recommendations. Start typing." : "No hi ha recomanacions. Comenceu a escriure.", - "Searching …" : "Cercant ...", + "Searching …" : "Cercant …", "No elements found." : "No s’han trobat elements.", "Group" : "Grup", "Loading {title} …" : "Carregant {title} …", "Toggle settings" : "Canviar configuració", "Form title" : "Títol del formulari", "Description" : "Descripció", + "Required questions" : "Preguntes necessàries", "Add a question" : "Afegir una pregunta", "There was an error while adding the new question" : "Hi ha hagut un error en afegir la nova pregunta", "There was an error while removing the question" : "Hi ha hagut un error en eliminar la pregunta", "Error while saving form" : "Error en desar el formulari", "Loading responses …" : "Carregant respostes …", "Back to questions" : "Tornar a preguntes", + "{amount} responses" : "{amount} respostes", "Summary" : "Resum", "Options" : "Opcions", "Export to CSV" : "Exporta a CSV", "Delete all responses" : "Suprimeix totes les respostes", "No responses yet" : "No hi ha respostes encara", "Results of submitted forms will show up here" : "Els resultats dels formularis enviats es mostraran aquí", + "There was an error while loading the results" : "Error en carregar els resultats", "There was an error while removing this response" : "Hi ha hagut un error en eliminar aquesta resposta", "Are you sure you want to delete all responses of {title}?" : "Esteu segur que voleu suprimir totes les respostes de {title}?", "There was an error while removing responses" : "Hi ha hagut un error en eliminar respostes", + "responses" : "respostes", + "Share form" : "Compartir formulari", + "Share via link" : "Compartir a través d'enllaç", "Show to all users of this instance" : "Mostrar a tots els usuaris d'aquesta instància", "Choose users to share with" : "Trieu usuaris per compartir-lo", "Settings" : "Paràmetres", "Anonymous responses" : "Respostes anònimes", + "Allow multiple responses per person" : "Permet múltiples respostes per persona", "Set expiration date" : "Establiu una data de caducitat", "Expiration date" : "Data de venciment", "Select expiration date" : "Seleccionar la data de caducitat", @@ -74,9 +85,22 @@ OC.L10N.register( "There was an error submitting the form" : "Error en enviar el formulari", "Error while saving question" : "Error en desar la pregunta", "Checkboxes" : "Caselles de verificació", + "Checkbox question title" : "Títol de la pregunta de la casella de selecció", + "This question needs a title and at least one answer!" : "Aquesta pregunta necessita un títol i almenys una resposta!", "Multiple choice" : "Qüestionari d'elecció múltiple", + "Multiple choice question title" : "Títol de la pregunta d'elecció múltiple", + "Dropdown" : "Desplegable", + "Dropdown question title" : "Títol de la pregunta desplegable", + "People can pick one option" : "La gent pot triar una opció", + "Pick an option" : "Tria una opció", "Short answer" : "Resposta curta", + "Short answer question title" : "Títol de la pregunta de resposta curta", + "People can enter a short answer" : "La gent pot introduir una resposta curta", + "Enter a short answer" : "Introduïu una resposta curta", "Long text" : "Text llarg", + "Long text question title" : "Títol de la pregunta de text llarg", + "People can enter a long text" : "La gent pot introduir un text llarg", + "Enter a long text" : "Introduïu un text llarg", "Form expired" : "Formulari caducat", "This form has expired and is no longer taking answers" : "Aquest formulari ha caducat i ja no està prenent respostes", "Form not found" : "No s’ha trobat el formulari", diff --git a/l10n/ca.json b/l10n/ca.json index 52cd9b8..e478734 100644 --- a/l10n/ca.json +++ b/l10n/ca.json @@ -2,6 +2,8 @@ "Anonymous response" : "Resposta anònima", "Forms" : "Formularis", "Shared by %s" : "Compartit per %s", + "📝 Simple surveys and questionnaires, self-hosted" : "📝 Simples enquestes i qüestionaris, auto-allotjats", + "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!" : "**Enquestes simples i qüestionaris, auto-allotjats!**\n\n- **📝 Disseny simple:** No hi ha massa d'opcions, només l'essencial. Funciona bé en mòbil, per descomptat.\n- **📊 Veure i exportar resultats:** Els resultats es visualitzen i també es poden exportar com CSV en el mateix format utilitzat per Google Forms.\n- **🔒 Dades sota el seu control!** A diferència de Google Forms, Typeform, Doodle i altres, la informació de l'enquesta i respostes es mantenen privades en la seva instància.\n- **🙋 Involucra't!** Tenim un munt de coses planificades com més tipus de preguntes, col·laboració en formularis, [i molt més](https://github.com/nextcloud/forms/milestones)!", "New form" : "Nou formulari", "Loading forms …" : "Carregant formularis …", "No forms created yet" : "No hi ha formularis creats encara", @@ -27,39 +29,48 @@ "Title of question number {index}" : "Títol del número de pregunta {index}", "Required" : "Obligatori", "Delete question" : "Suprimeix la pregunta", + "This question needs a title!" : "Aquesta pregunta necessita un títol!", "Add a new answer" : "Afegir una nova resposta", "There was an issue deleting this option" : "Hi ha hagut un problema en suprimir aquesta opció", "A long answer for the question “{text}”" : "Una resposta llarga per a la pregunta \"{text}\"", "A short answer for the question “{text}”" : "Una resposta curta per a la pregunta \"{text}\"", "Delete this response" : "Suprimir aquesta resposta", - "User or group name …" : "Nom d'usuari o de grup ...", + "No response" : "Cap resposta", + "User or group name …" : "Nom d'usuari o de grup …", "No recommendations. Start typing." : "No hi ha recomanacions. Comenceu a escriure.", - "Searching …" : "Cercant ...", + "Searching …" : "Cercant …", "No elements found." : "No s’han trobat elements.", "Group" : "Grup", "Loading {title} …" : "Carregant {title} …", "Toggle settings" : "Canviar configuració", "Form title" : "Títol del formulari", "Description" : "Descripció", + "Required questions" : "Preguntes necessàries", "Add a question" : "Afegir una pregunta", "There was an error while adding the new question" : "Hi ha hagut un error en afegir la nova pregunta", "There was an error while removing the question" : "Hi ha hagut un error en eliminar la pregunta", "Error while saving form" : "Error en desar el formulari", "Loading responses …" : "Carregant respostes …", "Back to questions" : "Tornar a preguntes", + "{amount} responses" : "{amount} respostes", "Summary" : "Resum", "Options" : "Opcions", "Export to CSV" : "Exporta a CSV", "Delete all responses" : "Suprimeix totes les respostes", "No responses yet" : "No hi ha respostes encara", "Results of submitted forms will show up here" : "Els resultats dels formularis enviats es mostraran aquí", + "There was an error while loading the results" : "Error en carregar els resultats", "There was an error while removing this response" : "Hi ha hagut un error en eliminar aquesta resposta", "Are you sure you want to delete all responses of {title}?" : "Esteu segur que voleu suprimir totes les respostes de {title}?", "There was an error while removing responses" : "Hi ha hagut un error en eliminar respostes", + "responses" : "respostes", + "Share form" : "Compartir formulari", + "Share via link" : "Compartir a través d'enllaç", "Show to all users of this instance" : "Mostrar a tots els usuaris d'aquesta instància", "Choose users to share with" : "Trieu usuaris per compartir-lo", "Settings" : "Paràmetres", "Anonymous responses" : "Respostes anònimes", + "Allow multiple responses per person" : "Permet múltiples respostes per persona", "Set expiration date" : "Establiu una data de caducitat", "Expiration date" : "Data de venciment", "Select expiration date" : "Seleccionar la data de caducitat", @@ -72,9 +83,22 @@ "There was an error submitting the form" : "Error en enviar el formulari", "Error while saving question" : "Error en desar la pregunta", "Checkboxes" : "Caselles de verificació", + "Checkbox question title" : "Títol de la pregunta de la casella de selecció", + "This question needs a title and at least one answer!" : "Aquesta pregunta necessita un títol i almenys una resposta!", "Multiple choice" : "Qüestionari d'elecció múltiple", + "Multiple choice question title" : "Títol de la pregunta d'elecció múltiple", + "Dropdown" : "Desplegable", + "Dropdown question title" : "Títol de la pregunta desplegable", + "People can pick one option" : "La gent pot triar una opció", + "Pick an option" : "Tria una opció", "Short answer" : "Resposta curta", + "Short answer question title" : "Títol de la pregunta de resposta curta", + "People can enter a short answer" : "La gent pot introduir una resposta curta", + "Enter a short answer" : "Introduïu una resposta curta", "Long text" : "Text llarg", + "Long text question title" : "Títol de la pregunta de text llarg", + "People can enter a long text" : "La gent pot introduir un text llarg", + "Enter a long text" : "Introduïu un text llarg", "Form expired" : "Formulari caducat", "This form has expired and is no longer taking answers" : "Aquest formulari ha caducat i ja no està prenent respostes", "Form not found" : "No s’ha trobat el formulari", From fea32748e6cb5bf0c1e3d92ced8bfd65e2c3a6dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Tue, 11 Aug 2020 09:53:45 +0200 Subject: [PATCH 25/55] Move to OCS API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- appinfo/routes.php | 3 +- lib/Controller/ApiController.php | 239 ++++++++++++------ src/Forms.vue | 6 +- src/components/AppNavigationForm.vue | 4 +- src/components/Questions/AnswerInput.vue | 6 +- src/components/Questions/QuestionDropdown.vue | 4 +- src/components/Questions/QuestionMultiple.vue | 4 +- src/components/ShareDiv.vue | 14 +- src/mixins/QuestionMixin.js | 4 +- src/mixins/ViewsMixin.js | 4 +- src/views/Create.vue | 10 +- src/views/Results.vue | 10 +- src/views/Submit.vue | 4 +- 13 files changed, 194 insertions(+), 118 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 5319209..03cbdc2 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -35,7 +35,8 @@ return [ ['name' => 'page#index', 'url' => '/{hash}/results', 'verb' => 'GET', 'postfix' => 'results'], ['name' => 'page#goto_form', 'url' => '/{hash}', 'verb' => 'GET'], - + ], + 'ocs' => [ // Forms ['name' => 'api#getForms', 'url' => '/api/v1/forms', 'verb' => 'GET'], ['name' => 'api#newForm', 'url' => '/api/v1/form', 'verb' => 'POST'], diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index 4a45592..3bd06d0 100644 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -42,7 +42,9 @@ use OCA\Forms\Service\FormsService; use OCP\AppFramework\Controller; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\IMapperException; -use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSBadRequestException; +use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\IL10N; use OCP\ILogger; use OCP\IRequest; @@ -84,6 +86,9 @@ class ApiController extends Controller { /** @var FormsService */ private $formsService; + /** @var ISecureRandom */ + private $secureRandom; + public function __construct(string $appName, IRequest $request, IUserSession $userSession, @@ -95,7 +100,8 @@ class ApiController extends Controller { OptionMapper $optionMapper, ILogger $logger, IL10N $l10n, - FormsService $formsService) { + FormsService $formsService, + ISecureRandom $secureRandom) { parent::__construct($appName, $request); $this->appName = $appName; $this->userManager = $userManager; @@ -109,6 +115,7 @@ class ApiController extends Controller { $this->logger = $logger; $this->l10n = $l10n; $this->formsService = $formsService; + $this->secureRandom = $secureRandom; $this->currentUser = $userSession->getUser(); } @@ -118,7 +125,7 @@ class ApiController extends Controller { * * Read Form-List only with necessary information for Listing. */ - public function getForms(): Http\JSONResponse { + public function getForms(): DataResponse { $forms = $this->formMapper->findAllByOwnerId($this->currentUser->getUID()); $result = []; @@ -132,44 +139,51 @@ class ApiController extends Controller { ]; } - return new Http\JSONResponse($result); + return new DataResponse($result); } /** * @NoAdminRequired * - * * Read all information to edit a Form (form, questions, options, except submissions/answers). + * + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function getForm(int $id): Http\JSONResponse { + public function getForm(int $id): DataResponse { try { $form = $this->formsService->getForm($id); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if (!$this->formsService->hasUserAccess($id)) { $this->logger->debug('User has no permissions to get this form'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } - return new Http\JSONResponse($form); + return new DataResponse($form); } /** * @NoAdminRequired + * * Create a new Form and return the Form to edit. + * + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function newForm(): Http\JSONResponse { + public function newForm(): DataResponse { $form = new Form(); $form->setOwnerId($this->currentUser->getUID()); $form->setCreated(time()); - $form->setHash(\OC::$server->getSecureRandom()->generate( + $form->setHash($this->secureRandom->generate( 16, ISecureRandom::CHAR_HUMAN_READABLE )); + $form->setTitle(''); $form->setDescription(''); $form->setAccess([ @@ -183,7 +197,7 @@ class ApiController extends Controller { $result = $form->read(); $result['questions'] = []; - return new Http\JSONResponse($result); + return new DataResponse($result); } /** @@ -193,8 +207,10 @@ class ApiController extends Controller { * * @param int $id FormId of form to update * @param array $keyValuePairs Array of key=>value pairs to update. + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function updateForm(int $id, array $keyValuePairs): Http\JSONResponse { + public function updateForm(int $id, array $keyValuePairs): DataResponse { $this->logger->debug('Updating form: FormId: {id}, values: {keyValuePairs}', [ 'id' => $id, 'keyValuePairs' => $keyValuePairs @@ -204,12 +220,12 @@ class ApiController extends Controller { $form = $this->formMapper->findById($id); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Make sure we only store id @@ -224,7 +240,7 @@ class ApiController extends Controller { } } catch (Exception $e) { $this->logger->debug('Malformed access'); - return new Http\JSONResponse(['message' => 'Malformed access'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('Malformed access'); } // Create FormEntity with given Params & Id. @@ -234,13 +250,19 @@ class ApiController extends Controller { // Update changed Columns in Db. $this->formMapper->update($form); - return new Http\JSONResponse($form->getId()); + return new DataResponse($form->getId()); } /** * @NoAdminRequired + * + * Delete a form + * + * @param int $id the form id + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function deleteForm(int $id): Http\JSONResponse { + public function deleteForm(int $id): DataResponse { $this->logger->debug('Delete Form: {id}', [ 'id' => $id, ]); @@ -249,12 +271,12 @@ class ApiController extends Controller { $form = $this->formMapper->findById($id); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Delete Submissions(incl. Answers), Questions(incl. Options) and Form. @@ -262,13 +284,21 @@ class ApiController extends Controller { $this->questionMapper->deleteByForm($id); $this->formMapper->delete($form); - return new Http\JSONResponse($id); + return new DataResponse($id); } /** * @NoAdminRequired + * + * Add a new question + * + * @param int $formId the form id + * @param string $type the new question type + * @param string $text the new question title + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function newQuestion(int $formId, string $type, string $text): Http\JSONResponse { + public function newQuestion(int $formId, string $type, string $text = ''): DataResponse { $this->logger->debug('Adding new question: formId: {formId}, type: {type}, text: {text}', [ 'formId' => $formId, 'type' => $type, @@ -277,19 +307,19 @@ class ApiController extends Controller { if (array_search($type, Question::TYPES) === false) { $this->logger->debug('Invalid type'); - return new Http\JSONResponse(['message' => 'Invalid type'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('Invalid type'); } try { $form = $this->formMapper->findById($formId); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse(['message' => 'Could not find form'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Retrieve all active questions sorted by Order. Takes the order of the last array-element and adds one. @@ -314,16 +344,20 @@ class ApiController extends Controller { $response = $question->read(); $response['options'] = []; - return new Http\JSONResponse($response); + return new DataResponse($response); } /** * @NoAdminRequired + * * Updates the Order of all Questions of a Form. + * * @param int $formId Id of the form to reorder * @param int[] $newOrder Array of Question-Ids in new order. + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function reorderQuestions(int $formId, array $newOrder): Http\JSONResponse { + public function reorderQuestions(int $formId, array $newOrder): DataResponse { $this->logger->debug('Reordering Questions on Form {formId} as Question-Ids {newOrder}', [ 'formId' => $formId, 'newOrder' => $newOrder @@ -333,25 +367,25 @@ class ApiController extends Controller { $form = $this->formMapper->findById($formId); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse(['message' => 'Could not find form'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Check if array contains duplicates if (array_unique($newOrder) !== $newOrder) { $this->logger->debug('The given Array contains duplicates'); - return new Http\JSONResponse(['message' => 'The given Array contains duplicates'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('The given Array contains duplicates'); } // Check if all questions are given in Array. $questions = $this->questionMapper->findByForm($formId); if (sizeof($questions) !== sizeof($newOrder)) { $this->logger->debug('The length of the given array does not match the number of stored questions'); - return new Http\JSONResponse(['message' => 'The length of the given array does not match the number of stored questions'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('The length of the given array does not match the number of stored questions'); } $questions = []; // Clear Array of Entities @@ -365,7 +399,7 @@ class ApiController extends Controller { $this->logger->debug('Could not find question. Id:{id}', [ 'id' => $questionId ]); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } // Abort if a question is not part of the Form. @@ -373,7 +407,7 @@ class ApiController extends Controller { $this->logger->debug('This Question is not part of the given Form: questionId: {questionId}', [ 'questionId' => $questionId ]); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } // Abort if a question is already marked as deleted (order==0) @@ -382,7 +416,7 @@ class ApiController extends Controller { $this->logger->debug('This Question has already been marked as deleted: Id: {id}', [ 'id' => $questions[$arrayKey]->getId() ]); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } // Only set order, if it changed. @@ -401,17 +435,21 @@ class ApiController extends Controller { ]; } - return new Http\JSONResponse($response); + return new DataResponse($response); } /** * @NoAdminRequired + * * Writes the given key-value pairs into Database. * Key 'order' should only be changed by reorderQuestions() and is not allowed here. + * * @param int $id QuestionId of question to update * @param array $keyValuePairs Array of key=>value pairs to update. + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function updateQuestion(int $id, array $keyValuePairs): Http\JSONResponse { + public function updateQuestion(int $id, array $keyValuePairs): DataResponse { $this->logger->debug('Updating question: questionId: {id}, values: {keyValuePairs}', [ 'id' => $id, 'keyValuePairs' => $keyValuePairs @@ -422,17 +460,17 @@ class ApiController extends Controller { $form = $this->formMapper->findById($question->getFormId()); } catch (IMapperException $e) { $this->logger->debug('Could not find form or question'); - return new Http\JSONResponse(['message' => 'Could not find form or question'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('Could not find form or question'); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } if (array_key_exists('order', $keyValuePairs)) { $this->logger->debug('Key \'order\' is not allowed on updateQuestion. Please use reorderQuestions() to change order.'); - return new Http\JSONResponse(['message' => 'Please use reorderQuestions() to change order'], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException('Please use reorderQuestions() to change order'); } // Create QuestionEntity with given Params & Id. @@ -442,13 +480,19 @@ class ApiController extends Controller { // Update changed Columns in Db. $this->questionMapper->update($question); - return new Http\JSONResponse($question->getId()); + return new DataResponse($question->getId()); } /** * @NoAdminRequired + * + * Delete a question + * + * @param int $id the question id + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function deleteQuestion(int $id): Http\JSONResponse { + public function deleteQuestion(int $id): DataResponse { $this->logger->debug('Mark question as deleted: {id}', [ 'id' => $id, ]); @@ -458,12 +502,12 @@ class ApiController extends Controller { $form = $this->formMapper->findById($question->getFormId()); } catch (IMapperException $e) { $this->logger->debug('Could not find form or question'); - return new Http\JSONResponse(['message' => 'Could not find form or question'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('Could not find form or question'); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Store Order of deleted Question @@ -483,13 +527,20 @@ class ApiController extends Controller { } } - return new Http\JSONResponse($id); + return new DataResponse($id); } /** * @NoAdminRequired + * + * Add a new option to a question + * + * @param int $questionId the question id + * @param string $text the new option text + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function newOption(int $questionId, string $text): Http\JSONResponse { + public function newOption(int $questionId, string $text): DataResponse { $this->logger->debug('Adding new option: questionId: {questionId}, text: {text}', [ 'questionId' => $questionId, 'text' => $text, @@ -500,12 +551,12 @@ class ApiController extends Controller { $form = $this->formMapper->findById($question->getFormId()); } catch (IMapperException $e) { $this->logger->debug('Could not find form or question'); - return new Http\JSONResponse(['message' => 'Could not find form or question'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('Could not find form or question'); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } $option = new Option(); @@ -515,19 +566,22 @@ class ApiController extends Controller { $option = $this->optionMapper->insert($option); - return new Http\JSONResponse([ + return new DataResponse([ 'id' => $option->getId() ]); } /** * @NoAdminRequired + * * Writes the given key-value pairs into Database. * * @param int $id OptionId of option to update * @param array $keyValuePairs Array of key=>value pairs to update. + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function updateOption(int $id, array $keyValuePairs): Http\JSONResponse { + public function updateOption(int $id, array $keyValuePairs): DataResponse { $this->logger->debug('Updating option: option: {id}, values: {keyValuePairs}', [ 'id' => $id, 'keyValuePairs' => $keyValuePairs @@ -539,12 +593,12 @@ class ApiController extends Controller { $form = $this->formMapper->findById($question->getFormId()); } catch (IMapperException $e) { $this->logger->debug('Could not find option, question or form'); - return new Http\JSONResponse(['message' => 'Could not find option, question or form'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('Could not find option, question or form'); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Create OptionEntity with given Params & Id. @@ -554,13 +608,19 @@ class ApiController extends Controller { // Update changed Columns in Db. $this->optionMapper->update($option); - return new Http\JSONResponse($option->getId()); + return new DataResponse($option->getId()); } /** * @NoAdminRequired + * + * Delete an option + * + * @param int $id the option id + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function deleteOption(int $id): Http\JSONResponse { + public function deleteOption(int $id): DataResponse { $this->logger->debug('Deleting option: {id}', [ 'id' => $id ]); @@ -571,21 +631,27 @@ class ApiController extends Controller { $form = $this->formMapper->findById($question->getFormId()); } catch (IMapperException $e) { $this->logger->debug('Could not find form or option'); - return new Http\JSONResponse(['message' => 'Could not find form or option'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException('Could not find form or option'); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } $this->optionMapper->delete($option); - return new Http\JSONResponse($id); + return new DataResponse($id); } /** * @NoAdminRequired + * + * Get all the answers of a given submission + * + * @param int $submissionId the submission id + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ private function getAnswers(int $submissionId): array { try { @@ -605,24 +671,30 @@ class ApiController extends Controller { /** * @NoAdminRequired + * + * Get all the submissions of a given form + * + * @param string $hash the form hash + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function getSubmissions(string $hash): Http\JSONResponse { + public function getSubmissions(string $hash): DataResponse { try { $form = $this->formMapper->findByHash($hash); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse(['message' => 'Could not find form'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } try { $submissionEntities = $this->submissionMapper->findByForm($form->getId()); } catch (DoesNotExistException $e) { - //Just ignore, if no Data. Returns empty Submissions-Array + // Just ignore, if no Data. Returns empty Submissions-Array } $submissions = []; @@ -658,7 +730,7 @@ class ApiController extends Controller { 'questions' => $questions, ]; - return new Http\JSONResponse($response); + return new DataResponse($response); } /** @@ -666,10 +738,13 @@ class ApiController extends Controller { * @PublicPage * * Process a new submission - * @param int $formId + * + * @param int $formId the form id * @param array $answers [question_id => arrayOfString] + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function insertSubmission(int $formId, array $answers): Http\JSONResponse { + public function insertSubmission(int $formId, array $answers): DataResponse { $this->logger->debug('Inserting submission: formId: {formId}, answers: {answers}', [ 'formId' => $formId, 'answers' => $answers, @@ -680,22 +755,22 @@ class ApiController extends Controller { $questions = $this->formsService->getQuestions($formId); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse(['message' => 'Could not find form'], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } // Does the user have access to the form if (!$this->formsService->hasUserAccess($form->getId())) { - return new Http\JSONResponse(['message' => 'Not allowed to access this form'], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException('Not allowed to access this form'); } // Not allowed if form expired. Expires is '0' if the form does not expire. if ($form->getExpires() && $form->getExpires() < time()) { - return new Http\JSONResponse(['message' => 'This form is no longer taking answers'], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException('This form is no longer taking answers'); } // Does the user have permissions to submit if (!$this->formsService->canSubmit($form->getId())) { - return new Http\JSONResponse(['message' => 'Already submitted'], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException('Already submitted'); } // Create Submission @@ -753,13 +828,19 @@ class ApiController extends Controller { } } - return new Http\JSONResponse([]); + return new DataResponse(); } /** * @NoAdminRequired + * + * Delete a specific submission + * + * @param int $id the submission id + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function deleteSubmission(int $id): Http\JSONResponse { + public function deleteSubmission(int $id): DataResponse { $this->logger->debug('Delete Submission: {id}', [ 'id' => $id, ]); @@ -769,24 +850,30 @@ class ApiController extends Controller { $form = $this->formMapper->findById($submission->getFormId()); } catch (IMapperException $e) { $this->logger->debug('Could not find form or submission'); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Delete submission (incl. Answers) $this->submissionMapper->delete($submission); - return new Http\JSONResponse($id); + return new DataResponse($id); } /** * @NoAdminRequired + * + * Delete all submissions of a specified form + * + * @param int $formId the form id + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ - public function deleteAllSubmissions(int $formId): Http\JSONResponse { + public function deleteAllSubmissions(int $formId): DataResponse { $this->logger->debug('Delete all submissions to form: {formId}', [ 'formId' => $formId, ]); @@ -795,17 +882,17 @@ class ApiController extends Controller { $form = $this->formMapper->findById($formId); } catch (IMapperException $e) { $this->logger->debug('Could not find form'); - return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } if ($form->getOwnerId() !== $this->currentUser->getUID()) { $this->logger->debug('This form is not owned by the current user'); - return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // Delete all submissions (incl. Answers) $this->submissionMapper->deleteByForm($formId); - return new Http\JSONResponse($formId); + return new DataResponse($formId); } } diff --git a/src/Forms.vue b/src/Forms.vue index c84678f..fed8751 100644 --- a/src/Forms.vue +++ b/src/Forms.vue @@ -71,7 +71,7 @@ diff --git a/src/components/Questions/QuestionDatetime.vue b/src/components/Questions/QuestionDatetime.vue new file mode 100644 index 0000000..9ab0b62 --- /dev/null +++ b/src/components/Questions/QuestionDatetime.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/models/AnswerTypes.js b/src/models/AnswerTypes.js index f8b4631..3d909af 100644 --- a/src/models/AnswerTypes.js +++ b/src/models/AnswerTypes.js @@ -24,6 +24,8 @@ import QuestionMultiple from '../components/Questions/QuestionMultiple' import QuestionDropdown from '../components/Questions/QuestionDropdown' import QuestionShort from '../components/Questions/QuestionShort' import QuestionLong from '../components/Questions/QuestionLong' +import QuestionDate from '../components/Questions/QuestionDate' +import QuestionDatetime from '../components/Questions/QuestionDatetime' /** * @typedef {Object} AnswerTypes @@ -105,4 +107,25 @@ export default { warningInvalid: t('forms', 'This question needs a title!'), }, + date: { + component: QuestionDate, + icon: 'icon-answer-date', + label: t('forms', 'Date'), + + titlePlaceholder: t('forms', 'Date question title'), + createPlaceholder: t('forms', ''), + submitPlaceholder: t('forms', 'Enter a date'), + warningInvalid: t('forms', 'This question needs a title!'), + }, + + datetime: { + component: QuestionDatetime, + icon: 'icon-answer-datetime', + label: t('forms', 'Datetime'), + + titlePlaceholder: t('forms', 'Datetime question title'), + createPlaceholder: t('forms', ''), + submitPlaceholder: t('forms', 'Enter a date'), + warningInvalid: t('forms', 'This question needs a title!'), + }, }