Compare commits

...

88 commits

Author SHA1 Message Date
Simon Vieille eaed2c7ac7 add date question
add datetime question
2020-09-15 18:31:36 +02:00
Nextcloud bot 688c73ebac
[tx-robot] updated from transifex 2020-09-14 02:29:24 +00:00
Nextcloud bot bdfdb6cbf6
[tx-robot] updated from transifex 2020-09-13 02:29:30 +00:00
dependabot[bot] 75660eecd6
Merge pull request #602 from nextcloud/dependabot/npm_and_yarn/nextcloud/l10n-1.4.1 2020-09-12 01:19:01 +00:00
dependabot[bot] b86a3ef9f8
Bump @nextcloud/l10n from 1.4.0 to 1.4.1
Bumps [@nextcloud/l10n](https://github.com/nextcloud/nextcloud-l10n) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/nextcloud/nextcloud-l10n/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-l10n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-l10n/compare/v1.4.0...v1.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-12 01:16:01 +00:00
dependabot[bot] a54117b9b0
Merge pull request #601 from nextcloud/dependabot/npm_and_yarn/nextcloud/vue-2.6.5 2020-09-12 01:11:08 +00:00
dependabot[bot] 52d9cabf70
Merge pull request #600 from nextcloud/dependabot/npm_and_yarn/stylelint-13.7.1 2020-09-12 01:10:56 +00:00
dependabot[bot] a02e784c9a
Merge pull request #599 from nextcloud/dependabot/npm_and_yarn/v-click-outside-3.1.1 2020-09-12 01:07:20 +00:00
dependabot[bot] 726fdba376
Merge pull request #598 from nextcloud/dependabot/npm_and_yarn/webpack-merge-5.1.4 2020-09-12 01:06:33 +00:00
dependabot[bot] 71ce41df69
Bump @nextcloud/vue from 2.6.4 to 2.6.5
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.6.4 to 2.6.5.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.6.4...v2.6.5)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-12 01:04:58 +00:00
dependabot[bot] 78a0ad74d2
Bump stylelint from 13.7.0 to 13.7.1
Bumps [stylelint](https://github.com/stylelint/stylelint) from 13.7.0 to 13.7.1.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/13.7.0...13.7.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-12 01:04:36 +00:00
dependabot[bot] 57a1dcc6bb
Bump v-click-outside from 3.1.0 to 3.1.1
Bumps [v-click-outside](https://github.com/ndelvalle/v-click-outside) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/ndelvalle/v-click-outside/releases)
- [Commits](https://github.com/ndelvalle/v-click-outside/compare/v3.1.0...v3.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-12 01:04:15 +00:00
dependabot[bot] cde37f03a9
Bump webpack-merge from 5.1.3 to 5.1.4
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.1.3 to 5.1.4.
- [Release notes](https://github.com/survivejs/webpack-merge/releases)
- [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/survivejs/webpack-merge/compare/v5.1.3...v5.1.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-12 01:03:53 +00:00
Nextcloud bot fde4662066
[tx-robot] updated from transifex 2020-09-11 02:29:17 +00:00
Nextcloud bot cf0c012502
[tx-robot] updated from transifex 2020-09-09 02:29:49 +00:00
Nextcloud bot fb5be5d5bd
[tx-robot] updated from transifex 2020-09-06 02:37:37 +00:00
John Molakvoæ e47be46a05
Merge pull request #593 from nextcloud/dependabot/npm_and_yarn/nextcloud/router-1.2.0
Bump @nextcloud/router from 1.1.0 to 1.2.0
2020-09-04 23:10:47 +02:00
John Molakvoæ cd4248dd42
Merge pull request #588 from nextcloud/dependabot/npm_and_yarn/nextcloud/l10n-1.4.0
Bump @nextcloud/l10n from 1.3.0 to 1.4.0
2020-09-04 23:10:37 +02:00
John Molakvoæ 0309527d7a
Merge pull request #594 from nextcloud/dependabot/npm_and_yarn/nextcloud/axios-1.4.0
Bump @nextcloud/axios from 1.3.3 to 1.4.0
2020-09-04 23:10:32 +02:00
John Molakvoæ 13f721c661
Merge pull request #592 from nextcloud/dependabot/npm_and_yarn/v-click-outside-3.1.0
Bump v-click-outside from 3.0.1 to 3.1.0
2020-09-04 23:10:25 +02:00
John Molakvoæ 5c02fc7ef5
Merge pull request #591 from nextcloud/dependabot/npm_and_yarn/stylelint-13.7.0
Bump stylelint from 13.6.1 to 13.7.0
2020-09-04 23:10:18 +02:00
John Molakvoæ 4417625221
Merge pull request #585 from nextcloud/dependabot/npm_and_yarn/file-loader-6.1.0
Bump file-loader from 6.0.0 to 6.1.0
2020-09-04 23:10:12 +02:00
John Molakvoæ a2e1c659b1
Merge pull request #584 from nextcloud/dependabot/composer/phpunit/phpunit-tw-8
Update phpunit/phpunit requirement from ^7 to ^8
2020-09-04 23:10:05 +02:00
dependabot[bot] 746b0f505f
Bump @nextcloud/l10n from 1.3.0 to 1.4.0
Bumps [@nextcloud/l10n](https://github.com/nextcloud/nextcloud-l10n) from 1.3.0 to 1.4.0.
- [Release notes](https://github.com/nextcloud/nextcloud-l10n/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-l10n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-l10n/compare/v1.3.0...v1.4.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 21:06:49 +00:00
dependabot[bot] ef133b88b0
Bump @nextcloud/router from 1.1.0 to 1.2.0
Bumps [@nextcloud/router](https://github.com/nextcloud/nextcloud-router) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/nextcloud/nextcloud-router/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-router/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-router/compare/v1.1.0...v1.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 21:05:05 +00:00
dependabot[bot] 106a8e6937
Merge pull request #590 from nextcloud/dependabot/npm_and_yarn/webpack-merge-5.1.3 2020-09-04 21:03:46 +00:00
dependabot[bot] 6e6fe71c3c
Merge pull request #589 from nextcloud/dependabot/npm_and_yarn/babel/core-7.11.6 2020-09-04 21:03:35 +00:00
dependabot[bot] 564ccc199e
Merge pull request #586 from nextcloud/dependabot/npm_and_yarn/babel/preset-env-7.11.5 2020-09-04 21:03:23 +00:00
dependabot[bot] 6fd758f797
Bump @nextcloud/axios from 1.3.3 to 1.4.0
Bumps [@nextcloud/axios](https://github.com/nextcloud/nextcloud-axios) from 1.3.3 to 1.4.0.
- [Release notes](https://github.com/nextcloud/nextcloud-axios/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-axios/compare/v1.3.3...v1.4.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 21:02:59 +00:00
dependabot[bot] 2dccf86682
Bump v-click-outside from 3.0.1 to 3.1.0
Bumps [v-click-outside](https://github.com/ndelvalle/v-click-outside) from 3.0.1 to 3.1.0.
- [Release notes](https://github.com/ndelvalle/v-click-outside/releases)
- [Commits](https://github.com/ndelvalle/v-click-outside/compare/v3.0.1...v3.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 21:01:58 +00:00
dependabot[bot] da4321023e
Merge pull request #587 from nextcloud/dependabot/npm_and_yarn/nextcloud/vue-2.6.4 2020-09-04 21:01:57 +00:00
dependabot[bot] 63e0ce3584
Bump stylelint from 13.6.1 to 13.7.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 13.6.1 to 13.7.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/13.6.1...13.7.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 21:01:19 +00:00
dependabot[bot] 6c957ded2c
Bump webpack-merge from 5.1.2 to 5.1.3
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.1.2 to 5.1.3.
- [Release notes](https://github.com/survivejs/webpack-merge/releases)
- [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/survivejs/webpack-merge/compare/v5.1.2...v5.1.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 21:00:50 +00:00
dependabot[bot] f3eb65dedb
Bump @babel/core from 7.11.4 to 7.11.6
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.4 to 7.11.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.6/packages/babel-core)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 21:00:16 +00:00
dependabot[bot] bad2b0b859
Bump @nextcloud/vue from 2.6.1 to 2.6.4
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.6.1 to 2.6.4.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.6.1...v2.6.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 20:59:32 +00:00
dependabot[bot] 83744ba7c4
Bump @babel/preset-env from 7.11.0 to 7.11.5
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.11.0 to 7.11.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.5/packages/babel-preset-env)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 20:58:55 +00:00
dependabot[bot] c278a12659
Bump file-loader from 6.0.0 to 6.1.0
Bumps [file-loader](https://github.com/webpack-contrib/file-loader) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/webpack-contrib/file-loader/releases)
- [Changelog](https://github.com/webpack-contrib/file-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/file-loader/compare/v6.0.0...v6.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 20:58:28 +00:00
dependabot[bot] de8903e88c
Update phpunit/phpunit requirement from ^7 to ^8
Updates the requirements on [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) to permit the latest version.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-8.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/7.0.0...8.5.8)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-04 20:58:15 +00:00
John Molakvoæ fca8fe74fe
Merge pull request #583 from nextcloud/dependabot/config 2020-09-04 22:57:01 +02:00
John Molakvoæ (skjnldsv) cfec7a85be
Move to automated dependabot merging
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2020-09-04 22:44:04 +02:00
John Molakvoæ (skjnldsv) f3b3a8c083
2.0.4 2020-09-01 15:47:41 +02:00
John Molakvoæ 5176dc6eef
Merge pull request #580 from nextcloud/dependabot/composer/christophwurst/nextcloud-tw-19.0
Update christophwurst/nextcloud requirement from ^17.0 to ^19.0
2020-08-31 10:40:47 +02:00
dependabot-preview[bot] a6cbcea509
Update christophwurst/nextcloud requirement from ^17.0 to ^19.0
Updates the requirements on [christophwurst/nextcloud](https://github.com/ChristophWurst/nextcloud_composer) to permit the latest version.
- [Release notes](https://github.com/ChristophWurst/nextcloud_composer/releases)
- [Commits](https://github.com/ChristophWurst/nextcloud_composer/compare/v17.0.0...v19.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-29 17:31:33 +00:00
dependabot-preview[bot] 47d86674c9
Merge pull request #578 from nextcloud/dependabot/npm_and_yarn/nextcloud/webpack-vue-config-1.2.0 2020-08-29 01:24:13 +00:00
dependabot-preview[bot] 348b709ecc
Merge pull request #577 from nextcloud/dependabot/npm_and_yarn/nextcloud/dialogs-2.0.1 2020-08-29 01:24:04 +00:00
dependabot-preview[bot] 19fb4a6b84
Merge pull request #579 from nextcloud/dependabot/npm_and_yarn/nextcloud/vue-2.6.1 2020-08-29 01:23:37 +00:00
dependabot-preview[bot] b475714cd2
Bump @nextcloud/vue from 2.6.0 to 2.6.1
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.6.0 to 2.6.1.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.6.0...v2.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-29 01:20:35 +00:00
dependabot-preview[bot] d6539e8e30
Bump @nextcloud/webpack-vue-config from 1.1.0 to 1.2.0
Bumps [@nextcloud/webpack-vue-config](https://github.com/nextcloud/webpack-vue-config) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/nextcloud/webpack-vue-config/releases)
- [Commits](https://github.com/nextcloud/webpack-vue-config/compare/v1.1.0...v1.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-29 01:19:46 +00:00
dependabot-preview[bot] 9238c20088
Bump @nextcloud/dialogs from 2.0.0 to 2.0.1
Bumps [@nextcloud/dialogs](https://github.com/nextcloud/nextcloud-dialogs) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/nextcloud/nextcloud-dialogs/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-dialogs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-dialogs/compare/v2.0.0...v2.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-29 01:19:00 +00:00
Nextcloud bot ff18f03523
[tx-robot] updated from transifex 2020-08-28 02:36:52 +00:00
Nextcloud bot 915042bcc7
[tx-robot] updated from transifex 2020-08-27 02:37:47 +00:00
John Molakvoæ bd641c53e4
Merge pull request #556 from nextcloud/enh/ocs-api 2020-08-24 12:43:58 +02:00
John Molakvoæ (skjnldsv) fea32748e6
Move to OCS API
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2020-08-24 12:36:38 +02:00
Nextcloud bot 73df98c226
[tx-robot] updated from transifex 2020-08-24 02:37:48 +00:00
Nextcloud bot ca05e8c39f
[tx-robot] updated from transifex 2020-08-23 02:37:43 +00:00
John Molakvoæ (skjnldsv) b42991eff2
Add url loader
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2020-08-22 09:20:29 +02:00
John Molakvoæ ff56edd520
Merge pull request #566 from nextcloud/dependabot/npm_and_yarn/nextcloud/dialogs-2.0.0
Bump @nextcloud/dialogs from 1.4.0 to 2.0.0
2020-08-22 09:02:30 +02:00
Nextcloud bot 8adeb4c892
[tx-robot] updated from transifex 2020-08-22 02:37:20 +00:00
dependabot-preview[bot] 9982dcda44
Merge pull request #572 from nextcloud/dependabot/npm_and_yarn/vuedraggable-2.24.1 2020-08-22 01:36:00 +00:00
dependabot-preview[bot] 292edb7e98
Bump @nextcloud/dialogs from 1.4.0 to 2.0.0
Bumps [@nextcloud/dialogs](https://github.com/nextcloud/nextcloud-dialogs) from 1.4.0 to 2.0.0.
- [Release notes](https://github.com/nextcloud/nextcloud-dialogs/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-dialogs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-dialogs/compare/v1.4.0...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 01:31:33 +00:00
dependabot-preview[bot] 2cbca90581
Merge pull request #571 from nextcloud/dependabot/npm_and_yarn/nextcloud/vue-2.6.0 2020-08-22 01:29:19 +00:00
dependabot-preview[bot] a794c35a91
Merge pull request #570 from nextcloud/dependabot/npm_and_yarn/p-queue-6.6.1 2020-08-22 01:28:10 +00:00
dependabot-preview[bot] cacc13cb9c
Merge pull request #569 from nextcloud/dependabot/npm_and_yarn/babel/core-7.11.4 2020-08-22 01:26:57 +00:00
dependabot-preview[bot] 9eac12fdab
Bump vuedraggable from 2.24.0 to 2.24.1
Bumps [vuedraggable](https://github.com/SortableJS/Vue.Draggable) from 2.24.0 to 2.24.1.
- [Release notes](https://github.com/SortableJS/Vue.Draggable/releases)
- [Commits](https://github.com/SortableJS/Vue.Draggable/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 01:26:15 +00:00
dependabot-preview[bot] 5e1b580d98
Merge pull request #567 from nextcloud/dependabot/npm_and_yarn/vue-and-vue-template-compiler-2.6.12 2020-08-22 01:24:04 +00:00
dependabot-preview[bot] e794f98269
Merge pull request #568 from nextcloud/dependabot/npm_and_yarn/webpack-merge-5.1.2 2020-08-22 01:24:01 +00:00
dependabot-preview[bot] 2497148d32
Bump @nextcloud/vue from 2.3.0 to 2.6.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.3.0 to 2.6.0.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.3.0...v2.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 01:20:49 +00:00
dependabot-preview[bot] 137a152e90
Bump p-queue from 6.6.0 to 6.6.1
Bumps [p-queue](https://github.com/sindresorhus/p-queue) from 6.6.0 to 6.6.1.
- [Release notes](https://github.com/sindresorhus/p-queue/releases)
- [Commits](https://github.com/sindresorhus/p-queue/compare/v6.6.0...v6.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 01:19:56 +00:00
dependabot-preview[bot] 339b245a00
Bump @babel/core from 7.11.1 to 7.11.4
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.1 to 7.11.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.4/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 01:19:03 +00:00
dependabot-preview[bot] 3a412e1161
Bump webpack-merge from 5.1.1 to 5.1.2
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.1.1 to 5.1.2.
- [Release notes](https://github.com/survivejs/webpack-merge/releases)
- [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/survivejs/webpack-merge/compare/v5.1.1...v5.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 01:18:15 +00:00
dependabot-preview[bot] fc9ed31f15
Bump vue and vue-template-compiler
Bumps [vue](https://github.com/vuejs/vue) and [vue-template-compiler](https://github.com/vuejs/vue). These dependencies needed to be updated together.

Updates `vue` from 2.6.11 to 2.6.12
- [Release notes](https://github.com/vuejs/vue/releases)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.11...v2.6.12)

Updates `vue-template-compiler` from 2.6.11 to 2.6.12
- [Release notes](https://github.com/vuejs/vue/releases)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.11...v2.6.12)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 01:17:36 +00:00
Nextcloud bot f66731d463
[tx-robot] updated from transifex 2020-08-21 02:37:45 +00:00
John Molakvoæ (skjnldsv) dd7dcdd3d3
2.0.3 2020-08-20 14:51:21 +02:00
Nextcloud bot 103ec0ba1b
[tx-robot] updated from transifex 2020-08-19 02:39:03 +00:00
dependabot-preview[bot] 11b652f119
Merge pull request #562 from nextcloud/dependabot/npm_and_yarn/vue-router-3.4.3 2020-08-15 01:18:52 +00:00
dependabot-preview[bot] 840b5f9a1b
Bump vue-router from 3.4.2 to 3.4.3
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.2 to 3.4.3.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.4.2...v3.4.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-15 01:15:39 +00:00
Nextcloud bot 07b6d3124d
[tx-robot] updated from transifex 2020-08-13 02:37:57 +00:00
Nextcloud bot 9fa05b9b32
[tx-robot] updated from transifex 2020-08-12 02:37:36 +00:00
Nextcloud bot a16dc9d7eb
[tx-robot] updated from transifex 2020-08-09 02:36:54 +00:00
Nextcloud bot d6ea2efaf5
[tx-robot] updated from transifex 2020-08-08 02:38:00 +00:00
dependabot-preview[bot] 833265703c
Merge pull request #547 from nextcloud/dependabot/npm_and_yarn/babel/core-7.11.1 2020-08-08 01:30:57 +00:00
dependabot-preview[bot] f3f1c259e2
Merge pull request #546 from nextcloud/dependabot/npm_and_yarn/webpack-merge-5.1.1 2020-08-08 01:28:15 +00:00
dependabot-preview[bot] 9e11cb40fb
Merge pull request #545 from nextcloud/dependabot/npm_and_yarn/vue-router-3.4.2 2020-08-08 01:24:23 +00:00
dependabot-preview[bot] 69909e442d
Bump @babel/core from 7.11.0 to 7.11.1
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.0 to 7.11.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.1/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-08 01:18:41 +00:00
dependabot-preview[bot] 31bc857c83
Bump webpack-merge from 5.0.9 to 5.1.1
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.0.9 to 5.1.1.
- [Release notes](https://github.com/survivejs/webpack-merge/releases)
- [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/survivejs/webpack-merge/compare/v5.0.9...v5.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-08 01:18:01 +00:00
dependabot-preview[bot] 95fd7e34be
Bump vue-router from 3.3.4 to 3.4.2
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.3.4 to 3.4.2.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.3.4...v3.4.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-08 01:17:24 +00:00
Nextcloud bot 0e384d51b3
[tx-robot] updated from transifex 2020-08-07 02:37:48 +00:00
Nextcloud bot 709bf3e882
[tx-robot] updated from transifex 2020-08-06 02:38:05 +00:00
63 changed files with 1649 additions and 760 deletions

24
.github/dependabot.yml vendored Normal file
View 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

View 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 }}

View file

@ -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 }}"

View file

@ -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)

View file

@ -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>

View file

@ -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'],

View file

@ -1,19 +1,20 @@
{
"name": "nextcloud/forms",
"type": "project",
"license": "AGPLv3",
"config": {
"optimize-autoloader": true,
"classmap-authoritative": true,
"platform": {
"php": "7.2"
}
},
"scripts": {
"cs:fix": "php-cs-fixer fix",
"cs:check": "php-cs-fixer fix --dry-run --diff",
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l"
},
"require-dev": {
"christophwurst/nextcloud": "^17.0",
"phpunit/phpunit": "^8",
"nextcloud/coding-standard": "^0.3.0"
},
"config": {
"optimize-autoloader": true,
"classmap-authoritative": true
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l",
"cs:check": "php-cs-fixer fix --dry-run --diff",
"cs:fix": "php-cs-fixer fix"
}
"christophwurst/nextcloud": "^19.0",
"nextcloud/coding-standard": "^0.3.0",
"phpunit/phpunit": "^8"
}
}

View file

@ -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
View 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
View 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

View file

@ -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);");

View file

@ -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);"
}

View file

@ -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 shan 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 sha trobat el formulari",

View file

@ -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 shan 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 sha trobat el formulari",

View file

@ -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"
},

View file

@ -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);"

View file

@ -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",

View file

@ -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",

View file

@ -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);");

View file

@ -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);"
}

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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" : "הטופס לא נמצא",

View file

@ -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" : "הטופס לא נמצא",

View file

@ -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);");

View file

@ -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);"
}

View file

@ -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;");

View file

@ -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;"
}

View file

@ -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);");

View file

@ -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);"
}

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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" : "Люди могут написать короткий ответ",

View file

@ -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" : "Люди могут написать короткий ответ",

View file

@ -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",

View file

@ -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",

View file

@ -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 …" : "Тражим…",

View file

@ -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 …" : "Тражим…",

View file

@ -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);");

View file

@ -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);"
}

View file

@ -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);
}
}

View file

@ -53,7 +53,9 @@ class Question extends Entity {
'long',
'multiple',
'multiple_unique',
'dropdown'
'dropdown',
'date',
'datetime',
];
public function __construct() {

1134
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -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"
}
}

View file

@ -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 } })

View file

@ -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 }))

View file

@ -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,

View 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>

View 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>

View file

@ -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)

View file

@ -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)

View file

@ -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

View file

@ -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,

View file

@ -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],

View file

@ -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!'),
},
}

View file

@ -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,
})

View file

@ -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)

View file

@ -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,
})

View file

@ -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$/),
],