Compare commits
88 commits
master
...
questions_
Author | SHA1 | Date | |
---|---|---|---|
Simon Vieille | eaed2c7ac7 | ||
688c73ebac | |||
bdfdb6cbf6 | |||
75660eecd6 | |||
b86a3ef9f8 | |||
a54117b9b0 | |||
52d9cabf70 | |||
a02e784c9a | |||
726fdba376 | |||
71ce41df69 | |||
78a0ad74d2 | |||
57a1dcc6bb | |||
cde37f03a9 | |||
fde4662066 | |||
cf0c012502 | |||
fb5be5d5bd | |||
e47be46a05 | |||
cd4248dd42 | |||
0309527d7a | |||
13f721c661 | |||
5c02fc7ef5 | |||
4417625221 | |||
a2e1c659b1 | |||
746b0f505f | |||
ef133b88b0 | |||
106a8e6937 | |||
6e6fe71c3c | |||
564ccc199e | |||
6fd758f797 | |||
2dccf86682 | |||
da4321023e | |||
63e0ce3584 | |||
6c957ded2c | |||
f3eb65dedb | |||
bad2b0b859 | |||
83744ba7c4 | |||
c278a12659 | |||
de8903e88c | |||
fca8fe74fe | |||
cfec7a85be | |||
f3b3a8c083 | |||
5176dc6eef | |||
a6cbcea509 | |||
47d86674c9 | |||
348b709ecc | |||
19fb4a6b84 | |||
b475714cd2 | |||
d6539e8e30 | |||
9238c20088 | |||
ff18f03523 | |||
915042bcc7 | |||
bd641c53e4 | |||
fea32748e6 | |||
73df98c226 | |||
ca05e8c39f | |||
b42991eff2 | |||
ff56edd520 | |||
8adeb4c892 | |||
9982dcda44 | |||
292edb7e98 | |||
2cbca90581 | |||
a794c35a91 | |||
cacc13cb9c | |||
9eac12fdab | |||
5e1b580d98 | |||
e794f98269 | |||
2497148d32 | |||
137a152e90 | |||
339b245a00 | |||
3a412e1161 | |||
fc9ed31f15 | |||
f66731d463 | |||
dd7dcdd3d3 | |||
103ec0ba1b | |||
11b652f119 | |||
840b5f9a1b | |||
07b6d3124d | |||
9fa05b9b32 | |||
a16dc9d7eb | |||
d6ea2efaf5 | |||
833265703c | |||
f3f1c259e2 | |||
9e11cb40fb | |||
69909e442d | |||
31bc857c83 | |||
95fd7e34be | |||
0e384d51b3 | |||
709bf3e882 |
24
.github/dependabot.yml
vendored
Normal file
24
.github/dependabot.yml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: composer
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
19
.github/workflows/dependabot-approve-merge.yml
vendored
Normal file
19
.github/workflows/dependabot-approve-merge.yml
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
name: Dependabot
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
auto-merge:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Default github action approve
|
||||
- uses: hmarr/auto-approve-action@v2.0.0
|
||||
if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]'
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Nextcloud bot approve and merge request
|
||||
- uses: ahmadnassri/action-dependabot-auto-merge@v1
|
||||
if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]'
|
||||
with:
|
||||
target: patch
|
||||
github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }}
|
11
.github/workflows/dependabot-approve.yml
vendored
11
.github/workflows/dependabot-approve.yml
vendored
|
@ -1,11 +0,0 @@
|
|||
name: Dependabot auto approve
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: hmarr/auto-approve-action@v2.0.0
|
||||
if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]'
|
||||
with:
|
||||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
19
CHANGELOG.md
19
CHANGELOG.md
|
@ -1,5 +1,24 @@
|
|||
# Changelog
|
||||
|
||||
## [v2.0.4](https://github.com/nextcloud/forms/tree/v2.0.4) (2020-09-01)
|
||||
|
||||
[Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.3...v2.0.4)
|
||||
|
||||
### Merged
|
||||
- NC 20 compatibility
|
||||
- Move to OCS API
|
||||
[\#556](https://github.com/nextcloud/forms/pull/556) ([skjnldsv](https://github.com/skjnldsv))
|
||||
- Translations update
|
||||
- Dependencies update
|
||||
|
||||
## 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)
|
||||
|
|
|
@ -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)!
|
||||
]]></description>
|
||||
<version>2.0.2</version>
|
||||
<version>2.0.4</version>
|
||||
<licence>agpl</licence>
|
||||
|
||||
<author>Affan Hussain</author>
|
||||
|
@ -45,7 +45,7 @@
|
|||
<screenshot>https://raw.githubusercontent.com/nextcloud/forms/master/screenshots/forms3.png</screenshot>
|
||||
|
||||
<dependencies>
|
||||
<nextcloud min-version="17" max-version="19" />
|
||||
<nextcloud min-version="17" max-version="20" />
|
||||
</dependencies>
|
||||
|
||||
<navigations>
|
||||
|
|
|
@ -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'],
|
||||
|
|
|
@ -1,19 +1,20 @@
|
|||
{
|
||||
"name": "nextcloud/forms",
|
||||
"type": "project",
|
||||
"license": "AGPLv3",
|
||||
"require-dev": {
|
||||
"christophwurst/nextcloud": "^17.0",
|
||||
"phpunit/phpunit": "^8",
|
||||
"nextcloud/coding-standard": "^0.3.0"
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"classmap-authoritative": true
|
||||
"classmap-authoritative": true,
|
||||
"platform": {
|
||||
"php": "7.2"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l",
|
||||
"cs:fix": "php-cs-fixer fix",
|
||||
"cs:check": "php-cs-fixer fix --dry-run --diff",
|
||||
"cs:fix": "php-cs-fixer fix"
|
||||
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l"
|
||||
},
|
||||
"require-dev": {
|
||||
"christophwurst/nextcloud": "^19.0",
|
||||
"nextcloud/coding-standard": "^0.3.0",
|
||||
"phpunit/phpunit": "^8"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,8 @@
|
|||
@include icon-black-white('answer-dropdown', 'forms', 1);
|
||||
@include icon-black-white('answer-short', 'forms', 1);
|
||||
@include icon-black-white('answer-long', 'forms', 1);
|
||||
@include icon-black-white('answer-date', 'forms', 1);
|
||||
@include icon-black-white('answer-datetime', 'forms', 1);
|
||||
@include icon-black-white('drag-handle', 'forms', 1);
|
||||
|
||||
.icon-yes {
|
||||
|
|
5
img/answer-date.svg
Normal file
5
img/answer-date.svg
Normal file
|
@ -0,0 +1,5 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
|
||||
<rect style="marker:none" width="11.678" height="11.469" x="2.161" y="2.266" ry="0" rx="0" color="#000" overflow="visible" fill="none" stroke="#000" stroke-width="1.358" stroke-linecap="square" paint-order="fill markers stroke"/>
|
||||
<path style="marker:none" color="#000" overflow="visible" stroke="#000" stroke-width=".351" stroke-linecap="square" paint-order="stroke markers fill" d="M9.837 9.978h2.209v2.169H9.837z"/>
|
||||
<rect style="marker:none" width="11.873" height="2.124" x="2.064" y="2.168" ry="0" rx="0" color="#000" overflow="visible" stroke="#000" stroke-width="1.163" stroke-linecap="square" paint-order="fill markers stroke"/>
|
||||
</svg>
|
After Width: | Height: | Size: 712 B |
4
img/answer-datetime.svg
Normal file
4
img/answer-datetime.svg
Normal file
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
|
||||
<rect style="marker:none" width="11.678" height="11.469" x="2.161" y="2.266" ry="5.734" rx="5.734" color="#000" overflow="visible" fill="none" stroke="#000" stroke-width="1.358" stroke-linecap="square" paint-order="fill markers stroke"/>
|
||||
<path d="M6.893 4.811l.822 3.516 3.795 2.023" fill="none" stroke="#000"/>
|
||||
</svg>
|
After Width: | Height: | Size: 387 B |
|
@ -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);");
|
||||
|
|
|
@ -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);"
|
||||
}
|
28
l10n/ca.js
28
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",
|
||||
|
|
28
l10n/ca.json
28
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",
|
||||
|
|
|
@ -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"
|
||||
},
|
||||
|
|
|
@ -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);"
|
||||
|
|
10
l10n/eu.js
10
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",
|
||||
|
|
10
l10n/eu.json
10
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",
|
||||
|
|
89
l10n/fi.js
89
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);");
|
||||
|
|
89
l10n/fi.json
89
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);"
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
23
l10n/he.js
23
l10n/he.js
|
@ -4,6 +4,7 @@ OC.L10N.register(
|
|||
"Anonymous response" : "תגובה אלמונית",
|
||||
"Forms" : "טפסים",
|
||||
"Shared by %s" : "שותף על ידי %s",
|
||||
"📝 Simple surveys and questionnaires, self-hosted" : "📝 סקריםי ושאלונים פשוטים, באירוח עצמי",
|
||||
"New form" : "טופס חדש",
|
||||
"Loading forms …" : "הטפסים נטענים…",
|
||||
"No forms created yet" : "לא נוצרו עדיין טפסים",
|
||||
|
@ -29,11 +30,13 @@ OC.L10N.register(
|
|||
"Title of question number {index}" : "כותרת של שאלה מספר {index}",
|
||||
"Required" : "נדרש",
|
||||
"Delete question" : "מחיקת שאלה",
|
||||
"This question needs a title!" : "לשאלה זו דרושה כותרת!",
|
||||
"Add a new answer" : "הוספת תשובה חדשה",
|
||||
"There was an issue deleting this option" : "מחיקת האפשרות נתקלה בבעיה",
|
||||
"A long answer for the question “{text}”" : "תשובה ארוכה לשאלה „{text}”",
|
||||
"A short answer for the question “{text}”" : "תשובה קצרה לשאלה „{text}”",
|
||||
"Delete this response" : "מחיקת התגובה הזאת",
|
||||
"No response" : "אין תגובה",
|
||||
"User or group name …" : "שם משתמש או קבוצה…",
|
||||
"No recommendations. Start typing." : "אין המלצות. נא להתחיל להקליד.",
|
||||
"Searching …" : "מתבצע חיפוש…",
|
||||
|
@ -43,25 +46,32 @@ OC.L10N.register(
|
|||
"Toggle settings" : "החלפת מצב הגדרות",
|
||||
"Form title" : "כותרת טופס",
|
||||
"Description" : "תיאור",
|
||||
"Required questions" : "שאלות נדרשות",
|
||||
"Add a question" : "הוספת שאלה",
|
||||
"There was an error while adding the new question" : "אירעה שגיאה בעת הוספת השאלה החדשה",
|
||||
"There was an error while removing the question" : "אירעה שגיאה בעת הסרת השאלה",
|
||||
"Error while saving form" : "שגיאה בעת שמירת טופס",
|
||||
"Loading responses …" : "התגובות נטענות…",
|
||||
"Back to questions" : "חזרה לשאלות",
|
||||
"{amount} responses" : "{amount} תגובות",
|
||||
"Summary" : "תקציר",
|
||||
"Options" : "אפשרויות",
|
||||
"Export to CSV" : "ייצוא ל־CSV",
|
||||
"Delete all responses" : "מחיקת כל התגובות",
|
||||
"No responses yet" : "אין תגובות עדיין",
|
||||
"Results of submitted forms will show up here" : "התוצאות לטפסים שהוגשו תופענה כאן",
|
||||
"There was an error while loading the results" : "אירעה שגיאה בטעינת התוצאות",
|
||||
"There was an error while removing this response" : "אירעה שגיאה בהסרת התגובה הזאת",
|
||||
"Are you sure you want to delete all responses of {title}?" : "למחוק את כל התגובות על {title}?",
|
||||
"There was an error while removing responses" : "אירעה שגיאה בעת הסרת התגובות",
|
||||
"responses" : "תגובות",
|
||||
"Share form" : "שיתוף טופס",
|
||||
"Share via link" : "שיתוף דרך קישור",
|
||||
"Show to all users of this instance" : "להציג את כל המשתמשים של העותק הזה",
|
||||
"Choose users to share with" : "לבחור משתמשים לשתף אתם",
|
||||
"Settings" : "הגדרות",
|
||||
"Anonymous responses" : "תגובות אלמוניות",
|
||||
"Allow multiple responses per person" : "לאפשר מספר תגובות למשתתף",
|
||||
"Set expiration date" : "הגדרת תאריך תפוגה",
|
||||
"Expiration date" : "תאריך תפוגה",
|
||||
"Select expiration date" : "בחירת מועד תפוגת תוקף",
|
||||
|
@ -74,9 +84,22 @@ OC.L10N.register(
|
|||
"There was an error submitting the form" : "עלתה שגיאה בעת הגשת הטופס",
|
||||
"Error while saving question" : "שגיאה בשמירת השאלה",
|
||||
"Checkboxes" : "תיבות סימון",
|
||||
"Checkbox question title" : "כותרת שאלת תיבות סימון",
|
||||
"This question needs a title and at least one answer!" : "שאלה זו זקוקה לכותרת ולפחות לתשובה אחת!",
|
||||
"Multiple choice" : "שאלון אמריקאי",
|
||||
"Multiple choice question title" : "כותרת שאלה מגוון אפשרויות",
|
||||
"Dropdown" : "תפריט נפתח",
|
||||
"Dropdown question title" : "כותרת שאלת תפריט נפתח",
|
||||
"People can pick one option" : "המשתתפים יכולים לבחור באפשרות אחת",
|
||||
"Pick an option" : "נא לבחור באפשרות",
|
||||
"Short answer" : "תשובה קצרה",
|
||||
"Short answer question title" : "כותרת שאלה לתשובה קצרה",
|
||||
"People can enter a short answer" : "המשתתפים יכולים למלא תשובה קצרה",
|
||||
"Enter a short answer" : "נא למלא תשובה קצרה",
|
||||
"Long text" : "טקסט ארוך",
|
||||
"Long text question title" : "כותרת שאלה טקסט ארוך",
|
||||
"People can enter a long text" : "משתתפים יכולים למלא טקסט ארוך",
|
||||
"Enter a long text" : "נא למלא טקסט ארוך",
|
||||
"Form expired" : "תוקף הטופס פג",
|
||||
"This form has expired and is no longer taking answers" : "תוקפו של טופס זה פג ולא ניתן לענות עליו עוד",
|
||||
"Form not found" : "הטופס לא נמצא",
|
||||
|
|
23
l10n/he.json
23
l10n/he.json
|
@ -2,6 +2,7 @@
|
|||
"Anonymous response" : "תגובה אלמונית",
|
||||
"Forms" : "טפסים",
|
||||
"Shared by %s" : "שותף על ידי %s",
|
||||
"📝 Simple surveys and questionnaires, self-hosted" : "📝 סקריםי ושאלונים פשוטים, באירוח עצמי",
|
||||
"New form" : "טופס חדש",
|
||||
"Loading forms …" : "הטפסים נטענים…",
|
||||
"No forms created yet" : "לא נוצרו עדיין טפסים",
|
||||
|
@ -27,11 +28,13 @@
|
|||
"Title of question number {index}" : "כותרת של שאלה מספר {index}",
|
||||
"Required" : "נדרש",
|
||||
"Delete question" : "מחיקת שאלה",
|
||||
"This question needs a title!" : "לשאלה זו דרושה כותרת!",
|
||||
"Add a new answer" : "הוספת תשובה חדשה",
|
||||
"There was an issue deleting this option" : "מחיקת האפשרות נתקלה בבעיה",
|
||||
"A long answer for the question “{text}”" : "תשובה ארוכה לשאלה „{text}”",
|
||||
"A short answer for the question “{text}”" : "תשובה קצרה לשאלה „{text}”",
|
||||
"Delete this response" : "מחיקת התגובה הזאת",
|
||||
"No response" : "אין תגובה",
|
||||
"User or group name …" : "שם משתמש או קבוצה…",
|
||||
"No recommendations. Start typing." : "אין המלצות. נא להתחיל להקליד.",
|
||||
"Searching …" : "מתבצע חיפוש…",
|
||||
|
@ -41,25 +44,32 @@
|
|||
"Toggle settings" : "החלפת מצב הגדרות",
|
||||
"Form title" : "כותרת טופס",
|
||||
"Description" : "תיאור",
|
||||
"Required questions" : "שאלות נדרשות",
|
||||
"Add a question" : "הוספת שאלה",
|
||||
"There was an error while adding the new question" : "אירעה שגיאה בעת הוספת השאלה החדשה",
|
||||
"There was an error while removing the question" : "אירעה שגיאה בעת הסרת השאלה",
|
||||
"Error while saving form" : "שגיאה בעת שמירת טופס",
|
||||
"Loading responses …" : "התגובות נטענות…",
|
||||
"Back to questions" : "חזרה לשאלות",
|
||||
"{amount} responses" : "{amount} תגובות",
|
||||
"Summary" : "תקציר",
|
||||
"Options" : "אפשרויות",
|
||||
"Export to CSV" : "ייצוא ל־CSV",
|
||||
"Delete all responses" : "מחיקת כל התגובות",
|
||||
"No responses yet" : "אין תגובות עדיין",
|
||||
"Results of submitted forms will show up here" : "התוצאות לטפסים שהוגשו תופענה כאן",
|
||||
"There was an error while loading the results" : "אירעה שגיאה בטעינת התוצאות",
|
||||
"There was an error while removing this response" : "אירעה שגיאה בהסרת התגובה הזאת",
|
||||
"Are you sure you want to delete all responses of {title}?" : "למחוק את כל התגובות על {title}?",
|
||||
"There was an error while removing responses" : "אירעה שגיאה בעת הסרת התגובות",
|
||||
"responses" : "תגובות",
|
||||
"Share form" : "שיתוף טופס",
|
||||
"Share via link" : "שיתוף דרך קישור",
|
||||
"Show to all users of this instance" : "להציג את כל המשתמשים של העותק הזה",
|
||||
"Choose users to share with" : "לבחור משתמשים לשתף אתם",
|
||||
"Settings" : "הגדרות",
|
||||
"Anonymous responses" : "תגובות אלמוניות",
|
||||
"Allow multiple responses per person" : "לאפשר מספר תגובות למשתתף",
|
||||
"Set expiration date" : "הגדרת תאריך תפוגה",
|
||||
"Expiration date" : "תאריך תפוגה",
|
||||
"Select expiration date" : "בחירת מועד תפוגת תוקף",
|
||||
|
@ -72,9 +82,22 @@
|
|||
"There was an error submitting the form" : "עלתה שגיאה בעת הגשת הטופס",
|
||||
"Error while saving question" : "שגיאה בשמירת השאלה",
|
||||
"Checkboxes" : "תיבות סימון",
|
||||
"Checkbox question title" : "כותרת שאלת תיבות סימון",
|
||||
"This question needs a title and at least one answer!" : "שאלה זו זקוקה לכותרת ולפחות לתשובה אחת!",
|
||||
"Multiple choice" : "שאלון אמריקאי",
|
||||
"Multiple choice question title" : "כותרת שאלה מגוון אפשרויות",
|
||||
"Dropdown" : "תפריט נפתח",
|
||||
"Dropdown question title" : "כותרת שאלת תפריט נפתח",
|
||||
"People can pick one option" : "המשתתפים יכולים לבחור באפשרות אחת",
|
||||
"Pick an option" : "נא לבחור באפשרות",
|
||||
"Short answer" : "תשובה קצרה",
|
||||
"Short answer question title" : "כותרת שאלה לתשובה קצרה",
|
||||
"People can enter a short answer" : "המשתתפים יכולים למלא תשובה קצרה",
|
||||
"Enter a short answer" : "נא למלא תשובה קצרה",
|
||||
"Long text" : "טקסט ארוך",
|
||||
"Long text question title" : "כותרת שאלה טקסט ארוך",
|
||||
"People can enter a long text" : "משתתפים יכולים למלא טקסט ארוך",
|
||||
"Enter a long text" : "נא למלא טקסט ארוך",
|
||||
"Form expired" : "תוקף הטופס פג",
|
||||
"This form has expired and is no longer taking answers" : "תוקפו של טופס זה פג ולא ניתן לענות עליו עוד",
|
||||
"Form not found" : "הטופס לא נמצא",
|
||||
|
|
76
l10n/is.js
76
l10n/is.js
|
@ -1,15 +1,89 @@
|
|||
OC.L10N.register(
|
||||
"forms",
|
||||
{
|
||||
"Anonymous response" : "Nafnlaust svar",
|
||||
"Forms" : "Eyðuform",
|
||||
"Shared by %s" : "Deilt af %s",
|
||||
"New form" : "Nýtt eyðuform",
|
||||
"Loading forms …" : "Hleð inn eyðuformum …",
|
||||
"No forms created yet" : "Engin eyðuform útbúin ennþá",
|
||||
"Create a form" : "Búa til eyðuform",
|
||||
"Select a form or create a new one" : "Veldu eyðuform eða búðu til nýtt",
|
||||
"Create new form" : "Búa til nýtt eyðuform",
|
||||
"An error occurred while loading the forms list" : "Villa átti sér stað við að hlaða inn lista yfir eyðuform",
|
||||
"Unable to create a new form" : "Gat ekki búið til nýtt eyðuform",
|
||||
"Responses" : "Svör",
|
||||
"Clone form" : "Klóna eyðuform",
|
||||
"Delete form" : "Eyða eyðuformi",
|
||||
"Form link copied" : "Tengill eyðuforms afritaður",
|
||||
"Copy share link" : "Afrita deilitengil",
|
||||
"Are you sure you want to delete {title}?" : "Ertu viss um að þú viljir eyða {title}?",
|
||||
"Error while deleting {title}" : "Villa kom upp við að eyða {title}",
|
||||
"Answer number {index}" : "Svar númer {index}",
|
||||
"Delete answer" : "Eyða svari",
|
||||
"Error while saving the answer" : "Villa kom upp við að vista svarið",
|
||||
"Question number {index}" : "Spurning númer {index}",
|
||||
"Drag to reorder the questions" : "Draga til að endurraða spurningum",
|
||||
"Title of question number {index}" : "Titill á spurningu númer {index}",
|
||||
"Required" : "þetta þarf",
|
||||
"Delete question" : "Eyða spurningu",
|
||||
"This question needs a title!" : "Þessi spurning þarf að vera með titil!",
|
||||
"Add a new answer" : "Bæta við nýju svari",
|
||||
"A long answer for the question “{text}”" : "Langt svar við spurningunni “{text}”",
|
||||
"A short answer for the question “{text}”" : "Stutt svar við spurningunni “{text}”",
|
||||
"Delete this response" : "Eyða þessu svari",
|
||||
"No response" : "Ekkert svar",
|
||||
"User or group name …" : "Notandi eða heiti hóps …",
|
||||
"Searching …" : "Leita …",
|
||||
"Group" : "Hópur",
|
||||
"Loading {title} …" : "Hleð inn {title} …",
|
||||
"Toggle settings" : "Víxla stillingum af/á",
|
||||
"Form title" : "Titill eyðuforms",
|
||||
"Description" : "Lýsing",
|
||||
"Add a question" : "Bæta við spurningu",
|
||||
"Error while saving form" : "Villa við að vista eyðuform",
|
||||
"Loading responses …" : "Hleð inn svörum …",
|
||||
"Back to questions" : "Aftur spurningar",
|
||||
"{amount} responses" : "{amount} svör",
|
||||
"Summary" : "Samantekt",
|
||||
"Options" : "Valkostir",
|
||||
"Export to CSV" : "Flytja út í CSV",
|
||||
"Delete all responses" : "Eyða öllum svörum",
|
||||
"Results of submitted forms will show up here" : "Niðurstöður innsendra eyðuforma munu birtast hér",
|
||||
"There was an error while removing responses" : "Villa kom upp við að fjarlægja svör",
|
||||
"responses" : "svör",
|
||||
"Share form" : "Deila eyðuformi",
|
||||
"Share via link" : "Deila með tengli",
|
||||
"Choose users to share with" : "Veldu notendur til að deila með",
|
||||
"Settings" : "Stillingar",
|
||||
"Anonymous responses" : "Nafnlaus svör",
|
||||
"Set expiration date" : "Setja gildistíma",
|
||||
"Expiration date" : "Gildir til",
|
||||
"Submit" : "Senda inn"
|
||||
"Select expiration date" : "Veldu gildistíma",
|
||||
"Expired on {date}" : "Rann út {date}",
|
||||
"Expires on {date}" : "Rennur út {date}",
|
||||
"Submit" : "Senda inn",
|
||||
"Submit form" : "Senda inn eyðuform",
|
||||
"Submitting form …" : "Sendi inn eyðuform …",
|
||||
"Thank you for completing the form!" : "Takk fyrir að fylla út í eyðuformið!",
|
||||
"There was an error submitting the form" : "Það kom upp villa við að senda eyðuformið inn",
|
||||
"Error while saving question" : "Villa við að vista spurningu",
|
||||
"Checkboxes" : "Gátreitir",
|
||||
"Multiple choice" : "Margir valmöguleikar",
|
||||
"Dropdown" : "Fellilisti",
|
||||
"People can pick one option" : "Fólk má velja einn möguleika",
|
||||
"Pick an option" : "Veldu einn möguleika",
|
||||
"Short answer" : "Stutt svar",
|
||||
"Short answer question title" : "Titill spurningar með stutt svar",
|
||||
"People can enter a short answer" : "Fólk getur sett inn stutt svar",
|
||||
"Enter a short answer" : "Settu inn stutt svar",
|
||||
"Long text" : "Langur texti",
|
||||
"Long text question title" : "Titill spurningar með langt svar",
|
||||
"People can enter a long text" : "Fólk getur sett inn langan texta",
|
||||
"Enter a long text" : "Settu inn langan texta",
|
||||
"Form expired" : "Eyðuform er útrunnið",
|
||||
"This form has expired and is no longer taking answers" : "Þetta eyðuform er útrunnið og tekur því ekki lengur við svörum",
|
||||
"Form not found" : "Eyðuform fannst ekki",
|
||||
"This form does not exist" : "Þetta eyðuform er ekki til"
|
||||
},
|
||||
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
|
||||
|
|
76
l10n/is.json
76
l10n/is.json
|
@ -1,13 +1,87 @@
|
|||
{ "translations": {
|
||||
"Anonymous response" : "Nafnlaust svar",
|
||||
"Forms" : "Eyðuform",
|
||||
"Shared by %s" : "Deilt af %s",
|
||||
"New form" : "Nýtt eyðuform",
|
||||
"Loading forms …" : "Hleð inn eyðuformum …",
|
||||
"No forms created yet" : "Engin eyðuform útbúin ennþá",
|
||||
"Create a form" : "Búa til eyðuform",
|
||||
"Select a form or create a new one" : "Veldu eyðuform eða búðu til nýtt",
|
||||
"Create new form" : "Búa til nýtt eyðuform",
|
||||
"An error occurred while loading the forms list" : "Villa átti sér stað við að hlaða inn lista yfir eyðuform",
|
||||
"Unable to create a new form" : "Gat ekki búið til nýtt eyðuform",
|
||||
"Responses" : "Svör",
|
||||
"Clone form" : "Klóna eyðuform",
|
||||
"Delete form" : "Eyða eyðuformi",
|
||||
"Form link copied" : "Tengill eyðuforms afritaður",
|
||||
"Copy share link" : "Afrita deilitengil",
|
||||
"Are you sure you want to delete {title}?" : "Ertu viss um að þú viljir eyða {title}?",
|
||||
"Error while deleting {title}" : "Villa kom upp við að eyða {title}",
|
||||
"Answer number {index}" : "Svar númer {index}",
|
||||
"Delete answer" : "Eyða svari",
|
||||
"Error while saving the answer" : "Villa kom upp við að vista svarið",
|
||||
"Question number {index}" : "Spurning númer {index}",
|
||||
"Drag to reorder the questions" : "Draga til að endurraða spurningum",
|
||||
"Title of question number {index}" : "Titill á spurningu númer {index}",
|
||||
"Required" : "þetta þarf",
|
||||
"Delete question" : "Eyða spurningu",
|
||||
"This question needs a title!" : "Þessi spurning þarf að vera með titil!",
|
||||
"Add a new answer" : "Bæta við nýju svari",
|
||||
"A long answer for the question “{text}”" : "Langt svar við spurningunni “{text}”",
|
||||
"A short answer for the question “{text}”" : "Stutt svar við spurningunni “{text}”",
|
||||
"Delete this response" : "Eyða þessu svari",
|
||||
"No response" : "Ekkert svar",
|
||||
"User or group name …" : "Notandi eða heiti hóps …",
|
||||
"Searching …" : "Leita …",
|
||||
"Group" : "Hópur",
|
||||
"Loading {title} …" : "Hleð inn {title} …",
|
||||
"Toggle settings" : "Víxla stillingum af/á",
|
||||
"Form title" : "Titill eyðuforms",
|
||||
"Description" : "Lýsing",
|
||||
"Add a question" : "Bæta við spurningu",
|
||||
"Error while saving form" : "Villa við að vista eyðuform",
|
||||
"Loading responses …" : "Hleð inn svörum …",
|
||||
"Back to questions" : "Aftur spurningar",
|
||||
"{amount} responses" : "{amount} svör",
|
||||
"Summary" : "Samantekt",
|
||||
"Options" : "Valkostir",
|
||||
"Export to CSV" : "Flytja út í CSV",
|
||||
"Delete all responses" : "Eyða öllum svörum",
|
||||
"Results of submitted forms will show up here" : "Niðurstöður innsendra eyðuforma munu birtast hér",
|
||||
"There was an error while removing responses" : "Villa kom upp við að fjarlægja svör",
|
||||
"responses" : "svör",
|
||||
"Share form" : "Deila eyðuformi",
|
||||
"Share via link" : "Deila með tengli",
|
||||
"Choose users to share with" : "Veldu notendur til að deila með",
|
||||
"Settings" : "Stillingar",
|
||||
"Anonymous responses" : "Nafnlaus svör",
|
||||
"Set expiration date" : "Setja gildistíma",
|
||||
"Expiration date" : "Gildir til",
|
||||
"Submit" : "Senda inn"
|
||||
"Select expiration date" : "Veldu gildistíma",
|
||||
"Expired on {date}" : "Rann út {date}",
|
||||
"Expires on {date}" : "Rennur út {date}",
|
||||
"Submit" : "Senda inn",
|
||||
"Submit form" : "Senda inn eyðuform",
|
||||
"Submitting form …" : "Sendi inn eyðuform …",
|
||||
"Thank you for completing the form!" : "Takk fyrir að fylla út í eyðuformið!",
|
||||
"There was an error submitting the form" : "Það kom upp villa við að senda eyðuformið inn",
|
||||
"Error while saving question" : "Villa við að vista spurningu",
|
||||
"Checkboxes" : "Gátreitir",
|
||||
"Multiple choice" : "Margir valmöguleikar",
|
||||
"Dropdown" : "Fellilisti",
|
||||
"People can pick one option" : "Fólk má velja einn möguleika",
|
||||
"Pick an option" : "Veldu einn möguleika",
|
||||
"Short answer" : "Stutt svar",
|
||||
"Short answer question title" : "Titill spurningar með stutt svar",
|
||||
"People can enter a short answer" : "Fólk getur sett inn stutt svar",
|
||||
"Enter a short answer" : "Settu inn stutt svar",
|
||||
"Long text" : "Langur texti",
|
||||
"Long text question title" : "Titill spurningar með langt svar",
|
||||
"People can enter a long text" : "Fólk getur sett inn langan texta",
|
||||
"Enter a long text" : "Settu inn langan texta",
|
||||
"Form expired" : "Eyðuform er útrunnið",
|
||||
"This form has expired and is no longer taking answers" : "Þetta eyðuform er útrunnið og tekur því ekki lengur við svörum",
|
||||
"Form not found" : "Eyðuform fannst ekki",
|
||||
"This form does not exist" : "Þetta eyðuform er ekki til"
|
||||
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
|
||||
}
|
42
l10n/ja.js
42
l10n/ja.js
|
@ -15,20 +15,60 @@ 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] を削除してもよろしいですか?",
|
||||
"Error while deleting {title}" : "{title}を削除中にエラー",
|
||||
"Answer number {index}" : "回答数{index}",
|
||||
"Delete answer" : "回答を削除",
|
||||
"Error while saving the answer" : "回答を保存中にエラーが発生しました",
|
||||
"Question number {index}" : "質問数{index}",
|
||||
"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 response" : "返信なし",
|
||||
"User or group name …" : "ユーザーかグループ名 ...",
|
||||
"No recommendations. Start typing." : "推奨事項はありません。 入力を開始します。",
|
||||
"Searching …" : "検索しています…",
|
||||
"No elements found." : "要素が見つかりませんでした。",
|
||||
"Group" : "グループ",
|
||||
"Loading {title} …" : "{title}をローディング ...",
|
||||
"Toggle settings" : "セッティングを切り替え",
|
||||
"Description" : "説明",
|
||||
"Add a question" : "質問を追加",
|
||||
"Error while saving form" : "フォームを保存中にエラー",
|
||||
"Loading responses …" : "返信をロード中 ...",
|
||||
"Back to questions" : "質問に戻る",
|
||||
"{amount} responses" : "{amount}個の返信",
|
||||
"Summary" : "要約",
|
||||
"Options" : "オプション",
|
||||
"Export to CSV" : "CSVにエクスポート",
|
||||
"Delete all responses" : "全ての返信を削除",
|
||||
"No responses yet" : "まだ返信はありません",
|
||||
"Results of submitted forms will show up here" : "送信したフォームの結果はここに表示されます",
|
||||
"responses" : "返信",
|
||||
"Share via link" : "linkで共有",
|
||||
"Settings" : "設定",
|
||||
"Anonymous responses" : "匿名回答",
|
||||
"Set expiration date" : "有効期限を設定",
|
||||
"Expiration date" : "有効期限",
|
||||
"Select expiration date" : "回答期限日の選択",
|
||||
"Submit" : "送信",
|
||||
"Checkboxes" : "チェックボックス"
|
||||
"Error while saving question" : "質問の保存中にエラーが発生しました",
|
||||
"Checkboxes" : "チェックボックス",
|
||||
"Multiple choice" : "複数の選択肢",
|
||||
"Dropdown" : "ドロップダウン",
|
||||
"Dropdown question title" : "質問題をドロップダウン",
|
||||
"Pick an option" : "選択肢を選択",
|
||||
"Short answer" : "短い回答",
|
||||
"Enter a short answer" : "短い回答を入力",
|
||||
"Long text" : "長文",
|
||||
"Form not found" : "フォームがありません",
|
||||
"This form does not exist" : "このフォームは存在しません"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
|
42
l10n/ja.json
42
l10n/ja.json
|
@ -13,20 +13,60 @@
|
|||
"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] を削除してもよろしいですか?",
|
||||
"Error while deleting {title}" : "{title}を削除中にエラー",
|
||||
"Answer number {index}" : "回答数{index}",
|
||||
"Delete answer" : "回答を削除",
|
||||
"Error while saving the answer" : "回答を保存中にエラーが発生しました",
|
||||
"Question number {index}" : "質問数{index}",
|
||||
"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 response" : "返信なし",
|
||||
"User or group name …" : "ユーザーかグループ名 ...",
|
||||
"No recommendations. Start typing." : "推奨事項はありません。 入力を開始します。",
|
||||
"Searching …" : "検索しています…",
|
||||
"No elements found." : "要素が見つかりませんでした。",
|
||||
"Group" : "グループ",
|
||||
"Loading {title} …" : "{title}をローディング ...",
|
||||
"Toggle settings" : "セッティングを切り替え",
|
||||
"Description" : "説明",
|
||||
"Add a question" : "質問を追加",
|
||||
"Error while saving form" : "フォームを保存中にエラー",
|
||||
"Loading responses …" : "返信をロード中 ...",
|
||||
"Back to questions" : "質問に戻る",
|
||||
"{amount} responses" : "{amount}個の返信",
|
||||
"Summary" : "要約",
|
||||
"Options" : "オプション",
|
||||
"Export to CSV" : "CSVにエクスポート",
|
||||
"Delete all responses" : "全ての返信を削除",
|
||||
"No responses yet" : "まだ返信はありません",
|
||||
"Results of submitted forms will show up here" : "送信したフォームの結果はここに表示されます",
|
||||
"responses" : "返信",
|
||||
"Share via link" : "linkで共有",
|
||||
"Settings" : "設定",
|
||||
"Anonymous responses" : "匿名回答",
|
||||
"Set expiration date" : "有効期限を設定",
|
||||
"Expiration date" : "有効期限",
|
||||
"Select expiration date" : "回答期限日の選択",
|
||||
"Submit" : "送信",
|
||||
"Checkboxes" : "チェックボックス"
|
||||
"Error while saving question" : "質問の保存中にエラーが発生しました",
|
||||
"Checkboxes" : "チェックボックス",
|
||||
"Multiple choice" : "複数の選択肢",
|
||||
"Dropdown" : "ドロップダウン",
|
||||
"Dropdown question title" : "質問題をドロップダウン",
|
||||
"Pick an option" : "選択肢を選択",
|
||||
"Short answer" : "短い回答",
|
||||
"Enter a short answer" : "短い回答を入力",
|
||||
"Long text" : "長文",
|
||||
"Form not found" : "フォームがありません",
|
||||
"This form does not exist" : "このフォームは存在しません"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
|
@ -8,6 +8,7 @@ OC.L10N.register(
|
|||
"Settings" : "Innstillinger",
|
||||
"Set expiration date" : "Sett utløpsdato",
|
||||
"Expiration date" : "Utløpsdato",
|
||||
"Submit" : "Send inn"
|
||||
"Submit" : "Send inn",
|
||||
"Checkboxes" : "Avkrysningsruter"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"Settings" : "Innstillinger",
|
||||
"Set expiration date" : "Sett utløpsdato",
|
||||
"Expiration date" : "Utløpsdato",
|
||||
"Submit" : "Send inn"
|
||||
"Submit" : "Send inn",
|
||||
"Checkboxes" : "Avkrysningsruter"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
15
l10n/nl.js
15
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",
|
||||
|
|
15
l10n/nl.json
15
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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -29,6 +29,7 @@ OC.L10N.register(
|
|||
"Title of question number {index}" : "Заголовок вопроса номер {index}",
|
||||
"Required" : "Обязательно",
|
||||
"Delete question" : "Удалить вопрос",
|
||||
"This question needs a title!" : "Необходимо задать название вопроса.",
|
||||
"Add a new answer" : "Добавить новый ответ",
|
||||
"There was an issue deleting this option" : "Не удалось удалить этот вариант",
|
||||
"A long answer for the question “{text}”" : "Длинный ответ для вопроса “{text}”",
|
||||
|
@ -74,6 +75,7 @@ OC.L10N.register(
|
|||
"There was an error submitting the form" : "При отправке формы произошла ошибка",
|
||||
"Error while saving question" : "Ошибка при сохранении вопроса",
|
||||
"Checkboxes" : "Несколько из списка",
|
||||
"This question needs a title and at least one answer!" : "Необходимо задать название вопроса и не менее одного варианта ответа.",
|
||||
"Multiple choice" : "Один из списка",
|
||||
"Short answer" : "Короткий ответ",
|
||||
"People can enter a short answer" : "Люди могут написать короткий ответ",
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
"Title of question number {index}" : "Заголовок вопроса номер {index}",
|
||||
"Required" : "Обязательно",
|
||||
"Delete question" : "Удалить вопрос",
|
||||
"This question needs a title!" : "Необходимо задать название вопроса.",
|
||||
"Add a new answer" : "Добавить новый ответ",
|
||||
"There was an issue deleting this option" : "Не удалось удалить этот вариант",
|
||||
"A long answer for the question “{text}”" : "Длинный ответ для вопроса “{text}”",
|
||||
|
@ -72,6 +73,7 @@
|
|||
"There was an error submitting the form" : "При отправке формы произошла ошибка",
|
||||
"Error while saving question" : "Ошибка при сохранении вопроса",
|
||||
"Checkboxes" : "Несколько из списка",
|
||||
"This question needs a title and at least one answer!" : "Необходимо задать название вопроса и не менее одного варианта ответа.",
|
||||
"Multiple choice" : "Один из списка",
|
||||
"Short answer" : "Короткий ответ",
|
||||
"People can enter a short answer" : "Люди могут написать короткий ответ",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -19,6 +19,10 @@ OC.L10N.register(
|
|||
"Cannot copy, please copy the link manually" : "Не могу да копирам, копирајте везу ручно",
|
||||
"Copy share link" : "Копирај везу дељења",
|
||||
"Are you sure you want to delete {title}?" : "Да ли сте сигурни да желите да обришете {title}?",
|
||||
"Error while deleting {title}" : "Грешка приликом брисања {title}",
|
||||
"An answer for the {index} option" : "Одговор за опцију {index}",
|
||||
"Answer number {index}" : "Одговор број {index}",
|
||||
"Delete answer" : "Обриши одговор",
|
||||
"Required" : "Обавезно",
|
||||
"No recommendations. Start typing." : "Нема препорука. Започните куцање.",
|
||||
"Searching …" : "Тражим…",
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
"Cannot copy, please copy the link manually" : "Не могу да копирам, копирајте везу ручно",
|
||||
"Copy share link" : "Копирај везу дељења",
|
||||
"Are you sure you want to delete {title}?" : "Да ли сте сигурни да желите да обришете {title}?",
|
||||
"Error while deleting {title}" : "Грешка приликом брисања {title}",
|
||||
"An answer for the {index} option" : "Одговор за опцију {index}",
|
||||
"Answer number {index}" : "Одговор број {index}",
|
||||
"Delete answer" : "Обриши одговор",
|
||||
"Required" : "Обавезно",
|
||||
"No recommendations. Start typing." : "Нема препорука. Започните куцање.",
|
||||
"Searching …" : "Тражим…",
|
||||
|
|
|
@ -14,6 +14,7 @@ OC.L10N.register(
|
|||
"Settings" : "Налаштування",
|
||||
"Set expiration date" : "Встановити термін дії",
|
||||
"Expiration date" : "Термін дії",
|
||||
"Submit" : "Гаразд"
|
||||
"Submit" : "Гаразд",
|
||||
"Checkboxes" : "Прапорці"
|
||||
},
|
||||
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
"Settings" : "Налаштування",
|
||||
"Set expiration date" : "Встановити термін дії",
|
||||
"Expiration date" : "Термін дії",
|
||||
"Submit" : "Гаразд"
|
||||
"Submit" : "Гаразд",
|
||||
"Checkboxes" : "Прапорці"
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,7 +53,9 @@ class Question extends Entity {
|
|||
'long',
|
||||
'multiple',
|
||||
'multiple_unique',
|
||||
'dropdown'
|
||||
'dropdown',
|
||||
'date',
|
||||
'datetime',
|
||||
];
|
||||
|
||||
public function __construct() {
|
||||
|
|
1134
package-lock.json
generated
1134
package-lock.json
generated
File diff suppressed because it is too large
Load diff
36
package.json
36
package.json
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "forms",
|
||||
"description": "Forms app for nextcloud",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.4",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/nextcloud/forms.git"
|
||||
|
@ -23,26 +23,26 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@nextcloud/auth": "^1.3.0",
|
||||
"@nextcloud/axios": "^1.3.3",
|
||||
"@nextcloud/dialogs": "^1.4.0",
|
||||
"@nextcloud/axios": "^1.4.0",
|
||||
"@nextcloud/dialogs": "^2.0.1",
|
||||
"@nextcloud/event-bus": "^1.2.0",
|
||||
"@nextcloud/initial-state": "^1.1.2",
|
||||
"@nextcloud/l10n": "^1.3.0",
|
||||
"@nextcloud/l10n": "^1.4.1",
|
||||
"@nextcloud/moment": "^1.1.1",
|
||||
"@nextcloud/router": "^1.1.0",
|
||||
"@nextcloud/vue": "^2.3.0",
|
||||
"@nextcloud/router": "^1.2.0",
|
||||
"@nextcloud/vue": "^2.6.5",
|
||||
"core-js": "^3.6.5",
|
||||
"crypto-js": "^4.0.0",
|
||||
"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-click-outside": "^3.1.1",
|
||||
"v-clipboard": "^2.2.3",
|
||||
"vue": "^2.6.11",
|
||||
"vue-router": "^3.3.4",
|
||||
"vuedraggable": "^2.24.0"
|
||||
"vue": "^2.6.12",
|
||||
"vue-router": "^3.4.3",
|
||||
"vuedraggable": "^2.24.1"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
|
@ -51,13 +51,13 @@
|
|||
"node": ">=10.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.11.0",
|
||||
"@babel/core": "^7.11.6",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||
"@babel/preset-env": "^7.11.0",
|
||||
"@babel/preset-env": "^7.11.5",
|
||||
"@nextcloud/browserslist-config": "^1.0.0",
|
||||
"@nextcloud/eslint-config": "^2.2.0",
|
||||
"@nextcloud/eslint-plugin": "^1.4.0",
|
||||
"@nextcloud/webpack-vue-config": "^1.1.0",
|
||||
"@nextcloud/webpack-vue-config": "^1.2.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"babel-loader": "^8.1.0",
|
||||
"css-loader": "^3.6.0",
|
||||
|
@ -70,19 +70,19 @@
|
|||
"eslint-plugin-promise": "^4.2.1",
|
||||
"eslint-plugin-standard": "^4.0.1",
|
||||
"eslint-plugin-vue": "^6.2.2",
|
||||
"file-loader": "^6.0.0",
|
||||
"file-loader": "^6.1.0",
|
||||
"node-sass": "^4.14.1",
|
||||
"sass-loader": "^8.0.2",
|
||||
"stylelint": "^13.6.1",
|
||||
"stylelint": "^13.7.1",
|
||||
"stylelint-config-recommended-scss": "^4.2.0",
|
||||
"stylelint-scss": "^3.18.0",
|
||||
"stylelint-webpack-plugin": "^2.1.0",
|
||||
"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.0.9"
|
||||
"webpack-merge": "^5.1.4"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
<script>
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
import AppContent from '@nextcloud/vue/dist/Components/AppContent'
|
||||
|
@ -146,7 +146,7 @@ export default {
|
|||
async loadForms() {
|
||||
this.loading = true
|
||||
try {
|
||||
const response = await axios.get(generateUrl('apps/forms/api/v1/forms'))
|
||||
const response = await axios.get(generateOcsUrl('apps/forms/api/v1', 2) + 'forms')
|
||||
this.forms = response.data
|
||||
} catch (error) {
|
||||
showError(t('forms', 'An error occurred while loading the forms list'))
|
||||
|
@ -162,7 +162,7 @@ export default {
|
|||
async onNewForm() {
|
||||
try {
|
||||
// Request a new empty form
|
||||
const response = await axios.post(generateUrl('/apps/forms/api/v1/form'))
|
||||
const response = await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'form')
|
||||
const newForm = response.data
|
||||
this.forms.unshift(newForm)
|
||||
this.$router.push({ name: 'edit', params: { hash: newForm.hash } })
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateUrl, generateOcsUrl } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import ActionLink from '@nextcloud/vue/dist/Components/ActionLink'
|
||||
|
@ -174,7 +174,7 @@ export default {
|
|||
// All good, let's delete
|
||||
this.loading = true
|
||||
try {
|
||||
await axios.delete(generateUrl('/apps/forms/api/v1/form/{id}', { id: this.form.id }))
|
||||
await axios.delete(generateOcsUrl('apps/forms/api/v1', 2) + `form/${this.form.id}`)
|
||||
this.$emit('delete', this.form.id)
|
||||
} catch (error) {
|
||||
showError(t('forms', 'Error while deleting {title}', { title: this.formTitle }))
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import axios from '@nextcloud/axios'
|
||||
import pDebounce from 'p-debounce'
|
||||
import PQueue from 'p-queue'
|
||||
|
@ -143,7 +143,7 @@ export default {
|
|||
*/
|
||||
async createAnswer(answer) {
|
||||
try {
|
||||
const response = await axios.post(generateUrl('/apps/forms/api/v1/option'), {
|
||||
const response = await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'option', {
|
||||
questionId: answer.question_id,
|
||||
text: answer.text,
|
||||
})
|
||||
|
@ -171,7 +171,7 @@ export default {
|
|||
*/
|
||||
async updateAnswer(answer) {
|
||||
try {
|
||||
await axios.post(generateUrl('/apps/forms/api/v1/option/update'), {
|
||||
await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'option/update', {
|
||||
id: this.answer.id,
|
||||
keyValuePairs: {
|
||||
text: answer.text,
|
||||
|
|
68
src/components/Questions/QuestionDate.vue
Normal file
68
src/components/Questions/QuestionDate.vue
Normal file
|
@ -0,0 +1,68 @@
|
|||
<!--
|
||||
- @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>
|
||||
-
|
||||
- @author Simon Vieille <contact@deblan.fr>
|
||||
-
|
||||
- @license GNU AGPL version 3 or any later version
|
||||
-
|
||||
- This program is free software: you can redistribute it and/or modify
|
||||
- it under the terms of the GNU Affero General Public License as
|
||||
- published by the Free Software Foundation, either version 3 of the
|
||||
- License, or (at your option) any later version.
|
||||
-
|
||||
- This program is distributed in the hope that it will be useful,
|
||||
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- GNU Affero General Public License for more details.
|
||||
-
|
||||
- You should have received a copy of the GNU Affero General Public License
|
||||
- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-
|
||||
-->
|
||||
|
||||
<template>
|
||||
<Question
|
||||
v-bind.sync="$attrs"
|
||||
:text="text"
|
||||
:mandatory="mandatory"
|
||||
:edit.sync="edit"
|
||||
:read-only="readOnly"
|
||||
:max-question-length="maxStringLengths.questionText"
|
||||
:title-placeholder="answerType.titlePlaceholder"
|
||||
:warning-invalid="answerType.warningInvalid"
|
||||
@update:text="onTitleChange"
|
||||
@update:mandatory="onMandatoryChange"
|
||||
@delete="onDelete">
|
||||
<div v-if="readOnly" class="question__content">
|
||||
<DatetimePicker
|
||||
v-model="time" />
|
||||
</div>
|
||||
</Question>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import QuestionShort from './QuestionShort'
|
||||
import DatetimePicker from '@nextcloud/vue/dist/Components/DatetimePicker'
|
||||
|
||||
export default {
|
||||
name: 'QuestionDate',
|
||||
|
||||
components: {
|
||||
DatetimePicker,
|
||||
},
|
||||
|
||||
mixins: [QuestionShort],
|
||||
|
||||
data() {
|
||||
return {
|
||||
time: null,
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
time(value) {
|
||||
this.$emit('update:values', [value])
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
69
src/components/Questions/QuestionDatetime.vue
Normal file
69
src/components/Questions/QuestionDatetime.vue
Normal file
|
@ -0,0 +1,69 @@
|
|||
<!--
|
||||
- @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>
|
||||
-
|
||||
- @author Simon Vieille <contact@deblan.fr>
|
||||
-
|
||||
- @license GNU AGPL version 3 or any later version
|
||||
-
|
||||
- This program is free software: you can redistribute it and/or modify
|
||||
- it under the terms of the GNU Affero General Public License as
|
||||
- published by the Free Software Foundation, either version 3 of the
|
||||
- License, or (at your option) any later version.
|
||||
-
|
||||
- This program is distributed in the hope that it will be useful,
|
||||
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- GNU Affero General Public License for more details.
|
||||
-
|
||||
- You should have received a copy of the GNU Affero General Public License
|
||||
- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-
|
||||
-->
|
||||
|
||||
<template>
|
||||
<Question
|
||||
v-bind.sync="$attrs"
|
||||
:text="text"
|
||||
:mandatory="mandatory"
|
||||
:edit.sync="edit"
|
||||
:read-only="readOnly"
|
||||
:max-question-length="maxStringLengths.questionText"
|
||||
:title-placeholder="answerType.titlePlaceholder"
|
||||
:warning-invalid="answerType.warningInvalid"
|
||||
@update:text="onTitleChange"
|
||||
@update:mandatory="onMandatoryChange"
|
||||
@delete="onDelete">
|
||||
<div v-if="readOnly" class="question__content">
|
||||
<DatetimePicker
|
||||
v-model="time"
|
||||
type="datetime" />
|
||||
</div>
|
||||
</Question>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import QuestionShort from './QuestionShort'
|
||||
import DatetimePicker from '@nextcloud/vue/dist/Components/DatetimePicker'
|
||||
|
||||
export default {
|
||||
name: 'QuestionDatetime',
|
||||
|
||||
components: {
|
||||
DatetimePicker,
|
||||
},
|
||||
|
||||
mixins: [QuestionShort],
|
||||
|
||||
data() {
|
||||
return {
|
||||
time: null,
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
time(value) {
|
||||
this.$emit('update:values', [value])
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
|
@ -83,7 +83,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
|
@ -305,7 +305,7 @@ export default {
|
|||
|
||||
if (!option.local) {
|
||||
// let's not await, deleting in background
|
||||
axios.delete(generateUrl('/apps/forms/api/v1/option/{id}', { id: option.id }))
|
||||
axios.delete(generateOcsUrl('apps/forms/api/v1', 2) + `option/${option.id}`)
|
||||
.catch(error => {
|
||||
showError(t('forms', 'There was an issue deleting this option'))
|
||||
console.error(error)
|
||||
|
|
|
@ -90,7 +90,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
|
@ -312,7 +312,7 @@ export default {
|
|||
|
||||
if (!option.local) {
|
||||
// let's not await, deleting in background
|
||||
axios.delete(generateUrl('/apps/forms/api/v1/option/{id}', { id: option.id }))
|
||||
axios.delete(generateOcsUrl('apps/forms/api/v1', 2) + `option/${option.id}`)
|
||||
.catch(error => {
|
||||
showError(t('forms', 'There was an issue deleting this option'))
|
||||
console.error(error)
|
||||
|
|
|
@ -209,7 +209,7 @@ export default {
|
|||
this.SHARE_TYPES.SHARE_TYPE_GROUP,
|
||||
]
|
||||
|
||||
const request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1') + 'sharees', {
|
||||
const request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1', 2) + 'sharees', {
|
||||
params: {
|
||||
format: 'json',
|
||||
itemType: 'file',
|
||||
|
@ -219,11 +219,6 @@ export default {
|
|||
},
|
||||
})
|
||||
|
||||
if (request.data.ocs.meta.statuscode !== 100) {
|
||||
console.error('Error fetching suggestions', request)
|
||||
return
|
||||
}
|
||||
|
||||
const data = request.data.ocs.data
|
||||
const exact = request.data.ocs.data.exact
|
||||
data.exact = [] // removing exact from general results
|
||||
|
@ -263,18 +258,13 @@ export default {
|
|||
async getRecommendations() {
|
||||
this.loading = true
|
||||
|
||||
const request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1') + 'sharees_recommended', {
|
||||
const request = await axios.get(generateOcsUrl('apps/files_sharing/api/v1', 2) + 'sharees_recommended', {
|
||||
params: {
|
||||
format: 'json',
|
||||
itemType: 'file',
|
||||
},
|
||||
})
|
||||
|
||||
if (request.data.ocs.meta.statuscode !== 100) {
|
||||
console.error('Error fetching recommendations', request)
|
||||
return
|
||||
}
|
||||
|
||||
const exact = request.data.ocs.data.exact
|
||||
|
||||
// flatten array of arrays
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { debounce } from 'debounce'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
|
@ -170,7 +170,7 @@ export default {
|
|||
async saveQuestionProperty(key, value) {
|
||||
try {
|
||||
// TODO: add loading status feedback ?
|
||||
await axios.post(generateUrl('/apps/forms/api/v1/question/update'), {
|
||||
await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'question/update', {
|
||||
id: this.id,
|
||||
keyValuePairs: {
|
||||
[key]: value,
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
|
@ -39,7 +39,7 @@ export default {
|
|||
async saveFormProperty(key) {
|
||||
try {
|
||||
// TODO: add loading status feedback ?
|
||||
await axios.post(generateUrl('/apps/forms/api/v1/form/update'), {
|
||||
await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'form/update', {
|
||||
id: this.form.id,
|
||||
keyValuePairs: {
|
||||
[key]: this.form[key],
|
||||
|
|
|
@ -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!'),
|
||||
},
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
|
||||
<script>
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
@ -252,7 +252,7 @@ export default {
|
|||
this.cancelFetchFullForm = cancel
|
||||
|
||||
try {
|
||||
const form = await request(generateUrl('/apps/forms/api/v1/form/{id}', { id }))
|
||||
const form = await request(generateOcsUrl('apps/forms/api/v1', 2) + `form/${id}`)
|
||||
this.$emit('update:form', form.data)
|
||||
this.isLoadingForm = false
|
||||
} catch (error) {
|
||||
|
@ -299,7 +299,7 @@ export default {
|
|||
this.isLoadingQuestions = true
|
||||
|
||||
try {
|
||||
const response = await axios.post(generateUrl('/apps/forms/api/v1/question'), {
|
||||
const response = await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'question', {
|
||||
formId: this.form.id,
|
||||
type,
|
||||
text,
|
||||
|
@ -337,7 +337,7 @@ export default {
|
|||
this.isLoadingQuestions = true
|
||||
|
||||
try {
|
||||
await axios.delete(generateUrl('/apps/forms/api/v1/question/{id}', { id }))
|
||||
await axios.delete(generateOcsUrl('apps/forms/api/v1', 2) + `question/${id}`)
|
||||
const index = this.form.questions.findIndex(search => search.id === id)
|
||||
this.form.questions.splice(index, 1)
|
||||
} catch (error) {
|
||||
|
@ -356,7 +356,7 @@ export default {
|
|||
const newOrder = this.form.questions.map(question => question.id)
|
||||
|
||||
try {
|
||||
await axios.post(generateUrl('/apps/forms/api/v1/question/reorder'), {
|
||||
await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'question/reorder', {
|
||||
formId: this.form.id,
|
||||
newOrder,
|
||||
})
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateUrl, generateOcsUrl } from '@nextcloud/router'
|
||||
import { Parser } from 'json2csv'
|
||||
import { showError, showSuccess } from '@nextcloud/dialogs'
|
||||
import Actions from '@nextcloud/vue/dist/Components/Actions'
|
||||
|
@ -214,9 +214,7 @@ export default {
|
|||
console.debug('Loading results for form', this.form.hash)
|
||||
|
||||
try {
|
||||
const response = await axios.get(generateUrl('/apps/forms/api/v1/submissions/{hash}', {
|
||||
hash: this.form.hash,
|
||||
}))
|
||||
const response = await axios.get(generateOcsUrl('apps/forms/api/v1', 2) + `submissions/${this.form.hash}`)
|
||||
|
||||
// Append questions & submissions
|
||||
this.$set(this.form, 'submissions', response.data.submissions)
|
||||
|
@ -233,7 +231,7 @@ export default {
|
|||
this.loadingResults = true
|
||||
|
||||
try {
|
||||
await axios.delete(generateUrl('/apps/forms/api/v1/submission/{id}', { id }))
|
||||
await axios.delete(generateOcsUrl('apps/forms/api/v1', 2) + `submission/${id}`)
|
||||
const index = this.form.submissions.findIndex(search => search.id === id)
|
||||
this.form.submissions.splice(index, 1)
|
||||
} catch (error) {
|
||||
|
@ -251,7 +249,7 @@ export default {
|
|||
|
||||
this.loadingResults = true
|
||||
try {
|
||||
await axios.delete(generateUrl('/apps/forms/api/v1/submissions/{formId}', { formId: this.form.id }))
|
||||
await axios.delete(generateOcsUrl('apps/forms/api/v1', 2) + `submissions/${this.form.id}`)
|
||||
this.form.submissions = []
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
|
||||
<script>
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import axios from '@nextcloud/axios'
|
||||
import AppContent from '@nextcloud/vue/dist/Components/AppContent'
|
||||
|
@ -188,7 +188,7 @@ export default {
|
|||
this.loading = true
|
||||
|
||||
try {
|
||||
await axios.post(generateUrl('/apps/forms/api/v1/submission/insert'), {
|
||||
await axios.post(generateOcsUrl('apps/forms/api/v1', 2) + 'submission/insert', {
|
||||
formId: this.form.id,
|
||||
answers: this.answers,
|
||||
})
|
||||
|
|
|
@ -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$/),
|
||||
],
|
||||
|
|
Loading…
Reference in a new issue