Compare commits

...

159 Commits

Author SHA1 Message Date
Julius Härtl
7e23aa63be Migrate AclMapper to QBMapper
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-02-25 14:00:59 +01:00
dependabot[bot]
4f23ebedb6 Merge pull request #3605 from nextcloud/dependabot/npm_and_yarn/striptags-3.2.0 2022-02-25 09:15:04 +00:00
dependabot[bot]
6e8ca6c067 Bump striptags from 3.1.1 to 3.2.0
Bumps [striptags](https://github.com/ericnorris/striptags) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/ericnorris/striptags/releases)
- [Commits](https://github.com/ericnorris/striptags/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: striptags
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-25 09:02:52 +00:00
dependabot[bot]
6d6a31037e Merge pull request #3604 from nextcloud/dependabot/npm_and_yarn/path-parse-1.0.7 2022-02-25 09:02:03 +00:00
dependabot[bot]
7814d59e0c Bump path-parse from 1.0.6 to 1.0.7
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-25 08:52:33 +00:00
Julius Härtl
cc2ff38320 Merge pull request #3603 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/webpack-vue-config-5.0.0
Bump @nextcloud/webpack-vue-config from 4.3.2 to 5.0.0
2022-02-25 09:51:50 +01:00
dependabot[bot]
a43de8ec29 Bump @nextcloud/webpack-vue-config from 4.3.2 to 5.0.0
Bumps [@nextcloud/webpack-vue-config](https://github.com/nextcloud/webpack-vue-config) from 4.3.2 to 5.0.0.
- [Release notes](https://github.com/nextcloud/webpack-vue-config/releases)
- [Changelog](https://github.com/nextcloud/webpack-vue-config/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/webpack-vue-config/compare/v4.3.2...v5.0.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/webpack-vue-config"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-25 08:35:52 +00:00
Julius Härtl
a1bd914b48 Merge pull request #3599 from nextcloud/enh/time-insensitive-cron
Move DeleteCron to be time insensitive
2022-02-24 16:16:52 +01:00
Julius Härtl
e42ffa4ca2 Move DeleteCron to be time insensitive
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-02-24 14:08:46 +01:00
dependabot[bot]
8c33760c79 Merge pull request #3594 from nextcloud/dependabot/npm_and_yarn/master/dompurify-2.3.6 2022-02-19 05:24:51 +00:00
dependabot[bot]
c5a9a0897e Bump dompurify from 2.3.5 to 2.3.6
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.5 to 2.3.6.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.3.5...2.3.6)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-19 05:07:11 +00:00
dependabot[bot]
1e32a01be4 Merge pull request #3593 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.14 2022-02-19 05:06:17 +00:00
dependabot[bot]
d44f489173 Bump phpunit/phpunit from 9.5.13 to 9.5.14
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.13 to 9.5.14.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.13...9.5.14)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-19 03:26:27 +00:00
Nextcloud bot
cfa67f1cbd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-19 02:37:58 +00:00
Nextcloud bot
97aa71e1fb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-17 02:38:48 +00:00
Julius Härtl
c3e5cf6851 Merge pull request #3539 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/stylelint-config-2.1.2
Bump @nextcloud/stylelint-config from 1.0.0-beta.0 to 2.1.2
2022-02-13 15:17:34 +01:00
Julius Härtl
84d3d6b834 Merge pull request #3588 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/vue-5.0.0
Bump @nextcloud/vue from 4.3.0 to 5.0.0
2022-02-13 15:17:15 +01:00
dependabot[bot]
778f0cda64 Bump @nextcloud/vue from 4.3.0 to 5.0.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 4.3.0 to 5.0.0.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v4.3.0...v5.0.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/vue"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-12 06:02:17 +00:00
dependabot[bot]
504916608a Bump @nextcloud/stylelint-config from 1.0.0-beta.0 to 2.1.2
Bumps [@nextcloud/stylelint-config](https://github.com/nextcloud/stylelint-config) from 1.0.0-beta.0 to 2.1.2.
- [Release notes](https://github.com/nextcloud/stylelint-config/releases)
- [Changelog](https://github.com/nextcloud/stylelint-config/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/stylelint-config/commits/v2.1.2)

---
updated-dependencies:
- dependency-name: "@nextcloud/stylelint-config"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-12 06:02:15 +00:00
dependabot[bot]
33b99290c2 Merge pull request #3590 from nextcloud/dependabot/github_actions/shivammathur/setup-php-2.17.0 2022-02-12 06:01:13 +00:00
dependabot[bot]
132da8cf02 Bump shivammathur/setup-php from 2.16.0 to 2.17.0
Bumps [shivammathur/setup-php](https://github.com/shivammathur/setup-php) from 2.16.0 to 2.17.0.
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/2.16.0...2.17.0)

---
updated-dependencies:
- dependency-name: shivammathur/setup-php
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-12 04:54:31 +00:00
dependabot[bot]
3744541cd6 Merge pull request #3591 from nextcloud/dependabot/npm_and_yarn/follow-redirects-1.14.8 2022-02-12 04:53:42 +00:00
dependabot[bot]
da98ab81d6 Bump follow-redirects from 1.14.7 to 1.14.8
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-12 03:39:53 +00:00
dependabot[bot]
9a9b64f448 Merge pull request #3589 from nextcloud/dependabot/npm_and_yarn/master/jest-27.5.1 2022-02-12 03:39:06 +00:00
dependabot[bot]
ed7e2fe1b9 Bump jest from 27.4.7 to 27.5.1
Bumps [jest](https://github.com/facebook/jest) from 27.4.7 to 27.5.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.4.7...v27.5.1)

---
updated-dependencies:
- dependency-name: jest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-12 02:04:09 +00:00
dependabot[bot]
634c9d7768 Merge pull request #3583 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.17.2 2022-02-09 17:42:50 +00:00
dependabot[bot]
5988975324 Bump @babel/runtime from 7.16.7 to 7.17.2
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.16.7 to 7.17.2.
- [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.17.2/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-09 17:28:27 +00:00
dependabot[bot]
ffd5bd784d Merge pull request #3567 from nextcloud/dependabot/npm_and_yarn/nanoid-3.2.0 2022-02-09 17:26:55 +00:00
dependabot[bot]
44b23688f5 Bump nanoid from 3.1.30 to 3.2.0
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.30 to 3.2.0.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.30...3.2.0)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-09 17:10:36 +00:00
dependabot[bot]
ef8c542289 Merge pull request #3575 from nextcloud/dependabot/composer/vimeo/psalm-4.20.0 2022-02-09 17:09:34 +00:00
dependabot[bot]
c0d2154e46 Bump vimeo/psalm from 4.18.1 to 4.20.0
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.18.1 to 4.20.0.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.18.1...4.20.0)

---
updated-dependencies:
- dependency-name: vimeo/psalm
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-09 17:00:35 +00:00
max-nextcloud
c9d34ab6df Merge pull request #3553 from nextcloud/feat/workflow-auto-update-dependabot-approve-merge.yml
Updating dependabot-approve-merge.yml workflow from template
2022-02-09 17:59:53 +01:00
Nextcloud bot
1dc62207ba Updating dependabot-approve-merge.yml workflow from template
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-09 16:36:02 +01:00
dependabot[bot]
fe007ca1d3 Merge pull request #3576 from nextcloud/dependabot/npm_and_yarn/master/relative-ci/agent-3.1.1 2022-02-09 15:02:27 +00:00
dependabot[bot]
887b1e46e7 Bump @relative-ci/agent from 3.1.0 to 3.1.1
Bumps [@relative-ci/agent](https://github.com/relative-ci/agent) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/relative-ci/agent/releases)
- [Commits](https://github.com/relative-ci/agent/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: "@relative-ci/agent"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-09 14:11:34 +00:00
Julius Härtl
f04fa03baa Merge pull request #3582 from nextcloud/update-master-php-enviroment
Update master php enviroment
2022-02-09 15:10:29 +01:00
Joas Schilling
106bc7f47f Update master php enviroment
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-02-09 11:37:29 +01:00
Nextcloud bot
4b5b4badd4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-08 02:38:03 +00:00
Nextcloud bot
f353f1cdd4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-06 02:36:57 +00:00
Nextcloud bot
1d7aa5d1f0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-05 02:37:25 +00:00
Nextcloud bot
69ff35653e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-01 02:37:23 +00:00
Julius Härtl
2c487a4375 Merge pull request #3566 from nextcloud/dependabot/npm_and_yarn/master/relative-ci/agent-3.1.0
Bump @relative-ci/agent from 3.0.0 to 3.1.0
2022-01-31 12:05:35 +01:00
Julius Härtl
6cc2ef684f Merge pull request #3550 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/axios-1.9.0
Bump @nextcloud/axios from 1.8.0 to 1.9.0
2022-01-31 12:05:08 +01:00
dependabot[bot]
fb1177fa76 Bump @nextcloud/axios from 1.8.0 to 1.9.0
Bumps [@nextcloud/axios](https://github.com/nextcloud/nextcloud-axios) from 1.8.0 to 1.9.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.8.0...v1.9.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/axios"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-31 09:26:22 +00:00
dependabot[bot]
6347fee2a1 Bump @relative-ci/agent from 3.0.0 to 3.1.0
Bumps [@relative-ci/agent](https://github.com/relative-ci/agent) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/relative-ci/agent/releases)
- [Commits](https://github.com/relative-ci/agent/compare/v3.0.0...v3.1.0)

---
updated-dependencies:
- dependency-name: "@relative-ci/agent"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-31 09:26:20 +00:00
Julius Härtl
e12b6658ec Merge pull request #3561 from nextcloud/update-master-php-testing-versions
Update master php testing versions
2022-01-31 10:24:52 +01:00
Nextcloud bot
e23027094f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-31 02:37:23 +00:00
dependabot[bot]
89f31635c5 Merge pull request #3565 from nextcloud/dependabot/npm_and_yarn/master/dompurify-2.3.5 2022-01-29 05:18:16 +00:00
dependabot[bot]
2cfb107167 Bump dompurify from 2.3.4 to 2.3.5
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.3.4...2.3.5)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-29 04:31:09 +00:00
dependabot[bot]
5d562db408 Merge pull request #3568 from nextcloud/dependabot/npm_and_yarn/node-fetch-2.6.7 2022-01-29 04:30:15 +00:00
dependabot[bot]
9993a198b1 Bump node-fetch from 2.6.1 to 2.6.7
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.1 to 2.6.7.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.1...v2.6.7)

---
updated-dependencies:
- dependency-name: node-fetch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-29 03:23:16 +00:00
dependabot[bot]
cf7c327816 Merge pull request #3563 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.13 2022-01-29 03:22:33 +00:00
dependabot[bot]
f2c1b42811 Bump phpunit/phpunit from 9.5.12 to 9.5.13
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.12 to 9.5.13.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.12...9.5.13)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-29 02:01:10 +00:00
Joas Schilling
b40f8609be Update master php testing versions
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-01-28 09:24:29 +01:00
Nextcloud bot
c73be045c3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-24 02:37:08 +00:00
dependabot[bot]
a7243f7573 Merge pull request #3551 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.12 2022-01-22 06:33:09 +00:00
dependabot[bot]
ad7f4aa22b Bump phpunit/phpunit from 9.5.11 to 9.5.12
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.11 to 9.5.12.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.11...9.5.12)

---
updated-dependencies:
- dependency-name: phpunit/phpunit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-22 03:29:38 +00:00
dependabot[bot]
bc263b6da5 Merge pull request #3548 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/webpack-vue-config-4.3.2 2022-01-22 03:28:52 +00:00
dependabot[bot]
a3953344b5 Bump @nextcloud/webpack-vue-config from 4.3.0 to 4.3.2
Bumps [@nextcloud/webpack-vue-config](https://github.com/nextcloud/webpack-vue-config) from 4.3.0 to 4.3.2.
- [Release notes](https://github.com/nextcloud/webpack-vue-config/releases)
- [Changelog](https://github.com/nextcloud/webpack-vue-config/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/webpack-vue-config/compare/v4.3.0...v4.3.2)

---
updated-dependencies:
- dependency-name: "@nextcloud/webpack-vue-config"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-22 02:18:24 +00:00
Luka Trovic
99973b4501 Merge pull request #3530 from nextcloud/bug/improve-contrast-link-in-markdown-note
Make links in markdown note bolder
2022-01-21 14:07:10 +01:00
Luka Trovic
4e31332fe4 fix: make links in markdown note bolder
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-01-21 13:30:35 +01:00
Julien Veyssier
51dffdacd6 Merge pull request #3532 from nextcloud/feature/timestamps-on-created-and-modified-at-values
Timestamps on created and modified at values
2022-01-20 10:00:10 +01:00
Luka Trovic
054c5aaf8c feat: timestamps on created and modified at values
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-01-20 09:22:37 +01:00
Julien Veyssier
4f49254cfe Merge pull request #3531 from nextcloud/bug/missing-horizontal-scrollbar-in-large-table-inside-description
Add horizontal scrollbar into the large table inside description
2022-01-19 12:13:38 +01:00
Luka Trovic
a11bf5f4ba fix: add horizontal scrollbar into the large table inside description
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-01-19 10:16:43 +00:00
Nextcloud bot
9d3de1e576 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-19 02:38:10 +00:00
Julien Veyssier
b00c8a1196 Merge pull request #3541 from nextcloud/fix/check-stack-permission
Fix confusion between stackId and boardId in StackService
2022-01-18 14:28:26 +01:00
Julien Veyssier
ee3eb99cc7 fix confusion between stackId and boardId in StackService::update()
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2022-01-18 11:24:31 +01:00
Nextcloud bot
b73462555b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-18 02:56:01 +00:00
Julius Härtl
24c1687857 Merge pull request #3499 from nextcloud/feature/show-board-name-in-browser-title
Show board name in browser title
2022-01-14 23:15:59 +01:00
Julius Härtl
123a5b8b13 Merge pull request #3529 from nextcloud/bugfix/noid/fix-talk-integration
Fix talk integration
2022-01-14 22:11:04 +01:00
Julius Härtl
a048d40cd7 Merge pull request #3528 from nextcloud/enh/calendar-global-setting
Add app config to toggle the default calendar setting as an admin
2022-01-14 21:48:55 +01:00
Luka Trovic
b26f61b9a3 show board name in browser title
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-01-14 17:11:31 +01:00
Nextcloud bot
bf7203210c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-13 02:37:06 +00:00
Joas Schilling
53d70321da Fix talk integration
title and description where not populated and also opposed to documentation the link is not absolute

Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-01-12 16:20:31 +01:00
Julius Härtl
c070b18b1b Add app config to toggle the default calendar setting as an admin
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-01-12 13:43:50 +01:00
Nextcloud bot
3446c4aa4f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-12 02:37:22 +00:00
Julius Härtl
19dad95c55 Merge pull request #3522 from nextcloud/docs/api-changelog
Extend API changelog
2022-01-11 19:06:50 +01:00
Julius Härtl
fc58528817 Merge pull request #3500 from nextcloud/bugfix/3312 2022-01-11 09:26:37 +01:00
Julius Härtl
ced39c9501 Extend API changelog
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-01-11 09:13:05 +01:00
Julius Härtl
ae27e431b2 Merge pull request #3502 from nextcloud/bug/move-card-shows-deleted-boards 2022-01-11 09:00:02 +01:00
Nextcloud bot
d820d57661 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-11 02:37:37 +00:00
dependabot[bot]
adb90f2a51 Merge pull request #3518 from nextcloud/dependabot/npm_and_yarn/master/markdown-it-12.3.2 2022-01-10 12:45:10 +00:00
dependabot[bot]
c1e6f22fa1 Bump markdown-it from 12.3.0 to 12.3.2
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 12.3.0 to 12.3.2.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/12.3.0...12.3.2)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-10 11:54:44 +00:00
Julius Härtl
c39d07db1a Merge pull request #3519 from nextcloud/dependabot/composer/vimeo/psalm-4.18.1 2022-01-10 12:53:52 +01:00
Julius Härtl
0ab5707c4f Merge pull request #3512 from simonspa/fix/parameterOrder 2022-01-10 12:01:49 +01:00
dependabot[bot]
a47110d6f7 Bump vimeo/psalm from 4.16.1 to 4.18.1
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.16.1 to 4.18.1.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.16.1...4.18.1)

---
updated-dependencies:
- dependency-name: vimeo/psalm
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-10 11:01:42 +00:00
Julius Härtl
2d2671fd77 Merge pull request #3516 from nextcloud/dependabot/npm_and_yarn/master/markdown-it-12.3.1 2022-01-10 12:01:11 +01:00
Julius Härtl
55cf2a6214 Merge pull request #3517 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/webpack-vue-config-4.3.0 2022-01-10 12:01:04 +01:00
Julius Härtl
e488d42935 Merge pull request #3515 from nextcloud/dependabot/npm_and_yarn/master/jest-27.4.7 2022-01-10 12:00:50 +01:00
Nextcloud bot
6d8a5bc956 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-10 02:37:40 +00:00
dependabot[bot]
81c908a59d Bump @nextcloud/webpack-vue-config from 4.2.0 to 4.3.0
Bumps [@nextcloud/webpack-vue-config](https://github.com/nextcloud/webpack-vue-config) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/nextcloud/webpack-vue-config/releases)
- [Changelog](https://github.com/nextcloud/webpack-vue-config/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/webpack-vue-config/compare/v4.2.0...v4.3.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/webpack-vue-config"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-08 04:07:21 +00:00
Nextcloud bot
84910d3d3e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-08 02:36:39 +00:00
dependabot[bot]
3e6ade718f Bump markdown-it from 12.3.0 to 12.3.1
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 12.3.0 to 12.3.1.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/12.3.0...12.3.1)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-08 02:04:19 +00:00
dependabot[bot]
b5ed3b122a Bump jest from 27.4.5 to 27.4.7
Bumps [jest](https://github.com/facebook/jest) from 27.4.5 to 27.4.7.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.4.5...v27.4.7)

---
updated-dependencies:
- dependency-name: jest
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-08 02:02:31 +00:00
Simon Spannagel
3dfc33378d CardApiController: Fix order of optional parameters
Signed-off-by: Simon Spannagel <simonspa@kth.se>
2022-01-07 11:31:32 +01:00
Luka Trovic
e4dbd9e385 exclude deleted boards in the selection for target
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-01-06 09:26:15 +01:00
Nextcloud bot
61910290b9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-06 02:38:49 +00:00
Nextcloud bot
bce79c596b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-05 02:38:14 +00:00
Nextcloud bot
6be3c3fe67 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-04 02:38:08 +00:00
Julius Härtl
eaf6defe59 Move any circles API usage to internal service
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-01-03 10:23:47 +01:00
Julius Härtl
bfc8222e6f Avoid blocking calendar access if something goes wrong while fetching deck entries
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-01-03 10:23:47 +01:00
Julius Härtl
66fa241382 Merge pull request #3504 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.16.7 2022-01-03 08:32:27 +01:00
Julius Härtl
7b237d8cd8 Merge pull request #3505 from nextcloud/Valdnet-patch-1 2022-01-03 08:32:11 +01:00
Nextcloud bot
5fc1aba9cd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-03 02:38:04 +00:00
Nextcloud bot
3900a15b4b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-02 02:37:44 +00:00
Valdnet
cf8023855b l10n: Add dot.
Signed-off-by: Valdnet <47037905+Valdnet@users.noreply.github.com>
2022-01-01 21:47:52 +01:00
dependabot[bot]
ff41bbab7b Bump @babel/runtime from 7.16.5 to 7.16.7
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.16.5 to 7.16.7.
- [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.16.7/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-01 05:00:23 +00:00
dependabot[bot]
bec07726a7 Merge pull request #3503 from nextcloud/dependabot/github_actions/actions/setup-node-2.5.1 2022-01-01 04:23:38 +00:00
dependabot[bot]
c24e72f161 Bump actions/setup-node from 2.5.0 to 2.5.1
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.5.0 to 2.5.1.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.5.0...v2.5.1)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-01 03:26:30 +00:00
Nextcloud bot
6296ebb87c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-01 02:37:46 +00:00
Nextcloud bot
a96bb277a4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-31 02:38:03 +00:00
Julius Härtl
b58913e730 Merge pull request #3182 from vitormattos/import-from-trello 2021-12-30 11:39:35 +01:00
Vitor Mattos
ccd5bce7ea Replace glob by EventDispatcher
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:50 +01:00
Vitor Mattos
f2b6934ac3 Move all classes to a sub-namespace
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:50 +01:00
Vitor Mattos
24c8b2f4aa Make error more specific
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:50 +01:00
Vitor Mattos
a3959e3cfc Update lib/Service/BoardImportCommandService.php
Co-authored-by: Julien Veyssier <eneiluj@posteo.net>

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:50 +01:00
Vitor Mattos
fda8a03c43 Remove unused codes
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:50 +01:00
Vitor Mattos
5b30577df0 Update documentation, import created
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:50 +01:00
Vitor Mattos
4561887348 Add long comments with attachment
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
e87c063076 Documentation, improvements on validation, refactor
Validate get boad
change pattern of api params
Import only one board by api
Populate data from api
Update class diagram
Update documentation
Add return when success
Sort comments
Fix order of cards
Instructions of attachments

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
202ea30090 Start implementing Trello API service
Implement name of system to import
Implement need validate data
Fix allowed system list
Start implementing Trello API service

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
c7a37ea425 Increase documentation
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
19c609540b Default valute to board property fix command flow and refactor
Fixes on getBoard tests
Refactor
Reduce psalm info
Refactor to implement pattern
Change order of methods to put all abstract first and all public first

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
6714c89220 Remove interact from command and implement bootstrap method
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
e01e4cf1a7 Create route to get json schema to validate config
Fix visibility
Make compatible with php 7.2
Remove returing instance
Increase coverage
Reduce psalm info
Throw exception if system not defined
Increment coverage

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
4138953208 Changes to make possible implement api endpoint
Update documentation
Start implementing getSystems route
Code to route getSystems
Controller to board import
Change return
Increase coverage

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
39a927de18 Clean attachment table
Clean code
Clean attachment table

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:49 +01:00
Vitor Mattos
c5d10dafb8 Import participants
Big refactor to create route
Import participants

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:48 +01:00
Vitor Mattos
fd92fc3c4d Refactor and improvements on command
Check available helpers
Default permission: view only
Moved validate setting from helper to command
Turn more easy create a importer
Docblock and improvements on interface
lcfirst on system property
Helper moved to ImporHelper folder
Moved fixtures to ImportHelper
Rename settings to config
Big refactor to move import methods to service

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:48 +01:00
Vitor Mattos
eb8bf3f22b Translations and tests
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:48 +01:00
Vitor Mattos
e28a47e9e0 Update UserExport.php
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:48 +01:00
Vitor Mattos
48df98ce67 Add new command
Clean code
Add new command
Import last modified and deleted date
Replace arrow functions by lambda functions
Add properties to class
Add dependency to composer.json
Signed-off-by: Vitor Mattos <vitor@php.rio>
Turn private methods
Add output messages and associate users to cards

Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:46 +01:00
Vitor Mattos
89028c74cb Command to import from Trello
Signed-off-by: Vitor Mattos <vitor@php.rio>
2021-12-30 11:19:34 +01:00
Julius Härtl
4e5537f204 Merge pull request #3501 from nextcloud/bug/missing-translation-not-found-in-transifex 2021-12-30 09:00:20 +01:00
Luka Trovic
f74bca8c43 add a missing translation - not found in transifex
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2021-12-30 08:23:14 +01:00
Julius Härtl
30e4b43e46 Merge pull request #3424 from nextcloud/dependabot/composer/nextcloud/coding-standard-1.0.0 2021-12-29 16:24:45 +01:00
Julius Härtl
596834853b Fix codestyle issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-12-29 11:43:57 +01:00
dependabot[bot]
eff3c94c6a Bump nextcloud/coding-standard from 0.5.0 to 1.0.0
Bumps [nextcloud/coding-standard](https://github.com/nextcloud/coding-standard) from 0.5.0 to 1.0.0.
- [Release notes](https://github.com/nextcloud/coding-standard/releases)
- [Changelog](https://github.com/nextcloud/coding-standard/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/coding-standard/compare/v0.5.0...v1.0.0)

---
updated-dependencies:
- dependency-name: nextcloud/coding-standard
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-29 11:43:56 +01:00
Julius Härtl
8aa3edee58 Merge pull request #3429 from Themanwhosmellslikesugar/rework/store-card-details-in-modal 2021-12-29 10:47:49 +01:00
Julius Härtl
d3404c7489 Merge pull request #3495 from nextcloud/dependabot/npm_and_yarn/master/markdown-it-link-attributes-4.0.0
Bump markdown-it-link-attributes from 3.0.0 to 4.0.0
2021-12-28 22:12:21 +01:00
dependabot[bot]
84bcd2e502 Bump markdown-it-link-attributes from 3.0.0 to 4.0.0
Bumps [markdown-it-link-attributes](https://github.com/crookedneighbor/markdown-it-link-attributes) from 3.0.0 to 4.0.0.
- [Release notes](https://github.com/crookedneighbor/markdown-it-link-attributes/releases)
- [Changelog](https://github.com/crookedneighbor/markdown-it-link-attributes/blob/main/CHANGELOG.md)
- [Commits](https://github.com/crookedneighbor/markdown-it-link-attributes/compare/v3.0.0...v4.0.0)

---
updated-dependencies:
- dependency-name: markdown-it-link-attributes
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-28 18:07:35 +00:00
Julius Härtl
f645937b10 Merge pull request #3498 from nextcloud/bugfix/noid/composer
Update composer config
2021-12-28 19:06:32 +01:00
Julius Härtl
d9af04121d Update composer config
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-12-28 14:45:37 +01:00
Dmitriy Ivanko
51bcbdb87d Store cardDetailsInModal in config instead of state
Signed-off-by: Dmitriy Ivanko <tmwsls12@gmail.com>
2021-12-28 14:39:25 +01:00
Julius Härtl
25dee609b5 Merge pull request #3479 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/vue-4.3.0 2021-12-27 10:22:02 +01:00
Julius Härtl
14ab4597c5 Merge pull request #3481 from nextcloud/dependabot/npm_and_yarn/master/markdown-it-12.3.0 2021-12-27 10:21:55 +01:00
Julius Härtl
d3146b4019 Merge pull request #3491 from nextcloud/dependabot/composer/vimeo/psalm-4.15.0 2021-12-27 10:21:48 +01:00
dependabot[bot]
4b02be2028 Bump @nextcloud/vue from 4.2.0 to 4.3.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-vue/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v4.2.0...v4.3.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/vue"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-25 03:26:42 +00:00
dependabot[bot]
476d607148 Bump markdown-it from 12.2.0 to 12.3.0
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 12.2.0 to 12.3.0.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/12.2.0...12.3.0)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-25 03:26:40 +00:00
dependabot[bot]
99f17823ec Bump vimeo/psalm from 4.11.2 to 4.15.0
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.11.2 to 4.15.0.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.11.2...v4.15.0)

---
updated-dependencies:
- dependency-name: vimeo/psalm
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-25 03:26:39 +00:00
dependabot[bot]
ad537162c8 Merge pull request #3496 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/eslint-config-6.1.2 2021-12-25 03:25:45 +00:00
dependabot[bot]
3a243b1fc7 Bump @nextcloud/eslint-config from 6.1.1 to 6.1.2
Bumps [@nextcloud/eslint-config](https://github.com/nextcloud/eslint-config) from 6.1.1 to 6.1.2.
- [Release notes](https://github.com/nextcloud/eslint-config/releases)
- [Changelog](https://github.com/nextcloud/eslint-config/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/eslint-config/compare/v6.1.1...v6.1.2)

---
updated-dependencies:
- dependency-name: "@nextcloud/eslint-config"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-25 02:03:08 +00:00
Nextcloud bot
bfcbe0306e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-24 02:39:51 +00:00
Nextcloud bot
d060a842b4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-22 02:38:51 +00:00
Nextcloud bot
90a3339e18 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-20 02:40:43 +00:00
dependabot[bot]
90287606c1 Merge pull request #3492 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.16.5 2021-12-18 03:41:10 +00:00
dependabot[bot]
f65b3801cc Bump @babel/runtime from 7.16.3 to 7.16.5
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.16.3 to 7.16.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.16.5/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-18 03:14:37 +00:00
Nextcloud bot
b4f35bf2fd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-12-18 02:37:53 +00:00
114 changed files with 8811 additions and 3842 deletions

View File

@@ -14,13 +14,13 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2.5.0
uses: actions/setup-node@v2.5.1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7
- name: Setup PHP
uses: shivammathur/setup-php@2.16.0
uses: shivammathur/setup-php@2.17.0
with:
php-version: '7.4'
tools: composer

View File

@@ -25,5 +25,5 @@ jobs:
# Nextcloud bot approve and merge request
- uses: ahmadnassri/action-dependabot-auto-merge@v2
with:
target: patch
target: minor
github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }}

View File

@@ -61,7 +61,7 @@ jobs:
path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.16.0
uses: shivammathur/setup-php@2.17.0
with:
php-version: ${{ matrix.php-versions }}
tools: phpunit

View File

@@ -13,13 +13,13 @@ jobs:
strategy:
matrix:
php-versions: ['7.2', '7.3', '7.4']
php-versions: ['7.4', '8.0']
name: php${{ matrix.php-versions }} lint
steps:
- uses: actions/checkout@v2.4.0
- name: Set up php${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.16.0
uses: shivammathur/setup-php@2.17.0
with:
php-version: ${{ matrix.php-versions }}
coverage: none
@@ -33,7 +33,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v2.4.0
- name: Set up php
uses: shivammathur/setup-php@2.16.0
uses: shivammathur/setup-php@2.17.0
with:
php-version: 7.4
coverage: none
@@ -52,7 +52,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Use node ${{ matrix.node-version }}
uses: actions/setup-node@v2.5.0
uses: actions/setup-node@v2.5.1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
@@ -74,7 +74,7 @@ jobs:
- uses: actions/checkout@v2.4.0
- name: Set up node ${{ matrix.node-version }}
uses: actions/setup-node@v2.5.0
uses: actions/setup-node@v2.5.1
with:
node-version: ${{ matrix.node-version }}

View File

@@ -19,13 +19,13 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2.5.0
uses: actions/setup-node@v2.5.1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7
- name: Setup PHP
uses: shivammathur/setup-php@2.16.0
uses: shivammathur/setup-php@2.17.0
with:
php-version: '7.4'
tools: composer

View File

@@ -14,7 +14,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2.5.0
uses: actions/setup-node@v2.5.1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7

View File

@@ -18,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
php-versions: ['7.3', '7.4']
php-versions: ['7.4', '8.0']
databases: ['sqlite', 'mysql', 'pgsql']
server-versions: ['master']
@@ -62,7 +62,7 @@ jobs:
path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.16.0
uses: shivammathur/setup-php@2.17.0
with:
php-version: ${{ matrix.php-versions }}
tools: phpunit

View File

@@ -18,7 +18,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v2.4.0
- name: Set up php
uses: shivammathur/setup-php@2.16.0
uses: shivammathur/setup-php@2.17.0
with:
php-version: 7.4
tools: composer:v1

View File

@@ -31,7 +31,6 @@
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/1.0/Deck-1.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/1.0/Deck-2.png</screenshot>
<dependencies>
<php min-version="7.3"/>
<database min-version="9.4">pgsql</database>
<database>sqlite</database>
<database min-version="8.0">mysql</database>
@@ -44,6 +43,7 @@
</background-jobs>
<commands>
<command>OCA\Deck\Command\UserExport</command>
<command>OCA\Deck\Command\BoardImport</command>
</commands>
<activity>
<settings>

View File

@@ -90,6 +90,10 @@ return [
['name' => 'board_api#deleteAcl', 'url' => '/api/v{apiVersion}/boards/{boardId}/acl/{aclId}', 'verb' => 'DELETE'],
['name' => 'board_api#updateAcl', 'url' => '/api/v{apiVersion}/boards/{boardId}/acl/{aclId}', 'verb' => 'PUT'],
['name' => 'board_import_api#getAllowedSystems', 'url' => '/api/v{apiVersion}/boards/import/getSystems','verb' => 'GET'],
['name' => 'board_import_api#getConfigSchema', 'url' => '/api/v{apiVersion}/boards/import/config/schema/{name}','verb' => 'GET'],
['name' => 'board_import_api#import', 'url' => '/api/v{apiVersion}/boards/import','verb' => 'POST'],
['name' => 'stack_api#index', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks', 'verb' => 'GET'],
['name' => 'stack_api#getArchived', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/archived', 'verb' => 'GET'],

View File

@@ -9,20 +9,27 @@
}
],
"require": {
"cogpowered/finediff": "0.3.*"
"cogpowered/finediff": "0.3.*",
"justinrainbow/json-schema": "^5.2"
},
"require-dev": {
"roave/security-advisories": "dev-master",
"christophwurst/nextcloud": "^21@dev",
"phpunit/phpunit": "^9",
"nextcloud/coding-standard": "^0.5.0",
"nextcloud/coding-standard": "^1.0.0",
"symfony/event-dispatcher": "^4.0",
"vimeo/psalm": "^4.3",
"php-parallel-lint/php-parallel-lint": "^1.2"
},
"config": {
"optimize-autoloader": true,
"classmap-authoritative": true
"classmap-authoritative": true,
"allow-plugins": {
"composer/package-versions-deprecated": true
},
"platform": {
"php": "7.4"
}
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l",

1307
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -96,10 +96,27 @@ If available the ETag will also be part of JSON response objects as shown below
# Changelog
## 1.0.0 (unreleased)
## API version 1.0
- Deck >=1.0.0: The maximum length of the card title has been extended from 100 to 255 characters
- Deck >=1.0.0: The API will now return a 400 Bad request response if the length limitation of a board, stack or card title is exceeded
## API version 1.1
This API version has become available with **Deck 1.3.0**.
- The maximum length of the card title has been extended from 100 to 255 characters
- The API will now return a 400 Bad request response if the length limitation of a board, stack or card title is exceeded
- The attachments API endpoints will return other attachment types than deck_file
- Prior to Deck version v1.3.0 (API v1.0), attachments were stored within deck. For this type of attachments `deck_file` was used as the default type of attachments
- Starting with Deck version 1.3.0 (API v1.1) files are stored within the users regular Nextcloud files and the type `file` has been introduced for that
## API version 1.2 (unreleased)
- Endpoints for the new import functionality have been added:
- [GET /boards/import/getSystems - Import a board](#get-boardsimportgetsystems-import-a-board)
- [GET /boards/import/config/system/{schema} - Import a board](#get-boardsimportconfigsystemschema-import-a-board)
- [POST /boards/import - Import a board](#post-boardsimport-import-a-board)
# Endpoints
@@ -927,7 +944,8 @@ The request can fail with a bad request response for the following reasons:
| type | String | The type of the attachement |
| file | Binary | File data to add as an attachment |
For now only `deck_file` is supported as an attachment type.
- Prior to Deck version v1.3.0 (API v1.0), attachments were stored within deck. For this type of attachments `deck_file` was used as the default type of attachments
- Starting with Deck version 1.3.0 (API v1.1) files are stored within the users regular Nextcloud files and the type `file` has been introduced for that
#### Response
@@ -988,6 +1006,49 @@ For now only `deck_file` is supported as an attachment type.
##### 200 Success
### GET /boards/import/getSystems - Import a board
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| system | Integer | The system name. Example: trello |
#### Response
Make a request to see the json schema of system
```json
{
}
```
### GET /boards/import/config/system/{schema} - Import a board
#### Request parameters
#### Response
```json
[
"trello"
]
```
### POST /boards/import - Import a board
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| system | string | The allowed name of system to import from |
| config | Object | The config object (JSON) |
| data | Object | The data object to import (JSON) |
#### Response
##### 200 Success
# OCS API
The following endpoints are available through the Nextcloud OCS endpoint, which is available at `/ocs/v2.php/apps/deck/api/v1.0/`.
@@ -1004,6 +1065,7 @@ Deck stores user and app configuration values globally and per board. The GET en
| Config key | Description |
| --- | --- |
| calendar | Determines if the calendar/tasks integration through the CalDAV backend is enabled for the user (boolean) |
| cardDetailsInModal | Determines if the bigger view is used (boolean) |
| groupLimit | Determines if creating new boards is limited to certain groups of the instance. The resulting output is an array of group objects with the id and the displayname (Admin only)|
```
@@ -1016,6 +1078,7 @@ Deck stores user and app configuration values globally and per board. The GET en
},
"data": {
"calendar": true,
"cardDetailsInModal": true,
"groupLimit": [
{
"id": "admin",
@@ -1045,6 +1108,7 @@ Deck stores user and app configuration values globally and per board. The GET en
| --- | ----- |
| notify-due | `off`, `assigned` or `all` |
| calendar | Boolean |
| cardDetailsInModal | Boolean |
#### Example request

View File

@@ -14,6 +14,8 @@ Overall, Deck is easy to use. You can create boards, add users, share the Deck,
3. [Handle cards options](#3-handle-cards-options)
4. [Archive old tasks](#4-archive-old-tasks)
5. [Manage your board](#5-manage-your-board)
6. [Import boards](#6-import-boards)
7. [Search](#7-search)
### 1. Create my first board
In this example, we're going to create a board and share it with an other nextcloud user.
@@ -69,14 +71,80 @@ The **sharing tab** allows you to add users or even groups to your boards.
**Deleted objects** allows you to return previously deleted stacks or cards.
The **Timeline** allows you to see everything that happened in your boards. Everything!
## Search
### 6. Import boards
Importing can be done using the API or the `occ` `deck:import` command.
Comments with more than 1000 characters are placed as attached files to the card.
It is possible to import from the following sources:
#### Trello JSON
Steps:
* Create the data file
* Access Trello
* go to the board you want to export
* Follow the steps in [Trello documentation](https://help.trello.com/article/747-exporting-data-from-trello-1) and export as JSON
* Create the configuration file
* Execute the import informing the import file path, data file and source as `Trello JSON`
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/master/lib/Service/fixtures/config-trelloJson-schema.json) for import `Trello JSON`
Example configuration file:
```json
{
"owner": "admin",
"color": "0800fd",
"uidRelation": {
"johndoe": "johndoe"
}
}
```
**Limitations**:
Importing from a JSON file imports up to 1000 actions. To find out how many actions the board to be imported has, identify how many actions the JSON has.
#### Trello API
Import using API is recommended for boards with more than 1000 actions.
Trello makes it possible to attach links to a card. Deck does not have this feature. Attachments and attachment links are added in a markdown table at the end of the description for every imported card that has attachments in Trello.
* Get the API Key and API Token [here](https://developer.atlassian.com/cloud/trello/guides/rest-api/api-introduction/#authentication-and-authorization)
* Get the ID of the board you want to import by making a request to:
https://api.trello.com/1/members/me/boards?key={yourKey}&token={yourToken}&fields=id,name
This ID you will use in the configuration file in the `board` property
* Create the configuration file
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/master/lib/Service/fixtures/config-trelloApi-schema.json) for import `Trello JSON`
Example configuration file:
```json
{
"owner": "admin",
"color": "0800fd",
"api": {
"key": "0cc175b9c0f1b6a831c399e269772661",
"token": "92eb5ffee6ae2fec3ad71c777531578f4a8a08f09d37b73795649038408b5f33"
},
"board": "8277e0910d750195b4487976",
"uidRelation": {
"johndoe": "johndoe"
}
}
```
### 7. Search
Deck provides a global search either through the unified search in the Nextcloud header or with the inline search next to the board controls.
This search allows advanced filtering of cards across all board of the logged in user.
For example the search `project tag:ToDo assigned:alice assigned:bob` will return all cards where the card title or description contains project **and** the tag ToDo is set **and** the user alice is assigned **and** the user bob is assigned.
### Supported search filters
#### Supported search filters
| Filter | Operators | Query |
| ----------- | ----------------- | ------------------------------------------------------------ |

32
docs/implement-import.md Normal file
View File

@@ -0,0 +1,32 @@
## Implement import
* Create a new importer class extending `ABoardImportService`
* Create a listener for event `BoardImportGetAllowedEvent` to enable your importer.
> You can read more about listeners on [Nextcloud](https://docs.nextcloud.com/server/latest/developer_manual/basics/events.html?highlight=event#writing-a-listener) doc.
Example:
```php
class YourCustomImporterListener {
public function handle(Event $event): void {
if (!($event instanceof BoardImportGetAllowedEvent)) {
return;
}
$event->getService()->addAllowedImportSystem([
'name' => YourCustomImporterService::$name,
'class' => YourCustomImporterService::class,
'internalName' => 'YourCustomImporter'
]);
}
}
```
* Register your listener on your `Application` class like this:
```php
$dispatcher = $this->getContainer()->query(IEventDispatcher::class);
$dispatcher->registerEventListener(
BoardImportGetAllowedEvent::class,
YourCustomImporterListener::class
);
```
* Use the `lib/Service/Importer/Systems/TrelloJsonService.php` class as inspiration

View File

@@ -0,0 +1,7 @@
## Import class diagram
Importing boards to the Deck implements the class diagram below.
> **NOTE**: When making any changes to the structure of the classes or implementing import from other sources, edit the `BoardImport.yuml` file
![Screenshot](resources/BoardImport.svg)

View File

@@ -0,0 +1,214 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="417pt" height="830pt"
viewBox="0.00 0.00 417.01 830.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 826)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-826 413.012,-826 413.012,4 -4,4"/>
<!-- A0 -->
<g id="node1" class="node">
<title>A0</title>
<polygon fill="#fff8dc" stroke="#000000" points="165.909,-822 70.091,-822 70.091,-766 171.909,-766 171.909,-816 165.909,-822"/>
<polyline fill="none" stroke="#000000" points="165.909,-822 165.909,-816 "/>
<polyline fill="none" stroke="#000000" points="171.909,-816 165.909,-816 "/>
<text text-anchor="middle" x="121" y="-809" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Classes used on</text>
<text text-anchor="middle" x="121" y="-797" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">board import.</text>
<text text-anchor="middle" x="121" y="-785" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Methods just to</text>
<text text-anchor="middle" x="121" y="-773" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">illustrate.</text>
</g>
<!-- A1 -->
<g id="node2" class="node">
<title>A1</title>
<polygon fill="none" stroke="#000000" points="108.7773,-680 23.2227,-680 23.2227,-644 108.7773,-644 108.7773,-680"/>
<text text-anchor="middle" x="66" y="-659" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ApiController</text>
</g>
<!-- A2 -->
<g id="node3" class="node">
<title>A2</title>
<polygon fill="none" stroke="#000000" points="0,-514 0,-546 132,-546 132,-514 0,-514"/>
<text text-anchor="start" x="9.607" y="-527" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImportApiController</text>
<polygon fill="none" stroke="#000000" points="0,-458 0,-514 132,-514 132,-458 0,-458"/>
<text text-anchor="start" x="45.8645" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+import()</text>
<text text-anchor="start" x="16.1335" y="-483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+getAllowedSystems()</text>
<text text-anchor="start" x="20.0185" y="-471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+getConfigSchema()</text>
</g>
<!-- A1&#45;&gt;A2 -->
<g id="edge1" class="edge">
<title>A1&#45;&gt;A2</title>
<path fill="none" stroke="#000000" d="M66,-633.6693C66,-609.4424 66,-574.1663 66,-546.2238"/>
<polygon fill="#000000" stroke="#000000" points="66,-643.957 61.5001,-633.9569 66,-638.957 66.0001,-633.957 66.0001,-633.957 66.0001,-633.957 66,-638.957 70.5001,-633.957 66,-643.957 66,-643.957"/>
</g>
<!-- A3 -->
<g id="node4" class="node">
<title>A3</title>
<polygon fill="none" stroke="#000000" points="92,-364 92,-396 200,-396 200,-364 92,-364"/>
<text text-anchor="start" x="101.828" y="-377" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImportService</text>
<polygon fill="none" stroke="#000000" points="92,-284 92,-364 200,-364 200,-284 92,-284"/>
<text text-anchor="start" x="125.8645" y="-345" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+import()</text>
<text text-anchor="start" x="118.9105" y="-333" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+bootstrap()</text>
<text text-anchor="start" x="105.857" y="-321" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+validateSystem()</text>
<text text-anchor="start" x="108.218" y="-309" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateConfig()</text>
<text text-anchor="start" x="112.107" y="-297" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateData()</text>
</g>
<!-- A2&#45;&gt;A3 -->
<g id="edge2" class="edge">
<title>A2&#45;&gt;A3</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M87.8604,-457.7328C95.8577,-441.5382 105.0823,-422.8583 113.7939,-405.2174"/>
<polygon fill="#000000" stroke="#000000" points="118.2935,-396.1057 117.9004,-407.0646 116.0795,-400.5889 113.8656,-405.072 113.8656,-405.072 113.8656,-405.072 116.0795,-400.5889 109.8308,-403.0795 118.2935,-396.1057 118.2935,-396.1057"/>
<text text-anchor="middle" x="88.3076" y="-434.7378" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A7 -->
<g id="node8" class="node">
<title>A7</title>
<polygon fill="none" stroke="#000000" points="37,-196 37,-228 129,-228 129,-196 37,-196"/>
<text text-anchor="start" x="46.612" y="-209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">TrelloApiService</text>
<polygon fill="none" stroke="#000000" points="37,-164 37,-196 129,-196 129,-164 37,-164"/>
<text text-anchor="start" x="53.9655" y="-177" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+name:string</text>
</g>
<!-- A3&#45;&gt;A7 -->
<g id="edge6" class="edge">
<title>A3&#45;&gt;A7</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M114.8609,-283.9135C107.8316,-268.5143 100.7854,-252.0928 95.0404,-237.6613"/>
<polygon fill="#000000" stroke="#000000" points="91.2872,-228.0253 99.1098,-235.7102 93.1019,-232.6844 94.9167,-237.3434 94.9167,-237.3434 94.9167,-237.3434 93.1019,-232.6844 90.7235,-238.9767 91.2872,-228.0253 91.2872,-228.0253"/>
<text text-anchor="middle" x="99.6759" y="-267.8975" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A9 -->
<g id="node10" class="node">
<title>A9</title>
<polygon fill="none" stroke="#000000" points="148,-202 148,-234 273,-234 273,-202 148,-202"/>
<text text-anchor="start" x="170.7765" y="-215" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">TrelloJsonService</text>
<polygon fill="none" stroke="#000000" points="148,-158 148,-202 273,-202 273,-158 148,-158"/>
<text text-anchor="start" x="181.4655" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+name:string</text>
<text text-anchor="start" x="157.981" y="-171" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#needValidateData:true</text>
</g>
<!-- A3&#45;&gt;A9 -->
<g id="edge9" class="edge">
<title>A3&#45;&gt;A9</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M164.3261,-283.9135C170.0039,-270.5688 176.3462,-256.4563 182.4816,-243.5365"/>
<polygon fill="#000000" stroke="#000000" points="186.9002,-234.3677 186.6126,-245.3298 184.7295,-238.872 182.5588,-243.3762 182.5588,-243.3762 182.5588,-243.3762 184.7295,-238.872 178.505,-241.4226 186.9002,-234.3677 186.9002,-234.3677"/>
<text text-anchor="middle" x="163.6874" y="-260.9237" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A10 -->
<g id="node11" class="node">
<title>A10</title>
<polygon fill="#fff8dc" stroke="#000000" points="317.7872,-362 218.2128,-362 218.2128,-318 323.7872,-318 323.7872,-356 317.7872,-362"/>
<polyline fill="none" stroke="#000000" points="317.7872,-362 317.7872,-356 "/>
<polyline fill="none" stroke="#000000" points="323.7872,-356 317.7872,-356 "/>
<text text-anchor="middle" x="271" y="-349" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">validateSystem is</text>
<text text-anchor="middle" x="271" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">public because is</text>
<text text-anchor="middle" x="271" y="-325" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">used on Api.</text>
</g>
<!-- A3&#45;&gt;A10 -->
<g id="edge11" class="edge">
<title>A3&#45;&gt;A10</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M200.1992,-340C206.1915,-340 212.1837,-340 218.176,-340"/>
</g>
<!-- A4 -->
<g id="node5" class="node">
<title>A4</title>
<polygon fill="none" stroke="#000000" points="264.1131,-812 189.8869,-812 189.8869,-776 264.1131,-776 264.1131,-812"/>
<text text-anchor="middle" x="227" y="-791" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Command</text>
</g>
<!-- A5 -->
<g id="node6" class="node">
<title>A5</title>
<polygon fill="none" stroke="#000000" points="148,-684 148,-716 307,-716 307,-684 148,-684"/>
<text text-anchor="start" x="199.9955" y="-697" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImport</text>
<polygon fill="none" stroke="#000000" points="148,-652 148,-684 307,-684 307,-652 148,-652"/>
<text text-anchor="start" x="157.907" y="-665" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+boardImportCommandService</text>
<polygon fill="none" stroke="#000000" points="148,-608 148,-652 307,-652 307,-608 148,-608"/>
<text text-anchor="start" x="200.8305" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#configure()</text>
<text text-anchor="start" x="177.76" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#execute(input,output)</text>
</g>
<!-- A4&#45;&gt;A5 -->
<g id="edge3" class="edge">
<title>A4&#45;&gt;A5</title>
<path fill="none" stroke="#000000" d="M227,-765.6356C227,-751.1554 227,-733.0451 227,-716.0324"/>
<polygon fill="#000000" stroke="#000000" points="227,-775.9227 222.5001,-765.9227 227,-770.9227 227.0001,-765.9227 227.0001,-765.9227 227.0001,-765.9227 227,-770.9227 231.5001,-765.9228 227,-775.9227 227,-775.9227"/>
</g>
<!-- A6 -->
<g id="node7" class="node">
<title>A6</title>
<polygon fill="none" stroke="#000000" points="150,-526 150,-558 304,-558 304,-526 150,-526"/>
<text text-anchor="start" x="159.7715" y="-539" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImportCommandService</text>
<polygon fill="none" stroke="#000000" points="150,-446 150,-526 304,-526 304,-446 150,-446"/>
<text text-anchor="start" x="199.9105" y="-507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+bootstrap()</text>
<text text-anchor="start" x="206.8645" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+import()</text>
<text text-anchor="start" x="186.857" y="-483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+validateSystem()</text>
<text text-anchor="start" x="189.218" y="-471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateConfig()</text>
<text text-anchor="start" x="193.107" y="-459" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateData()</text>
</g>
<!-- A5&#45;&gt;A6 -->
<g id="edge4" class="edge">
<title>A5&#45;&gt;A6</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M227,-607.8313C227,-595.0442 227,-581.2707 227,-568.0248"/>
<polygon fill="#000000" stroke="#000000" points="227,-558.0234 231.5001,-568.0234 227,-563.0234 227.0001,-568.0234 227.0001,-568.0234 227.0001,-568.0234 227,-563.0234 222.5001,-568.0235 227,-558.0234 227,-558.0234"/>
<text text-anchor="middle" x="218.5476" y="-586.7051" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A6&#45;&gt;A3 -->
<g id="edge5" class="edge">
<title>A6&#45;&gt;A3</title>
<path fill="none" stroke="#000000" d="M198.8975,-445.7949C192.3634,-432.7268 185.3528,-418.7057 178.6417,-405.2834"/>
<polygon fill="#000000" stroke="#000000" points="174.0529,-396.1057 182.55,-403.0375 176.289,-400.5779 178.5251,-405.05 178.5251,-405.05 178.5251,-405.05 176.289,-400.5779 174.5001,-407.0625 174.0529,-396.1057 174.0529,-396.1057"/>
</g>
<!-- A7&#45;&gt;A3 -->
<g id="edge7" class="edge">
<title>A7&#45;&gt;A3</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M102.735,-228.0253C109.5347,-241.763 117.1224,-258.3431 124.0627,-274.4849"/>
<polygon fill="#000000" stroke="#000000" points="128.0634,-283.9135 120.0148,-276.4657 126.1104,-279.3107 124.1573,-274.7079 124.1573,-274.7079 124.1573,-274.7079 126.1104,-279.3107 128.2998,-272.9502 128.0634,-283.9135 128.0634,-283.9135"/>
<text text-anchor="middle" x="118.307" y="-237.5757" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A8 -->
<g id="node9" class="node">
<title>A8</title>
<polygon fill="none" stroke="#000000" points="80,-64 80,-108 213,-108 213,-64 80,-64"/>
<text text-anchor="start" x="117.04" y="-89" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;&lt;abstract&gt;&gt;</text>
<text text-anchor="start" x="98.9935" y="-77" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ABoardImportService</text>
<polygon fill="none" stroke="#000000" points="80,-32 80,-64 213,-64 213,-32 80,-32"/>
<text text-anchor="start" x="92.036" y="-45" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#needValidateData:false</text>
<polygon fill="none" stroke="#000000" points="80,0 80,-32 213,-32 213,0 80,0"/>
<text text-anchor="start" x="89.677" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+needValidateData():bool</text>
</g>
<!-- A7&#45;&gt;A8 -->
<g id="edge8" class="edge">
<title>A7&#45;&gt;A8</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M97.2957,-163.778C103.3956,-150.029 110.7371,-133.4813 117.8485,-117.4527"/>
<polygon fill="none" stroke="#000000" points="121.1416,-118.6605 121.9978,-108.1003 114.743,-115.8216 121.1416,-118.6605"/>
<text text-anchor="middle" x="96.9205" y="-140.7815" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">implements</text>
</g>
<!-- A9&#45;&gt;A3 -->
<g id="edge10" class="edge">
<title>A9&#45;&gt;A3</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M198.9952,-234.3677C194.0646,-246.7117 188.0483,-260.7568 181.8434,-274.4849"/>
<polygon fill="#000000" stroke="#000000" points="177.5286,-283.9135 177.598,-272.9478 179.6093,-279.367 181.6899,-274.8204 181.6899,-274.8204 181.6899,-274.8204 179.6093,-279.367 185.7818,-276.693 177.5286,-283.9135 177.5286,-283.9135"/>
<text text-anchor="middle" x="200.0654" y="-251.3391" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A9&#45;&gt;A8 -->
<g id="edge13" class="edge">
<title>A9&#45;&gt;A8</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M192.8492,-157.9466C187.2535,-145.5313 180.8796,-131.389 174.6742,-117.6209"/>
<polygon fill="none" stroke="#000000" points="177.7167,-115.8534 170.4168,-108.1747 171.3349,-118.7297 177.7167,-115.8534"/>
<text text-anchor="middle" x="177.6953" y="-141.8944" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">implements</text>
</g>
<!-- A11 -->
<g id="node12" class="node">
<title>A11</title>
<polygon fill="#fff8dc" stroke="#000000" points="403.024,-224 290.976,-224 290.976,-168 409.024,-168 409.024,-218 403.024,-224"/>
<polyline fill="none" stroke="#000000" points="403.024,-224 403.024,-218 "/>
<polyline fill="none" stroke="#000000" points="409.024,-218 403.024,-218 "/>
<text text-anchor="middle" x="350" y="-211" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">To create an import</text>
<text text-anchor="middle" x="350" y="-199" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to another system,</text>
<text text-anchor="middle" x="350" y="-187" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">create another class</text>
<text text-anchor="middle" x="350" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">similar to this.</text>
</g>
<!-- A9&#45;&gt;A11 -->
<g id="edge12" class="edge">
<title>A9&#45;&gt;A11</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M272.6172,-196C278.6627,-196 284.7083,-196 290.7538,-196"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,24 @@
// Created using [yUML](https://github.com/jaime-olivares/vscode-yuml)
// {type:class}
// {direction:topDown}
// {generate:true}
[note: Classes used on board import. Methods just to illustrate. {bg:cornsilk}]
[ApiController]<-[BoardImportApiController|+import();+getAllowedSystems();+getConfigSchema()]
[BoardImportApiController]uses-.->[BoardImportService|+import();+bootstrap();+validateSystem();#validateConfig();#validateData();]
[Command]<-[BoardImport|+boardImportCommandService|#configure();#execute(input,output)]
[BoardImport]uses-.->[BoardImportCommandService|+bootstrap();+import();+validateSystem();#validateConfig();#validateData()]
[BoardImportCommandService]->[BoardImportService]
[BoardImportService]uses-.->[TrelloApiService|+name:string]
[TrelloApiService]uses-.->[BoardImportService]
[TrelloApiService]implements-.-^[<<abstract>> ABoardImportService|#needValidateData:false|+needValidateData():bool]
[BoardImportService]uses-.->[TrelloJsonService|+name:string;#needValidateData:true]
[TrelloJsonService]uses-.->[BoardImportService]
[BoardImportService]-[note: validateSystem is public because is used on Api. {bg:cornsilk}]
[TrelloJsonService]-[note: To create an import to another system, create another class similar to this. {bg:cornsilk}]
[TrelloJsonService]implements-.-^[<<abstract>> ABoardImportService]

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Soubor se nedaří se zapsat na úložiště",
"A PHP extension stopped the file upload" : "PHP rozšíření zastavilo nahrávání souboru.",
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Tento komentář je delší než %s znaků.\nPřidán jako příloha ke kartě nazvané %s.\nDostupné na URL: %s.",
"Card not found" : "Karta nebyla nalezena",
"Path is already shared with this card" : "Popis umístění už je touto kartou sdíleno",
"Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum je třeba, aby formát data byl RRRR-MM-DD",
"Personal planning and team project organization" : "Osobní plánování a organizování týmového projektu",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, napojený do Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky (v Markdown) \n- 🔖 Přiřazujte štítky pro ještě lepší uspořádání\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 📎 Připojte soubory a vložte je do (Markdown) popisu \n- 💬 Diskutujte se svým týmem prostřednictvím komentářů\n- ⚡ Udržte si přehled o změnách prostřednictvím sledování proudu aktivit\n- 🚀 Dostaňte svůj projekt pod kontrolu",
"Card details" : "Podrobnosti o kartě",
"Add board" : "Přidat tabuli",
"Select the board to link to a project" : "Vyberte tabuli kterou propojit s projektem",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Archivovat kartu",
"Delete card" : "Smazat kartu",
"Move card to another board" : "Přesunout kartu na jinou tabuli",
"List is empty" : "Seznam je prázdný",
"Card deleted" : "Karta smazána",
"seconds ago" : "před několika sekundami",
"All boards" : "Všechny tabule",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Sdílet s kartou aplikace Deck",
"Share {file} with a Deck card" : "Sdílet {file} s kartou aplikace Deck",
"Share" : "Sdílet",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu",
"Creating the new card…" : "Vytváření nové karty…",
"\"{card}\" was added to \"{board}\"" : "„{card}“ bylo přidáno do „{board}“",
"(circle)" : "(okruh)"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Soubor se nedaří se zapsat na úložiště",
"A PHP extension stopped the file upload" : "PHP rozšíření zastavilo nahrávání souboru.",
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Tento komentář je delší než %s znaků.\nPřidán jako příloha ke kartě nazvané %s.\nDostupné na URL: %s.",
"Card not found" : "Karta nebyla nalezena",
"Path is already shared with this card" : "Popis umístění už je touto kartou sdíleno",
"Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum je třeba, aby formát data byl RRRR-MM-DD",
"Personal planning and team project organization" : "Osobní plánování a organizování týmového projektu",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, napojený do Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky (v Markdown) \n- 🔖 Přiřazujte štítky pro ještě lepší uspořádání\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 📎 Připojte soubory a vložte je do (Markdown) popisu \n- 💬 Diskutujte se svým týmem prostřednictvím komentářů\n- ⚡ Udržte si přehled o změnách prostřednictvím sledování proudu aktivit\n- 🚀 Dostaňte svůj projekt pod kontrolu",
"Card details" : "Podrobnosti o kartě",
"Add board" : "Přidat tabuli",
"Select the board to link to a project" : "Vyberte tabuli kterou propojit s projektem",
@@ -237,6 +239,7 @@
"Archive card" : "Archivovat kartu",
"Delete card" : "Smazat kartu",
"Move card to another board" : "Přesunout kartu na jinou tabuli",
"List is empty" : "Seznam je prázdný",
"Card deleted" : "Karta smazána",
"seconds ago" : "před několika sekundami",
"All boards" : "Všechny tabule",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Sdílet s kartou aplikace Deck",
"Share {file} with a Deck card" : "Sdílet {file} s kartou aplikace Deck",
"Share" : "Sdílet",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu",
"Creating the new card…" : "Vytváření nové karty…",
"\"{card}\" was added to \"{board}\"" : "„{card}“ bylo přidáno do „{board}“",
"(circle)" : "(okruh)"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Dieser Kommentar hat mehr als %s Zeichen.\nAls Anhang der Karte mit dem Namen %s hinzugefügt.\nZugriff über die URL: %s.",
"Card not found" : "Karte nicht gefunden",
"Path is already shared with this card" : "Pfad wurde bereits mit dieser Karte geteilt",
"Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, zulässiges Datumsformat: JJJJJ-MM-TT",
"Personal planning and team project organization" : "Persönliche Planung und Teamprojektorganisation",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in Deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit Deinem Team mit Kommentaren\n- ⚡ Behalte Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere Dein Projekt",
"Card details" : "Karten-Details",
"Add board" : "Board hinzufügen",
"Select the board to link to a project" : "Wähle ein Board aus, um dieses mit einem Projekt zu verknüpfen",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Karte archivieren",
"Delete card" : "Karte löschen",
"Move card to another board" : "Karte auf ein anderes Board verschieben",
"List is empty" : "Liste ist leer",
"Card deleted" : "Karte gelöscht",
"seconds ago" : "Gerade eben",
"All boards" : "Alle Boards",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
"Share {file} with a Deck card" : "{file} mit einer Deck-Karte teilen",
"Share" : "Freigeben",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in Deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit Deinem Team mit Kommentaren\n- ⚡ Behalte Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere Dein Projekt"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in Deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit Deinem Team mit Kommentaren\n- ⚡ Behalte Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere Dein Projekt",
"Creating the new card…" : "Neue Karte wird erstellt …",
"\"{card}\" was added to \"{board}\"" : "Karte \"{card}\" wurde zu Board \"{board}\" hinzugefügt",
"(circle)" : "(Kreis)"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Dieser Kommentar hat mehr als %s Zeichen.\nAls Anhang der Karte mit dem Namen %s hinzugefügt.\nZugriff über die URL: %s.",
"Card not found" : "Karte nicht gefunden",
"Path is already shared with this card" : "Pfad wurde bereits mit dieser Karte geteilt",
"Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, zulässiges Datumsformat: JJJJJ-MM-TT",
"Personal planning and team project organization" : "Persönliche Planung und Teamprojektorganisation",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in Deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit Deinem Team mit Kommentaren\n- ⚡ Behalte Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere Dein Projekt",
"Card details" : "Karten-Details",
"Add board" : "Board hinzufügen",
"Select the board to link to a project" : "Wähle ein Board aus, um dieses mit einem Projekt zu verknüpfen",
@@ -237,6 +239,7 @@
"Archive card" : "Karte archivieren",
"Delete card" : "Karte löschen",
"Move card to another board" : "Karte auf ein anderes Board verschieben",
"List is empty" : "Liste ist leer",
"Card deleted" : "Karte gelöscht",
"seconds ago" : "Gerade eben",
"All boards" : "Alle Boards",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
"Share {file} with a Deck card" : "{file} mit einer Deck-Karte teilen",
"Share" : "Freigeben",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in Deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit Deinem Team mit Kommentaren\n- ⚡ Behalte Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere Dein Projekt"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in Deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit Deinem Team mit Kommentaren\n- ⚡ Behalte Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere Dein Projekt",
"Creating the new card…" : "Neue Karte wird erstellt …",
"\"{card}\" was added to \"{board}\"" : "Karte \"{card}\" wurde zu Board \"{board}\" hinzugefügt",
"(circle)" : "(Kreis)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Dieser Kommentar hat mehr als %s Zeichen.\nAls Anhang der Karte mit dem Namen %s hinzugefügt.\nZugriff über die URL: %s.",
"Card not found" : "Karte nicht gefunden",
"Path is already shared with this card" : "Pfad wurde bereits mit dieser Karte geteilt",
"Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, zulässiges Datumsformat: JJJJ-MM-TT",
"Personal planning and team project organization" : "Persönliche Planung und Teamprojektorganisation",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 📎 Fügen Sie Dateien hinzu und verwende diese in Ihren Markdown-Beschreibungen\n- 💬 Diskutieren Sie mit Ihrem Team mit Kommentaren\n- ⚡ Behalten Sie Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisieren Sie Ihr Projekt",
"Card details" : "Karten-Details",
"Add board" : "Board hinzufügen",
"Select the board to link to a project" : "Wählen Sie ein Board aus, um dieses mit einem Projekt zu verknüpfen",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Karte archivieren",
"Delete card" : "Karte löschen",
"Move card to another board" : "Karte auf ein anderes Board verschieben",
"List is empty" : "Liste ist leer",
"Card deleted" : "Karte gelöscht",
"seconds ago" : "Gerade eben",
"All boards" : "Alle Boards",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
"Share {file} with a Deck card" : "{file} mit einer Deck-Karte teilen",
"Share" : "Freigeben",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 📎 Fügen Sie Dateien hinzu und verwende diese in Ihren Markdown-Beschreibungen\n- 💬 Diskutieren Sie mit Ihrem Team mit Kommentaren\n- ⚡ Behalten Sie Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisieren Sie Ihr Projekt"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 📎 Fügen Sie Dateien hinzu und verwende diese in Ihren Markdown-Beschreibungen\n- 💬 Diskutieren Sie mit Ihrem Team mit Kommentaren\n- ⚡ Behalten Sie Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisieren Sie Ihr Projekt",
"Creating the new card…" : "Neue Karte wird erstellt …",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" wurde \"{board}\" hinzugefügt",
"(circle)" : "(Kreis)"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Dieser Kommentar hat mehr als %s Zeichen.\nAls Anhang der Karte mit dem Namen %s hinzugefügt.\nZugriff über die URL: %s.",
"Card not found" : "Karte nicht gefunden",
"Path is already shared with this card" : "Pfad wurde bereits mit dieser Karte geteilt",
"Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, zulässiges Datumsformat: JJJJ-MM-TT",
"Personal planning and team project organization" : "Persönliche Planung und Teamprojektorganisation",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 📎 Fügen Sie Dateien hinzu und verwende diese in Ihren Markdown-Beschreibungen\n- 💬 Diskutieren Sie mit Ihrem Team mit Kommentaren\n- ⚡ Behalten Sie Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisieren Sie Ihr Projekt",
"Card details" : "Karten-Details",
"Add board" : "Board hinzufügen",
"Select the board to link to a project" : "Wählen Sie ein Board aus, um dieses mit einem Projekt zu verknüpfen",
@@ -237,6 +239,7 @@
"Archive card" : "Karte archivieren",
"Delete card" : "Karte löschen",
"Move card to another board" : "Karte auf ein anderes Board verschieben",
"List is empty" : "Liste ist leer",
"Card deleted" : "Karte gelöscht",
"seconds ago" : "Gerade eben",
"All boards" : "Alle Boards",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
"Share {file} with a Deck card" : "{file} mit einer Deck-Karte teilen",
"Share" : "Freigeben",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 📎 Fügen Sie Dateien hinzu und verwende diese in Ihren Markdown-Beschreibungen\n- 💬 Diskutieren Sie mit Ihrem Team mit Kommentaren\n- ⚡ Behalten Sie Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisieren Sie Ihr Projekt"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 📎 Fügen Sie Dateien hinzu und verwende diese in Ihren Markdown-Beschreibungen\n- 💬 Diskutieren Sie mit Ihrem Team mit Kommentaren\n- ⚡ Behalten Sie Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisieren Sie Ihr Projekt",
"Creating the new card…" : "Neue Karte wird erstellt …",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" wurde \"{board}\" hinzugefügt",
"(circle)" : "(Kreis)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -239,6 +239,7 @@ OC.L10N.register(
"Archive card" : "Artxibatu txartela",
"Delete card" : "Ezabatu txartela",
"Move card to another board" : "Mugitu txartela beste taula batera",
"List is empty" : "Zerrenda hutsik dago",
"Card deleted" : "Txartela ezabatuta",
"seconds ago" : "segundo lehenago",
"All boards" : "Taula guztiak",
@@ -284,6 +285,8 @@ OC.L10N.register(
"Share with a Deck card" : "Partekatu Deck txartel baten bidez",
"Share {file} with a Deck card" : "Partekatu {file} Deck txartel baten bidez",
"Share" : "Partekatu",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck aplikazioa plangintza pertsonalera eta proiektuen antolaketara zuzenduta dagoen Nextcloudekin integratutako kanban moduko tresna bat da.\n\n\n- 📥 Gehitu atazak txarteletan eta ordenatu\n- 📄 Idatzi ohar gehigarriak markdown erabiliz\n- 🔖 Esleitu etiketak antolaketa are gehiago hobetzeko\n- 👥 Partekatu zure talde, lagun edo familiarekin\n- 📎 Erantsi fitxategiak eta kapsulatu zure markdown deskribapenean\n- 💬 Eztabaidatu zure taldearekin iruzkinak erabiliz\n- ⚡ Egin aldaketen jarraipena jarduera jarioa erabiliz\n- 🚀 Antolatu zure proiektua"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck aplikazioa plangintza pertsonalera eta proiektuen antolaketara zuzenduta dagoen Nextcloudekin integratutako kanban moduko tresna bat da.\n\n\n- 📥 Gehitu atazak txarteletan eta ordenatu\n- 📄 Idatzi ohar gehigarriak markdown erabiliz\n- 🔖 Esleitu etiketak antolaketa are gehiago hobetzeko\n- 👥 Partekatu zure talde, lagun edo familiarekin\n- 📎 Erantsi fitxategiak eta kapsulatu zure markdown deskribapenean\n- 💬 Eztabaidatu zure taldearekin iruzkinak erabiliz\n- ⚡ Egin aldaketen jarraipena jarduera jarioa erabiliz\n- 🚀 Antolatu zure proiektua",
"Creating the new card…" : "Txartel berria sortzen...",
"(circle)" : "(zirkulua)"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -237,6 +237,7 @@
"Archive card" : "Artxibatu txartela",
"Delete card" : "Ezabatu txartela",
"Move card to another board" : "Mugitu txartela beste taula batera",
"List is empty" : "Zerrenda hutsik dago",
"Card deleted" : "Txartela ezabatuta",
"seconds ago" : "segundo lehenago",
"All boards" : "Taula guztiak",
@@ -282,6 +283,8 @@
"Share with a Deck card" : "Partekatu Deck txartel baten bidez",
"Share {file} with a Deck card" : "Partekatu {file} Deck txartel baten bidez",
"Share" : "Partekatu",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck aplikazioa plangintza pertsonalera eta proiektuen antolaketara zuzenduta dagoen Nextcloudekin integratutako kanban moduko tresna bat da.\n\n\n- 📥 Gehitu atazak txarteletan eta ordenatu\n- 📄 Idatzi ohar gehigarriak markdown erabiliz\n- 🔖 Esleitu etiketak antolaketa are gehiago hobetzeko\n- 👥 Partekatu zure talde, lagun edo familiarekin\n- 📎 Erantsi fitxategiak eta kapsulatu zure markdown deskribapenean\n- 💬 Eztabaidatu zure taldearekin iruzkinak erabiliz\n- ⚡ Egin aldaketen jarraipena jarduera jarioa erabiliz\n- 🚀 Antolatu zure proiektua"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck aplikazioa plangintza pertsonalera eta proiektuen antolaketara zuzenduta dagoen Nextcloudekin integratutako kanban moduko tresna bat da.\n\n\n- 📥 Gehitu atazak txarteletan eta ordenatu\n- 📄 Idatzi ohar gehigarriak markdown erabiliz\n- 🔖 Esleitu etiketak antolaketa are gehiago hobetzeko\n- 👥 Partekatu zure talde, lagun edo familiarekin\n- 📎 Erantsi fitxategiak eta kapsulatu zure markdown deskribapenean\n- 💬 Eztabaidatu zure taldearekin iruzkinak erabiliz\n- ⚡ Egin aldaketen jarraipena jarduera jarioa erabiliz\n- 🚀 Antolatu zure proiektua",
"Creating the new card…" : "Txartel berria sortzen...",
"(circle)" : "(zirkulua)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -17,7 +17,64 @@ OC.L10N.register(
"{user} has archived the board {before}" : "{user} تختهٔ {board} را بایگانی کرد",
"You have unarchived the board {board}" : "تختهٔ {board} را از بایگانی خارج کردید",
"{user} has unarchived the board {before}" : "{user} تختهٔ {board} را از بایگانی خارج کرد",
"You have created a new list {stack} on board {board}" : "شما فهرست جدید {stack} را در تخته {board} ایجاد کرده‌اید",
"{user} has created a new list {stack} on board {board}" : "{user} فهرست جدید {stack} را در تخته {board} ایجاد کرده است",
"You have renamed list {before} to {stack} on board {board}" : "شما فهرست {before} را به {stack} در تخته {board} تغییر نام داده‌اید",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} فهرست {before} را به {stack} در تخته {board} تغییر نام داده است",
"You have deleted list {stack} on board {board}" : "شما فهرست {stack} را در تخته {board} حذف کرده اید",
"{user} has deleted list {stack} on board {board}" : "{user} فهرست {stack} را در تخته {board} حذف کرده است",
"You have created card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} ایجاد کرده اید",
"{user} has created card {card} in list {stack} on board {board}" : "ٰ{user} برگه {card} را در فهرست {stack} در تخته {board} ایجاد کرده است",
"You have deleted card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} حذف کرده اید",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} برگه {card} را در فهرست {stack} در تخته {board} حذف کرده است",
"You have renamed the card {before} to {card}" : "شما نام برگه را {پیش از} به {card} تغییر داده اید",
"{user} has renamed the card {before} to {card}" : "{user} نام برگه را {پیش از} به {card} تغییر داده است",
"You have added a description to card {card} in list {stack} on board {board}" : "شما یک توضیح به برگه {card} در فهرست {stack} در تخته {board} اضافه کرده اید",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} توضیحاتی را به برگه {card} در فهرست {stack} on board {board} اضافه کرده است.",
"You have updated the description of card {card} in list {stack} on board {board}" : "شما شرح برگه {card} را در فهرست {stack} در تخته {board} به روز کرده اید.",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} توضیحات برگه {card} را در فهرست {stack} on board {board} به روز کرده است.",
"You have archived card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} بایگانی کرده اید",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} برگه {card} را در فهرست {stack} در تخته {board} بایگانی کرده است",
"You have unarchived card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} از بایگانی خارج کرده‌اید.",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} برگه {card} را در فهرست {stack} در تخته {board} از بایگانی خارج کرده است",
"You have removed the due date of card {card}" : "شما تاریخ سررسید برگه {card} را حذف کرده اید",
"{user} has removed the due date of card {card}" : "{user} تاریخ سررسید برگه {card} را حذف کرده است",
"You have set the due date of card {card} to {after}" : "شما تاریخ سررسید برگه {card} را روی {after} تنظیم کرده اید",
"{user} has set the due date of card {card} to {after}" : "{user} تاریخ سررسید برگه {card} را روی {after} قرار داده است",
"You have updated the due date of card {card} to {after}" : "شما تاریخ سررسید برگه {card} را به {after} به روز کرده اید",
"{user} has updated the due date of card {card} to {after}" : "{user} تاریخ سررسید برگه {card} را به {after} به روز کرده است",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "شما برچسب {label} را به برگه {card} در فهرست {stack} در تخته {board} اضافه کرده‌اید.",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} برچسب {label} را بهبرگه {card} در فهرست {stack} در تخته {board} اضافه کرده است.",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "شما برچسب {label} را از برگه {card} در فهرست {stack} در تخته {board} حذف کردید.",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} برچسب {label} را از برگه {card} در فهرست {stack} در تخته {board} حذف کرده است.",
"You have assigned {assigneduser} to card {card} on board {board}" : "شما {کاربر اختصاص یافته} را به برگه {card} در تخته {board} اختصاص داده‌اید.",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} {assigneduser} را به برگه {card} در تخته {board} اختصاص داده است",
"You have unassigned {assigneduser} from card {card} on board {board}" : "شما {تخصیص کاربر} را از برگه {card} در تخته {board} لغو کرده‌اید.",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} تخصیص {assigneduser} را از برگه {card} در تخته لغو کرده است",
"You have moved the card {card} from list {stackBefore} to {stack}" : "شما برگه {card} را از فهرست {stackBefore} به {stack} منتقل کرده اید",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} برگه {card} را از فهرست {stackBefore} به {stack} منتقل کرده است",
"You have added the attachment {attachment} to card {card}" : "شما پیوست {attachment} را به برگه {card} اضافه کرده‌اید.",
"{user} has added the attachment {attachment} to card {card}" : "{user} پیوست {attachment} را به برگه {card} اضافه کرده است",
"You have updated the attachment {attachment} on card {card}" : "شما پیوست {attachment} را در برگه {card} به روز کرده اید",
"{user} has updated the attachment {attachment} on card {card}" : "{user} پیوست {attachment} را در برگه {card} به روز کرده است",
"You have deleted the attachment {attachment} from card {card}" : "شما پیوست {attachment} را از برگه {card} حذف کرده اید",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} پیوست {attachment} را ازبرگه {card} حذف کرده است",
"You have restored the attachment {attachment} to card {card}" : "شما پیوست {attachment} را به برگه {card} بازیابی کرده اید",
"{user} has restored the attachment {attachment} to card {card}" : "{user} پیوست {attachment} را به برگه {card} بازیابی کرده است",
"You have commented on card {card}" : "شما در مورد برگه {card} نظر داده اید",
"{user} has commented on card {card}" : "{user} روی برگه {card} نظر داده است",
"A <strong>card description</strong> inside the Deck app has been changed" : "شرح برگه در برگه‌دان تغییر کرده است",
"Deck" : "برگه‌دان",
"Changes in the <strong>Deck app</strong>" : "تغییرات در برگه‌دان",
"A <strong>comment</strong> was created on a card" : "یک نظر روی یک برگه ایجاد شد",
"Upcoming cards" : "برگه‌های آینده",
"Personal" : "شخصی",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} برگه {deck-card} در {deck-board} را به شما اختصاص داده است.",
"The card {deck-card} on {deck-board} has reached its due date." : "برگه {deck-card} در {deck-board} به تاریخ سررسید خود رسیده است.",
"{user} has mentioned you in a comment on {deck-card}." : "{user} از شما در نظری در {deck-card} نام برده است.",
"{user} has shared {deck-board} with you." : "{user} {deck-board} را با شما به اشتراک گذاشته است.",
"Card comments" : "برگهٔ نظر",
"No data was provided to create an attachment." : "هیچ داده ای برای ایجاد پیوست ارائه نشد.",
"Finished" : "تمام شده",
"To review" : "برای بازبینی",
"Action needed" : "نیازمند اقدام",
@@ -38,16 +95,29 @@ OC.L10N.register(
"Could not write file to disk" : "عدم موفقیت در نوشتن پرونده روی حافظه",
"A PHP extension stopped the file upload" : "یک افزونه پی‌اچ‌پی مانع بارگذاری پرونده شد",
"No file uploaded or file size exceeds maximum of %s" : "پرونده‌ای بارگذاری نشد و یا حجم پرونده بیش از بیشینه مجاز %s بود",
"Card details" : "جزئیات کارت",
"Card not found" : "برگه یافت نشد",
"Path is already shared with this card" : "مسیر قبلاً با این برگه به اشتراک گذاشته شده است",
"Invalid date, date format must be YYYY-MM-DD" : "تاریخ نامعتبر است، قالب تاریخ باید YYYY-MM-DD باشد",
"Personal planning and team project organization" : "برنامه‌ریزی شخصی و سازمان‌دهی کار گروهی",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "برگه‌دان یک ابزار سازمان‌دهی سبک کانبان است که هدف آن برنامه‌ریزی شخصی و سازمان‌دهی پروژه برای گروه‌های مرتبط با Nextcloud است.\n\n\n- 📥 وظایف خود را به برگه‌ها اضافه کنید و آن‌ها را مرتب کنید\n- 📄 یادداشت‌های اضافی را در Markdown یادداشت کنید\n- 🔖 برچسب‌هایی را برای سازمان‌دهی بهتر اختصاص دهید\n- 👥 با گروه، دوستان یا خانوادهٔ خود به اشتراک بگذارید\n- 📎 فایل‌ها را ضمیمه کنید و آنها را در توضیحات Markdown خود قرار دهید\n- 💬 با استفاده از نظرات با تیم خود بحث کنید\n- ⚡ تغییرات در جریان فعالیت را پیگیری کنید\n- 🚀 پروژه خود را سازمان‌دهی کنید",
"Card details" : "جزئیات برگه",
"Add board" : "تخته را اضافه کنید",
"Select the board to link to a project" : "تخته‌ای را برای ایجاد پیوند با یک پروژه انتخاب کنید",
"Search by board title" : "جستجو بر اساس عنوان تخته",
"Select board" : "انتخاب تخته",
"Create a new card" : "برگهٔ جدید بسازید",
"Select a board" : "انتخاب یک تخته",
"Select a list" : "یک فهرست برگزینید",
"Card title" : "عنوان برگه",
"Cancel" : "لغو",
"Select a card" : "انتخاب یک کارت",
"Select the card to link to a project" : "کارتی را برای ایجاد پیوند با یک پروژه انتخاب کنید",
"Link to card" : "پیوند به کارت",
"Creating the new card" : "ساختن برگهٔ جدید",
"Card \"{card}\" was added to \"{board}\"" : "برگه \"{card}\" به \"{board}\" اضافه شد",
"Open card" : "برگهٔ گشوده",
"Close" : "بسته",
"Create card" : "برگه بسازید",
"Select a card" : "انتخاب یک برگه",
"Select the card to link to a project" : "برگه‌ای را برای ایجاد پیوند با یک پروژه انتخاب کنید",
"Link to card" : "پیوند به برگه",
"File already exists" : "پرونده از قبل موجود است",
"A file with the name {filename} already exists." : "پرونده‌ای با نام {filename} از قبل موجود است.",
"Do you want to overwrite it?" : "می‌خواهید روی آن بازنویسی شود؟",
@@ -55,21 +125,28 @@ OC.L10N.register(
"Keep existing file" : "پرونده موجود حفظ شود",
"This board is read only" : "تخته، فقط خواندنی است",
"Drop your files to upload" : "برای بارگذاری، پرونده‌ها را اینجا رها کنید",
"Add card" : "افزودن کارت",
"Add card" : "افزودن برگه",
"Archived cards" : "کارت‌های بایگانی‌شده",
"Add list" : "افزودن فهرست",
"List name" : "نام فهرست",
"Apply filter" : "اعمال پالایه",
"Filter by tag" : "پالایش برحسب برچسب",
"Filter by assigned user" : "فیلتر بر اساس کاربر اختصاص داده شده",
"Unassigned" : "اختصاص داده نشده است",
"Filter by due date" : "فیلتر بر اساس تاریخ مقرر",
"Overdue" : "تاریخ گذشته",
"Next 24 hours" : "۲۴ ساعت آینده",
"Next 7 days" : "۷ روز آینده",
"Next 30 days" : "۳۰ روز آینده",
"No due date" : "بدون تاریخ سررسید",
"Clear filter" : "پاک کردن پالایه",
"Hide archived cards" : "برگه‌های بایگانی شده را مخفی کنید",
"Show archived cards" : "نمایش کارت‌های بایگانی شده",
"Toggle compact mode" : "تغییر حالت فشرده",
"Details" : "جزئیات",
"Loading board" : "بارکردن تخته",
"No lists available" : "هیچ فهرستی در دسترس نیست",
"Create a new list to add cards to this board" : "یک فهرست جدید برای افزود برگه به این تابلو ایجاد کنید",
"Board not found" : "تخته یافت نشد",
"Sharing" : "هم‌رسانی",
"Tags" : "برچسب‌ها",
@@ -79,6 +156,8 @@ OC.L10N.register(
"Undo" : "برگرداندن",
"Deleted cards" : "کارت‌های پاک شده",
"Share board with a user, group or circle …" : "هم‌رسانی تخته با کاربر، گروه یا حلقه...",
"Searching for users, groups and circles …" : "جستجوی کاربران، گروه‌ها و حلقه‌ها…",
"No participants found" : "هیچ شرکتی پیدا نشد",
"Board owner" : "مالک تخته",
"(Group)" : "(گروه)",
"(Circle)" : "(حلقه)",
@@ -86,28 +165,56 @@ OC.L10N.register(
"Can share" : "می‌تواند هم‌رسانی کند",
"Can manage" : "می‌تواند مدیریت کند",
"Delete" : "حذف",
"Failed to create share with {displayName}" : "اشتراک‌گذاری با {displayName} ایجاد نشد",
"Add a new list" : "فهرست جدید بیفزایید!",
"Archive all cards" : "همهٔ برگه‌ها را بایگانی کنید!",
"Delete list" : "حذف فهرست",
"Archive all cards in this list" : "تمام برگه‌های موجود در این فهرست را بایگانی کنید",
"Add a new card" : "افزودن یک کارت جدید",
"Card name" : "نام برگه",
"List deleted" : "فهرست پاک شد",
"Edit" : "ویرایش",
"Add a new tag" : "افزودن یک برچسب جدید",
"title and color value must be provided" : "نام و رنگ باید مشخص شود",
"Board name" : "نامِ تخته",
"Members" : "اعضا",
"Upload new files" : "فایل‌های جدید را آپلود کنید",
"Share from Files" : "اشتراک‌گذاری از فایل‌ها",
"Pending share" : "سهم معلق",
"Add this attachment" : "افزودن این پیوست",
"Show in Files" : "نمایش در فایل‌ها",
"Download" : "بارگیری",
"Remove attachment" : "حذف پیوست",
"Delete Attachment" : "حذف پیوست",
"Restore Attachment" : "بازیابی پیوست",
"File to share" : "فایل برای اشتراک‌گذاری",
"Invalid path selected" : "مسیر نامعتبر انتخاب شده است",
"Open in sidebar view" : "در نمای نوار کناری باز کنید",
"Open in bigger view" : "در نمای بزرگتر باز کنید",
"Attachments" : "پیوست‌ها",
"Comments" : "نظرات",
"Modified" : "تغییر یافته",
"Created" : "ایجاد شده",
"The title cannot be empty." : "عنوان نمی‌تواند خالی باشد.",
"No comments yet. Begin the discussion!" : "هنوز نظری وجود ندارد. بحثی را آغاز کنید!",
"Failed to load comments" : "نظرات بارگیری نشد",
"Assign a tag to this card…" : "یک برچسب به این کارت اختصاص دهید…",
"Assign to users" : "به کاربران اختصاص دهید",
"Assign to users/groups/circles" : "به کاربران/ گروه‌ها/ حلقه‌ها اختصاص دهید",
"Assign a user to this card…" : "اختصاص یک کاربر به این کارت…",
"Due date" : "موعد مقرر",
"Set a due date" : "تاریخ سررسید را تعیین کنید",
"Remove due date" : "تاریخ سررسید را حذف کنید",
"Select Date" : "تاریخ را انتخاب کنید",
"Today" : "Today",
"Tomorrow" : "فردا",
"Next week" : "هفتهٔ بعد",
"Next month" : "ماه بعد",
"Save" : "ذخیره",
"The comment cannot be empty." : "نظر نمی‌تواند خالی باشد.",
"The comment cannot be longer than 1000 characters." : "نظر نمی‌تواند طولانی‌تر از ۱۰۰۰ حرف باشد.",
"In reply to" : "در پاسخ به",
"Cancel reply" : "لغو پاسخ",
"Reply" : "پاسخ",
"Update" : "به‌روزرسانی",
"Description" : "توضیحات",
@@ -117,16 +224,27 @@ OC.L10N.register(
"Edit description" : "ویرایش توضیحات",
"View description" : "نمایش توضیحات",
"Add Attachment" : "افزودن پیوست",
"Write a description …" : "توضیح بنویس…",
"Choose attachment" : "انتخاب پیوست",
"(group)" : "(گروه)",
"{count} comments, {unread} unread" : "{count} نظر، { خوانده نشده} خوانده نشده",
"Assign to me" : "به من اختصاص دهید",
"Unassign myself" : "واگذاری به خودم را لغو می‌کنم",
"Move card" : "انتقال کارت",
"Unarchive card" : "برگه را از بایگانی خارج کنید",
"Archive card" : "کارت بایگانی",
"Delete card" : "حذف کارت",
"Move card to another board" : "انتقال کارت به تخته‌ای دیگر",
"List is empty" : "فهرست خالی است",
"Card deleted" : "برگه پاک شد",
"seconds ago" : "ثانیه‌هایی پیش",
"All boards" : "همه تخته‌ها",
"Archived boards" : "تخته‌های بایگانی شده",
"Shared with you" : "با شما به اشتراک گذاشته شده است",
"Use bigger card view" : "از نمای برگهٔ بزرگتر استفاده کنید",
"Show boards in calendar/tasks" : "نمایش تابلوها در تقویم/ وظایف",
"Limit deck usage of groups" : "استفاده از برگه‌دان گروه‌ها را محدود کنید",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "محدودکردن برگه‌دان باعث می‌شود تا کاربرانی که جزو آن گروه‌ها نیستند، تابلوهای خود را ایجاد کنند. کاربران همچنان می‌توانند روی تابلوهایی کار کنند که با آنها به اشتراک گذاشته شده است.",
"Edit board" : "ویرایش تخته",
"An error occurred" : "خطایی روی داد",
"This week" : "این هفته"

View File

@@ -15,7 +15,64 @@
"{user} has archived the board {before}" : "{user} تختهٔ {board} را بایگانی کرد",
"You have unarchived the board {board}" : "تختهٔ {board} را از بایگانی خارج کردید",
"{user} has unarchived the board {before}" : "{user} تختهٔ {board} را از بایگانی خارج کرد",
"You have created a new list {stack} on board {board}" : "شما فهرست جدید {stack} را در تخته {board} ایجاد کرده‌اید",
"{user} has created a new list {stack} on board {board}" : "{user} فهرست جدید {stack} را در تخته {board} ایجاد کرده است",
"You have renamed list {before} to {stack} on board {board}" : "شما فهرست {before} را به {stack} در تخته {board} تغییر نام داده‌اید",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} فهرست {before} را به {stack} در تخته {board} تغییر نام داده است",
"You have deleted list {stack} on board {board}" : "شما فهرست {stack} را در تخته {board} حذف کرده اید",
"{user} has deleted list {stack} on board {board}" : "{user} فهرست {stack} را در تخته {board} حذف کرده است",
"You have created card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} ایجاد کرده اید",
"{user} has created card {card} in list {stack} on board {board}" : "ٰ{user} برگه {card} را در فهرست {stack} در تخته {board} ایجاد کرده است",
"You have deleted card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} حذف کرده اید",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} برگه {card} را در فهرست {stack} در تخته {board} حذف کرده است",
"You have renamed the card {before} to {card}" : "شما نام برگه را {پیش از} به {card} تغییر داده اید",
"{user} has renamed the card {before} to {card}" : "{user} نام برگه را {پیش از} به {card} تغییر داده است",
"You have added a description to card {card} in list {stack} on board {board}" : "شما یک توضیح به برگه {card} در فهرست {stack} در تخته {board} اضافه کرده اید",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} توضیحاتی را به برگه {card} در فهرست {stack} on board {board} اضافه کرده است.",
"You have updated the description of card {card} in list {stack} on board {board}" : "شما شرح برگه {card} را در فهرست {stack} در تخته {board} به روز کرده اید.",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} توضیحات برگه {card} را در فهرست {stack} on board {board} به روز کرده است.",
"You have archived card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} بایگانی کرده اید",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} برگه {card} را در فهرست {stack} در تخته {board} بایگانی کرده است",
"You have unarchived card {card} in list {stack} on board {board}" : "شما برگه {card} را در فهرست {stack} در تخته {board} از بایگانی خارج کرده‌اید.",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} برگه {card} را در فهرست {stack} در تخته {board} از بایگانی خارج کرده است",
"You have removed the due date of card {card}" : "شما تاریخ سررسید برگه {card} را حذف کرده اید",
"{user} has removed the due date of card {card}" : "{user} تاریخ سررسید برگه {card} را حذف کرده است",
"You have set the due date of card {card} to {after}" : "شما تاریخ سررسید برگه {card} را روی {after} تنظیم کرده اید",
"{user} has set the due date of card {card} to {after}" : "{user} تاریخ سررسید برگه {card} را روی {after} قرار داده است",
"You have updated the due date of card {card} to {after}" : "شما تاریخ سررسید برگه {card} را به {after} به روز کرده اید",
"{user} has updated the due date of card {card} to {after}" : "{user} تاریخ سررسید برگه {card} را به {after} به روز کرده است",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "شما برچسب {label} را به برگه {card} در فهرست {stack} در تخته {board} اضافه کرده‌اید.",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} برچسب {label} را بهبرگه {card} در فهرست {stack} در تخته {board} اضافه کرده است.",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "شما برچسب {label} را از برگه {card} در فهرست {stack} در تخته {board} حذف کردید.",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} برچسب {label} را از برگه {card} در فهرست {stack} در تخته {board} حذف کرده است.",
"You have assigned {assigneduser} to card {card} on board {board}" : "شما {کاربر اختصاص یافته} را به برگه {card} در تخته {board} اختصاص داده‌اید.",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} {assigneduser} را به برگه {card} در تخته {board} اختصاص داده است",
"You have unassigned {assigneduser} from card {card} on board {board}" : "شما {تخصیص کاربر} را از برگه {card} در تخته {board} لغو کرده‌اید.",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} تخصیص {assigneduser} را از برگه {card} در تخته لغو کرده است",
"You have moved the card {card} from list {stackBefore} to {stack}" : "شما برگه {card} را از فهرست {stackBefore} به {stack} منتقل کرده اید",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} برگه {card} را از فهرست {stackBefore} به {stack} منتقل کرده است",
"You have added the attachment {attachment} to card {card}" : "شما پیوست {attachment} را به برگه {card} اضافه کرده‌اید.",
"{user} has added the attachment {attachment} to card {card}" : "{user} پیوست {attachment} را به برگه {card} اضافه کرده است",
"You have updated the attachment {attachment} on card {card}" : "شما پیوست {attachment} را در برگه {card} به روز کرده اید",
"{user} has updated the attachment {attachment} on card {card}" : "{user} پیوست {attachment} را در برگه {card} به روز کرده است",
"You have deleted the attachment {attachment} from card {card}" : "شما پیوست {attachment} را از برگه {card} حذف کرده اید",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} پیوست {attachment} را ازبرگه {card} حذف کرده است",
"You have restored the attachment {attachment} to card {card}" : "شما پیوست {attachment} را به برگه {card} بازیابی کرده اید",
"{user} has restored the attachment {attachment} to card {card}" : "{user} پیوست {attachment} را به برگه {card} بازیابی کرده است",
"You have commented on card {card}" : "شما در مورد برگه {card} نظر داده اید",
"{user} has commented on card {card}" : "{user} روی برگه {card} نظر داده است",
"A <strong>card description</strong> inside the Deck app has been changed" : "شرح برگه در برگه‌دان تغییر کرده است",
"Deck" : "برگه‌دان",
"Changes in the <strong>Deck app</strong>" : "تغییرات در برگه‌دان",
"A <strong>comment</strong> was created on a card" : "یک نظر روی یک برگه ایجاد شد",
"Upcoming cards" : "برگه‌های آینده",
"Personal" : "شخصی",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} برگه {deck-card} در {deck-board} را به شما اختصاص داده است.",
"The card {deck-card} on {deck-board} has reached its due date." : "برگه {deck-card} در {deck-board} به تاریخ سررسید خود رسیده است.",
"{user} has mentioned you in a comment on {deck-card}." : "{user} از شما در نظری در {deck-card} نام برده است.",
"{user} has shared {deck-board} with you." : "{user} {deck-board} را با شما به اشتراک گذاشته است.",
"Card comments" : "برگهٔ نظر",
"No data was provided to create an attachment." : "هیچ داده ای برای ایجاد پیوست ارائه نشد.",
"Finished" : "تمام شده",
"To review" : "برای بازبینی",
"Action needed" : "نیازمند اقدام",
@@ -36,16 +93,29 @@
"Could not write file to disk" : "عدم موفقیت در نوشتن پرونده روی حافظه",
"A PHP extension stopped the file upload" : "یک افزونه پی‌اچ‌پی مانع بارگذاری پرونده شد",
"No file uploaded or file size exceeds maximum of %s" : "پرونده‌ای بارگذاری نشد و یا حجم پرونده بیش از بیشینه مجاز %s بود",
"Card details" : "جزئیات کارت",
"Card not found" : "برگه یافت نشد",
"Path is already shared with this card" : "مسیر قبلاً با این برگه به اشتراک گذاشته شده است",
"Invalid date, date format must be YYYY-MM-DD" : "تاریخ نامعتبر است، قالب تاریخ باید YYYY-MM-DD باشد",
"Personal planning and team project organization" : "برنامه‌ریزی شخصی و سازمان‌دهی کار گروهی",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "برگه‌دان یک ابزار سازمان‌دهی سبک کانبان است که هدف آن برنامه‌ریزی شخصی و سازمان‌دهی پروژه برای گروه‌های مرتبط با Nextcloud است.\n\n\n- 📥 وظایف خود را به برگه‌ها اضافه کنید و آن‌ها را مرتب کنید\n- 📄 یادداشت‌های اضافی را در Markdown یادداشت کنید\n- 🔖 برچسب‌هایی را برای سازمان‌دهی بهتر اختصاص دهید\n- 👥 با گروه، دوستان یا خانوادهٔ خود به اشتراک بگذارید\n- 📎 فایل‌ها را ضمیمه کنید و آنها را در توضیحات Markdown خود قرار دهید\n- 💬 با استفاده از نظرات با تیم خود بحث کنید\n- ⚡ تغییرات در جریان فعالیت را پیگیری کنید\n- 🚀 پروژه خود را سازمان‌دهی کنید",
"Card details" : "جزئیات برگه",
"Add board" : "تخته را اضافه کنید",
"Select the board to link to a project" : "تخته‌ای را برای ایجاد پیوند با یک پروژه انتخاب کنید",
"Search by board title" : "جستجو بر اساس عنوان تخته",
"Select board" : "انتخاب تخته",
"Create a new card" : "برگهٔ جدید بسازید",
"Select a board" : "انتخاب یک تخته",
"Select a list" : "یک فهرست برگزینید",
"Card title" : "عنوان برگه",
"Cancel" : "لغو",
"Select a card" : "انتخاب یک کارت",
"Select the card to link to a project" : "کارتی را برای ایجاد پیوند با یک پروژه انتخاب کنید",
"Link to card" : "پیوند به کارت",
"Creating the new card" : "ساختن برگهٔ جدید",
"Card \"{card}\" was added to \"{board}\"" : "برگه \"{card}\" به \"{board}\" اضافه شد",
"Open card" : "برگهٔ گشوده",
"Close" : "بسته",
"Create card" : "برگه بسازید",
"Select a card" : "انتخاب یک برگه",
"Select the card to link to a project" : "برگه‌ای را برای ایجاد پیوند با یک پروژه انتخاب کنید",
"Link to card" : "پیوند به برگه",
"File already exists" : "پرونده از قبل موجود است",
"A file with the name {filename} already exists." : "پرونده‌ای با نام {filename} از قبل موجود است.",
"Do you want to overwrite it?" : "می‌خواهید روی آن بازنویسی شود؟",
@@ -53,21 +123,28 @@
"Keep existing file" : "پرونده موجود حفظ شود",
"This board is read only" : "تخته، فقط خواندنی است",
"Drop your files to upload" : "برای بارگذاری، پرونده‌ها را اینجا رها کنید",
"Add card" : "افزودن کارت",
"Add card" : "افزودن برگه",
"Archived cards" : "کارت‌های بایگانی‌شده",
"Add list" : "افزودن فهرست",
"List name" : "نام فهرست",
"Apply filter" : "اعمال پالایه",
"Filter by tag" : "پالایش برحسب برچسب",
"Filter by assigned user" : "فیلتر بر اساس کاربر اختصاص داده شده",
"Unassigned" : "اختصاص داده نشده است",
"Filter by due date" : "فیلتر بر اساس تاریخ مقرر",
"Overdue" : "تاریخ گذشته",
"Next 24 hours" : "۲۴ ساعت آینده",
"Next 7 days" : "۷ روز آینده",
"Next 30 days" : "۳۰ روز آینده",
"No due date" : "بدون تاریخ سررسید",
"Clear filter" : "پاک کردن پالایه",
"Hide archived cards" : "برگه‌های بایگانی شده را مخفی کنید",
"Show archived cards" : "نمایش کارت‌های بایگانی شده",
"Toggle compact mode" : "تغییر حالت فشرده",
"Details" : "جزئیات",
"Loading board" : "بارکردن تخته",
"No lists available" : "هیچ فهرستی در دسترس نیست",
"Create a new list to add cards to this board" : "یک فهرست جدید برای افزود برگه به این تابلو ایجاد کنید",
"Board not found" : "تخته یافت نشد",
"Sharing" : "هم‌رسانی",
"Tags" : "برچسب‌ها",
@@ -77,6 +154,8 @@
"Undo" : "برگرداندن",
"Deleted cards" : "کارت‌های پاک شده",
"Share board with a user, group or circle …" : "هم‌رسانی تخته با کاربر، گروه یا حلقه...",
"Searching for users, groups and circles …" : "جستجوی کاربران، گروه‌ها و حلقه‌ها…",
"No participants found" : "هیچ شرکتی پیدا نشد",
"Board owner" : "مالک تخته",
"(Group)" : "(گروه)",
"(Circle)" : "(حلقه)",
@@ -84,28 +163,56 @@
"Can share" : "می‌تواند هم‌رسانی کند",
"Can manage" : "می‌تواند مدیریت کند",
"Delete" : "حذف",
"Failed to create share with {displayName}" : "اشتراک‌گذاری با {displayName} ایجاد نشد",
"Add a new list" : "فهرست جدید بیفزایید!",
"Archive all cards" : "همهٔ برگه‌ها را بایگانی کنید!",
"Delete list" : "حذف فهرست",
"Archive all cards in this list" : "تمام برگه‌های موجود در این فهرست را بایگانی کنید",
"Add a new card" : "افزودن یک کارت جدید",
"Card name" : "نام برگه",
"List deleted" : "فهرست پاک شد",
"Edit" : "ویرایش",
"Add a new tag" : "افزودن یک برچسب جدید",
"title and color value must be provided" : "نام و رنگ باید مشخص شود",
"Board name" : "نامِ تخته",
"Members" : "اعضا",
"Upload new files" : "فایل‌های جدید را آپلود کنید",
"Share from Files" : "اشتراک‌گذاری از فایل‌ها",
"Pending share" : "سهم معلق",
"Add this attachment" : "افزودن این پیوست",
"Show in Files" : "نمایش در فایل‌ها",
"Download" : "بارگیری",
"Remove attachment" : "حذف پیوست",
"Delete Attachment" : "حذف پیوست",
"Restore Attachment" : "بازیابی پیوست",
"File to share" : "فایل برای اشتراک‌گذاری",
"Invalid path selected" : "مسیر نامعتبر انتخاب شده است",
"Open in sidebar view" : "در نمای نوار کناری باز کنید",
"Open in bigger view" : "در نمای بزرگتر باز کنید",
"Attachments" : "پیوست‌ها",
"Comments" : "نظرات",
"Modified" : "تغییر یافته",
"Created" : "ایجاد شده",
"The title cannot be empty." : "عنوان نمی‌تواند خالی باشد.",
"No comments yet. Begin the discussion!" : "هنوز نظری وجود ندارد. بحثی را آغاز کنید!",
"Failed to load comments" : "نظرات بارگیری نشد",
"Assign a tag to this card…" : "یک برچسب به این کارت اختصاص دهید…",
"Assign to users" : "به کاربران اختصاص دهید",
"Assign to users/groups/circles" : "به کاربران/ گروه‌ها/ حلقه‌ها اختصاص دهید",
"Assign a user to this card…" : "اختصاص یک کاربر به این کارت…",
"Due date" : "موعد مقرر",
"Set a due date" : "تاریخ سررسید را تعیین کنید",
"Remove due date" : "تاریخ سررسید را حذف کنید",
"Select Date" : "تاریخ را انتخاب کنید",
"Today" : "Today",
"Tomorrow" : "فردا",
"Next week" : "هفتهٔ بعد",
"Next month" : "ماه بعد",
"Save" : "ذخیره",
"The comment cannot be empty." : "نظر نمی‌تواند خالی باشد.",
"The comment cannot be longer than 1000 characters." : "نظر نمی‌تواند طولانی‌تر از ۱۰۰۰ حرف باشد.",
"In reply to" : "در پاسخ به",
"Cancel reply" : "لغو پاسخ",
"Reply" : "پاسخ",
"Update" : "به‌روزرسانی",
"Description" : "توضیحات",
@@ -115,16 +222,27 @@
"Edit description" : "ویرایش توضیحات",
"View description" : "نمایش توضیحات",
"Add Attachment" : "افزودن پیوست",
"Write a description …" : "توضیح بنویس…",
"Choose attachment" : "انتخاب پیوست",
"(group)" : "(گروه)",
"{count} comments, {unread} unread" : "{count} نظر، { خوانده نشده} خوانده نشده",
"Assign to me" : "به من اختصاص دهید",
"Unassign myself" : "واگذاری به خودم را لغو می‌کنم",
"Move card" : "انتقال کارت",
"Unarchive card" : "برگه را از بایگانی خارج کنید",
"Archive card" : "کارت بایگانی",
"Delete card" : "حذف کارت",
"Move card to another board" : "انتقال کارت به تخته‌ای دیگر",
"List is empty" : "فهرست خالی است",
"Card deleted" : "برگه پاک شد",
"seconds ago" : "ثانیه‌هایی پیش",
"All boards" : "همه تخته‌ها",
"Archived boards" : "تخته‌های بایگانی شده",
"Shared with you" : "با شما به اشتراک گذاشته شده است",
"Use bigger card view" : "از نمای برگهٔ بزرگتر استفاده کنید",
"Show boards in calendar/tasks" : "نمایش تابلوها در تقویم/ وظایف",
"Limit deck usage of groups" : "استفاده از برگه‌دان گروه‌ها را محدود کنید",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "محدودکردن برگه‌دان باعث می‌شود تا کاربرانی که جزو آن گروه‌ها نیستند، تابلوهای خود را ایجاد کنند. کاربران همچنان می‌توانند روی تابلوهایی کار کنند که با آنها به اشتراک گذاشته شده است.",
"Edit board" : "ویرایش تخته",
"An error occurred" : "خطایی روی داد",
"This week" : "این هفته"

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Impossible d'écrire le fichier sur le disque",
"A PHP extension stopped the file upload" : "Une extension PHP a arrêté l'envoi du fichier",
"No file uploaded or file size exceeds maximum of %s" : "Aucun fichier envoyé ou la taille du fichier dépasse le maximum de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ce commentaire comporte plus de %s caractères.\nAjouté en pièce jointe à la carte intitulée %s.\nAccessible depuis l'URL: %s.",
"Card not found" : "Carte introuvable",
"Path is already shared with this card" : "Le chemin est déjà partagé avec cette carte",
"Invalid date, date format must be YYYY-MM-DD" : "Date non valable, le format de la date doit être AAAA-MM-JJ",
"Personal planning and team project organization" : "Agenda personnel et organisation projet",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 📎 Attachez des fichiers et utilisez les dans vos descriptions en Markdown\n- 💬 Échangez avec votre équipe grâce aux commentaires\n- ⚡ Gardez un œil sur les modifications dans le flux d'activité\n- 🚀 Organisez vos projets",
"Card details" : "Détails de la carte",
"Add board" : "Ajouter un tableau",
"Select the board to link to a project" : "Sélection le tableau pour faire le lien avec un projet.",
@@ -183,7 +185,7 @@ OC.L10N.register(
"Board name" : "Nom du tableau",
"Members" : "Membres",
"Upload new files" : "Téléverser de nouveaux fichiers",
"Share from Files" : "Partager vos fichiers déjà stockés",
"Share from Files" : "Choisir depuis Fichiers",
"Pending share" : "Partage en attente",
"Add this attachment" : "Ajouter cette pièce jointe",
"Show in Files" : "Afficher dans Fichiers",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Archiver la carte",
"Delete card" : "Supprimer la carte",
"Move card to another board" : "Déplacer la carte vers un autre tableau ",
"List is empty" : "La liste est vide",
"Card deleted" : "Carte supprimée",
"seconds ago" : "à l'instant",
"All boards" : "Tous les tableaux",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Partager avec Deck en tant que carte",
"Share {file} with a Deck card" : "Partager {file} avec Deck en tant que carte",
"Share" : "Partager",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 📎 Attachez des fichiers et utilisez les dans vos descriptions en Markdown\n- 💬 Échangez avec votre équipe grâce aux commentaires\n- ⚡ Gardez un œil sur les modifications dans le flux d'activité\n- 🚀 Organisez vos projets"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 📎 Attachez des fichiers et utilisez les dans vos descriptions en Markdown\n- 💬 Échangez avec votre équipe grâce aux commentaires\n- ⚡ Gardez un œil sur les modifications dans le flux d'activité\n- 🚀 Organisez vos projets",
"Creating the new card…" : "Création de la nouvelle carte…",
"\"{card}\" was added to \"{board}\"" : "La carte \"{card}\" a été ajoutée au tableau \"{board}\"",
"(circle)" : "(cercle)"
},
"nplurals=2; plural=(n > 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Impossible d'écrire le fichier sur le disque",
"A PHP extension stopped the file upload" : "Une extension PHP a arrêté l'envoi du fichier",
"No file uploaded or file size exceeds maximum of %s" : "Aucun fichier envoyé ou la taille du fichier dépasse le maximum de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ce commentaire comporte plus de %s caractères.\nAjouté en pièce jointe à la carte intitulée %s.\nAccessible depuis l'URL: %s.",
"Card not found" : "Carte introuvable",
"Path is already shared with this card" : "Le chemin est déjà partagé avec cette carte",
"Invalid date, date format must be YYYY-MM-DD" : "Date non valable, le format de la date doit être AAAA-MM-JJ",
"Personal planning and team project organization" : "Agenda personnel et organisation projet",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 📎 Attachez des fichiers et utilisez les dans vos descriptions en Markdown\n- 💬 Échangez avec votre équipe grâce aux commentaires\n- ⚡ Gardez un œil sur les modifications dans le flux d'activité\n- 🚀 Organisez vos projets",
"Card details" : "Détails de la carte",
"Add board" : "Ajouter un tableau",
"Select the board to link to a project" : "Sélection le tableau pour faire le lien avec un projet.",
@@ -181,7 +183,7 @@
"Board name" : "Nom du tableau",
"Members" : "Membres",
"Upload new files" : "Téléverser de nouveaux fichiers",
"Share from Files" : "Partager vos fichiers déjà stockés",
"Share from Files" : "Choisir depuis Fichiers",
"Pending share" : "Partage en attente",
"Add this attachment" : "Ajouter cette pièce jointe",
"Show in Files" : "Afficher dans Fichiers",
@@ -237,6 +239,7 @@
"Archive card" : "Archiver la carte",
"Delete card" : "Supprimer la carte",
"Move card to another board" : "Déplacer la carte vers un autre tableau ",
"List is empty" : "La liste est vide",
"Card deleted" : "Carte supprimée",
"seconds ago" : "à l'instant",
"All boards" : "Tous les tableaux",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Partager avec Deck en tant que carte",
"Share {file} with a Deck card" : "Partager {file} avec Deck en tant que carte",
"Share" : "Partager",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 📎 Attachez des fichiers et utilisez les dans vos descriptions en Markdown\n- 💬 Échangez avec votre équipe grâce aux commentaires\n- ⚡ Gardez un œil sur les modifications dans le flux d'activité\n- 🚀 Organisez vos projets"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 📎 Attachez des fichiers et utilisez les dans vos descriptions en Markdown\n- 💬 Échangez avec votre équipe grâce aux commentaires\n- ⚡ Gardez un œil sur les modifications dans le flux d'activité\n- 🚀 Organisez vos projets",
"Creating the new card…" : "Création de la nouvelle carte…",
"\"{card}\" was added to \"{board}\"" : "La carte \"{card}\" a été ajoutée au tableau \"{board}\"",
"(circle)" : "(cercle)"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Nem lehet a fájlt lemezre írni",
"A PHP extension stopped the file upload" : "A PHP kiterjesztés megállította a fájl feltöltését",
"No file uploaded or file size exceeds maximum of %s" : "Nincs fájl feltöltve, vagy a fájl meghaladja a maximumot: %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ez a megjegyzés több mint %s karakter hosszú.\nMellékletként lett hozzáadva a(z) %s nevű kártyához.\nEzen az URL-en érhető el: %s.",
"Card not found" : "A kártya nem található",
"Path is already shared with this card" : "Az útvonal már meg van osztva ezzel a kártyával",
"Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátumnak YYYY-MM-DD formátumúnak kell lennie",
"Personal planning and team project organization" : "Személyes tervezés és csapatos projektszervezés",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "A Kártyák egy kanban-stílusú szervezőeszköz, amely a személyes tervezést és a csapatok projektszervezését célozza, a Nextcloudba integrálva.\n\n\n- 📥 Saját feladatok kártyákhoz adása, és azok sorrendezése\n- 📄 További jegyzetek leírása Markdownban\n- 🔖 Címkék hozzárendelése a még jobb rendszerezés miatt\n- 👥 Megosztás a csapattal, barátokkal vagy családdal\n- 📎 Fájlok hozzáadása mellékletként, vagy beágyazás a Markdown leírásba\n- 💬 Megbeszélés a csapattal hozzászólások használatával\n- ⚡ A változások követése a tevékenységnaplóban\n- 🚀 Rendszerezze a projektjét",
"Card details" : "Kártya részletei",
"Add board" : "Tábla hozzáadása",
"Select the board to link to a project" : "Válasszon ki egy táblát, amely egy projektre fog hivatkozni",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Kártya archiválása",
"Delete card" : "Kártya törlése",
"Move card to another board" : "Kártya áthelyezése egy másik táblára",
"List is empty" : "A lista üres",
"Card deleted" : "Kártya törölve",
"seconds ago" : "másodperce",
"All boards" : "Az összes tábla",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Megosztás kártyával",
"Share {file} with a Deck card" : "A(z) {file} megosztása egy kártyával",
"Share" : "Megosztás",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "A Kártyák egy kanban-stílusú szervezőeszköz, amely a személyes tervezést és a csapatok projektszervezését célozza, a Nextcloudba integrálva.\n\n\n- 📥 Saját feladatok kártyákhoz adása, és azok sorrendezése\n- 📄 További jegyzetek leírása markdownban\n- 🔖 Címkék hozzárendelése a még jobb rendszerezés miatt\n- 👥 Megosztás a csapattal, barátokkal vagy családdal\n- 📎 Fájlok hozzáadása mellékletként, vagy beágyazás a markdown leírásba\n- 💬 Megbeszélés a csapattal hozzászólások használatával\n- ⚡ A változások követése a tevékenységnaplóban\n- 🚀 Rendszerezze a projektjét"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "A Kártyák egy kanban-stílusú szervezőeszköz, amely a személyes tervezést és a csapatok projektszervezését célozza, a Nextcloudba integrálva.\n\n\n- 📥 Saját feladatok kártyákhoz adása, és azok sorrendezése\n- 📄 További jegyzetek leírása markdownban\n- 🔖 Címkék hozzárendelése a még jobb rendszerezés miatt\n- 👥 Megosztás a csapattal, barátokkal vagy családdal\n- 📎 Fájlok hozzáadása mellékletként, vagy beágyazás a markdown leírásba\n- 💬 Megbeszélés a csapattal hozzászólások használatával\n- ⚡ A változások követése a tevékenységnaplóban\n- 🚀 Rendszerezze a projektjét",
"Creating the new card…" : "Új kártya létrehozása…",
"\"{card}\" was added to \"{board}\"" : "A(z) „{card}” hozzáadva a(z) „{board}” táblához",
"(circle)" : "(kör)"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Nem lehet a fájlt lemezre írni",
"A PHP extension stopped the file upload" : "A PHP kiterjesztés megállította a fájl feltöltését",
"No file uploaded or file size exceeds maximum of %s" : "Nincs fájl feltöltve, vagy a fájl meghaladja a maximumot: %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ez a megjegyzés több mint %s karakter hosszú.\nMellékletként lett hozzáadva a(z) %s nevű kártyához.\nEzen az URL-en érhető el: %s.",
"Card not found" : "A kártya nem található",
"Path is already shared with this card" : "Az útvonal már meg van osztva ezzel a kártyával",
"Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátumnak YYYY-MM-DD formátumúnak kell lennie",
"Personal planning and team project organization" : "Személyes tervezés és csapatos projektszervezés",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "A Kártyák egy kanban-stílusú szervezőeszköz, amely a személyes tervezést és a csapatok projektszervezését célozza, a Nextcloudba integrálva.\n\n\n- 📥 Saját feladatok kártyákhoz adása, és azok sorrendezése\n- 📄 További jegyzetek leírása Markdownban\n- 🔖 Címkék hozzárendelése a még jobb rendszerezés miatt\n- 👥 Megosztás a csapattal, barátokkal vagy családdal\n- 📎 Fájlok hozzáadása mellékletként, vagy beágyazás a Markdown leírásba\n- 💬 Megbeszélés a csapattal hozzászólások használatával\n- ⚡ A változások követése a tevékenységnaplóban\n- 🚀 Rendszerezze a projektjét",
"Card details" : "Kártya részletei",
"Add board" : "Tábla hozzáadása",
"Select the board to link to a project" : "Válasszon ki egy táblát, amely egy projektre fog hivatkozni",
@@ -237,6 +239,7 @@
"Archive card" : "Kártya archiválása",
"Delete card" : "Kártya törlése",
"Move card to another board" : "Kártya áthelyezése egy másik táblára",
"List is empty" : "A lista üres",
"Card deleted" : "Kártya törölve",
"seconds ago" : "másodperce",
"All boards" : "Az összes tábla",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Megosztás kártyával",
"Share {file} with a Deck card" : "A(z) {file} megosztása egy kártyával",
"Share" : "Megosztás",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "A Kártyák egy kanban-stílusú szervezőeszköz, amely a személyes tervezést és a csapatok projektszervezését célozza, a Nextcloudba integrálva.\n\n\n- 📥 Saját feladatok kártyákhoz adása, és azok sorrendezése\n- 📄 További jegyzetek leírása markdownban\n- 🔖 Címkék hozzárendelése a még jobb rendszerezés miatt\n- 👥 Megosztás a csapattal, barátokkal vagy családdal\n- 📎 Fájlok hozzáadása mellékletként, vagy beágyazás a markdown leírásba\n- 💬 Megbeszélés a csapattal hozzászólások használatával\n- ⚡ A változások követése a tevékenységnaplóban\n- 🚀 Rendszerezze a projektjét"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "A Kártyák egy kanban-stílusú szervezőeszköz, amely a személyes tervezést és a csapatok projektszervezését célozza, a Nextcloudba integrálva.\n\n\n- 📥 Saját feladatok kártyákhoz adása, és azok sorrendezése\n- 📄 További jegyzetek leírása markdownban\n- 🔖 Címkék hozzárendelése a még jobb rendszerezés miatt\n- 👥 Megosztás a csapattal, barátokkal vagy családdal\n- 📎 Fájlok hozzáadása mellékletként, vagy beágyazás a markdown leírásba\n- 💬 Megbeszélés a csapattal hozzászólások használatával\n- ⚡ A változások követése a tevékenységnaplóban\n- 🚀 Rendszerezze a projektjét",
"Creating the new card…" : "Új kártya létrehozása…",
"\"{card}\" was added to \"{board}\"" : "A(z) „{card}” hozzáadva a(z) „{board}” táblához",
"(circle)" : "(kör)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Impossibile scrivere il file su disco",
"A PHP extension stopped the file upload" : "Un'estensione PHP ha fermato il caricamento del file",
"No file uploaded or file size exceeds maximum of %s" : "Nessun file caricato o la dimensione del file supera il massimo di %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Questo commento contiene più di %s caratteri.\nAggiunto come allegato alla scheda con nome %s.\nAccessibile su URL: %s.",
"Card not found" : "Scheda non trovata",
"Path is already shared with this card" : "Il percorso è già condiviso con questa scheda",
"Invalid date, date format must be YYYY-MM-DD" : "Data non valida, il formato della data deve essere AAAA-MM-GG",
"Personal planning and team project organization" : "Pianificazione personale e organizzazione dei progetti di squadra",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck è uno strumento di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrato con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e tienile in ordine\n- 📄 Scrivi note aggiuntive in Markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Condividi con la tua squadra, amici o famiglia\n- 📎 Allega file e integrali nella tua descrizione Markdown\n- 💬 Discuti con la tua squadra utilizzando i commenti\n- ⚡ Tieni traccia dei cambiamenti nel flusso delle attività\n- 🚀 Organizza il tuo progetto",
"Card details" : "Dettagli scheda",
"Add board" : "Aggiungi lavagna",
"Select the board to link to a project" : "Seleziona la lavagna da collegare a un progetto",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Archivia scheda",
"Delete card" : "Elimina scheda",
"Move card to another board" : "Sposta scheda in un'altra lavagna",
"List is empty" : "L'elenco è vuoto",
"Card deleted" : "Scheda eliminata",
"seconds ago" : "secondi fa",
"All boards" : "Tutte le lavagne",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Condividi con una scheda di Deck",
"Share {file} with a Deck card" : "Condividi {file} con una scheda di Deck",
"Share" : "Condividi",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck è uno strumento di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrato con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e tienile in ordine\n- 📄 Scrivi note aggiuntive in markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Condividi con la tua squadra, amici o famiglia\n- 📎 Allega file e integrali nella tua descrizione markdown\n- 💬 Discuti con la tua squadra utilizzando i commenti\n- ⚡ Tieni traccia dei cambiamenti nel flusso delle attività\n- 🚀 Organizza il tuo progetto"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck è uno strumento di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrato con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e tienile in ordine\n- 📄 Scrivi note aggiuntive in markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Condividi con la tua squadra, amici o famiglia\n- 📎 Allega file e integrali nella tua descrizione markdown\n- 💬 Discuti con la tua squadra utilizzando i commenti\n- ⚡ Tieni traccia dei cambiamenti nel flusso delle attività\n- 🚀 Organizza il tuo progetto",
"Creating the new card…" : "Creazione della nuova scheda...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" è stata aggiunta a \"{board}\"",
"(circle)" : "(cerchia)"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Impossibile scrivere il file su disco",
"A PHP extension stopped the file upload" : "Un'estensione PHP ha fermato il caricamento del file",
"No file uploaded or file size exceeds maximum of %s" : "Nessun file caricato o la dimensione del file supera il massimo di %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Questo commento contiene più di %s caratteri.\nAggiunto come allegato alla scheda con nome %s.\nAccessibile su URL: %s.",
"Card not found" : "Scheda non trovata",
"Path is already shared with this card" : "Il percorso è già condiviso con questa scheda",
"Invalid date, date format must be YYYY-MM-DD" : "Data non valida, il formato della data deve essere AAAA-MM-GG",
"Personal planning and team project organization" : "Pianificazione personale e organizzazione dei progetti di squadra",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck è uno strumento di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrato con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e tienile in ordine\n- 📄 Scrivi note aggiuntive in Markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Condividi con la tua squadra, amici o famiglia\n- 📎 Allega file e integrali nella tua descrizione Markdown\n- 💬 Discuti con la tua squadra utilizzando i commenti\n- ⚡ Tieni traccia dei cambiamenti nel flusso delle attività\n- 🚀 Organizza il tuo progetto",
"Card details" : "Dettagli scheda",
"Add board" : "Aggiungi lavagna",
"Select the board to link to a project" : "Seleziona la lavagna da collegare a un progetto",
@@ -237,6 +239,7 @@
"Archive card" : "Archivia scheda",
"Delete card" : "Elimina scheda",
"Move card to another board" : "Sposta scheda in un'altra lavagna",
"List is empty" : "L'elenco è vuoto",
"Card deleted" : "Scheda eliminata",
"seconds ago" : "secondi fa",
"All boards" : "Tutte le lavagne",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Condividi con una scheda di Deck",
"Share {file} with a Deck card" : "Condividi {file} con una scheda di Deck",
"Share" : "Condividi",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck è uno strumento di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrato con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e tienile in ordine\n- 📄 Scrivi note aggiuntive in markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Condividi con la tua squadra, amici o famiglia\n- 📎 Allega file e integrali nella tua descrizione markdown\n- 💬 Discuti con la tua squadra utilizzando i commenti\n- ⚡ Tieni traccia dei cambiamenti nel flusso delle attività\n- 🚀 Organizza il tuo progetto"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck è uno strumento di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrato con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e tienile in ordine\n- 📄 Scrivi note aggiuntive in markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Condividi con la tua squadra, amici o famiglia\n- 📎 Allega file e integrali nella tua descrizione markdown\n- 💬 Discuti con la tua squadra utilizzando i commenti\n- ⚡ Tieni traccia dei cambiamenti nel flusso delle attività\n- 🚀 Organizza il tuo progetto",
"Creating the new card…" : "Creazione della nuova scheda...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" è stata aggiunta a \"{board}\"",
"(circle)" : "(cerchia)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -180,6 +180,7 @@ OC.L10N.register(
"Share from Files" : "ファイルから共有",
"Add this attachment" : "この添付ファイルを追加",
"Show in Files" : "ファイルに表示",
"Download" : "ダウンロード",
"Delete Attachment" : "添付ファイルを削除",
"Restore Attachment" : "添付ファイルを復元",
"File to share" : "共有するファイル",
@@ -202,10 +203,13 @@ OC.L10N.register(
"Select Date" : "日付を選択",
"Today" : "今日",
"Tomorrow" : "明日",
"Next week" : "来週",
"Next month" : "来月",
"Save" : "保存",
"The comment cannot be empty." : "コメントを空にすることはできません。",
"The comment cannot be longer than 1000 characters." : "コメントは1000文字を超えることはできません。",
"In reply to" : "返信",
"Cancel reply" : "返信をキャンセル",
"Reply" : "返信",
"Update" : "更新",
"Description" : "説明",

View File

@@ -178,6 +178,7 @@
"Share from Files" : "ファイルから共有",
"Add this attachment" : "この添付ファイルを追加",
"Show in Files" : "ファイルに表示",
"Download" : "ダウンロード",
"Delete Attachment" : "添付ファイルを削除",
"Restore Attachment" : "添付ファイルを復元",
"File to share" : "共有するファイル",
@@ -200,10 +201,13 @@
"Select Date" : "日付を選択",
"Today" : "今日",
"Tomorrow" : "明日",
"Next week" : "来週",
"Next month" : "来月",
"Save" : "保存",
"The comment cannot be empty." : "コメントを空にすることはできません。",
"The comment cannot be longer than 1000 characters." : "コメントは1000文字を超えることはできません。",
"In reply to" : "返信",
"Cancel reply" : "返信をキャンセル",
"Reply" : "返信",
"Update" : "更新",
"Description" : "説明",

View File

@@ -151,6 +151,7 @@ OC.L10N.register(
"Undo" : "Atšaukti",
"Deleted cards" : "Ištrintos kortelės",
"Share board with a user, group or circle …" : "Bendrinti lentą su naudotoju, grupe ar ratu…",
"Searching for users, groups and circles …" : "Ieškoma naudotojų, grupių ir ratų…",
"No participants found" : "Nerasta jokių dalyvių",
"Board owner" : "Lentos savininkas",
"(Group)" : "(Grupė)",
@@ -223,6 +224,7 @@ OC.L10N.register(
"Archive card" : "Archyvuoti kortelę",
"Delete card" : "Ištrinti kortelę",
"Move card to another board" : "Perkelti kortelę į kitą lentą",
"List is empty" : "Sąrašas tuščias",
"Card deleted" : "Kortelė ištrinta",
"seconds ago" : "prieš keletą sekundžių",
"All boards" : "Visos lentos",
@@ -256,6 +258,8 @@ OC.L10N.register(
"Something went wrong" : "Kažkas nutiko",
"Maximum file size of {size} exceeded" : "Viršytas maksimalus {size} failo dydis",
"Error creating the share" : "Klaida kuriant viešinį",
"Share" : "Bendrinti"
"Share" : "Bendrinti",
"Creating the new card…" : "Kuriama nauja kortelė…",
"(circle)" : "(ratas)"
},
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");

View File

@@ -149,6 +149,7 @@
"Undo" : "Atšaukti",
"Deleted cards" : "Ištrintos kortelės",
"Share board with a user, group or circle …" : "Bendrinti lentą su naudotoju, grupe ar ratu…",
"Searching for users, groups and circles …" : "Ieškoma naudotojų, grupių ir ratų…",
"No participants found" : "Nerasta jokių dalyvių",
"Board owner" : "Lentos savininkas",
"(Group)" : "(Grupė)",
@@ -221,6 +222,7 @@
"Archive card" : "Archyvuoti kortelę",
"Delete card" : "Ištrinti kortelę",
"Move card to another board" : "Perkelti kortelę į kitą lentą",
"List is empty" : "Sąrašas tuščias",
"Card deleted" : "Kortelė ištrinta",
"seconds ago" : "prieš keletą sekundžių",
"All boards" : "Visos lentos",
@@ -254,6 +256,8 @@
"Something went wrong" : "Kažkas nutiko",
"Maximum file size of {size} exceeded" : "Viršytas maksimalus {size} failo dydis",
"Error creating the share" : "Klaida kuriant viešinį",
"Share" : "Bendrinti"
"Share" : "Bendrinti",
"Creating the new card…" : "Kuriama nauja kortelė…",
"(circle)" : "(ratas)"
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
}

View File

@@ -99,11 +99,13 @@ OC.L10N.register(
"Missing a temporary folder" : "Mist een tijdelijke map",
"Could not write file to disk" : "Kon bestand niet naar schijf schrijven",
"A PHP extension stopped the file upload" : "Een PHP-extensie blokkeerde de upload.",
"No file uploaded or file size exceeds maximum of %s" : "Geen bestand ge-upload of de grootte is meer dan het maximum van %s",
"No file uploaded or file size exceeds maximum of %s" : "Geen bestand geüpload of de grootte is meer dan het maximum van %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Deze opmerking heeft meer dan %s tekens.\nAls bijlage toegevoegd aan de kaart met naam %s.\nToegankelijk op URL: %s.",
"Card not found" : "Kaart niet gevonden",
"Path is already shared with this card" : "Pad is al gedeeld met deze kaart",
"Invalid date, date format must be YYYY-MM-DD" : "Ongeldige datum, formaat is YYYY-MM-DD",
"Personal planning and team project organization" : "Persoonlijke planning en inrichting voor teamproject",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is een soort kanban organisatietool gericht op persoonlijke planning en projectorganisatie voor teams geïntegreerd in Nextcloud.\n\n\n- 📥 Voeg taken toe aan kaarten en sorteer ze\n- 📄 Schrijf extra notities in Markdown\n- 🔖 Ken labels toe voor betere organisatie\n- 👥 Deel met je team, vrienden of familie\n- 📎 Voeg bestanden toe en plaats ze in je Markdown beschrijving\n- 💬 Discussieer binnen je team met reacties\n- ⚡ Volg de wijzigingen in het activiteiten kanaal\n- 🚀 Organiseer je project",
"Card details" : "Kaart details",
"Add board" : "Toevoegen bord",
"Select the board to link to a project" : "Kies het bord om met een project te verbinden",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Archiveer kaart",
"Delete card" : "Verwijderen kaart",
"Move card to another board" : "Verplaats kaart naar een ander bord",
"List is empty" : "Lijst is leeg",
"Card deleted" : "Kaart verwijderd",
"seconds ago" : "seconden geleden",
"All boards" : "Alle borden",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Delen met een Deck kaart",
"Share {file} with a Deck card" : "Delen {file} met een Deck kaart",
"Share" : "Delen",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is een soort kanban organisatietool gericht op persoonlijke planning en projectorganisatie voor teams geïntegreerd in Nextcloud.\n\n\n- 📥 Voeg taken toe aan kaarten en sorteer ze\n- 📄 Schrijf extra notities in markdown\n- 🔖 Ken labels toe voor betere organisatie\n- 👥 Deel met je team, vrienden of familie\n- 📎 Voeg bestanden toe en plaats ze in je markdown beschrijving\n- 💬 Discussieer binnen je team met reacties\n- ⚡ Volg de wijzigingen in het activiteiten kanaal\n- 🚀 Organiseer je project"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is een soort kanban organisatietool gericht op persoonlijke planning en projectorganisatie voor teams geïntegreerd in Nextcloud.\n\n\n- 📥 Voeg taken toe aan kaarten en sorteer ze\n- 📄 Schrijf extra notities in markdown\n- 🔖 Ken labels toe voor betere organisatie\n- 👥 Deel met je team, vrienden of familie\n- 📎 Voeg bestanden toe en plaats ze in je markdown beschrijving\n- 💬 Discussieer binnen je team met reacties\n- ⚡ Volg de wijzigingen in het activiteiten kanaal\n- 🚀 Organiseer je project",
"Creating the new card…" : "Aanmaken nieuwe kaart...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" is toegevoegd aan \"{board}\"",
"(circle)" : "(circle)"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -97,11 +97,13 @@
"Missing a temporary folder" : "Mist een tijdelijke map",
"Could not write file to disk" : "Kon bestand niet naar schijf schrijven",
"A PHP extension stopped the file upload" : "Een PHP-extensie blokkeerde de upload.",
"No file uploaded or file size exceeds maximum of %s" : "Geen bestand ge-upload of de grootte is meer dan het maximum van %s",
"No file uploaded or file size exceeds maximum of %s" : "Geen bestand geüpload of de grootte is meer dan het maximum van %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Deze opmerking heeft meer dan %s tekens.\nAls bijlage toegevoegd aan de kaart met naam %s.\nToegankelijk op URL: %s.",
"Card not found" : "Kaart niet gevonden",
"Path is already shared with this card" : "Pad is al gedeeld met deze kaart",
"Invalid date, date format must be YYYY-MM-DD" : "Ongeldige datum, formaat is YYYY-MM-DD",
"Personal planning and team project organization" : "Persoonlijke planning en inrichting voor teamproject",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is een soort kanban organisatietool gericht op persoonlijke planning en projectorganisatie voor teams geïntegreerd in Nextcloud.\n\n\n- 📥 Voeg taken toe aan kaarten en sorteer ze\n- 📄 Schrijf extra notities in Markdown\n- 🔖 Ken labels toe voor betere organisatie\n- 👥 Deel met je team, vrienden of familie\n- 📎 Voeg bestanden toe en plaats ze in je Markdown beschrijving\n- 💬 Discussieer binnen je team met reacties\n- ⚡ Volg de wijzigingen in het activiteiten kanaal\n- 🚀 Organiseer je project",
"Card details" : "Kaart details",
"Add board" : "Toevoegen bord",
"Select the board to link to a project" : "Kies het bord om met een project te verbinden",
@@ -237,6 +239,7 @@
"Archive card" : "Archiveer kaart",
"Delete card" : "Verwijderen kaart",
"Move card to another board" : "Verplaats kaart naar een ander bord",
"List is empty" : "Lijst is leeg",
"Card deleted" : "Kaart verwijderd",
"seconds ago" : "seconden geleden",
"All boards" : "Alle borden",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Delen met een Deck kaart",
"Share {file} with a Deck card" : "Delen {file} met een Deck kaart",
"Share" : "Delen",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is een soort kanban organisatietool gericht op persoonlijke planning en projectorganisatie voor teams geïntegreerd in Nextcloud.\n\n\n- 📥 Voeg taken toe aan kaarten en sorteer ze\n- 📄 Schrijf extra notities in markdown\n- 🔖 Ken labels toe voor betere organisatie\n- 👥 Deel met je team, vrienden of familie\n- 📎 Voeg bestanden toe en plaats ze in je markdown beschrijving\n- 💬 Discussieer binnen je team met reacties\n- ⚡ Volg de wijzigingen in het activiteiten kanaal\n- 🚀 Organiseer je project"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is een soort kanban organisatietool gericht op persoonlijke planning en projectorganisatie voor teams geïntegreerd in Nextcloud.\n\n\n- 📥 Voeg taken toe aan kaarten en sorteer ze\n- 📄 Schrijf extra notities in markdown\n- 🔖 Ken labels toe voor betere organisatie\n- 👥 Deel met je team, vrienden of familie\n- 📎 Voeg bestanden toe en plaats ze in je markdown beschrijving\n- 💬 Discussieer binnen je team met reacties\n- ⚡ Volg de wijzigingen in het activiteiten kanaal\n- 🚀 Organiseer je project",
"Creating the new card…" : "Aanmaken nieuwe kaart...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" is toegevoegd aan \"{board}\"",
"(circle)" : "(circle)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Nie można zapisać pliku na dysk",
"A PHP extension stopped the file upload" : "Rozszerzenie PHP zatrzymało wysyłanie pliku",
"No file uploaded or file size exceeds maximum of %s" : "Brak wysłanego pliku lub rozmiar pliku przekracza maksymalny limit %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ten komentarz ma więcej niż %s znaków.\nDodany jako załącznik do karty o nazwie %s.\nDostępne pod adresem URL: %s.",
"Card not found" : "Nie znaleziono karty",
"Path is already shared with this card" : "Ścieżka jest już udostępniona dla tej karty",
"Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty to RRRR-MM-DD",
"Personal planning and team project organization" : "Indywidualne planowanie i organizacja projektu zespołowego",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tablica to narzędzie organizacyjne w stylu kanban, którego celem jest osobiste planowanie i organizacja projektu dla zespołów zintegrowanych z Nextcloud.\n\n\n- 📥 Dodaj swoje zadania do kart i porządkuj je\n- 📄 Zapisuj dodatkowe notatki w Markdown\n- 🔖 Przypisuj etykiety dla jeszcze lepszej organizacji\n- 👥 Współdziel ze swoim zespołem, przyjaciółmi lub rodziną\n- 📎 Dołączaj pliki i umieszczaj je w opisie Markdown\n- 💬 Porozmawiaj ze swoim zespołem za pomocą komentarzy\n- ⚡ Śledź zmiany w strumieniu aktywności\n- 🚀 Organizuj swój projekt",
"Card details" : "Szczegóły karty",
"Add board" : "Dodaj tablicę",
"Select the board to link to a project" : "Wybierz tablicę, aby połączyć się z projektem",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Zarchiwizuj kartę",
"Delete card" : "Usuń kartę",
"Move card to another board" : "Przenieś kartę na inną tablicę",
"List is empty" : "Lista jest pusta",
"Card deleted" : "Karta usunięta",
"seconds ago" : "przed chwilą",
"All boards" : "Wszystkie tablice",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Udostępnij za pomocą karty Tablicy",
"Share {file} with a Deck card" : "Udostępnij {file} za pomocą karty Tablicy",
"Share" : "Udostępnianie",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tablica to narzędzie organizacyjne w stylu kanban, którego celem jest osobiste planowanie i organizacja projektu dla zespołów zintegrowanych z Nextcloud.\n\n\n- 📥 Dodaj swoje zadania do kart i porządkuj je\n- 📄 Zapisuj dodatkowe notatki w Markdown\n- 🔖 Przypisuj etykiety dla jeszcze lepszej organizacji\n- 👥 Współdziel ze swoim zespołem, przyjaciółmi lub rodziną\n- 📎 Dołączaj pliki i umieszczaj je w opisie Markdown\n- 💬 Porozmawiaj ze swoim zespołem za pomocą komentarzy\n- ⚡ Śledź zmiany w strumieniu aktywności\n- 🚀 Organizuj swój projekt"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tablica to narzędzie organizacyjne w stylu kanban, którego celem jest osobiste planowanie i organizacja projektu dla zespołów zintegrowanych z Nextcloud.\n\n\n- 📥 Dodaj swoje zadania do kart i porządkuj je\n- 📄 Zapisuj dodatkowe notatki w Markdown\n- 🔖 Przypisuj etykiety dla jeszcze lepszej organizacji\n- 👥 Współdziel ze swoim zespołem, przyjaciółmi lub rodziną\n- 📎 Dołączaj pliki i umieszczaj je w opisie Markdown\n- 💬 Porozmawiaj ze swoim zespołem za pomocą komentarzy\n- ⚡ Śledź zmiany w strumieniu aktywności\n- 🚀 Organizuj swój projekt",
"Creating the new card…" : "Tworzę nową kartę…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" została dodana do \"{board}\"",
"(circle)" : "(krąg)"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Nie można zapisać pliku na dysk",
"A PHP extension stopped the file upload" : "Rozszerzenie PHP zatrzymało wysyłanie pliku",
"No file uploaded or file size exceeds maximum of %s" : "Brak wysłanego pliku lub rozmiar pliku przekracza maksymalny limit %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ten komentarz ma więcej niż %s znaków.\nDodany jako załącznik do karty o nazwie %s.\nDostępne pod adresem URL: %s.",
"Card not found" : "Nie znaleziono karty",
"Path is already shared with this card" : "Ścieżka jest już udostępniona dla tej karty",
"Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty to RRRR-MM-DD",
"Personal planning and team project organization" : "Indywidualne planowanie i organizacja projektu zespołowego",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tablica to narzędzie organizacyjne w stylu kanban, którego celem jest osobiste planowanie i organizacja projektu dla zespołów zintegrowanych z Nextcloud.\n\n\n- 📥 Dodaj swoje zadania do kart i porządkuj je\n- 📄 Zapisuj dodatkowe notatki w Markdown\n- 🔖 Przypisuj etykiety dla jeszcze lepszej organizacji\n- 👥 Współdziel ze swoim zespołem, przyjaciółmi lub rodziną\n- 📎 Dołączaj pliki i umieszczaj je w opisie Markdown\n- 💬 Porozmawiaj ze swoim zespołem za pomocą komentarzy\n- ⚡ Śledź zmiany w strumieniu aktywności\n- 🚀 Organizuj swój projekt",
"Card details" : "Szczegóły karty",
"Add board" : "Dodaj tablicę",
"Select the board to link to a project" : "Wybierz tablicę, aby połączyć się z projektem",
@@ -237,6 +239,7 @@
"Archive card" : "Zarchiwizuj kartę",
"Delete card" : "Usuń kartę",
"Move card to another board" : "Przenieś kartę na inną tablicę",
"List is empty" : "Lista jest pusta",
"Card deleted" : "Karta usunięta",
"seconds ago" : "przed chwilą",
"All boards" : "Wszystkie tablice",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Udostępnij za pomocą karty Tablicy",
"Share {file} with a Deck card" : "Udostępnij {file} za pomocą karty Tablicy",
"Share" : "Udostępnianie",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tablica to narzędzie organizacyjne w stylu kanban, którego celem jest osobiste planowanie i organizacja projektu dla zespołów zintegrowanych z Nextcloud.\n\n\n- 📥 Dodaj swoje zadania do kart i porządkuj je\n- 📄 Zapisuj dodatkowe notatki w Markdown\n- 🔖 Przypisuj etykiety dla jeszcze lepszej organizacji\n- 👥 Współdziel ze swoim zespołem, przyjaciółmi lub rodziną\n- 📎 Dołączaj pliki i umieszczaj je w opisie Markdown\n- 💬 Porozmawiaj ze swoim zespołem za pomocą komentarzy\n- ⚡ Śledź zmiany w strumieniu aktywności\n- 🚀 Organizuj swój projekt"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tablica to narzędzie organizacyjne w stylu kanban, którego celem jest osobiste planowanie i organizacja projektu dla zespołów zintegrowanych z Nextcloud.\n\n\n- 📥 Dodaj swoje zadania do kart i porządkuj je\n- 📄 Zapisuj dodatkowe notatki w Markdown\n- 🔖 Przypisuj etykiety dla jeszcze lepszej organizacji\n- 👥 Współdziel ze swoim zespołem, przyjaciółmi lub rodziną\n- 📎 Dołączaj pliki i umieszczaj je w opisie Markdown\n- 💬 Porozmawiaj ze swoim zespołem za pomocą komentarzy\n- ⚡ Śledź zmiany w strumieniu aktywności\n- 🚀 Organizuj swój projekt",
"Creating the new card…" : "Tworzę nową kartę…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" została dodana do \"{board}\"",
"(circle)" : "(krąg)"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Não foi possível escrever no disco",
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
"No file uploaded or file size exceeds maximum of %s" : "Nenhum arquivo enviado ou o tamanho excede o máximo de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nAdicionado como um anexo ao cartão com o nome %s.\nAcessível no URL: %s.",
"Card not found" : "Cartão não encontrado",
"Path is already shared with this card" : "O caminho já é compartilhado com este cartão",
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD",
"Personal planning and team project organization" : "Planejamento pessoal e organização de projetos em equipe",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização do estilo kanban voltada para o planejamento pessoal e organização de projetos para equipes integradas ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-as em ordem\n- 📄 Escreva notas adicionais em Anotar \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, amigos ou família\n- 📎 Anexar arquivos e incorporá-los à descrição da Nota\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as mudanças no fluxo de atividades \n- 🚀 Organize seu projeto ",
"Card details" : "Detalhes do cartão",
"Add board" : "Adicionar painel",
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Arquivar cartão",
"Delete card" : "Excluir cartão",
"Move card to another board" : "Mover o cartão para outro painel",
"List is empty" : "A Lista está vazia",
"Card deleted" : "Cartão excluído",
"seconds ago" : "segundos atrás",
"All boards" : "Todos os painéis",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Compartilhar com um cartão Deck",
"Share {file} with a Deck card" : "Compartilhar {file} com um cartão Deck",
"Share" : "Compartilhar",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Insira notas adicionais em markdown\n- 🔖 Atribua etiquetas para melhorar a organização\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 📎 Anexe arquivos e incorpore-os em sua descrição no markdown\n- 💬 Discuta com sua equipe usando os comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades\n- 🚀 Mantenha seu projeto organizado"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Insira notas adicionais em markdown\n- 🔖 Atribua etiquetas para melhorar a organização\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 📎 Anexe arquivos e incorpore-os em sua descrição no markdown\n- 💬 Discuta com sua equipe usando os comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades\n- 🚀 Mantenha seu projeto organizado",
"Creating the new card…" : "Criando o novo cartão…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" foi adicionado a \"{board}\"",
"(circle)" : "(círculo)"
},
"nplurals=2; plural=(n > 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Não foi possível escrever no disco",
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
"No file uploaded or file size exceeds maximum of %s" : "Nenhum arquivo enviado ou o tamanho excede o máximo de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nAdicionado como um anexo ao cartão com o nome %s.\nAcessível no URL: %s.",
"Card not found" : "Cartão não encontrado",
"Path is already shared with this card" : "O caminho já é compartilhado com este cartão",
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD",
"Personal planning and team project organization" : "Planejamento pessoal e organização de projetos em equipe",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização do estilo kanban voltada para o planejamento pessoal e organização de projetos para equipes integradas ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-as em ordem\n- 📄 Escreva notas adicionais em Anotar \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, amigos ou família\n- 📎 Anexar arquivos e incorporá-los à descrição da Nota\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as mudanças no fluxo de atividades \n- 🚀 Organize seu projeto ",
"Card details" : "Detalhes do cartão",
"Add board" : "Adicionar painel",
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto",
@@ -237,6 +239,7 @@
"Archive card" : "Arquivar cartão",
"Delete card" : "Excluir cartão",
"Move card to another board" : "Mover o cartão para outro painel",
"List is empty" : "A Lista está vazia",
"Card deleted" : "Cartão excluído",
"seconds ago" : "segundos atrás",
"All boards" : "Todos os painéis",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Compartilhar com um cartão Deck",
"Share {file} with a Deck card" : "Compartilhar {file} com um cartão Deck",
"Share" : "Compartilhar",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Insira notas adicionais em markdown\n- 🔖 Atribua etiquetas para melhorar a organização\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 📎 Anexe arquivos e incorpore-os em sua descrição no markdown\n- 💬 Discuta com sua equipe usando os comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades\n- 🚀 Mantenha seu projeto organizado"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Insira notas adicionais em markdown\n- 🔖 Atribua etiquetas para melhorar a organização\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 📎 Anexe arquivos e incorpore-os em sua descrição no markdown\n- 💬 Discuta com sua equipe usando os comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades\n- 🚀 Mantenha seu projeto organizado",
"Creating the new card…" : "Criando o novo cartão…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" foi adicionado a \"{board}\"",
"(circle)" : "(círculo)"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

View File

@@ -1,21 +1,113 @@
OC.L10N.register(
"deck",
{
"You have created a new board {board}" : "Você criou um novo painel {board}",
"{user} has created a new board {board}" : "{user} criou um novo painel {board}",
"You have deleted the board {board}" : "Você eliminou o painel {board}",
"{user} has deleted the board {board}" : "{user} eliminou o painel {board}",
"You have restored the board {board}" : "Você restaurou o painel {board}",
"{user} has restored the board {board}" : "{user} restaurou o painel {board}",
"You have shared the board {board} with {acl}" : "Você partilhou o painel {board} com {acl}",
"{user} has shared the board {board} with {acl}" : "{user} partilhou o painel {board} com {acl}",
"You have removed {acl} from the board {board}" : "Você eliminou {acl} do painel {board}",
"{user} has removed {acl} from the board {board}" : "{user} eliminou {acl} do painel {board}",
"You have renamed the board {before} to {board}" : "Você mudou o nome do painel {before} para {board}",
"{user} has renamed the board {before} to {board}" : "{user} mudou o nome do painel {before} para {board}",
"You have archived the board {board}" : "Você arquivou o painel {board}",
"{user} has archived the board {before}" : "{user} arquivou o painel {before}",
"You have unarchived the board {board}" : "Você desarquivou o painel {board}",
"{user} has unarchived the board {before}" : "{user} desarquivou o painel {board}",
"You have created a new list {stack} on board {board}" : "Você criou uma nova lista {stack} no painel {board}",
"{user} has created a new list {stack} on board {board}" : "{user} criou uma nova lista {stack} no painel {board}",
"You have renamed list {before} to {stack} on board {board}" : "Você mudou o nome da lista {before} para {stack} no painel {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} mudou o nome da lista {before} para {stack} no painel {board}",
"You have deleted list {stack} on board {board}" : "Você eliminou a lista {stack} do painel {board}",
"{user} has deleted list {stack} on board {board}" : "{user} eliminou a lista {stack} do painel {board}",
"You have created card {card} in list {stack} on board {board}" : "Você criou o cartão {card} na lista {stack} do painel {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} criou o cartão {card} na lista {stack} do painel {board}",
"You have deleted card {card} in list {stack} on board {board}" : "Você eliminou o cartão {card} na lista {stack} do painel {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} eliminou o cartão {card} na lista {stack} do painel {board}",
"You have renamed the card {before} to {card}" : "Você mudou o nome do cartão {before} para {card}",
"{user} has renamed the card {before} to {card}" : "{user} mudou o nome do cartão {before} para {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Você adicionou uma descrição ao cartão {card} na lista {stack} do painel {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} adicionou uma descrição ao cartão {card} na lista {stack} do painel {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Você atualizou a descrição do cartão {card} na lista {stack} do painel {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} atualizou a descrição do cartão {card} na lista {stack} do painel {board}",
"You have archived card {card} in list {stack} on board {board}" : "Você arquivou o cartão {card} na lista {stack} do painel {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} arquivou o cartão {card} na lista {stack} do painel {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Você desarquivou o cartão {card} na lista {stack} do painel {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} desarquivou o cartão {card} na lista {stack} do painel {board}",
"You have removed the due date of card {card}" : "Você eliminou a data limite do cartão {card}",
"{user} has removed the due date of card {card}" : "{user} excluiu a data limite do cartão {card}",
"You have set the due date of card {card} to {after}" : "Você definiu a data limite do cartão {card} para {after}",
"{user} has set the due date of card {card} to {after}" : "{user} definiu a data limite do cartão {card} para {after}",
"You have updated the due date of card {card} to {after}" : "Você atualizou a data limite do cartão {card} para {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} atualizou a data limite do cartão {card} para {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Você adicionou a etiqueta {label} ao cartão {card} na lista {stack} do painel {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} adicionou a etiqueta {label} ao cartão {card} na lista {stack} do painel {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Você removeu a etiqueta {label} do cartão {card} na lista {stack} do painel {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} removeu a etiqueta {label} do cartão {card} na lista {stack} do painel {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Você vinculou {assigneduser} ao cartão {card} do painel {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} vinculou {assigneduser} ao cartão {card} do painel {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Você desvinculou {assigneduser} do cartão {card} no painel {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} desvinculou {assigneduser} do cartão {card} no painel {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "Você moveu o cartão {card} da lista {stackBefore} para {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} moveu o cartão {card} da lista {stackBefore} para {stack}",
"You have added the attachment {attachment} to card {card}" : "Você adicionou o anexo {attachment} no cartão {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} adicionou um anexo {attachment} ao cartão {card}",
"You have updated the attachment {attachment} on card {card}" : "Você atualizou o anexo {attachment} do cartão {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} atualizou o anexo {attachment} no cartão {card}",
"You have deleted the attachment {attachment} from card {card}" : "Você excluiu o anexo {attachment} do cartão {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} eliminou o anexo {attachment} do cartão {card}",
"You have restored the attachment {attachment} to card {card}" : "Você restaurou o anexo {attachment} do cartão {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} restaurou o anexo {attachment} do cartão {card}",
"You have commented on card {card}" : "Você comentou no cartão {card}",
"{user} has commented on card {card}" : "{user} comentou no cartão {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "Uma <strong>descrição do cartão</strong> dentro da aplicação Quadro foi alterada",
"Deck" : "Quadro",
"Changes in the <strong>Deck app</strong>" : "Alterações na aplicação Quadro",
"A <strong>comment</strong> was created on a card" : "Um <strong>comentário</strong> foi criado num cartão",
"Upcoming cards" : "Próximos cartões",
"Personal" : "Pessoal",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" chegou a sua data de vencimento",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "O cartão \"%s\" em \"%s\" foi-lhe vinculado por %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{usuário} atribuiu-lhe o cartão {deck-card} no {deck-board}.",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu a sua data limite.",
"The card {deck-card} on {deck-board} has reached its due date." : "O cartão {deck-card} em {deck-board} atingiu a sua data limite.",
"%s has mentioned you in a comment on \"%s\"." : "%s mencionou-o num comentário em \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} mencionou-o num comentário em {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "O quadro \"%s\" foi partilhado consigo por %s.",
"{user} has shared {deck-board} with you." : "{user} partilhou {deck-board} consigo.",
"Card comments" : "Comentários nos cartões",
"%s on %s" : "%s no %s",
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
"Finished" : "Terminado",
"To review" : "A rever",
"Action needed" : "Acção necessária",
"Later" : "Mais tarde",
"copy" : "copiar",
"To do" : "Por fazer",
"Doing" : "A fazer",
"Done" : "Concluído",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O ficheiro carregado excede a directiva upload_max_filesize no php.ini ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O ficheiro carregado excedo a directiva MAX_FILE_SIZE especificada no formulário HTML",
"No file was uploaded" : "O ficheiro foi carregado",
"Example Task 3" : "Tarefa de exemplo 3",
"Example Task 2" : "Tarefa de exemplo 2",
"Example Task 1" : "Tarefa de exemplo 1",
"The file was uploaded" : "O ficheiro foi carregado",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O ficheiro carregado excede a diretiva upload_max_filesize no php.ini ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O ficheiro carregado excede a diretiva MAX_FILE_SIZE especificada no formulário HTML",
"The file was only partially uploaded" : "O ficheiro foi apenas parcialmente carregado",
"No file was uploaded" : "Não foi carregado nenhum ficheiro",
"Missing a temporary folder" : "Falta uma pasta temporária",
"Add board" : "Arquivar cartão",
"Could not write file to disk" : "Não foi possível escrever o ficheiro no disco.",
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o carregamento do ficheiro.",
"No file uploaded or file size exceeds maximum of %s" : "Nenhum ficheiro carregado ou o tamanho do ficheiro excede o máximo de%s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nAdicionado como um anexo ao cartão com o nome %s.\nAcessível no URL: %s.",
"Card not found" : "Cartão não encontrado",
"Path is already shared with this card" : "O caminho já é partilhado com este cartão",
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD",
"Personal planning and team project organization" : "Planeamento pessoal e organização de projetos em equipa",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Quadro é uma ferramenta de organização ao estilo kanban voltada para o planeamento pessoal e organização de projetos para equipas integradas no Nextcloud.\n\n\n- 📥Adicione as suas tarefas aos cartões e coloque-as em ordem\n- 📄 Escreva notas adicionais em Markdown\n- 🔖 Atribua etiquetas para uma organização ainda melhor\n- 👥 Compartilhe com a sua equipa, amigos ou família\n- 📎 Anexe ficheiros e incorpore-os à descrição em Markdown\n- 💬 Debata com a sua equipa usando comentários\n- ⚡ Acompanhe as mudanças no fluxo de atividades \n- 🚀 Organize o seu projeto",
"Card details" : "Detalhes do cartão",
"Add board" : "Adicionar quadro",
"Cancel" : "Cancelar",
"File already exists" : "O ficheiro já existe",
"Add card" : "Adicionar um cartão",

View File

@@ -1,19 +1,111 @@
{ "translations": {
"You have created a new board {board}" : "Você criou um novo painel {board}",
"{user} has created a new board {board}" : "{user} criou um novo painel {board}",
"You have deleted the board {board}" : "Você eliminou o painel {board}",
"{user} has deleted the board {board}" : "{user} eliminou o painel {board}",
"You have restored the board {board}" : "Você restaurou o painel {board}",
"{user} has restored the board {board}" : "{user} restaurou o painel {board}",
"You have shared the board {board} with {acl}" : "Você partilhou o painel {board} com {acl}",
"{user} has shared the board {board} with {acl}" : "{user} partilhou o painel {board} com {acl}",
"You have removed {acl} from the board {board}" : "Você eliminou {acl} do painel {board}",
"{user} has removed {acl} from the board {board}" : "{user} eliminou {acl} do painel {board}",
"You have renamed the board {before} to {board}" : "Você mudou o nome do painel {before} para {board}",
"{user} has renamed the board {before} to {board}" : "{user} mudou o nome do painel {before} para {board}",
"You have archived the board {board}" : "Você arquivou o painel {board}",
"{user} has archived the board {before}" : "{user} arquivou o painel {before}",
"You have unarchived the board {board}" : "Você desarquivou o painel {board}",
"{user} has unarchived the board {before}" : "{user} desarquivou o painel {board}",
"You have created a new list {stack} on board {board}" : "Você criou uma nova lista {stack} no painel {board}",
"{user} has created a new list {stack} on board {board}" : "{user} criou uma nova lista {stack} no painel {board}",
"You have renamed list {before} to {stack} on board {board}" : "Você mudou o nome da lista {before} para {stack} no painel {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} mudou o nome da lista {before} para {stack} no painel {board}",
"You have deleted list {stack} on board {board}" : "Você eliminou a lista {stack} do painel {board}",
"{user} has deleted list {stack} on board {board}" : "{user} eliminou a lista {stack} do painel {board}",
"You have created card {card} in list {stack} on board {board}" : "Você criou o cartão {card} na lista {stack} do painel {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} criou o cartão {card} na lista {stack} do painel {board}",
"You have deleted card {card} in list {stack} on board {board}" : "Você eliminou o cartão {card} na lista {stack} do painel {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} eliminou o cartão {card} na lista {stack} do painel {board}",
"You have renamed the card {before} to {card}" : "Você mudou o nome do cartão {before} para {card}",
"{user} has renamed the card {before} to {card}" : "{user} mudou o nome do cartão {before} para {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Você adicionou uma descrição ao cartão {card} na lista {stack} do painel {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} adicionou uma descrição ao cartão {card} na lista {stack} do painel {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Você atualizou a descrição do cartão {card} na lista {stack} do painel {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} atualizou a descrição do cartão {card} na lista {stack} do painel {board}",
"You have archived card {card} in list {stack} on board {board}" : "Você arquivou o cartão {card} na lista {stack} do painel {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} arquivou o cartão {card} na lista {stack} do painel {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Você desarquivou o cartão {card} na lista {stack} do painel {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} desarquivou o cartão {card} na lista {stack} do painel {board}",
"You have removed the due date of card {card}" : "Você eliminou a data limite do cartão {card}",
"{user} has removed the due date of card {card}" : "{user} excluiu a data limite do cartão {card}",
"You have set the due date of card {card} to {after}" : "Você definiu a data limite do cartão {card} para {after}",
"{user} has set the due date of card {card} to {after}" : "{user} definiu a data limite do cartão {card} para {after}",
"You have updated the due date of card {card} to {after}" : "Você atualizou a data limite do cartão {card} para {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} atualizou a data limite do cartão {card} para {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Você adicionou a etiqueta {label} ao cartão {card} na lista {stack} do painel {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} adicionou a etiqueta {label} ao cartão {card} na lista {stack} do painel {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Você removeu a etiqueta {label} do cartão {card} na lista {stack} do painel {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} removeu a etiqueta {label} do cartão {card} na lista {stack} do painel {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Você vinculou {assigneduser} ao cartão {card} do painel {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} vinculou {assigneduser} ao cartão {card} do painel {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Você desvinculou {assigneduser} do cartão {card} no painel {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} desvinculou {assigneduser} do cartão {card} no painel {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "Você moveu o cartão {card} da lista {stackBefore} para {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} moveu o cartão {card} da lista {stackBefore} para {stack}",
"You have added the attachment {attachment} to card {card}" : "Você adicionou o anexo {attachment} no cartão {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} adicionou um anexo {attachment} ao cartão {card}",
"You have updated the attachment {attachment} on card {card}" : "Você atualizou o anexo {attachment} do cartão {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} atualizou o anexo {attachment} no cartão {card}",
"You have deleted the attachment {attachment} from card {card}" : "Você excluiu o anexo {attachment} do cartão {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} eliminou o anexo {attachment} do cartão {card}",
"You have restored the attachment {attachment} to card {card}" : "Você restaurou o anexo {attachment} do cartão {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} restaurou o anexo {attachment} do cartão {card}",
"You have commented on card {card}" : "Você comentou no cartão {card}",
"{user} has commented on card {card}" : "{user} comentou no cartão {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "Uma <strong>descrição do cartão</strong> dentro da aplicação Quadro foi alterada",
"Deck" : "Quadro",
"Changes in the <strong>Deck app</strong>" : "Alterações na aplicação Quadro",
"A <strong>comment</strong> was created on a card" : "Um <strong>comentário</strong> foi criado num cartão",
"Upcoming cards" : "Próximos cartões",
"Personal" : "Pessoal",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" chegou a sua data de vencimento",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "O cartão \"%s\" em \"%s\" foi-lhe vinculado por %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{usuário} atribuiu-lhe o cartão {deck-card} no {deck-board}.",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu a sua data limite.",
"The card {deck-card} on {deck-board} has reached its due date." : "O cartão {deck-card} em {deck-board} atingiu a sua data limite.",
"%s has mentioned you in a comment on \"%s\"." : "%s mencionou-o num comentário em \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} mencionou-o num comentário em {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "O quadro \"%s\" foi partilhado consigo por %s.",
"{user} has shared {deck-board} with you." : "{user} partilhou {deck-board} consigo.",
"Card comments" : "Comentários nos cartões",
"%s on %s" : "%s no %s",
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
"Finished" : "Terminado",
"To review" : "A rever",
"Action needed" : "Acção necessária",
"Later" : "Mais tarde",
"copy" : "copiar",
"To do" : "Por fazer",
"Doing" : "A fazer",
"Done" : "Concluído",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O ficheiro carregado excede a directiva upload_max_filesize no php.ini ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O ficheiro carregado excedo a directiva MAX_FILE_SIZE especificada no formulário HTML",
"No file was uploaded" : "O ficheiro foi carregado",
"Example Task 3" : "Tarefa de exemplo 3",
"Example Task 2" : "Tarefa de exemplo 2",
"Example Task 1" : "Tarefa de exemplo 1",
"The file was uploaded" : "O ficheiro foi carregado",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O ficheiro carregado excede a diretiva upload_max_filesize no php.ini ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O ficheiro carregado excede a diretiva MAX_FILE_SIZE especificada no formulário HTML",
"The file was only partially uploaded" : "O ficheiro foi apenas parcialmente carregado",
"No file was uploaded" : "Não foi carregado nenhum ficheiro",
"Missing a temporary folder" : "Falta uma pasta temporária",
"Add board" : "Arquivar cartão",
"Could not write file to disk" : "Não foi possível escrever o ficheiro no disco.",
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o carregamento do ficheiro.",
"No file uploaded or file size exceeds maximum of %s" : "Nenhum ficheiro carregado ou o tamanho do ficheiro excede o máximo de%s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nAdicionado como um anexo ao cartão com o nome %s.\nAcessível no URL: %s.",
"Card not found" : "Cartão não encontrado",
"Path is already shared with this card" : "O caminho já é partilhado com este cartão",
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD",
"Personal planning and team project organization" : "Planeamento pessoal e organização de projetos em equipa",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Quadro é uma ferramenta de organização ao estilo kanban voltada para o planeamento pessoal e organização de projetos para equipas integradas no Nextcloud.\n\n\n- 📥Adicione as suas tarefas aos cartões e coloque-as em ordem\n- 📄 Escreva notas adicionais em Markdown\n- 🔖 Atribua etiquetas para uma organização ainda melhor\n- 👥 Compartilhe com a sua equipa, amigos ou família\n- 📎 Anexe ficheiros e incorpore-os à descrição em Markdown\n- 💬 Debata com a sua equipa usando comentários\n- ⚡ Acompanhe as mudanças no fluxo de atividades \n- 🚀 Organize o seu projeto",
"Card details" : "Detalhes do cartão",
"Add board" : "Adicionar quadro",
"Cancel" : "Cancelar",
"File already exists" : "O ficheiro já existe",
"Add card" : "Adicionar um cartão",

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Невозможно записать файл на диск",
"A PHP extension stopped the file upload" : "Загрузка файла была прервана модулем расширений PHP",
"No file uploaded or file size exceeds maximum of %s" : "Файл не получен или его размер превышает %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Этот комментарий содержит более %s символов.\nКомментарий добавлен к карточке «%s» в виде вложения.\nПостоянный адрес этого комментария: %s.",
"Card not found" : "Карточка не найдена",
"Path is already shared with this card" : "Этот путь уже опубликован в карточке",
"Invalid date, date format must be YYYY-MM-DD" : "Некорректный формат даты, дата должна быть в формате YYYY-MM-DD",
"Personal planning and team project organization" : "Личное планирование и управление проектами для команд",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Карточки — приложение для Nextcloud, предоставляющее возможности личного планирования и управления проектами для рабочих групп в стиле канбан.\n\n\n- 📥 Создавайте карточки задач и упорядочите их;\n- 📄 Добавляйте описания задач с возможностью использовать формат разметки «markdown»;\n- 🔖 Присваивайте ярлыки для ещё лучшей организации;\n- 👥 Делитесь со своей командой, друзьями или семьей;\n- 📎 Вкладывайте файлы в виде ссылок в описании, используя формат разметки «Markdown»;\n- 💬 Обсуждайте в комментариях;\n- ⚡ Отслеживайте изменения в ленте событий;\n- 🚀 Сделайте свой проект более организованным.",
"Card details" : "Свойства карточки",
"Add board" : "Добавить доску",
"Select the board to link to a project" : "Выберите рабочую доску, чтобы связать с проектом",
@@ -184,8 +186,10 @@ OC.L10N.register(
"Members" : "Участники",
"Upload new files" : "Передать на сервер новые файлы",
"Share from Files" : "Опубликовать из приложения «Файлы»",
"Pending share" : "Ожидающие публикации",
"Add this attachment" : "Добавить это вложение",
"Show in Files" : "Показать в приложении «Файлы»",
"Download" : "Скачать",
"Remove attachment" : "Убрать вложение",
"Delete Attachment" : "Удалить вложение",
"Restore Attachment" : "Восстановить вложение",
@@ -237,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Переместить в архив",
"Delete card" : "Удалить",
"Move card to another board" : "Переместить карточку на другую доску",
"List is empty" : "Список не содержит записей",
"Card deleted" : "Карточка удалена",
"seconds ago" : "несколько секунд назад",
"All boards" : "Все доски",
@@ -282,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Опубликовать в приложении Карточки",
"Share {file} with a Deck card" : "Опубликовать «{file}» в приложении Карточки",
"Share" : "Опубликовать",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Карточки — приложение для Nextcloud, предоставляющее возможности личного планирования и управления проектами для рабочих групп в стиле канбан.\n\n\n- 📥 Создавайте карточки задач и упорядочите их;\n- 📄 Добавляйте описания задач с возможностью использовать формат разметки «markdown»;\n- 🔖 Присваивайте ярлыки для ещё лучшей организации;\n- 👥 Делитесь со своей командой, друзьями или семьей;\n- 📎 Вкладывайте файлы в виде ссылок в описании, используя формат разметки «markdown»;\n- 💬 Обсуждайте в комментариях;\n- ⚡ Отслеживайте изменения в ленте событий;\n- 🚀 Сделайте свой проект более организованным."
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Карточки — приложение для Nextcloud, предоставляющее возможности личного планирования и управления проектами для рабочих групп в стиле канбан.\n\n\n- 📥 Создавайте карточки задач и упорядочите их;\n- 📄 Добавляйте описания задач с возможностью использовать формат разметки «markdown»;\n- 🔖 Присваивайте ярлыки для ещё лучшей организации;\n- 👥 Делитесь со своей командой, друзьями или семьей;\n- 📎 Вкладывайте файлы в виде ссылок в описании, используя формат разметки «markdown»;\n- 💬 Обсуждайте в комментариях;\n- ⚡ Отслеживайте изменения в ленте событий;\n- 🚀 Сделайте свой проект более организованным.",
"Creating the new card…" : "Создание карточки…",
"\"{card}\" was added to \"{board}\"" : "«{card}» добавлена на доску «{board}»",
"(circle)" : "(круг)"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Невозможно записать файл на диск",
"A PHP extension stopped the file upload" : "Загрузка файла была прервана модулем расширений PHP",
"No file uploaded or file size exceeds maximum of %s" : "Файл не получен или его размер превышает %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Этот комментарий содержит более %s символов.\nКомментарий добавлен к карточке «%s» в виде вложения.\nПостоянный адрес этого комментария: %s.",
"Card not found" : "Карточка не найдена",
"Path is already shared with this card" : "Этот путь уже опубликован в карточке",
"Invalid date, date format must be YYYY-MM-DD" : "Некорректный формат даты, дата должна быть в формате YYYY-MM-DD",
"Personal planning and team project organization" : "Личное планирование и управление проектами для команд",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Карточки — приложение для Nextcloud, предоставляющее возможности личного планирования и управления проектами для рабочих групп в стиле канбан.\n\n\n- 📥 Создавайте карточки задач и упорядочите их;\n- 📄 Добавляйте описания задач с возможностью использовать формат разметки «markdown»;\n- 🔖 Присваивайте ярлыки для ещё лучшей организации;\n- 👥 Делитесь со своей командой, друзьями или семьей;\n- 📎 Вкладывайте файлы в виде ссылок в описании, используя формат разметки «Markdown»;\n- 💬 Обсуждайте в комментариях;\n- ⚡ Отслеживайте изменения в ленте событий;\n- 🚀 Сделайте свой проект более организованным.",
"Card details" : "Свойства карточки",
"Add board" : "Добавить доску",
"Select the board to link to a project" : "Выберите рабочую доску, чтобы связать с проектом",
@@ -182,8 +184,10 @@
"Members" : "Участники",
"Upload new files" : "Передать на сервер новые файлы",
"Share from Files" : "Опубликовать из приложения «Файлы»",
"Pending share" : "Ожидающие публикации",
"Add this attachment" : "Добавить это вложение",
"Show in Files" : "Показать в приложении «Файлы»",
"Download" : "Скачать",
"Remove attachment" : "Убрать вложение",
"Delete Attachment" : "Удалить вложение",
"Restore Attachment" : "Восстановить вложение",
@@ -235,6 +239,7 @@
"Archive card" : "Переместить в архив",
"Delete card" : "Удалить",
"Move card to another board" : "Переместить карточку на другую доску",
"List is empty" : "Список не содержит записей",
"Card deleted" : "Карточка удалена",
"seconds ago" : "несколько секунд назад",
"All boards" : "Все доски",
@@ -280,6 +285,9 @@
"Share with a Deck card" : "Опубликовать в приложении Карточки",
"Share {file} with a Deck card" : "Опубликовать «{file}» в приложении Карточки",
"Share" : "Опубликовать",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Карточки — приложение для Nextcloud, предоставляющее возможности личного планирования и управления проектами для рабочих групп в стиле канбан.\n\n\n- 📥 Создавайте карточки задач и упорядочите их;\n- 📄 Добавляйте описания задач с возможностью использовать формат разметки «markdown»;\n- 🔖 Присваивайте ярлыки для ещё лучшей организации;\n- 👥 Делитесь со своей командой, друзьями или семьей;\n- 📎 Вкладывайте файлы в виде ссылок в описании, используя формат разметки «markdown»;\n- 💬 Обсуждайте в комментариях;\n- ⚡ Отслеживайте изменения в ленте событий;\n- 🚀 Сделайте свой проект более организованным."
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Карточки — приложение для Nextcloud, предоставляющее возможности личного планирования и управления проектами для рабочих групп в стиле канбан.\n\n\n- 📥 Создавайте карточки задач и упорядочите их;\n- 📄 Добавляйте описания задач с возможностью использовать формат разметки «markdown»;\n- 🔖 Присваивайте ярлыки для ещё лучшей организации;\n- 👥 Делитесь со своей командой, друзьями или семьей;\n- 📎 Вкладывайте файлы в виде ссылок в описании, используя формат разметки «markdown»;\n- 💬 Обсуждайте в комментариях;\n- ⚡ Отслеживайте изменения в ленте событий;\n- 🚀 Сделайте свой проект более организованным.",
"Creating the new card…" : "Создание карточки…",
"\"{card}\" was added to \"{board}\"" : "«{card}» добавлена на доску «{board}»",
"(circle)" : "(круг)"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Nepodarilo sa zapísať súbor na disk",
"A PHP extension stopped the file upload" : "Rozšírenie PHP zastavilo nahrávanie súboru",
"No file uploaded or file size exceeds maximum of %s" : "Nenahral sa žiadny súbor alebo jeho veľkosť presiahla %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Tento komentár má viac než %s znakov.\nPridané ako príloha ku karte s názvom %s.\nDostupné na URL: %s.",
"Card not found" : "Karta nebola nájdená",
"Path is already shared with this card" : "Cesta je už zdieľaná s touto kartou",
"Invalid date, date format must be YYYY-MM-DD" : "Neplatný dátum, formát musí byť v tvare YYYY-MM-DD",
"Personal planning and team project organization" : "Osobné plánovanie a organizácia tímových projektov",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je organizačný nástroj typu kanban zameraný na osobné plánovanie a organizáciu projektov pre tímy integrované s Nextcloud.\n\n\n- 📥 Pridajte svoje úlohy na karty a usporiadajte ich\n- 📄 Zapíšte si ďalšie poznámky v Markdown\n- 🔖 Priraďte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojím tímom, priateľmi alebo rodinou\n- 📎 Pripojte súbory a vložte ich do popisu Markdown\n- 💬 Diskutujte so svojím tímom pomocou komentárov\n- ⚡ Sledujte zmeny v prúde aktivít\n- 🚀 Zorganizujte si svoj projekt",
"Card details" : "Podrobnosti o karte",
"Add board" : "Pridať nástenk",
"Select the board to link to a project" : "Vybrať nástenku na vytvorenie odkazu ku projektu",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Archivovať kartu",
"Delete card" : "Zmazať kartu",
"Move card to another board" : "Presunúť kartu na inú nástenku",
"List is empty" : "Zoznam je prázdny",
"Card deleted" : "Karta bola vymazaná",
"seconds ago" : "pred niekoľkými sekundami",
"All boards" : "Všetky nástenky",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Zdieľať s kartou Deck",
"Share {file} with a Deck card" : "Zdieľať {file} s kartou Deck",
"Share" : "Zdieľať",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu",
"Creating the new card…" : "Vytváram novú kartu...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" bola pridaná na \"{board}\"",
"(circle)" : "(kruh)"
},
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Nepodarilo sa zapísať súbor na disk",
"A PHP extension stopped the file upload" : "Rozšírenie PHP zastavilo nahrávanie súboru",
"No file uploaded or file size exceeds maximum of %s" : "Nenahral sa žiadny súbor alebo jeho veľkosť presiahla %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Tento komentár má viac než %s znakov.\nPridané ako príloha ku karte s názvom %s.\nDostupné na URL: %s.",
"Card not found" : "Karta nebola nájdená",
"Path is already shared with this card" : "Cesta je už zdieľaná s touto kartou",
"Invalid date, date format must be YYYY-MM-DD" : "Neplatný dátum, formát musí byť v tvare YYYY-MM-DD",
"Personal planning and team project organization" : "Osobné plánovanie a organizácia tímových projektov",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je organizačný nástroj typu kanban zameraný na osobné plánovanie a organizáciu projektov pre tímy integrované s Nextcloud.\n\n\n- 📥 Pridajte svoje úlohy na karty a usporiadajte ich\n- 📄 Zapíšte si ďalšie poznámky v Markdown\n- 🔖 Priraďte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojím tímom, priateľmi alebo rodinou\n- 📎 Pripojte súbory a vložte ich do popisu Markdown\n- 💬 Diskutujte so svojím tímom pomocou komentárov\n- ⚡ Sledujte zmeny v prúde aktivít\n- 🚀 Zorganizujte si svoj projekt",
"Card details" : "Podrobnosti o karte",
"Add board" : "Pridať nástenk",
"Select the board to link to a project" : "Vybrať nástenku na vytvorenie odkazu ku projektu",
@@ -237,6 +239,7 @@
"Archive card" : "Archivovať kartu",
"Delete card" : "Zmazať kartu",
"Move card to another board" : "Presunúť kartu na inú nástenku",
"List is empty" : "Zoznam je prázdny",
"Card deleted" : "Karta bola vymazaná",
"seconds ago" : "pred niekoľkými sekundami",
"All boards" : "Všetky nástenky",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Zdieľať s kartou Deck",
"Share {file} with a Deck card" : "Zdieľať {file} s kartou Deck",
"Share" : "Zdieľať",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu",
"Creating the new card…" : "Vytváram novú kartu...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" bola pridaná na \"{board}\"",
"(circle)" : "(kruh)"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Kunde inte skriva fil till disk",
"A PHP extension stopped the file upload" : "Ett PHP-tillägg stoppade filuppladdningen",
"No file uploaded or file size exceeds maximum of %s" : "Ingen fil uppladdad eller filstorleken överstiger max %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Den här kommentaren har mer än %s tecken.\nTillagd som en bilaga till kortet men namnet %s.\nÅtkomlig via URL: %s.",
"Card not found" : "Kortet hittades inte",
"Path is already shared with this card" : "Sökvägen är redan delad med detta kort",
"Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
"Personal planning and team project organization" : "Personlig planering och projekthantering för teams",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande organiseringsverktyg för personlig planering samt projektorganisering för arbetsgrupper integrerade med Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och lägg de i ordning\n- 📄 Skriv anteckningar i Markdown\n- 🔖 Tilldela etiketter för bättre organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i Markdown-anteckningarna\n- 💬 Diskutera med arbetsgruppen med hjälp av kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Få struktur på dina projekt",
"Card details" : "Kortdetaljer",
"Add board" : "Lägg till tavla",
"Select the board to link to a project" : "Välj tavla att länka till ett projekt",
@@ -184,8 +186,11 @@ OC.L10N.register(
"Members" : "Medlemmar",
"Upload new files" : "Ladda upp nya filer",
"Share from Files" : "Dela från Filer",
"Pending share" : "Väntande delning",
"Add this attachment" : "Lägg till denna bilaga",
"Show in Files" : "Visa i Filer",
"Download" : "Ladda ner",
"Remove attachment" : "Ta bort bilaga",
"Delete Attachment" : "Ta bort bilaga",
"Restore Attachment" : "Återställ bilaga",
"File to share" : "Fil att dela",
@@ -209,6 +214,8 @@ OC.L10N.register(
"Select Date" : "Välj datum",
"Today" : "Idag",
"Tomorrow" : "Imorgon",
"Next week" : "Nästa vecka",
"Next month" : "Nästa månad",
"Save" : "Spara",
"The comment cannot be empty." : "Kommentaren kan inte vara tom.",
"The comment cannot be longer than 1000 characters." : "Kommentaren kan inte vara längre än 1000 tecken.",
@@ -234,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Arkivera kort",
"Delete card" : "Ta bort kort",
"Move card to another board" : "Flytta kort till en annan tavla",
"List is empty" : "Listan är tom",
"Card deleted" : "Kortet har raderats",
"seconds ago" : "sekunder sedan",
"All boards" : "Alla tavlor",
@@ -279,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Dela med ett Deck-kort",
"Share {file} with a Deck card" : "Dela {file} med ett Deck-kort",
"Share" : "Dela",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
"Creating the new card…" : "Skapar det nya kortet...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" lades till i \"{board}\"",
"(circle)" : "(cirkel)"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Kunde inte skriva fil till disk",
"A PHP extension stopped the file upload" : "Ett PHP-tillägg stoppade filuppladdningen",
"No file uploaded or file size exceeds maximum of %s" : "Ingen fil uppladdad eller filstorleken överstiger max %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Den här kommentaren har mer än %s tecken.\nTillagd som en bilaga till kortet men namnet %s.\nÅtkomlig via URL: %s.",
"Card not found" : "Kortet hittades inte",
"Path is already shared with this card" : "Sökvägen är redan delad med detta kort",
"Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
"Personal planning and team project organization" : "Personlig planering och projekthantering för teams",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande organiseringsverktyg för personlig planering samt projektorganisering för arbetsgrupper integrerade med Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och lägg de i ordning\n- 📄 Skriv anteckningar i Markdown\n- 🔖 Tilldela etiketter för bättre organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i Markdown-anteckningarna\n- 💬 Diskutera med arbetsgruppen med hjälp av kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Få struktur på dina projekt",
"Card details" : "Kortdetaljer",
"Add board" : "Lägg till tavla",
"Select the board to link to a project" : "Välj tavla att länka till ett projekt",
@@ -182,8 +184,11 @@
"Members" : "Medlemmar",
"Upload new files" : "Ladda upp nya filer",
"Share from Files" : "Dela från Filer",
"Pending share" : "Väntande delning",
"Add this attachment" : "Lägg till denna bilaga",
"Show in Files" : "Visa i Filer",
"Download" : "Ladda ner",
"Remove attachment" : "Ta bort bilaga",
"Delete Attachment" : "Ta bort bilaga",
"Restore Attachment" : "Återställ bilaga",
"File to share" : "Fil att dela",
@@ -207,6 +212,8 @@
"Select Date" : "Välj datum",
"Today" : "Idag",
"Tomorrow" : "Imorgon",
"Next week" : "Nästa vecka",
"Next month" : "Nästa månad",
"Save" : "Spara",
"The comment cannot be empty." : "Kommentaren kan inte vara tom.",
"The comment cannot be longer than 1000 characters." : "Kommentaren kan inte vara längre än 1000 tecken.",
@@ -232,6 +239,7 @@
"Archive card" : "Arkivera kort",
"Delete card" : "Ta bort kort",
"Move card to another board" : "Flytta kort till en annan tavla",
"List is empty" : "Listan är tom",
"Card deleted" : "Kortet har raderats",
"seconds ago" : "sekunder sedan",
"All boards" : "Alla tavlor",
@@ -277,6 +285,9 @@
"Share with a Deck card" : "Dela med ett Deck-kort",
"Share {file} with a Deck card" : "Dela {file} med ett Deck-kort",
"Share" : "Dela",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
"Creating the new card…" : "Skapar det nya kortet...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" lades till i \"{board}\"",
"(circle)" : "(cirkel)"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "Dosya diske yazılamadı",
"A PHP extension stopped the file upload" : "Bir PHP eklentisi dosyanın yüklenmesini engelledi",
"No file uploaded or file size exceeds maximum of %s" : "Herhangi bir dosya yüklenmedi ya da %s olan en büyük dosya boyutu sınırııldı",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Bu yorum %s karakterden uzun.\nKarta %s adıyla ek dosya olarak eklendi.\nŞu adresten erişilebilir: %s.",
"Card not found" : "Kart bulunamadı",
"Path is already shared with this card" : "Bu yol bu kart ile zaten paylaşılmış",
"Invalid date, date format must be YYYY-MM-DD" : "Tarih geçersiz. Tarih biçimi YYYY-AA-GG olmalıdır",
"Personal planning and team project organization" : "Kişisel planlama ve takım projesi yönetimi",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tahta, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 📎 Dosyalar ekleyebilir ve Markdown açıklamasına gömebilirsiniz\n- 💬 Yorumları kullanarak konular üzerinde takımınız ile yazışabilirsiniz\n- ⚡ İşlem akışı ile değişiklikleri görebilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz",
"Card details" : "Kart ayrıntıları",
"Add board" : "Pano ekle",
"Select the board to link to a project" : "Bir proje ile ilişkilendirilecek pano bağlantısını seçin",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "Kartı arşivle",
"Delete card" : "Kartı sil",
"Move card to another board" : "Kartı başka bir panoya taşı",
"List is empty" : "Liste boş",
"Card deleted" : "Kart silindi",
"seconds ago" : "saniye önce",
"All boards" : "Tüm panolar",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "Bir tahta kartı ile paylaş",
"Share {file} with a Deck card" : "{file} dosyasını bir tahta kartı ile paylaş",
"Share" : "Paylaş",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tahta, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 💬 Yorumları kullanarak konular üzerinde takımınız ile yazışabilirsiniz\n- ⚡ İşlem akışı ile değişiklikleri görebilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tahta, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 💬 Yorumları kullanarak konular üzerinde takımınız ile yazışabilirsiniz\n- ⚡ İşlem akışı ile değişiklikleri görebilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz",
"Creating the new card…" : "Yeni kart ekleniyor…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" kartı \"{board}\" panosuna eklendi",
"(circle)" : "(çevre)"
},
"nplurals=2; plural=(n > 1);");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "Dosya diske yazılamadı",
"A PHP extension stopped the file upload" : "Bir PHP eklentisi dosyanın yüklenmesini engelledi",
"No file uploaded or file size exceeds maximum of %s" : "Herhangi bir dosya yüklenmedi ya da %s olan en büyük dosya boyutu sınırııldı",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Bu yorum %s karakterden uzun.\nKarta %s adıyla ek dosya olarak eklendi.\nŞu adresten erişilebilir: %s.",
"Card not found" : "Kart bulunamadı",
"Path is already shared with this card" : "Bu yol bu kart ile zaten paylaşılmış",
"Invalid date, date format must be YYYY-MM-DD" : "Tarih geçersiz. Tarih biçimi YYYY-AA-GG olmalıdır",
"Personal planning and team project organization" : "Kişisel planlama ve takım projesi yönetimi",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tahta, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 📎 Dosyalar ekleyebilir ve Markdown açıklamasına gömebilirsiniz\n- 💬 Yorumları kullanarak konular üzerinde takımınız ile yazışabilirsiniz\n- ⚡ İşlem akışı ile değişiklikleri görebilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz",
"Card details" : "Kart ayrıntıları",
"Add board" : "Pano ekle",
"Select the board to link to a project" : "Bir proje ile ilişkilendirilecek pano bağlantısını seçin",
@@ -237,6 +239,7 @@
"Archive card" : "Kartı arşivle",
"Delete card" : "Kartı sil",
"Move card to another board" : "Kartı başka bir panoya taşı",
"List is empty" : "Liste boş",
"Card deleted" : "Kart silindi",
"seconds ago" : "saniye önce",
"All boards" : "Tüm panolar",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "Bir tahta kartı ile paylaş",
"Share {file} with a Deck card" : "{file} dosyasını bir tahta kartı ile paylaş",
"Share" : "Paylaş",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tahta, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 💬 Yorumları kullanarak konular üzerinde takımınız ile yazışabilirsiniz\n- ⚡ İşlem akışı ile değişiklikleri görebilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tahta, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 💬 Yorumları kullanarak konular üzerinde takımınız ile yazışabilirsiniz\n- ⚡ İşlem akışı ile değişiklikleri görebilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz",
"Creating the new card…" : "Yeni kart ekleniyor…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" kartı \"{board}\" panosuna eklendi",
"(circle)" : "(çevre)"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

View File

@@ -239,6 +239,7 @@ OC.L10N.register(
"Archive card" : "归档卡片",
"Delete card" : "删除卡片",
"Move card to another board" : "将卡片移到其他面板",
"List is empty" : "列表为空",
"Card deleted" : "卡片被删除",
"seconds ago" : "几秒前",
"All boards" : "全部面板",
@@ -284,6 +285,9 @@ OC.L10N.register(
"Share with a Deck card" : "分享给一张看板卡片",
"Share {file} with a Deck card" : "将{file}分享给一张看板卡片",
"Share" : "分享",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "“看板”是 Nextcloud 集成的一款看板式任务管理工具,用于个人计划与项目安排。\n\n\n- 📥 将您的任务添加到卡片上,并将它们有序排列\n- 📄 将您的补充说明用markdown写下来\n- 🔖 利用指派标签更好地进行筹划\n- 👥 与您的团队,朋友或家人共享\n- 📎 附加文件并将它们嵌入到您的markdown说明中\n- 💬 用评论与您的团队讨论\n- ⚡ 在活动流中紧跟变化\n- 🚀 使您的项目井井有条"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "“看板”是 Nextcloud 集成的一款看板式任务管理工具,用于个人计划与项目安排。\n\n\n- 📥 将您的任务添加到卡片上,并将它们有序排列\n- 📄 将您的补充说明用markdown写下来\n- 🔖 利用指派标签更好地进行筹划\n- 👥 与您的团队,朋友或家人共享\n- 📎 附加文件并将它们嵌入到您的markdown说明中\n- 💬 用评论与您的团队讨论\n- ⚡ 在活动流中紧跟变化\n- 🚀 使您的项目井井有条",
"Creating the new card…" : "正在创建新卡片…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" 被添加到 \"{board}\"",
"(circle)" : "(圈子)"
},
"nplurals=1; plural=0;");

View File

@@ -237,6 +237,7 @@
"Archive card" : "归档卡片",
"Delete card" : "删除卡片",
"Move card to another board" : "将卡片移到其他面板",
"List is empty" : "列表为空",
"Card deleted" : "卡片被删除",
"seconds ago" : "几秒前",
"All boards" : "全部面板",
@@ -282,6 +283,9 @@
"Share with a Deck card" : "分享给一张看板卡片",
"Share {file} with a Deck card" : "将{file}分享给一张看板卡片",
"Share" : "分享",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "“看板”是 Nextcloud 集成的一款看板式任务管理工具,用于个人计划与项目安排。\n\n\n- 📥 将您的任务添加到卡片上,并将它们有序排列\n- 📄 将您的补充说明用markdown写下来\n- 🔖 利用指派标签更好地进行筹划\n- 👥 与您的团队,朋友或家人共享\n- 📎 附加文件并将它们嵌入到您的markdown说明中\n- 💬 用评论与您的团队讨论\n- ⚡ 在活动流中紧跟变化\n- 🚀 使您的项目井井有条"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "“看板”是 Nextcloud 集成的一款看板式任务管理工具,用于个人计划与项目安排。\n\n\n- 📥 将您的任务添加到卡片上,并将它们有序排列\n- 📄 将您的补充说明用markdown写下来\n- 🔖 利用指派标签更好地进行筹划\n- 👥 与您的团队,朋友或家人共享\n- 📎 附加文件并将它们嵌入到您的markdown说明中\n- 💬 用评论与您的团队讨论\n- ⚡ 在活动流中紧跟变化\n- 🚀 使您的项目井井有条",
"Creating the new card…" : "正在创建新卡片…",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" 被添加到 \"{board}\"",
"(circle)" : "(圈子)"
},"pluralForm" :"nplurals=1; plural=0;"
}

View File

@@ -92,7 +92,7 @@ OC.L10N.register(
"Example Task 2" : "示例任務 2",
"Example Task 1" : "示例任務 1",
"The file was uploaded" : "檔案已上傳",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "上傳檔案大小超過 php.ini 中 upload_max_filesize 設置的值",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "上傳檔案大小超過 php.ini 中 upload_max_filesize 選項的限制",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "上傳的檔案大小超過 HTML 表單中 MAX_FILE_SIZE 的限制",
"The file was only partially uploaded" : "檔案僅部分上傳",
"No file was uploaded" : "沒有檔案被上傳",
@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "寫入硬碟失敗",
"A PHP extension stopped the file upload" : "某個 PHP 擴充功能終止檔案的上傳",
"No file uploaded or file size exceeds maximum of %s" : "沒有上傳檔案或檔案大小超過 %s 的最大值",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "此評論超過%s個字符。\n作為附件添加到名稱為 %s 的卡片上。\n可於此 URL 存取:%s。",
"Card not found" : "未找到卡片",
"Path is already shared with this card" : "已和這張卡片分享了路徑",
"Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式",
"Personal planning and team project organization" : "個人規劃和團隊項目組織",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 添加您的任務到 card 及將之整理好\n- 📄 用 Markdown 寫下額外的註釋分享分享分享\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊、朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 Markdown 描述中 \n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的專案井井有條",
"Card details" : "卡片詳情",
"Add board" : "添加面板",
"Select the board to link to a project" : "選擇要連結到一個項目的面板",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "封存卡片",
"Delete card" : "刪除卡片",
"Move card to another board" : "將卡片移到其他面板",
"List is empty" : "列表是空的",
"Card deleted" : "卡片被刪除",
"seconds ago" : "幾秒前",
"All boards" : "全部面板",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "用一張 Deck 卡片進行分享 ",
"Share {file} with a Deck card" : "用一張 Deck 卡片分享 {file}",
"Share" : "分享",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條",
"Creating the new card…" : "正在建立新卡片...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" 已添加到 \"{board}\"",
"(circle)" : "(社交圈子)"
},
"nplurals=1; plural=0;");

View File

@@ -90,7 +90,7 @@
"Example Task 2" : "示例任務 2",
"Example Task 1" : "示例任務 1",
"The file was uploaded" : "檔案已上傳",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "上傳檔案大小超過 php.ini 中 upload_max_filesize 設置的值",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "上傳檔案大小超過 php.ini 中 upload_max_filesize 選項的限制",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "上傳的檔案大小超過 HTML 表單中 MAX_FILE_SIZE 的限制",
"The file was only partially uploaded" : "檔案僅部分上傳",
"No file was uploaded" : "沒有檔案被上傳",
@@ -98,10 +98,12 @@
"Could not write file to disk" : "寫入硬碟失敗",
"A PHP extension stopped the file upload" : "某個 PHP 擴充功能終止檔案的上傳",
"No file uploaded or file size exceeds maximum of %s" : "沒有上傳檔案或檔案大小超過 %s 的最大值",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "此評論超過%s個字符。\n作為附件添加到名稱為 %s 的卡片上。\n可於此 URL 存取:%s。",
"Card not found" : "未找到卡片",
"Path is already shared with this card" : "已和這張卡片分享了路徑",
"Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式",
"Personal planning and team project organization" : "個人規劃和團隊項目組織",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 添加您的任務到 card 及將之整理好\n- 📄 用 Markdown 寫下額外的註釋分享分享分享\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊、朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 Markdown 描述中 \n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的專案井井有條",
"Card details" : "卡片詳情",
"Add board" : "添加面板",
"Select the board to link to a project" : "選擇要連結到一個項目的面板",
@@ -237,6 +239,7 @@
"Archive card" : "封存卡片",
"Delete card" : "刪除卡片",
"Move card to another board" : "將卡片移到其他面板",
"List is empty" : "列表是空的",
"Card deleted" : "卡片被刪除",
"seconds ago" : "幾秒前",
"All boards" : "全部面板",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "用一張 Deck 卡片進行分享 ",
"Share {file} with a Deck card" : "用一張 Deck 卡片分享 {file}",
"Share" : "分享",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條",
"Creating the new card…" : "正在建立新卡片...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" 已添加到 \"{board}\"",
"(circle)" : "(社交圈子)"
},"pluralForm" :"nplurals=1; plural=0;"
}

View File

@@ -100,10 +100,12 @@ OC.L10N.register(
"Could not write file to disk" : "無法寫入硬碟",
"A PHP extension stopped the file upload" : "一個 PHP 擴充功能終止檔案的上傳",
"No file uploaded or file size exceeds maximum of %s" : "沒有上傳檔案或檔案超過上限 %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "此評論多於 %s 個字元。\n作為附件新增至名為 %s 的卡片上。\n可於此 URL 存取:%s。",
"Card not found" : "找不到卡片",
"Path is already shared with this card" : "路徑已與此卡片分享",
"Invalid date, date format must be YYYY-MM-DD" : "無效的日期,日期格式必須為 YYYY-MM-DD",
"Personal planning and team project organization" : "個人規劃與團隊專案組織",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck 是一套看板式組織工具,提供與 Nextcloud 整合的個人規劃與團隊專案組織功能。\n\n\n- 📥 將您的工作項目新增到卡片中,並將它們按順序排列\n- 📄 以 Markdown 編寫額外的註釋\n- 🔖 分配標籤讓組織更方便\n- 👥 與您的團隊、朋友與家人分享\n- 📎 附上檔案並將其嵌入到您的 Markdown 描述中\n- 💬 使用留言與您的團隊討論\n- ⚡ 追蹤活動流程中的變動\n- 🚀 整理好您的專案",
"Card details" : "卡片詳細資訊",
"Add board" : "新增佈告欄",
"Select the board to link to a project" : "選取要連結到專案的佈告欄",
@@ -239,6 +241,7 @@ OC.L10N.register(
"Archive card" : "封存卡片",
"Delete card" : "刪除卡片",
"Move card to another board" : "將卡片移動到其他佈告欄",
"List is empty" : "清單為空",
"Card deleted" : "卡片已刪除",
"seconds ago" : "幾秒前",
"All boards" : "所有佈告欄",
@@ -284,6 +287,9 @@ OC.L10N.register(
"Share with a Deck card" : "與 Deck 卡片分享",
"Share {file} with a Deck card" : "與 Deck 卡片分享 {file}",
"Share" : "分享",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck 是一套看板式組織工具,提供與 Nextcloud 整合的個人規劃與團隊專案組織功能。\n\n\n- 📥 將您的工作項目新增到卡片中,並將它們按順序排列\n- 📄 以 Markdown 編寫額外的註釋\n- 🔖 分配標籤讓組織更方便\n- 👥 與您的團隊、朋友與家人分享\n- 📎 附上檔案並將其嵌入到您的 Markdown 描述中\n- 💬 使用留言與您的團隊討論\n- ⚡ 追蹤活動流程中的變動\n- 🚀 整理好您的專案"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck 是一套看板式組織工具,提供與 Nextcloud 整合的個人規劃與團隊專案組織功能。\n\n\n- 📥 將您的工作項目新增到卡片中,並將它們按順序排列\n- 📄 以 Markdown 編寫額外的註釋\n- 🔖 分配標籤讓組織更方便\n- 👥 與您的團隊、朋友與家人分享\n- 📎 附上檔案並將其嵌入到您的 Markdown 描述中\n- 💬 使用留言與您的團隊討論\n- ⚡ 追蹤活動流程中的變動\n- 🚀 整理好您的專案",
"Creating the new card…" : "正在建立新卡片……",
"\"{card}\" was added to \"{board}\"" : "「{card}」已新增至「{board}」",
"(circle)" : "(circle)"
},
"nplurals=1; plural=0;");

View File

@@ -98,10 +98,12 @@
"Could not write file to disk" : "無法寫入硬碟",
"A PHP extension stopped the file upload" : "一個 PHP 擴充功能終止檔案的上傳",
"No file uploaded or file size exceeds maximum of %s" : "沒有上傳檔案或檔案超過上限 %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "此評論多於 %s 個字元。\n作為附件新增至名為 %s 的卡片上。\n可於此 URL 存取:%s。",
"Card not found" : "找不到卡片",
"Path is already shared with this card" : "路徑已與此卡片分享",
"Invalid date, date format must be YYYY-MM-DD" : "無效的日期,日期格式必須為 YYYY-MM-DD",
"Personal planning and team project organization" : "個人規劃與團隊專案組織",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck 是一套看板式組織工具,提供與 Nextcloud 整合的個人規劃與團隊專案組織功能。\n\n\n- 📥 將您的工作項目新增到卡片中,並將它們按順序排列\n- 📄 以 Markdown 編寫額外的註釋\n- 🔖 分配標籤讓組織更方便\n- 👥 與您的團隊、朋友與家人分享\n- 📎 附上檔案並將其嵌入到您的 Markdown 描述中\n- 💬 使用留言與您的團隊討論\n- ⚡ 追蹤活動流程中的變動\n- 🚀 整理好您的專案",
"Card details" : "卡片詳細資訊",
"Add board" : "新增佈告欄",
"Select the board to link to a project" : "選取要連結到專案的佈告欄",
@@ -237,6 +239,7 @@
"Archive card" : "封存卡片",
"Delete card" : "刪除卡片",
"Move card to another board" : "將卡片移動到其他佈告欄",
"List is empty" : "清單為空",
"Card deleted" : "卡片已刪除",
"seconds ago" : "幾秒前",
"All boards" : "所有佈告欄",
@@ -282,6 +285,9 @@
"Share with a Deck card" : "與 Deck 卡片分享",
"Share {file} with a Deck card" : "與 Deck 卡片分享 {file}",
"Share" : "分享",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck 是一套看板式組織工具,提供與 Nextcloud 整合的個人規劃與團隊專案組織功能。\n\n\n- 📥 將您的工作項目新增到卡片中,並將它們按順序排列\n- 📄 以 Markdown 編寫額外的註釋\n- 🔖 分配標籤讓組織更方便\n- 👥 與您的團隊、朋友與家人分享\n- 📎 附上檔案並將其嵌入到您的 Markdown 描述中\n- 💬 使用留言與您的團隊討論\n- ⚡ 追蹤活動流程中的變動\n- 🚀 整理好您的專案"
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck 是一套看板式組織工具,提供與 Nextcloud 整合的個人規劃與團隊專案組織功能。\n\n\n- 📥 將您的工作項目新增到卡片中,並將它們按順序排列\n- 📄 以 Markdown 編寫額外的註釋\n- 🔖 分配標籤讓組織更方便\n- 👥 與您的團隊、朋友與家人分享\n- 📎 附上檔案並將其嵌入到您的 Markdown 描述中\n- 💬 使用留言與您的團隊討論\n- ⚡ 追蹤活動流程中的變動\n- 🚀 整理好您的專案",
"Creating the new card…" : "正在建立新卡片……",
"\"{card}\" was added to \"{board}\"" : "「{card}」已新增至「{board}」",
"(circle)" : "(circle)"
},"pluralForm" :"nplurals=1; plural=0;"
}

View File

@@ -0,0 +1,92 @@
<?php
/**
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
namespace OCA\Deck\Command;
use OCA\Deck\Service\Importer\BoardImportCommandService;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class BoardImport extends Command {
/** @var BoardImportCommandService */
private $boardImportCommandService;
public function __construct(
BoardImportCommandService $boardImportCommandService
) {
$this->boardImportCommandService = $boardImportCommandService;
parent::__construct();
}
/**
* @return void
*/
protected function configure() {
$allowedSystems = $this->boardImportCommandService->getAllowedImportSystems();
$names = array_column($allowedSystems, 'name');
$this
->setName('deck:import')
->setDescription('Import data')
->addOption(
'system',
null,
InputOption::VALUE_REQUIRED,
'Source system for import. Available options: ' . implode(', ', $names) . '.',
null
)
->addOption(
'config',
null,
InputOption::VALUE_REQUIRED,
'Configuration json file.',
'config.json'
)
->addOption(
'data',
null,
InputOption::VALUE_OPTIONAL,
'Data file to import.',
'data.json'
)
;
}
/**
* @param InputInterface $input
* @param OutputInterface $output
*
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output): int {
$this
->boardImportCommandService
->setInput($input)
->setOutput($output)
->setCommand($this)
->import();
$output->writeln('Done!');
return 0;
}
}

View File

@@ -0,0 +1,85 @@
<?php
/**
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
namespace OCA\Deck\Controller;
use OCA\Deck\Service\Importer\BoardImportService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\IRequest;
class BoardImportApiController extends OCSController {
/** @var BoardImportService */
private $boardImportService;
/** @var string */
private $userId;
public function __construct(
string $appName,
IRequest $request,
BoardImportService $boardImportService,
string $userId
) {
parent::__construct($appName, $request);
$this->boardImportService = $boardImportService;
$this->userId = $userId;
}
/**
* @NoAdminRequired
* @CORS
* @NoCSRFRequired
*/
public function import(string $system, array $config, array $data): DataResponse {
$this->boardImportService->setSystem($system);
$config = json_decode(json_encode($config));
$config->owner = $this->userId;
$this->boardImportService->setConfigInstance($config);
$this->boardImportService->setData(json_decode(json_encode($data)));
$this->boardImportService->import();
return new DataResponse($this->boardImportService->getBoard(), Http::STATUS_OK);
}
/**
* @NoAdminRequired
* @CORS
* @NoCSRFRequired
*/
public function getAllowedSystems(): DataResponse {
$allowedSystems = $this->boardImportService->getAllowedImportSystems();
return new DataResponse($allowedSystems, Http::STATUS_OK);
}
/**
* @NoAdminRequired
* @CORS
* @NoCSRFRequired
*/
public function getConfigSchema(string $name): DataResponse {
$this->boardImportService->setSystem($name);
$this->boardImportService->validateSystem();
$jsonSchemaPath = json_decode(file_get_contents($this->boardImportService->getJsonSchemaPath()));
return new DataResponse($jsonSchemaPath, Http::STATUS_OK);
}
}

View File

@@ -94,7 +94,7 @@ class CardApiController extends ApiController {
*
* Update a card
*/
public function update($title, $type, $order = 0, $description = '', $owner, $duedate = null, $archived = null) {
public function update($title, $type, $owner, $description = '', $order = 0, $duedate = null, $archived = null) {
$card = $this->cardService->update($this->request->getParam('cardId'), $title, $this->request->getParam('stackId'), $type, $owner, $description, $order, $duedate, 0, $archived);
return new DataResponse($card, HTTP::STATUS_OK);
}

View File

@@ -24,7 +24,7 @@
namespace OCA\Deck\Cron;
use OC\BackgroundJob\Job;
use OCP\BackgroundJob\Job;
use OCA\Deck\Activity\ActivityManager;
use OCA\Deck\Db\CardMapper;

View File

@@ -24,13 +24,14 @@
namespace OCA\Deck\Cron;
use OC\BackgroundJob\Job;
use OCP\BackgroundJob\TimedJob;
use OCA\Deck\Db\AttachmentMapper;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\InvalidAttachmentType;
use OCA\Deck\Service\AttachmentService;
use OCP\BackgroundJob\IJob;
class DeleteCron extends Job {
class DeleteCron extends TimedJob {
/** @var BoardMapper */
private $boardMapper;
@@ -43,6 +44,9 @@ class DeleteCron extends Job {
$this->boardMapper = $boardMapper;
$this->attachmentService = $attachmentService;
$this->attachmentMapper = $attachmentMapper;
$this->setInterval(60 * 60 * 24);
$this->setTimeSensitivity(IJob::TIME_INSENSITIVE);
}
/**

View File

@@ -23,7 +23,7 @@
namespace OCA\Deck\Cron;
use OC\BackgroundJob\Job;
use OCP\BackgroundJob\Job;
use OCA\Deck\Db\Card;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Notification\NotificationHelper;

View File

@@ -25,23 +25,46 @@ namespace OCA\Deck\Db;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\AppFramework\Db\QBMapper;
use OCP\IDBConnection;
class AclMapper extends DeckMapper implements IPermissionMapper {
class AclMapper extends QBMapper implements IPermissionMapper {
public function __construct(IDBConnection $db) {
parent::__construct($db, 'deck_board_acl', Acl::class);
}
public function find($id): Acl {
$query = $this->db->getQueryBuilder();
$query->select('*')
->from($this->getTableName())
->where($query->expr()->eq('id', $query->createNamedParameter($id)));
return $this->findEntity($query);
}
public function findAll($boardId, $limit = null, $offset = null) {
$sql = 'SELECT id, board_id, type, participant, permission_edit, permission_share, permission_manage FROM `*PREFIX*deck_board_acl` WHERE `board_id` = ? ';
return $this->findEntities($sql, [$boardId], $limit, $offset);
$query = $this->db->getQueryBuilder();
$query->select('*')
->from($this->getTableName())
->where($query->expr()->eq('board_id', $query->createNamedParameter($boardId)))
->setMaxResults($limit)
->setFirstResult($offset);
return $this->findEntities($query);
}
public function isOwner($userId, $aclId): bool {
$sql = 'SELECT owner FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_board_acl` WHERE id = ?)';
$stmt = $this->execute($sql, [$aclId]);
$row = $stmt->fetch();
return ($row['owner'] === $userId);
$query = $this->db->getQueryBuilder();
$query->select('owner')
->from('deck_boards', 'b')
->innerJoin('b', $this->getTableName(), 'a', $query->expr()->eq('b.id', 'a.board_id'))
->where($query->expr()->eq('a.id', $query->createNamedParameter($aclId)));
$cursor = $query->execute();
$row = $cursor->fetch();
$cursor->closeCursor();
return is_array($row) && $row['owner'] === $userId;
}
public function findBoardId($id): ?int {
@@ -53,8 +76,13 @@ class AclMapper extends DeckMapper implements IPermissionMapper {
return null;
}
public function findByParticipant($type, $participant): array {
$sql = 'SELECT * from *PREFIX*deck_board_acl WHERE type = ? AND participant = ?';
return $this->findEntities($sql, [$type, $participant]);
public function findByParticipant(int $type, string $participant): array {
$query = $this->db->getQueryBuilder();
$query->select('*')
->from($this->getTableName())
->where($query->expr()->eq('type', $query->createNamedParameter($type)))
->andWhere($query->expr()->eq('type', $query->createNamedParameter($participant)));
return $this->findEntities($query);
}
}

View File

@@ -24,6 +24,7 @@
namespace OCA\Deck\Db;
use OC\Cache\CappedMemoryCache;
use OCA\Deck\Service\CirclesService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\QBMapper;
use OCP\DB\QueryBuilder\IQueryBuilder;
@@ -38,10 +39,9 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
private $stackMapper;
private $userManager;
private $groupManager;
private $circlesService;
private $logger;
private $circlesEnabled;
/** @var CappedMemoryCache */
private $userBoardCache;
/** @var CappedMemoryCache */
@@ -54,6 +54,7 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
StackMapper $stackMapper,
IUserManager $userManager,
IGroupManager $groupManager,
CirclesService $circlesService,
LoggerInterface $logger
) {
parent::__construct($db, 'deck_boards', Board::class);
@@ -62,12 +63,11 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
$this->stackMapper = $stackMapper;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->circlesService = $circlesService;
$this->logger = $logger;
$this->userBoardCache = new CappedMemoryCache();
$this->boardCache = new CappedMemoryCache();
$this->circlesEnabled = \OC::$server->getAppManager()->isEnabledForUser('circles');
}
@@ -315,12 +315,7 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
public function findAllByCircles(string $userId, ?int $limit = null, ?int $offset = null, ?int $since = null,
bool $includeArchived = true, ?int $before = null, ?string $term = null) {
if (!$this->circlesEnabled) {
return [];
}
$circles = array_map(function ($circle) {
return $circle->getUniqueId();
}, \OCA\Circles\Api\v1\Circles::joinedCircles($userId, true));
$circles = $this->circlesService->getUserCircles($userId);
if (count($circles) === 0) {
return [];
}
@@ -449,11 +444,11 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
return null;
}
if ($acl->getType() === Acl::PERMISSION_TYPE_CIRCLE) {
if (!$this->circlesEnabled) {
if (!$this->circlesService->isCirclesEnabled()) {
return null;
}
try {
$circle = \OCA\Circles\Api\v1\Circles::detailsCircle($acl->getParticipant(), true);
$circle = $this->circlesService->getCircle($acl->getParticipant());
if ($circle) {
return new Circle($circle);
}

View File

@@ -265,7 +265,7 @@ class CardMapper extends QBMapper implements IPermissionMapper {
public function findOverdue() {
$qb = $this->db->getQueryBuilder();
$qb->select('id','title','duedate','notified')
$qb->select('id', 'title', 'duedate', 'notified')
->from('deck_cards')
->where($qb->expr()->lt('duedate', $qb->createFunction('NOW()')))
->andWhere($qb->expr()->eq('notified', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
@@ -276,7 +276,7 @@ class CardMapper extends QBMapper implements IPermissionMapper {
public function findUnexposedDescriptionChances() {
$qb = $this->db->getQueryBuilder();
$qb->select('id','title','duedate','notified','description_prev','last_editor','description')
$qb->select('id', 'title', 'duedate', 'notified', 'description_prev', 'last_editor', 'description')
->from('deck_cards')
->where($qb->expr()->isNotNull('last_editor'))
->andWhere($qb->expr()->isNotNull('description_prev'));

View File

@@ -0,0 +1,44 @@
<?php
/*
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Event;
use OCA\Deck\Service\Importer\BoardImportService;
use OCP\EventDispatcher\Event;
abstract class ABoardImportGetAllowedEvent extends Event {
private $service;
public function __construct(BoardImportService $service) {
parent::__construct();
$this->service = $service;
}
public function getService(): BoardImportService {
return $this->service;
}
}

View File

@@ -0,0 +1,29 @@
<?php
/*
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Event;
class BoardImportGetAllowedEvent extends ABoardImportGetAllowedEvent {
}

View File

@@ -33,6 +33,6 @@ use OCP\Search\SearchResultEntry;
class CardSearchResultEntry extends SearchResultEntry {
public function __construct(Board $board, Stack $stack, Card $card, $urlGenerator) {
parent::__construct('', $card->getTitle(), $board->getTitle() . ' » ' . $stack->getTitle() , $urlGenerator->linkToRouteAbsolute('deck.page.index') . '#/board/' . $board->getId() . '/card/' . $card->getId(), 'icon-deck');
parent::__construct('', $card->getTitle(), $board->getTitle() . ' » ' . $stack->getTitle(), $urlGenerator->linkToRouteAbsolute('deck.page.index') . '#/board/' . $board->getId() . '/card/' . $card->getId(), 'icon-deck');
}
}

View File

@@ -37,6 +37,7 @@ use OCA\Deck\Db\StackMapper;
use OCA\Deck\Event\CardCreatedEvent;
use OCA\Deck\Event\CardDeletedEvent;
use OCA\Deck\Event\CardUpdatedEvent;
use OCA\Deck\NoPermissionException;
use OCA\Deck\Notification\NotificationHelper;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper;
@@ -154,7 +155,12 @@ class CardService {
}
public function findCalendarEntries($boardId) {
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
try {
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
} catch (NoPermissionException $e) {
\OC::$server->getLogger()->error('Unable to check permission for a previously obtained board ' . $boardId, ['exception' => $e]);
return [];
}
$cards = $this->cardMapper->findCalendarEntries($boardId);
foreach ($cards as $card) {
$this->enrich($card);

View File

@@ -27,8 +27,11 @@ declare(strict_types=1);
namespace OCA\Deck\Service;
use OCA\Circles\CirclesManager;
use OCA\Circles\Model\Circle;
use OCA\Circles\Model\Member;
use OCA\Circles\Model\Probes\CircleProbe;
use OCP\App\IAppManager;
use Throwable;
/**
* Wrapper around circles app API since it is not in a public namespace so we need to make sure that
@@ -45,15 +48,24 @@ class CirclesService {
return $this->circlesEnabled;
}
public function getCircle($circleId) {
public function getCircle(string $circleId): ?Circle {
if (!$this->circlesEnabled) {
return null;
}
return \OCA\Circles\Api\v1\Circles::detailsCircle($circleId, true);
try {
// Enforce current user condition since we always want the full list of members
/** @var CirclesManager $circlesManager */
$circlesManager = \OC::$server->get(CirclesManager::class);
$circlesManager->startSuperSession();
return $circlesManager->getCircle($circleId);
} catch (Throwable $e) {
}
return null;
}
public function isUserInCircle($circleId, $userId): bool {
public function isUserInCircle(string $circleId, string $userId): bool {
if (!$this->circlesEnabled) {
return false;
}
@@ -66,8 +78,32 @@ class CirclesService {
$circle = $circlesManager->getCircle($circleId);
$member = $circle->getInitiator();
return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER;
} catch (\Exception $e) {
} catch (Throwable $e) {
}
return false;
}
/**
* @param string $userId
* @return string[] circle single ids
*/
public function getUserCircles(string $userId): array {
if (!$this->circlesEnabled) {
return [];
}
try {
/** @var CirclesManager $circlesManager */
$circlesManager = \OC::$server->get(CirclesManager::class);
$federatedUser = $circlesManager->getFederatedUser($userId, Member::TYPE_USER);
$circlesManager->startSession($federatedUser);
$probe = new CircleProbe();
$probe->mustBeMember();
return array_map(function (Circle $circle) {
return $circle->getSingleId();
}, $circlesManager->getCircles($probe));
} catch (Throwable $e) {
}
return [];
}
}

View File

@@ -66,7 +66,8 @@ class ConfigService {
}
$data = [
'calendar' => $this->isCalendarEnabled()
'calendar' => $this->isCalendarEnabled(),
'cardDetailsInModal' => $this->isCardDetailsInModal(),
];
if ($this->groupManager->isAdmin($this->getUserId())) {
$data['groupLimit'] = $this->get('groupLimit');
@@ -88,6 +89,11 @@ class ConfigService {
return false;
}
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'calendar', true);
case 'cardDetailsInModal':
if ($this->getUserId() === null) {
return false;
}
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'cardDetailsInModal', true);
}
}
@@ -96,7 +102,8 @@ class ConfigService {
return false;
}
$defaultState = (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'calendar', true);
$appConfigState = $this->config->getAppValue(Application::APP_ID, 'calendar', 'yes') === 'yes';
$defaultState = (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'calendar', $appConfigState);
if ($boardId === null) {
return $defaultState;
}
@@ -104,6 +111,19 @@ class ConfigService {
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'board:' . $boardId . ':calendar', $defaultState);
}
public function isCardDetailsInModal(int $boardId = null): bool {
if ($this->getUserId() === null) {
return false;
}
$defaultState = (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'cardDetailsInModal', true);
if ($boardId === null) {
return $defaultState;
}
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'board:' . $boardId . ':cardDetailsInModal', $defaultState);
}
public function set($key, $value) {
if ($this->getUserId() === null) {
throw new NoPermissionException('Must be logged in to set user config');
@@ -122,6 +142,10 @@ class ConfigService {
$this->config->setUserValue($this->getUserId(), Application::APP_ID, 'calendar', (string)$value);
$result = $value;
break;
case 'cardDetailsInModal':
$this->config->setUserValue($this->getUserId(), Application::APP_ID, 'cardDetailsInModal', (string)$value);
$result = $value;
break;
case 'board':
[$boardId, $boardConfigKey] = explode(':', $key);
if ($boardConfigKey === 'notify-due' && !in_array($value, [self::SETTING_BOARD_NOTIFICATION_DUE_ALL, self::SETTING_BOARD_NOTIFICATION_DUE_ASSIGNED, self::SETTING_BOARD_NOTIFICATION_DUE_OFF], true)) {

View File

@@ -86,7 +86,7 @@ class FileService implements IAttachmentService {
* @return ISimpleFolder
* @throws NotPermittedException
*/
private function getFolder(Attachment $attachment) {
public function getFolder(Attachment $attachment) {
$folderName = 'file-card-' . (int)$attachment->getCardId();
try {
$folder = $this->appData->getFolder($folderName);

View File

@@ -0,0 +1,136 @@
<?php
/**
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
namespace OCA\Deck\Service\Importer;
use OCA\Deck\Db\Acl;
use OCA\Deck\Db\Assignment;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\Card;
use OCA\Deck\Db\Label;
use OCA\Deck\Db\Stack;
use OCP\AppFramework\Db\Entity;
use OCP\Comments\IComment;
abstract class ABoardImportService {
/** @var string */
public static $name = '';
/** @var BoardImportService */
private $boardImportService;
/** @var bool */
protected $needValidateData = true;
/** @var Stack[] */
protected $stacks = [];
/** @var Label[] */
protected $labels = [];
/** @var Card[] */
protected $cards = [];
/** @var Acl[] */
protected $acls = [];
/** @var IComment[][] */
protected $comments = [];
/** @var Assignment[] */
protected $assignments = [];
/** @var string[][] */
protected $labelCardAssignments = [];
/**
* Configure import service
*
* @return void
*/
abstract public function bootstrap(): void;
abstract public function getBoard(): ?Board;
/**
* @return Acl[]
*/
abstract public function getAclList(): array;
/**
* @return Stack[]
*/
abstract public function getStacks(): array;
/**
* @return Card[]
*/
abstract public function getCards(): array;
abstract public function getCardAssignments(): array;
abstract public function getCardLabelAssignment(): array;
/**
* @return IComment[][]|array
*/
abstract public function getComments(): array;
/** @return Label[] */
abstract public function getLabels(): array;
abstract public function validateUsers(): void;
abstract public function getJsonSchemaPath(): string;
public function updateStack(string $id, Stack $stack): void {
$this->stacks[$id] = $stack;
}
public function updateCard(string $id, Card $card): void {
$this->cards[$id] = $card;
}
public function updateLabel(string $code, Label $label): void {
$this->labels[$code] = $label;
}
public function updateAcl(string $code, Acl $acl): void {
$this->acls[$code] = $acl;
}
public function updateComment(string $cardId, string $commentId, IComment $comment): void {
$this->comments[$cardId][$commentId] = $comment;
}
public function updateCardAssignment(string $cardId, string $assignmentId, Entity $assignment): void {
$this->assignments[$cardId][$assignmentId] = $assignment;
}
public function updateCardLabelsAssignment(string $cardId, string $assignmentId, string $assignment): void {
$this->labelCardAssignments[$cardId][$assignmentId] = $assignment;
}
public function setImportService(BoardImportService $service): void {
$this->boardImportService = $service;
}
public function getImportService(): BoardImportService {
return $this->boardImportService;
}
public function needValidateData(): bool {
return $this->needValidateData;
}
}

View File

@@ -0,0 +1,199 @@
<?php
/**
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
namespace OCA\Deck\Service\Importer;
use OCA\Deck\Exceptions\ConflictException;
use OCA\Deck\NotFoundException;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ChoiceQuestion;
use Symfony\Component\Console\Question\Question;
class BoardImportCommandService extends BoardImportService {
/**
* @var Command
* @psalm-suppress PropertyNotSetInConstructor
*/
private $command;
/**
* @var InputInterface
* @psalm-suppress PropertyNotSetInConstructor
*/
private $input;
/**
* @var OutputInterface
* @psalm-suppress PropertyNotSetInConstructor
*/
private $output;
public function setCommand(Command $command): self {
$this->command = $command;
return $this;
}
public function getCommand(): Command {
return $this->command;
}
public function setInput(InputInterface $input): self {
$this->input = $input;
return $this;
}
public function getInput(): InputInterface {
return $this->input;
}
public function setOutput(OutputInterface $output): self {
$this->output = $output;
return $this;
}
public function getOutput(): OutputInterface {
return $this->output;
}
protected function validateConfig(): void {
try {
$config = $this->getInput()->getOption('config');
if (is_string($config)) {
if (!is_file($config)) {
throw new NotFoundException('It\'s not a valid config file.');
}
$config = json_decode(file_get_contents($config));
if (!$config instanceof \stdClass) {
throw new NotFoundException('Failed to parse JSON.');
}
$this->setConfigInstance($config);
}
parent::validateConfig();
return;
} catch (NotFoundException $e) {
$this->getOutput()->writeln('<error>' . $e->getMessage() . '</error>');
$helper = $this->getCommand()->getHelper('question');
$question = new Question(
"<info>You can get more info on https://deck.readthedocs.io/en/latest/User_documentation_en/#6-import-boards</info>\n" .
'Please inform a valid config json file: ',
'config.json'
);
$question->setValidator(function (string $answer) {
if (!is_file($answer)) {
throw new \RuntimeException(
'config file not found'
);
}
return $answer;
});
$configFile = $helper->ask($this->getInput(), $this->getOutput(), $question);
$this->getInput()->setOption('config', $configFile);
} catch (ConflictException $e) {
$this->getOutput()->writeln('<error>Invalid config file</error>');
$this->getOutput()->writeln(array_map(function (array $v): string {
return $v['message'];
}, $e->getData()));
$this->getOutput()->writeln('Valid schema:');
$this->getOutput()->writeln(print_r(file_get_contents($this->getJsonSchemaPath()), true));
$this->getInput()->setOption('config', '');
}
$this->validateConfig();
}
public function validateSystem(): void {
try {
parent::validateSystem();
return;
} catch (\Throwable $th) {
}
$helper = $this->getCommand()->getHelper('question');
$allowedSystems = $this->getAllowedImportSystems();
$names = array_column($allowedSystems, 'name');
$question = new ChoiceQuestion(
'Please inform a source system',
$names,
0
);
$question->setErrorMessage('System %s is invalid.');
$selectedName = $helper->ask($this->getInput(), $this->getOutput(), $question);
$className = $allowedSystems[array_flip($names)[$selectedName]]['internalName'];
$this->setSystem($className);
return;
}
protected function validateData(): void {
if (!$this->getImportSystem()->needValidateData()) {
return;
}
$data = $this->getInput()->getOption('data');
if (is_string($data)) {
$data = json_decode(file_get_contents($data));
if ($data instanceof \stdClass) {
$this->setData($data);
return;
}
}
$helper = $this->getCommand()->getHelper('question');
$question = new Question(
'Please provide a valid data json file: ',
'data.json'
);
$question->setValidator(function (string $answer) {
if (!is_file($answer)) {
throw new \RuntimeException(
'Data file not found'
);
}
return $answer;
});
$data = $helper->ask($this->getInput(), $this->getOutput(), $question);
$this->getInput()->setOption('data', $data);
$this->validateData();
}
public function bootstrap(): void {
$this->setSystem($this->getInput()->getOption('system'));
parent::bootstrap();
}
public function import(): void {
$this->getOutput()->writeln('Starting import...');
$this->bootstrap();
$this->getOutput()->writeln('Importing board...');
$this->importBoard();
$this->getOutput()->writeln('Assign users to board...');
$this->importAcl();
$this->getOutput()->writeln('Importing labels...');
$this->importLabels();
$this->getOutput()->writeln('Importing stacks...');
$this->importStacks();
$this->getOutput()->writeln('Importing cards...');
$this->importCards();
$this->getOutput()->writeln('Assign cards to labels...');
$this->assignCardsToLabels();
$this->getOutput()->writeln('Importing comments...');
$this->importComments();
$this->getOutput()->writeln('Importing participants...');
$this->importCardAssignments();
}
}

View File

@@ -0,0 +1,449 @@
<?php
/**
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
namespace OCA\Deck\Service\Importer;
use JsonSchema\Constraints\Constraint;
use JsonSchema\Validator;
use OCA\Deck\AppInfo\Application;
use OCA\Deck\BadRequestException;
use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\Attachment;
use OCA\Deck\Db\AttachmentMapper;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\Event\BoardImportGetAllowedEvent;
use OCA\Deck\Exceptions\ConflictException;
use OCA\Deck\NotFoundException;
use OCA\Deck\Service\FileService;
use OCA\Deck\Service\Importer\Systems\TrelloApiService;
use OCA\Deck\Service\Importer\Systems\TrelloJsonService;
use OCP\Comments\IComment;
use OCP\Comments\ICommentsManager;
use OCP\Comments\NotFoundException as CommentNotFoundException;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IUserManager;
class BoardImportService {
/** @var IUserManager */
private $userManager;
/** @var BoardMapper */
private $boardMapper;
/** @var AclMapper */
private $aclMapper;
/** @var LabelMapper */
private $labelMapper;
/** @var StackMapper */
private $stackMapper;
/** @var CardMapper */
private $cardMapper;
/** @var AssignmentMapper */
private $assignmentMapper;
/** @var AttachmentMapper */
private $attachmentMapper;
/** @var ICommentsManager */
private $commentsManager;
/** @var IEventDispatcher */
private $eventDispatcher;
/** @var string */
private $system = '';
/** @var null|ABoardImportService */
private $systemInstance;
/** @var array */
private $allowedSystems = [];
/**
* Data object created from config JSON
*
* @var \stdClass
* @psalm-suppress PropertyNotSetInConstructor
*/
public $config;
/**
* Data object created from JSON of origin system
*
* @var \stdClass
* @psalm-suppress PropertyNotSetInConstructor
*/
private $data;
/**
* @var Board
*/
private $board;
public function __construct(
IUserManager $userManager,
BoardMapper $boardMapper,
AclMapper $aclMapper,
LabelMapper $labelMapper,
StackMapper $stackMapper,
AssignmentMapper $assignmentMapper,
AttachmentMapper $attachmentMapper,
CardMapper $cardMapper,
ICommentsManager $commentsManager,
IEventDispatcher $eventDispatcher
) {
$this->userManager = $userManager;
$this->boardMapper = $boardMapper;
$this->aclMapper = $aclMapper;
$this->labelMapper = $labelMapper;
$this->stackMapper = $stackMapper;
$this->cardMapper = $cardMapper;
$this->assignmentMapper = $assignmentMapper;
$this->attachmentMapper = $attachmentMapper;
$this->commentsManager = $commentsManager;
$this->eventDispatcher = $eventDispatcher;
$this->board = new Board();
$this->disableCommentsEvents();
}
private function disableCommentsEvents(): void {
if (defined('PHPUNIT_RUN')) {
return;
}
$propertyEventHandlers = new \ReflectionProperty($this->commentsManager, 'eventHandlers');
$propertyEventHandlers->setAccessible(true);
$propertyEventHandlers->setValue($this->commentsManager, []);
$propertyEventHandlerClosures = new \ReflectionProperty($this->commentsManager, 'eventHandlerClosures');
$propertyEventHandlerClosures->setAccessible(true);
$propertyEventHandlerClosures->setValue($this->commentsManager, []);
}
public function import(): void {
$this->bootstrap();
try {
$this->importBoard();
$this->importAcl();
$this->importLabels();
$this->importStacks();
$this->importCards();
$this->assignCardsToLabels();
$this->importComments();
$this->importCardAssignments();
} catch (\Throwable $th) {
throw new BadRequestException($th->getMessage());
}
}
public function validateSystem(): void {
$allowedSystems = $this->getAllowedImportSystems();
$allowedSystems = array_column($allowedSystems, 'internalName');
if (!in_array($this->getSystem(), $allowedSystems)) {
throw new NotFoundException('Invalid system');
}
}
/**
* @param mixed $system
* @return self
*/
public function setSystem($system): self {
$this->system = $system;
return $this;
}
public function getSystem(): string {
return $this->system;
}
public function addAllowedImportSystem($system): self {
$this->allowedSystems[] = $system;
return $this;
}
public function getAllowedImportSystems(): array {
if (!$this->allowedSystems) {
$this->addAllowedImportSystem([
'name' => TrelloApiService::$name,
'class' => TrelloApiService::class,
'internalName' => 'TrelloApi'
]);
$this->addAllowedImportSystem([
'name' => TrelloJsonService::$name,
'class' => TrelloJsonService::class,
'internalName' => 'TrelloJson'
]);
}
$this->eventDispatcher->dispatchTyped(new BoardImportGetAllowedEvent($this));
return $this->allowedSystems;
}
public function getImportSystem(): ABoardImportService {
if (!$this->getSystem()) {
throw new NotFoundException('System to import not found');
}
if (!is_object($this->systemInstance)) {
$systemClass = 'OCA\\Deck\\Service\\Importer\\Systems\\' . ucfirst($this->getSystem()) . 'Service';
$this->systemInstance = \OC::$server->get($systemClass);
$this->systemInstance->setImportService($this);
}
return $this->systemInstance;
}
public function setImportSystem(ABoardImportService $instance): void {
$this->systemInstance = $instance;
}
public function importBoard(): void {
$board = $this->getImportSystem()->getBoard();
if ($board) {
$this->boardMapper->insert($board);
$this->board = $board;
}
}
public function getBoard(bool $reset = false): Board {
if ($reset) {
$this->board = new Board();
}
return $this->board;
}
public function importAcl(): void {
$aclList = $this->getImportSystem()->getAclList();
foreach ($aclList as $code => $acl) {
$this->aclMapper->insert($acl);
$this->getImportSystem()->updateAcl($code, $acl);
}
$this->getBoard()->setAcl($aclList);
}
public function importLabels(): void {
$labels = $this->getImportSystem()->getLabels();
foreach ($labels as $code => $label) {
$this->labelMapper->insert($label);
$this->getImportSystem()->updateLabel($code, $label);
}
$this->getBoard()->setLabels($labels);
}
public function importStacks(): void {
$stacks = $this->getImportSystem()->getStacks();
foreach ($stacks as $code => $stack) {
$this->stackMapper->insert($stack);
$this->getImportSystem()->updateStack($code, $stack);
}
$this->getBoard()->setStacks(array_values($stacks));
}
public function importCards(): void {
$cards = $this->getImportSystem()->getCards();
foreach ($cards as $code => $card) {
$createdAt = $card->getCreatedAt();
$lastModified = $card->getLastModified();
$this->cardMapper->insert($card);
$updateDate = false;
if ($createdAt && $createdAt !== $card->getCreatedAt()) {
$card->setCreatedAt($createdAt);
$updateDate = true;
}
if ($lastModified && $lastModified !== $card->getLastModified()) {
$card->setLastModified($lastModified);
$updateDate = true;
}
if ($updateDate) {
$this->cardMapper->update($card, false);
}
$this->getImportSystem()->updateCard($code, $card);
}
}
/**
* @param mixed $cardId
* @param mixed $labelId
* @return self
*/
public function assignCardToLabel($cardId, $labelId): self {
$this->cardMapper->assignLabel(
$cardId,
$labelId
);
return $this;
}
public function assignCardsToLabels(): void {
$data = $this->getImportSystem()->getCardLabelAssignment();
foreach ($data as $cardId => $assignemnt) {
foreach ($assignemnt as $assignmentId => $labelId) {
$this->assignCardToLabel(
$cardId,
$labelId
);
$this->getImportSystem()->updateCardLabelsAssignment($cardId, $assignmentId, $labelId);
}
}
}
public function importComments(): void {
$allComments = $this->getImportSystem()->getComments();
foreach ($allComments as $cardId => $comments) {
foreach ($comments as $commentId => $comment) {
$this->insertComment($cardId, $comment);
$this->getImportSystem()->updateComment($cardId, $commentId, $comment);
}
}
}
private function insertComment(string $cardId, IComment $comment): void {
$comment->setObject('deckCard', $cardId);
$comment->setVerb('comment');
// Check if parent is a comment on the same card
if ($comment->getParentId() !== '0') {
try {
$parent = $this->commentsManager->get($comment->getParentId());
if ($parent->getObjectType() !== Application::COMMENT_ENTITY_TYPE || $parent->getObjectId() !== $cardId) {
throw new CommentNotFoundException();
}
} catch (CommentNotFoundException $e) {
throw new BadRequestException('Invalid parent id: The parent comment was not found or belongs to a different card');
}
}
try {
$this->commentsManager->save($comment);
} catch (\InvalidArgumentException $e) {
throw new BadRequestException('Invalid input values');
} catch (CommentNotFoundException $e) {
throw new NotFoundException('Could not create comment.');
}
}
public function importCardAssignments(): void {
$allAssignments = $this->getImportSystem()->getCardAssignments();
foreach ($allAssignments as $cardId => $assignments) {
foreach ($assignments as $assignmentId => $assignment) {
$this->assignmentMapper->insert($assignment);
$this->getImportSystem()->updateCardAssignment($cardId, $assignmentId, $assignment);
}
}
}
public function insertAttachment(Attachment $attachment, string $content): Attachment {
$service = \OC::$server->get(FileService::class);
$folder = $service->getFolder($attachment);
if ($folder->fileExists($attachment->getData())) {
$attachment = $this->attachmentMapper->findByData($attachment->getCardId(), $attachment->getData());
throw new ConflictException('File already exists.', $attachment);
}
$target = $folder->newFile($attachment->getData());
$target->putContent($content);
$attachment = $this->attachmentMapper->insert($attachment);
$service->extendData($attachment);
return $attachment;
}
public function setData(\stdClass $data): void {
$this->data = $data;
}
public function getData(): \stdClass {
return $this->data;
}
/**
* Define a config
*
* @param string $configName
* @param mixed $value
* @return void
*/
public function setConfig(string $configName, $value): void {
if (empty((array) $this->config)) {
$this->setConfigInstance(new \stdClass);
}
$this->config->$configName = $value;
}
/**
* Get a config
*
* @param string $configName config name
* @return mixed
*/
public function getConfig(string $configName) {
if (!property_exists($this->config, $configName)) {
return;
}
return $this->config->$configName;
}
/**
* @param \stdClass $config
* @return self
*/
public function setConfigInstance($config): self {
$this->config = $config;
return $this;
}
public function getConfigInstance(): \stdClass {
return $this->config;
}
protected function validateConfig(): void {
$config = $this->getConfigInstance();
$schemaPath = $this->getJsonSchemaPath();
$validator = new Validator();
$newConfig = clone $config;
$validator->validate(
$newConfig,
(object)['$ref' => 'file://' . realpath($schemaPath)],
Constraint::CHECK_MODE_APPLY_DEFAULTS
);
if (!$validator->isValid()) {
throw new ConflictException('Invalid config file', $validator->getErrors());
}
$this->setConfigInstance($newConfig);
$this->validateOwner();
}
public function getJsonSchemaPath(): string {
return $this->getImportSystem()->getJsonSchemaPath();
}
public function validateOwner(): void {
$owner = $this->userManager->get($this->getConfig('owner'));
if (!$owner) {
throw new \LogicException('Owner "' . $this->getConfig('owner')->getUID() . '" not found on Nextcloud. Check setting json.');
}
$this->setConfig('owner', $owner);
}
protected function validateData(): void {
}
public function bootstrap(): void {
$this->validateSystem();
$this->validateConfig();
$this->validateData();
$this->getImportSystem()->bootstrap();
}
}

View File

@@ -0,0 +1,214 @@
<?php
/**
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
namespace OCA\Deck\Service\Importer\Systems;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUserManager;
use Psr\Log\LoggerInterface;
class TrelloApiService extends TrelloJsonService {
/** @var string */
public static $name = 'Trello API';
protected $needValidateData = false;
/** @var IClient */
private $httpClient;
/** @var LoggerInterface */
protected $logger;
/** @var string */
private $baseApiUrl = 'https://api.trello.com/1';
/** @var ?\stdClass[] */
private $boards;
public function __construct(
IUserManager $userManager,
IURLGenerator $urlGenerator,
IL10N $l10n,
LoggerInterface $logger,
IClientService $httpClientService
) {
parent::__construct($userManager, $urlGenerator, $l10n);
$this->logger = $logger;
$this->httpClient = $httpClientService->newClient();
}
public function bootstrap(): void {
$this->populateBoard();
$this->populateMembers();
$this->populateLabels();
$this->populateLists();
$this->populateCheckLists();
$this->populateCards();
$this->populateActions();
parent::bootstrap();
}
public function getJsonSchemaPath(): string {
return implode(DIRECTORY_SEPARATOR, [
__DIR__,
'..',
'fixtures',
'config-trelloApi-schema.json',
]);
}
private function populateActions(): void {
$data = $this->getImportService()->getData();
$data->actions = $this->doRequest(
'/boards/' . $data->id . '/actions',
[
'filter' => 'commentCard,createCard',
'fields=memberCreator,type,data,date',
'memberCreator_fields' => 'username',
'limit' => 1000
]
);
}
private function populateCards(): void {
$data = $this->getImportService()->getData();
$data->cards = $this->doRequest(
'/boards/' . $data->id . '/cards',
[
'fields' => 'id,idMembers,dateLastActivity,closed,idChecklists,name,idList,pos,desc,due,labels',
'attachments' => true,
'attachment_fields' => 'name,url,date',
'limit' => 1000
]
);
}
private function populateCheckLists(): void {
$data = $this->getImportService()->getData();
$data->checklists = $this->doRequest(
'/boards/' . $data->id . '/checkLists',
[
'fields' => 'id,idCard,name',
'checkItem_fields' => 'id,state,name',
'limit' => 1000
]
);
}
private function populateLists(): void {
$data = $this->getImportService()->getData();
$data->lists = $this->doRequest(
'/boards/' . $data->id . '/lists',
[
'fields' => 'id,name,closed',
'limit' => 1000
]
);
}
private function populateLabels(): void {
$data = $this->getImportService()->getData();
$data->labels = $this->doRequest(
'/boards/' . $data->id . '/labels',
[
'fields' => 'id,color,name',
'limit' => 1000
]
);
}
private function populateMembers(): void {
$data = $this->getImportService()->getData();
$data->members = $this->doRequest(
'/boards/' . $data->id . '/members',
[
'fields' => 'username',
'limit' => 1000
]
);
}
private function populateBoard(): void {
$toImport = $this->getImportService()->getConfig('board');
$board = $this->doRequest(
'/boards/' . $toImport,
['fields' => 'id,name']
);
if ($board instanceof \stdClass) {
$this->getImportService()->setData($board);
return;
}
throw new \Exception('Invalid board id to import');
}
/**
* @return array|\stdClass
*/
private function doRequest(string $path = '', array $queryString = []) {
$target = $this->baseApiUrl . $path;
try {
$result = $this->httpClient
->get($target, $this->getQueryString($queryString))
->getBody();
if (is_string($result)) {
$data = json_decode($result);
if (is_array($data)) {
$data = array_merge(
$data,
$this->paginate($path, $queryString, $data)
);
}
return $data;
}
throw new \Exception('Invalid return of api');
} catch (\Throwable $e) {
$this->logger->critical(
$e->getMessage(),
['app' => 'deck']
);
throw new \Exception($e->getMessage());
}
}
private function paginate(string $path = '', array $queryString = [], array $data = []): array {
if (empty($queryString['limit'])) {
return [];
}
if (count($data) < $queryString['limit']) {
return [];
}
$queryString['before'] = end($data)->id;
$return = $this->doRequest($path, $queryString);
if (is_array($return)) {
return $return;
}
throw new \Exception('Invalid return of api');
}
private function getQueryString(array $params = []): array {
$apiSettings = $this->getImportService()->getConfig('api');
$params['key'] = $apiSettings->key;
$params['token'] = $apiSettings->token;
return [
'query' => $params
];
}
}

View File

@@ -0,0 +1,400 @@
<?php
/**
* @copyright Copyright (c) 2021 Vitor Mattos <vitor@php.rio>
*
* @author Vitor Mattos <vitor@php.rio>
*
* @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/>.
*
*/
namespace OCA\Deck\Service\Importer\Systems;
use OC\Comments\Comment;
use OCA\Deck\BadRequestException;
use OCA\Deck\Db\Acl;
use OCA\Deck\Db\Assignment;
use OCA\Deck\Db\Attachment;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\Card;
use OCA\Deck\Db\Label;
use OCA\Deck\Db\Stack;
use OCA\Deck\Service\Importer\ABoardImportService;
use OCP\Comments\IComment;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
class TrelloJsonService extends ABoardImportService {
/** @var string */
public static $name = 'Trello JSON';
/** @var IUserManager */
private $userManager;
/** @var IURLGenerator */
private $urlGenerator;
/** @var IL10N */
private $l10n;
/** @var IUser[] */
private $members = [];
public function __construct(
IUserManager $userManager,
IURLGenerator $urlGenerator,
IL10N $l10n
) {
$this->userManager = $userManager;
$this->urlGenerator = $urlGenerator;
$this->l10n = $l10n;
}
public function bootstrap(): void {
$this->validateUsers();
}
public function getJsonSchemaPath(): string {
return implode(DIRECTORY_SEPARATOR, [
__DIR__,
'..',
'fixtures',
'config-trelloJson-schema.json',
]);
}
public function validateUsers(): void {
if (empty($this->getImportService()->getConfig('uidRelation'))) {
return;
}
foreach ($this->getImportService()->getConfig('uidRelation') as $trelloUid => $nextcloudUid) {
$user = array_filter($this->getImportService()->getData()->members, function (\stdClass $u) use ($trelloUid) {
return $u->username === $trelloUid;
});
if (!$user) {
throw new \LogicException('Trello user ' . $trelloUid . ' not found in property "members" of json data');
}
if (!is_string($nextcloudUid) && !is_numeric($nextcloudUid)) {
throw new \LogicException('User on setting uidRelation is invalid');
}
$nextcloudUid = (string) $nextcloudUid;
$this->getImportService()->getConfig('uidRelation')->$trelloUid = $this->userManager->get($nextcloudUid);
if (!$this->getImportService()->getConfig('uidRelation')->$trelloUid) {
throw new \LogicException('User on setting uidRelation not found: ' . $nextcloudUid);
}
$user = current($user);
$this->members[$user->id] = $this->getImportService()->getConfig('uidRelation')->$trelloUid;
}
}
public function getCardAssignments(): array {
$assignments = [];
foreach ($this->getImportService()->getData()->cards as $trelloCard) {
foreach ($trelloCard->idMembers as $idMember) {
if (empty($this->members[$idMember])) {
continue;
}
$assignment = new Assignment();
$assignment->setCardId($this->cards[$trelloCard->id]->getId());
$assignment->setParticipant($this->members[$idMember]->getUID());
$assignment->setType(Assignment::TYPE_USER);
$assignments[$trelloCard->id][] = $assignment;
}
}
return $assignments;
}
public function getComments(): array {
$comments = [];
foreach ($this->getImportService()->getData()->cards as $trelloCard) {
$values = array_filter(
$this->getImportService()->getData()->actions,
function (\stdClass $a) use ($trelloCard) {
return $a->type === 'commentCard' && $a->data->card->id === $trelloCard->id;
}
);
$keys = array_map(function (\stdClass $c): string {
return $c->id;
}, $values);
$trelloComments = array_combine($keys, $values);
$trelloComments = $this->sortComments($trelloComments);
foreach ($trelloComments as $commentId => $trelloComment) {
$cardId = $this->cards[$trelloCard->id]->getId();
$comment = new Comment();
if (!empty($this->getImportService()->getConfig('uidRelation')->{$trelloComment->memberCreator->username})) {
$actor = $this->getImportService()->getConfig('uidRelation')->{$trelloComment->memberCreator->username}->getUID();
} else {
$actor = $this->getImportService()->getConfig('owner')->getUID();
}
$message = $this->replaceUsernames($trelloComment->data->text);
if (mb_strlen($message, 'UTF-8') > IComment::MAX_MESSAGE_LENGTH) {
$attachment = new Attachment();
$attachment->setCardId($cardId);
$attachment->setType('deck_file');
$attachment->setCreatedBy($actor);
$attachment->setLastModified(time());
$attachment->setCreatedAt(time());
$attachment->setData('comment_' . $commentId . '.md');
$attachment = $this->getImportService()->insertAttachment($attachment, $message);
$urlToDownloadAttachment = $this->urlGenerator->linkToRouteAbsolute(
'deck.attachment.display',
[
'cardId' => $cardId,
'attachmentId' => $attachment->getId()
]
);
$message = $this->l10n->t(
"This comment has more than %s characters.\n" .
"Added as an attachment to the card with name %s.\n" .
"Accessible on URL: %s.",
[
IComment::MAX_MESSAGE_LENGTH,
'comment_' . $commentId . '.md',
$urlToDownloadAttachment
]
);
}
$comment
->setActor('users', $actor)
->setMessage($message)
->setCreationDateTime(
\DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloComment->date)
);
$comments[$cardId][$commentId] = $comment;
}
}
return $comments;
}
private function sortComments(array $comments): array {
$comparison = function (\stdClass $a, \stdClass $b): int {
if ($a->date == $b->date) {
return 0;
}
return ($a->date < $b->date) ? -1 : 1;
};
usort($comments, $comparison);
return $comments;
}
public function getCardLabelAssignment(): array {
$cardsLabels = [];
foreach ($this->getImportService()->getData()->cards as $trelloCard) {
foreach ($trelloCard->labels as $label) {
$cardId = $this->cards[$trelloCard->id]->getId();
$labelId = $this->labels[$label->id]->getId();
$cardsLabels[$cardId][] = $labelId;
}
}
return $cardsLabels;
}
public function getBoard(): Board {
$board = $this->getImportService()->getBoard();
if (empty($this->getImportService()->getData()->name)) {
throw new BadRequestException('Invalid name of board');
}
$board->setTitle($this->getImportService()->getData()->name);
$board->setOwner($this->getImportService()->getConfig('owner')->getUID());
$board->setColor($this->getImportService()->getConfig('color'));
return $board;
}
/**
* @return Label[]
*/
public function getLabels(): array {
foreach ($this->getImportService()->getData()->labels as $trelloLabel) {
$label = new Label();
if (empty($trelloLabel->name)) {
$label->setTitle('Unnamed ' . $trelloLabel->color . ' label');
} else {
$label->setTitle($trelloLabel->name);
}
$label->setColor($this->translateColor($trelloLabel->color));
$label->setBoardId($this->getImportService()->getBoard()->getId());
$this->labels[$trelloLabel->id] = $label;
}
return $this->labels;
}
/**
* @return Stack[]
*/
public function getStacks(): array {
$return = [];
foreach ($this->getImportService()->getData()->lists as $order => $list) {
$stack = new Stack();
if ($list->closed) {
$stack->setDeletedAt(time());
}
$stack->setTitle($list->name);
$stack->setBoardId($this->getImportService()->getBoard()->getId());
$stack->setOrder($order + 1);
$return[$list->id] = $stack;
}
return $return;
}
/**
* @return Card[]
*/
public function getCards(): array {
$checklists = [];
foreach ($this->getImportService()->getData()->checklists as $checklist) {
$checklists[$checklist->idCard][$checklist->id] = $this->formulateChecklistText($checklist);
}
$this->getImportService()->getData()->checklists = $checklists;
$cards = [];
foreach ($this->getImportService()->getData()->cards as $trelloCard) {
$card = new Card();
$lastModified = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->dateLastActivity);
$card->setLastModified($lastModified->format('Y-m-d H:i:s'));
if ($trelloCard->closed) {
$card->setArchived(true);
}
if ((count($trelloCard->idChecklists) !== 0)) {
foreach ($this->getImportService()->getData()->checklists[$trelloCard->id] as $checklist) {
$trelloCard->desc .= "\n" . $checklist;
}
}
$this->appendAttachmentsToDescription($trelloCard);
$card->setTitle($trelloCard->name);
$card->setStackId($this->stacks[$trelloCard->idList]->getId());
$cardsOnStack = $this->stacks[$trelloCard->idList]->getCards();
$cardsOnStack[] = $card;
$this->stacks[$trelloCard->idList]->setCards($cardsOnStack);
$card->setType('plain');
$card->setOrder($trelloCard->pos);
$card->setOwner($this->getImportService()->getConfig('owner')->getUID());
$lastModified = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->dateLastActivity);
$card->setLastModified($lastModified->format('U'));
$createCardDate = array_filter(
$this->getImportService()->getData()->actions,
function (\stdClass $a) use ($trelloCard) {
return $a->type === 'createCard' && $a->data->card->id === $trelloCard->id;
}
);
$createCardDate = current($createCardDate);
$createCardDate = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $createCardDate->date);
if ($createCardDate) {
$card->setCreatedAt($createCardDate->format('U'));
} else {
$card->setCreatedAt($lastModified->format('U'));
}
$card->setDescription($trelloCard->desc);
if ($trelloCard->due) {
$duedate = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->due)
->format('Y-m-d H:i:s');
$card->setDuedate($duedate);
}
$cards[$trelloCard->id] = $card;
}
return $cards;
}
/**
* @return Acl[]
*/
public function getAclList(): array {
$return = [];
foreach ($this->members as $member) {
if ($member->getUID() === $this->getImportService()->getConfig('owner')->getUID()) {
continue;
}
$acl = new Acl();
$acl->setBoardId($this->getImportService()->getBoard()->getId());
$acl->setType(Acl::PERMISSION_TYPE_USER);
$acl->setParticipant($member->getUID());
$acl->setPermissionEdit(false);
$acl->setPermissionShare(false);
$acl->setPermissionManage(false);
$return[] = $acl;
}
return $return;
}
private function translateColor(string $color): string {
switch ($color) {
case 'red':
return 'ff0000';
case 'yellow':
return 'ffff00';
case 'orange':
return 'ff6600';
case 'green':
return '00ff00';
case 'purple':
return '9900ff';
case 'blue':
return '0000ff';
case 'sky':
return '00ccff';
case 'lime':
return '00ff99';
case 'pink':
return 'ff66cc';
case 'black':
return '000000';
default:
return 'ffffff';
}
}
private function replaceUsernames(string $text): string {
foreach ($this->getImportService()->getConfig('uidRelation') as $trello => $nextcloud) {
$text = str_replace($trello, $nextcloud->getUID(), $text);
}
return $text;
}
private function checklistItem(\stdClass $item): string {
if (($item->state == 'incomplete')) {
$string_start = '- [ ]';
} else {
$string_start = '- [x]';
}
$check_item_string = $string_start . ' ' . $item->name . "\n";
return $check_item_string;
}
private function formulateChecklistText(\stdClass $checklist): string {
$checklist_string = "\n\n## {$checklist->name}\n";
foreach ($checklist->checkItems as $item) {
$checklist_item_string = $this->checklistItem($item);
$checklist_string = $checklist_string . "\n" . $checklist_item_string;
}
return $checklist_string;
}
private function appendAttachmentsToDescription(\stdClass $trelloCard): void {
if (empty($trelloCard->attachments)) {
return;
}
$trelloCard->desc .= "\n\n## {$this->l10n->t('Attachments')}\n";
$trelloCard->desc .= "| {$this->l10n->t('File')} | {$this->l10n->t('date')} |\n";
$trelloCard->desc .= "|---|---\n";
foreach ($trelloCard->attachments as $attachment) {
$name = mb_strlen($attachment->name, 'UTF-8') ? $attachment->name : $attachment->url;
$trelloCard->desc .= "| [{$name}]({$attachment->url}) | {$attachment->date} |\n";
}
}
}

View File

@@ -0,0 +1,41 @@
{
"type": "object",
"properties": {
"api": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[0-9a-fA-F]{32}$"
},
"token": {
"type": "string",
"pattern": "^[0-9a-fA-F]{64}$"
}
}
},
"board": {
"type": "string",
"pattern": "^\\w{1,}$"
},
"uidRelation": {
"type": "object",
"comment": "Relationship between Trello and Nextcloud usernames",
"example": {
"johndoe": "admin"
}
},
"owner": {
"type": "string",
"required": true,
"comment": "Nextcloud owner username"
},
"color": {
"type": "string",
"required": true,
"pattern": "^[0-9a-fA-F]{6}$",
"comment": "Default color for the board. If you don't inform, the default color will be used.",
"default": "0800fd"
}
}
}

View File

@@ -0,0 +1,24 @@
{
"type": "object",
"properties": {
"uidRelation": {
"type": "object",
"comment": "Relationship between Trello and Nextcloud usernames",
"example": {
"johndoe": "admin"
}
},
"owner": {
"type": "string",
"required": true,
"comment": "Nextcloud owner username"
},
"color": {
"type": "string",
"required": true,
"pattern": "^[0-9a-fA-F]{6}$",
"comment": "Default color for the board. If you don't inform, the default color will be used.",
"default": "0800fd"
}
}
}

View File

@@ -138,7 +138,7 @@ class OverviewService {
private function findAllBoardsFromUser(string $userId): array {
$userInfo = $this->getBoardPrerequisites($userId);
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null);
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null);
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'], null, null);
$circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null);
return array_unique(array_merge($userBoards, $groupBoards, $circleBoards));
}

View File

@@ -280,14 +280,14 @@ class PermissionService {
if ($this->circlesService->isCirclesEnabled() && $acl->getType() === Acl::PERMISSION_TYPE_CIRCLE) {
try {
$circle = \OCA\Circles\Api\v1\Circles::detailsCircle($acl->getParticipant(), true);
$circle = $this->circlesService->getCircle($acl->getParticipant());
if ($circle === null) {
$this->logger->info('No circle found for acl rule ' . $acl->getId());
continue;
}
foreach ($circle->getInheritedMembers() as $member) {
if ($member->getUserType() !== 1 || $member->getLevel() >= Member::LEVEL_MEMBER) {
if ($member->getUserType() !== 1 || $member->getLevel() < Member::LEVEL_MEMBER) {
// deck currently only supports user members in circles
continue;
}

View File

@@ -35,6 +35,7 @@ use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\Db\Stack;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\NoPermissionException;
use OCA\Deck\StatusException;
class StackService {
@@ -142,7 +143,12 @@ class StackService {
}
public function findCalendarEntries($boardId) {
$this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_READ);
try {
$this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_READ);
} catch (NoPermissionException $e) {
\OC::$server->getLogger()->error('Unable to check permission for a previously obtained board ' . $boardId, ['exception' => $e]);
return [];
}
return $this->stackMapper->findAll($boardId);
}
@@ -284,8 +290,8 @@ class StackService {
throw new BadRequestException('order must be a number');
}
$this->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE);
if ($this->boardService->isArchived($this->stackMapper, $id)) {
$this->permissionService->checkPermission($this->stackMapper, $boardId, Acl::PERMISSION_MANAGE);
if ($this->boardService->isArchived($this->stackMapper, $boardId)) {
throw new StatusException('Operation not allowed. This board is archived.');
}
$stack = $this->stackMapper->find($id);

View File

@@ -500,7 +500,7 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
);
}
$qb->innerJoin('s', 'filecache' ,'f', $qb->expr()->eq('s.file_source', 'f.fileid'));
$qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid'));
$qb->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId())));
$qb->orderBy('s.id');

View File

@@ -11,4 +11,6 @@ pages:
- Nextcloud API: API-Nextcloud.md
- Developer documentation:
- Data structure: structure.md
- Import documentation:
- Implement import: implement-import.md
- Class diagram: import-class-diagram.md

6871
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -29,10 +29,10 @@
},
"dependencies": {
"@babel/polyfill": "^7.12.1",
"@babel/runtime": "^7.16.3",
"@babel/runtime": "^7.17.2",
"@juliushaertl/vue-richtext": "^1.0.1",
"@nextcloud/auth": "^1.3.0",
"@nextcloud/axios": "^1.8.0",
"@nextcloud/axios": "^1.9.0",
"@nextcloud/dialogs": "^3.1.2",
"@nextcloud/event-bus": "^2.1.1",
"@nextcloud/files": "^2.1.0",
@@ -40,14 +40,14 @@
"@nextcloud/l10n": "^1.4.1",
"@nextcloud/moment": "^1.1.1",
"@nextcloud/router": "^2.0.0",
"@nextcloud/vue": "^4.2.0",
"@nextcloud/vue": "^5.0.0",
"@nextcloud/vue-dashboard": "^2.0.1",
"blueimp-md5": "^2.19.0",
"dompurify": "^2.3.4",
"dompurify": "^2.3.6",
"lodash": "^4.17.21",
"markdown-it": "^12.2.0",
"markdown-it": "^12.3.2",
"markdown-it-task-lists": "^2.1.1",
"markdown-it-link-attributes": "^3.0.0",
"markdown-it-link-attributes": "^4.0.0",
"moment": "^2.29.1",
"nextcloud-vue-collections": "^0.9.0",
"p-queue": "^6.6.2",
@@ -72,12 +72,12 @@
"devDependencies": {
"@nextcloud/babel-config": "^1.0.0",
"@nextcloud/browserslist-config": "^2.2.0",
"@nextcloud/eslint-config": "^6.1.1",
"@nextcloud/stylelint-config": "^1.0.0-beta.0",
"@nextcloud/webpack-vue-config": "^4.2.0",
"@relative-ci/agent": "^3.0.0",
"@nextcloud/eslint-config": "^6.1.2",
"@nextcloud/stylelint-config": "^2.1.2",
"@nextcloud/webpack-vue-config": "^5.0.0",
"@relative-ci/agent": "^3.1.1",
"@vue/test-utils": "^1.3.0",
"jest": "^27.4.5",
"jest": "^27.5.1",
"jest-serializer-vue": "^2.0.2",
"vue-jest": "^3.0.7"
},

View File

@@ -88,7 +88,6 @@ export default {
navShown: state => state.navShown,
sidebarShownState: state => state.sidebarShown,
currentBoard: state => state.currentBoard,
cardDetailsInModal: state => state.cardDetailsInModal,
}),
// TODO: properly handle sidebar showing for route subview and board sidebar
sidebarRouterView() {
@@ -98,6 +97,14 @@ export default {
sidebarShown() {
return this.sidebarRouterView || this.sidebarShownState
},
cardDetailsInModal: {
get() {
return this.$store.getters.config('cardDetailsInModal')
},
set(newValue) {
this.$store.dispatch('setConfig', { cardDetailsInModal: newValue })
},
},
},
created() {
this.$store.dispatch('loadBoards')

View File

@@ -239,6 +239,7 @@ export default {
isAddStackVisible: false,
filter: { tags: [], users: [], due: '', unassigned: false },
showAddCardModal: false,
defaultPageTitle: false,
}
},
@@ -266,11 +267,17 @@ export default {
return [...this.board.labels].sort((a, b) => (a.title < b.title) ? -1 : 1)
},
},
beforeDestroy() {
this.setPageTitle('')
},
watch: {
board(current, previous) {
if (current?.id !== previous?.id) {
this.clearFilter()
}
if (current) {
this.setPageTitle(current.title)
}
},
},
methods: {
@@ -330,6 +337,22 @@ export default {
clickHideAddCardModel() {
this.showAddCardModal = false
},
setPageTitle(title) {
if (this.defaultPageTitle === false) {
this.defaultPageTitle = window.document.title
if (this.defaultPageTitle.indexOf(' - Deck - ') !== -1) {
this.defaultPageTitle = this.defaultPageTitle.substring(this.defaultPageTitle.indexOf(' - Deck - ') + 3)
}
if (this.defaultPageTitle.indexOf('Deck - ') !== 0) {
this.defaultPageTitle = 'Deck - ' + this.defaultPageTitle
}
}
let newTitle = this.defaultPageTitle
if (title !== '') {
newTitle = `${title} - ${newTitle}`
}
window.document.title = newTitle
},
},
}
</script>

View File

@@ -162,7 +162,6 @@ export default {
]),
...mapState({
showArchived: state => state.showArchived,
cardDetailsInModal: state => state.cardDetailsInModal,
}),
cardsByStack() {
return this.$store.getters.cardsByStack(this.stack.id).filter((card) => {
@@ -175,6 +174,14 @@ export default {
dragHandleSelector() {
return this.canEdit ? null : '.no-drag'
},
cardDetailsInModal: {
get() {
return this.$store.getters.config('cardDetailsInModal')
},
set(newValue) {
this.$store.dispatch('setConfig', { cardDetailsInModal: newValue })
},
},
},
methods: {

View File

@@ -25,13 +25,14 @@
:active="tabId"
:title="title"
:subtitle="subtitle"
:subtitle-tooltip="subtitleTooltip"
:title-editable="titleEditable"
@update:titleEditable="handleUpdateTitleEditable"
@update:title="handleUpdateTitle"
@submit-title="handleSubmitTitle"
@close="closeSidebar">
<template #secondary-actions>
<ActionButton v-if="cardDetailsInModal" icon="icon-menu-sidebar" @click.stop="showModal()">
<ActionButton v-if="cardDetailsInModal" icon="icon-menu-sidebar" @click.stop="closeModal()">
{{ t('deck', 'Open in sidebar view') }}
</ActionButton>
<ActionButton v-else icon="icon-external" @click.stop="showModal()">
@@ -88,8 +89,10 @@ import CardSidebarTabAttachments from './CardSidebarTabAttachments'
import CardSidebarTabComments from './CardSidebarTabComments'
import CardSidebarTabActivity from './CardSidebarTabActivity'
import relativeDate from '../../mixins/relativeDate'
import moment from '@nextcloud/moment'
import { showError } from '@nextcloud/dialogs'
import { getLocale } from '@nextcloud/l10n'
const capabilities = window.OC.getCapabilities()
@@ -126,12 +129,12 @@ export default {
titleEditable: false,
titleEditing: '',
hasActivity: capabilities && capabilities.activity,
locale: getLocale(),
}
},
computed: {
...mapState({
currentBoard: state => state.currentBoard,
cardDetailsInModal: state => state.cardDetailsInModal,
}),
...mapGetters(['canEdit', 'assignables', 'cardActions', 'stackById']),
title() {
@@ -143,6 +146,9 @@ export default {
subtitle() {
return t('deck', 'Modified') + ': ' + this.relativeDate(this.currentCard.lastModified * 1000) + ' ' + t('deck', 'Created') + ': ' + this.relativeDate(this.currentCard.createdAt * 1000)
},
subtitleTooltip() {
return t('deck', 'Modified') + ': ' + this.formatDate(this.currentCard.lastModified) + '\n' + t('deck', 'Created') + ': ' + this.formatDate(this.currentCard.createdAt)
},
cardRichObject() {
return {
id: '' + this.currentCard.id,
@@ -152,6 +158,14 @@ export default {
link: window.location.protocol + '//' + window.location.host + generateUrl('/apps/deck/') + `#/board/${this.currentBoard.id}/card/${this.currentCard.id}`,
}
},
cardDetailsInModal: {
get() {
return this.$store.getters.config('cardDetailsInModal')
},
set(newValue) {
this.$store.dispatch('setConfig', { cardDetailsInModal: newValue })
},
},
},
methods: {
handleUpdateTitleEditable(value) {
@@ -177,7 +191,13 @@ export default {
},
showModal() {
this.$store.dispatch('setCardDetailsInModal', true)
this.$store.dispatch('setConfig', { cardDetailsInModal: true })
},
closeModal() {
this.$store.dispatch('setConfig', { cardDetailsInModal: false })
},
formatDate(timestamp) {
return moment.unix(timestamp).locale(this.locale).format('LLLL')
},
},
}

View File

@@ -224,7 +224,6 @@ export default {
computed: {
...mapState({
currentBoard: state => state.currentBoard,
cardDetailsInModal: state => state.cardDetailsInModal,
}),
...mapGetters(['canEdit', 'assignables']),
formatedAssignables() {
@@ -250,6 +249,14 @@ export default {
return assignable
})
},
cardDetailsInModal: {
get() {
return this.$store.getters.config('cardDetailsInModal')
},
set(newValue) {
this.$store.dispatch('setConfig', { cardDetailsInModal: newValue })
},
},
duedate: {
get() {
return this.card.duedate ? new Date(this.card.duedate) : null

View File

@@ -132,7 +132,6 @@ export default {
computed: {
...mapState({
currentBoard: state => state.currentBoard,
cardDetailsInModal: state => state.cardDetailsInModal,
}),
...mapGetters(['canEdit']),
attachments() {
@@ -263,6 +262,8 @@ export default {
#description-preview {
min-height: 100px;
width: auto;
overflow-x: auto;
&::v-deep {
@import './../../css/markdown';
@@ -333,4 +334,15 @@ h5 {
#app-sidebar .app-sidebar-header__desc h4 {
font-size: 12px !important;
}
.vue-easymde .cm-s-easymde .cm-link {
color: var(--color-main-text);
}
.vue-easymde .cm-s-easymde .cm-string.cm-url,
.vue-easymde .cm-s-easymde .cm-formatting.cm-link,
.vue-easymde .cm-s-easymde .cm-formatting.cm-url,
.vue-easymde .cm-s-easymde .cm-formatting.cm-image {
color: var(--color-text-maxcontrast);
}
</style>

View File

@@ -58,7 +58,7 @@
<h3>{{ t('deck', 'Move card to another board') }}</h3>
<Multiselect v-model="selectedBoard"
:placeholder="t('deck', 'Select a board')"
:options="boards"
:options="activeBoards"
:max-height="100"
label="title"
@select="loadStacksFromBoard" />
@@ -66,7 +66,11 @@
:placeholder="t('deck', 'Select a list')"
:options="stacksFromBoard"
:max-height="100"
label="title" />
label="title">
<span slot="noOptions">
{{ t('deck', 'List is empty') }}
</span>
</Multiselect>
<button :disabled="!isBoardAndStackChoosen" class="primary" @click="moveCard">
{{ t('deck', 'Move card') }}
@@ -129,6 +133,9 @@ export default {
isCurrentUserAssigned() {
return this.card.assignedUsers.find((item) => item.type === 0 && item.participant.uid === getCurrentUser()?.uid)
},
activeBoards() {
return this.$store.getters.boards.filter((item) => item.deletedAt === 0 && item.archived === false)
}
},
methods: {
openCard() {

View File

@@ -144,10 +144,10 @@ export default {
},
cardDetailsInModal: {
get() {
return this.$store.getters.cardDetailsInModal
return this.$store.getters.config('cardDetailsInModal')
},
set(newValue) {
this.$store.dispatch('setCardDetailsInModal', newValue)
this.$store.dispatch('setConfig', { cardDetailsInModal: newValue })
},
},
configCalendar: {

View File

@@ -49,10 +49,15 @@ window.addEventListener('DOMContentLoaded', () => {
const shortenedMessage = shortenedMessageCandidate === '' ? message.substr(0, 255) : shortenedMessageCandidate
try {
await buildSelector(CardCreateDialog, {
title: shortenedMessage,
description: message + '\n\n' + '['
+ t('deck', 'Message from {author} in {conversationName}', { author: actorDisplayName, conversationName })
+ '](' + generateUrl('/call/' + conversationToken) + ')',
props: {
title: shortenedMessage,
description: message + '\n\n' + '['
+ t('deck', 'Message from {author} in {conversationName}', {
author: actorDisplayName,
conversationName,
})
+ '](' + window.location.protocol + '//' + window.location.host + generateUrl('/call/' + conversationToken) + ')',
},
})
} catch (e) {
console.debug('Card creation dialog was canceled')

Some files were not shown because too many files have changed in this diff Show More