Compare commits

..

84 Commits

Author SHA1 Message Date
grnd-alt
93ec6ce56b Merge pull request #6591 from nextcloud/release/1.6.7
bump version to v1.6.7
2024-12-12 15:29:02 +01:00
grnd-alt
9164944cb1 bump version to v1.6.7
Signed-off-by: grnd-alt <git@belakkaf.net>
2024-12-12 13:50:54 +01:00
Julius Knorr
1443fd24ac Merge pull request #6518 from nextcloud/backport/detect-end-of-activity-stream-stable23
stable23: fix: Detect end of the activity responses (fix #3395)
2024-11-18 22:16:02 +01:00
Julius Härtl
55004b9309 fix: Detect end of the activity responses (fix #3395)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-11-18 11:11:34 +01:00
Arthur Schiwon
1c74fda2c2 Merge pull request #5705 from nextcloud/backport/5703/stable23
[stable23] fix: Avoid conflicts on deck attachments folder name
2024-05-24 22:24:17 +02:00
Luka Trovic
2817d8bb43 ci: update php setup for integration check
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2024-05-24 18:35:56 +02:00
Julius Härtl
f3b704b56d fix: Compatibility with php 7.4
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-03-28 10:16:02 +01:00
Julius Härtl
fd0f37e9d6 ci: Update base query count
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-03-27 15:02:16 +00:00
Julius Härtl
c5d594d602 fix: Avoid conflicts on deck attachments folder name
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-03-27 15:02:16 +00:00
Julius Härtl
21b50292de chore(release): Bump version to 1.6.6
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-16 15:53:31 +01:00
Julius Härtl
197f81abe2 Merge pull request #5450 from nextcloud/backport/5449/stable23
[stable23] Fix deleted card/board issues
2024-01-12 09:30:23 +01:00
Julius Härtl
227d9df978 test: Adapt unit tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-12 08:43:16 +01:00
Julius Härtl
1be21db78e ci: Remove unused test
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-12 08:43:16 +01:00
Julius Härtl
82deb677d2 chore: update actions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-12 08:43:15 +01:00
Julius Härtl
16e5b36d2f fix: PHP 7.4 compatibility
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-12 08:43:15 +01:00
Julius Härtl
635880a27b tests: Fix missing behat context methods
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 23:09:15 +01:00
Julius Härtl
6a3f4ecee9 chore: Fix ci setup for activity
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 23:09:15 +01:00
Julius Härtl
2fc91455ee fix: Limit card activities for deleted cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 23:09:13 +01:00
Julius Härtl
23a0ec226b fix: Further limit updating cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 23:08:13 +01:00
Julius Härtl
b812075e06 fix: limit to non-deleted cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 23:08:13 +01:00
Julius Härtl
b135c1fa06 fix: Consider a deleted board inaccessible to share recipients
Only the owner can delete/undo a board deletion so there is no reason
other users should have any permission on a board marked as deleted

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 23:08:13 +01:00
Julius Härtl
9720a4464c tests: Add integration tests for deleted boards/cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 23:08:13 +01:00
Julius Härtl
0b6df4bc54 Merge pull request #5447 from nextcloud/backport/5446/stable23
[stable23] Fix small issues around delete/undo
2024-01-09 23:03:33 +01:00
Julius Härtl
eac673c129 ci: Update actions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 22:55:07 +01:00
Julius Härtl
f9a76508a6 ci: Bump setup-php
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 19:40:41 +01:00
Julius Härtl
e53938038e fix: Psalm and CI
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 19:40:24 +01:00
Julius Härtl
d88844bd7a ci: Update phpunit github action
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 19:40:24 +01:00
Julius Härtl
f094bce286 fix: Only query boards not marked for deletion unless we want to undo
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2024-01-09 19:40:23 +01:00
Julius Härtl
b017f441e3 Merge pull request #5073 from nextcloud/backport/4810/stable23 2023-08-30 19:44:51 +02:00
Max
bf21052d51 Fix(occ): set user id for permission sevice from board service
Fixes #4010.

Signed-off-by: Max <max@nextcloud.com>
2023-08-30 08:51:08 +00:00
Jonas
ab5d45acc6 Merge pull request #4570 from nextcloud/backport/4566/stable23
[stable23] Gracefully handle not found card for a share
2023-03-29 11:28:12 +02:00
Jonas
a3aebb14d7 Gracefully handle not found card for a share
Fixes: #3464
Fixes: #4565

Signed-off-by: Jonas <jonas@freesources.org>
2023-03-29 09:08:46 +00:00
Julius Härtl
3d58448159 Merge pull request #4241 from nextcloud/dependabot/npm_and_yarn/stable23/vue-2.7.14 2022-12-30 14:10:37 +01:00
Julius Härtl
735b26ae88 Merge pull request #4341 from nextcloud/automated/noid/stable23-update-nextcloud-ocp 2022-12-30 13:53:48 +01:00
nextcloud-command
aa74bea139 Update psalm baseline
Signed-off-by: GitHub <noreply@github.com>
2022-12-25 02:41:46 +00:00
dependabot[bot]
bcaffdf1d8 Merge pull request #4334 from nextcloud/dependabot/npm_and_yarn/stable23/babel/runtime-7.20.7 2022-12-24 03:34:27 +00:00
dependabot[bot]
d0be727931 Bump @babel/runtime from 7.20.6 to 7.20.7
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.20.6 to 7.20.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.20.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-12-24 02:01:45 +00:00
Nextcloud bot
675f0e68e1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-12-18 02:27:13 +00:00
Nextcloud bot
c43a1ba358 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-12-16 02:27:08 +00:00
Nextcloud bot
d1d4a50252 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-12-14 02:29:33 +00:00
Nextcloud bot
af1139a260 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-12-13 02:40:08 +00:00
Nextcloud bot
6f336d8e76 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-12-04 02:22:15 +00:00
dependabot[bot]
504a32257f Merge pull request #4289 from nextcloud/dependabot/npm_and_yarn/stable23/babel/runtime-7.20.6 2022-12-03 05:49:02 +00:00
dependabot[bot]
8b9699e694 Bump @babel/runtime from 7.20.1 to 7.20.6
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.20.1 to 7.20.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.20.6/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-12-03 03:39:21 +00:00
Nextcloud bot
55c126a2b9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-12-01 02:23:07 +00:00
Nextcloud bot
757301eb67 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-30 02:23:30 +00:00
Nextcloud bot
85f4de1feb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-23 02:26:04 +00:00
Nextcloud bot
ffe66f6bbd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-22 02:26:50 +00:00
dependabot[bot]
b56c93b631 Bump vue from 2.6.14 to 2.7.14
Bumps [vue](https://github.com/vuejs/core) from 2.6.14 to 2.7.14.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 06:43:13 +00:00
Julius Härtl
11c4a67974 Merge pull request #4251 from nextcloud/dependabot/npm_and_yarn/stable23/vue-router-3.6.5 2022-11-21 07:42:40 +01:00
Julius Härtl
8112ce6833 Merge pull request #4255 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/axios-1.11.0 2022-11-21 07:42:23 +01:00
Nextcloud bot
72f52e64c1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-21 02:22:59 +00:00
Nextcloud bot
d3b5dea49b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-20 02:24:09 +00:00
dependabot[bot]
3e723f7b73 Bump @nextcloud/axios from 1.7.0 to 1.11.0
Bumps [@nextcloud/axios](https://github.com/nextcloud/nextcloud-axios) from 1.7.0 to 1.11.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.7.0...v1.11.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-11-19 08:30:07 +00:00
Julius Härtl
5b2d62ce1b Merge pull request #4262 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/browserslist-config-2.3.0
Bump @nextcloud/browserslist-config from 2.2.0 to 2.3.0
2022-11-19 09:29:30 +01:00
Julius Härtl
d4efb1e2d8 Merge pull request #4239 from nextcloud/dependabot/npm_and_yarn/stable23/jest-27.5.1
Bump jest from 27.3.1 to 27.5.1
2022-11-19 09:28:47 +01:00
Julius Härtl
9eb9b2d6f8 Merge pull request #4249 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/l10n-1.6.0
Bump @nextcloud/l10n from 1.4.1 to 1.6.0
2022-11-19 09:28:28 +01:00
Julius Härtl
c6398ad7d8 Merge pull request #4246 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/moment-1.2.1
Bump @nextcloud/moment from 1.1.1 to 1.2.1
2022-11-19 09:26:56 +01:00
dependabot[bot]
0646379e65 Bump jest from 27.3.1 to 27.5.1
Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 27.3.1 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/commits/v27.5.1/packages/jest)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-19 08:26:43 +00:00
Julius Härtl
4418398394 Merge pull request #4244 from nextcloud/dependabot/npm_and_yarn/stable23/dompurify-2.4.1
Bump dompurify from 2.3.3 to 2.4.1
2022-11-19 09:26:33 +01:00
Julius Härtl
c49e4dc0b4 Merge pull request #4223 from nextcloud/dependabot/npm_and_yarn/stable23/relative-ci/agent-3.1.3
Bump @relative-ci/agent from 3.0.0 to 3.1.3
2022-11-19 09:26:05 +01:00
Nextcloud bot
0957f0d13e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-19 02:25:11 +00:00
dependabot[bot]
d219d386e4 Bump @relative-ci/agent from 3.0.0 to 3.1.3
Bumps [@relative-ci/agent](https://github.com/relative-ci/agent) from 3.0.0 to 3.1.3.
- [Release notes](https://github.com/relative-ci/agent/releases)
- [Commits](https://github.com/relative-ci/agent/compare/v3.0.0...v3.1.3)

---
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-11-18 21:15:58 +00:00
Julius Härtl
097a4fbfe2 Merge pull request #4230 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/vue-4.4.0
Bump @nextcloud/vue from 4.2.0 to 4.4.0
2022-11-18 22:15:03 +01:00
dependabot[bot]
f87d20bc4c Merge pull request #4259 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/eslint-config-6.1.2 2022-11-18 20:42:38 +00:00
Julius Härtl
83a1c47be5 Merge pull request #4226 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/dialogs-3.2.0
Bump @nextcloud/dialogs from 3.1.2 to 3.2.0
2022-11-18 21:12:17 +01:00
Julius Härtl
f15421ae60 Merge pull request #4237 from nextcloud/dependabot/npm_and_yarn/stable23/vue/test-utils-1.3.3
Bump @vue/test-utils from 1.2.2 to 1.3.3
2022-11-18 21:11:36 +01:00
Julius Härtl
3e8c2a70d6 Merge pull request #4228 from nextcloud/dependabot/npm_and_yarn/stable23/babel/runtime-7.20.1
Bump @babel/runtime from 7.16.0 to 7.20.1
2022-11-18 21:11:17 +01:00
Julius Härtl
79f26d64a3 Merge pull request #4235 from nextcloud/dependabot/npm_and_yarn/stable23/vue-at-2.5.1
Bump vue-at from 2.5.0-beta.2 to 2.5.1
2022-11-18 21:10:52 +01:00
Julius Härtl
3dd71981d5 Merge pull request #4234 from nextcloud/dependabot/npm_and_yarn/stable23/nextcloud/webpack-vue-config-4.3.2
Bump @nextcloud/webpack-vue-config from 4.1.2 to 4.3.2
2022-11-18 21:10:37 +01:00
dependabot[bot]
2b82cd063a Merge pull request #4231 from nextcloud/dependabot/npm_and_yarn/stable23/moment-2.29.4 2022-11-18 19:50:04 +00:00
dependabot[bot]
72ad9bb646 Bump @nextcloud/browserslist-config from 2.2.0 to 2.3.0
Bumps [@nextcloud/browserslist-config](https://github.com/nextcloud/browserslist-config) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/nextcloud/browserslist-config/releases)
- [Commits](https://github.com/nextcloud/browserslist-config/compare/v2.2.0...v2.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:31:23 +00:00
dependabot[bot]
d41001a2d3 Bump @nextcloud/eslint-config from 6.1.0 to 6.1.2
Bumps [@nextcloud/eslint-config](https://github.com/nextcloud/eslint-config) from 6.1.0 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.0...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>
2022-11-18 17:31:11 +00:00
dependabot[bot]
c48e3e1a9f Bump vue-router from 3.5.3 to 3.6.5
Bumps [vue-router](https://github.com/vuejs/router) from 3.5.3 to 3.6.5.
- [Release notes](https://github.com/vuejs/router/releases)
- [Commits](https://github.com/vuejs/router/commits)

---
updated-dependencies:
- dependency-name: vue-router
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:30:35 +00:00
dependabot[bot]
d34c3f389a Bump @nextcloud/l10n from 1.4.1 to 1.6.0
Bumps [@nextcloud/l10n](https://github.com/nextcloud/nextcloud-l10n) from 1.4.1 to 1.6.0.
- [Release notes](https://github.com/nextcloud/nextcloud-l10n/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-l10n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-l10n/compare/v1.4.1...v1.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:30:26 +00:00
dependabot[bot]
40744773fc Bump @nextcloud/moment from 1.1.1 to 1.2.1
Bumps [@nextcloud/moment](https://github.com/nextcloud/nextcloud-moment) from 1.1.1 to 1.2.1.
- [Release notes](https://github.com/nextcloud/nextcloud-moment/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-moment/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-moment/compare/v1.1.1...v1.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:30:15 +00:00
dependabot[bot]
14fa58f3f1 Bump dompurify from 2.3.3 to 2.4.1
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.3 to 2.4.1.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.3.3...2.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:30:05 +00:00
dependabot[bot]
1bfae5107f Bump @vue/test-utils from 1.2.2 to 1.3.3
Bumps [@vue/test-utils](https://github.com/vuejs/test-utils) from 1.2.2 to 1.3.3.
- [Release notes](https://github.com/vuejs/test-utils/releases)
- [Commits](https://github.com/vuejs/test-utils/commits)

---
updated-dependencies:
- dependency-name: "@vue/test-utils"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:29:29 +00:00
dependabot[bot]
099f6d0bea Bump vue-at from 2.5.0-beta.2 to 2.5.1
Bumps [vue-at](https://github.com/fritx/vue-at) from 2.5.0-beta.2 to 2.5.1.
- [Release notes](https://github.com/fritx/vue-at/releases)
- [Commits](https://github.com/fritx/vue-at/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:29:19 +00:00
dependabot[bot]
0c48e4acb2 Bump @nextcloud/webpack-vue-config from 4.1.2 to 4.3.2
Bumps [@nextcloud/webpack-vue-config](https://github.com/nextcloud/webpack-vue-config) from 4.1.2 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.1.2...v4.3.2)

---
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-11-18 17:29:09 +00:00
dependabot[bot]
39aa878d43 Bump moment from 2.29.1 to 2.29.4
Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.1...2.29.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:28:47 +00:00
dependabot[bot]
171e161706 Bump @nextcloud/vue from 4.2.0 to 4.4.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 4.2.0 to 4.4.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.4.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>
2022-11-18 17:28:38 +00:00
dependabot[bot]
7bea294e47 Bump @babel/runtime from 7.16.0 to 7.20.1
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.16.0 to 7.20.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.20.1/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-11-18 17:28:26 +00:00
dependabot[bot]
7e4d501884 Bump @nextcloud/dialogs from 3.1.2 to 3.2.0
Bumps [@nextcloud/dialogs](https://github.com/nextcloud/nextcloud-dialogs) from 3.1.2 to 3.2.0.
- [Release notes](https://github.com/nextcloud/nextcloud-dialogs/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-dialogs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-dialogs/compare/v3.1.2...v3.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 17:28:10 +00:00
53 changed files with 6961 additions and 6655 deletions

View File

@@ -1,39 +0,0 @@
name: Package build
on:
pull_request:
jobs:
build:
runs-on: ubuntu-18.04
strategy:
matrix:
node-version: [14.x]
steps:
- uses: actions/checkout@v2.4.0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2.4.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.15.0
with:
php-version: '7.4'
tools: composer
- name: install dependencies
run: |
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.12.2/krankerl_0.12.2_amd64.deb
sudo dpkg -i krankerl_0.12.2_amd64.deb
- name: package
run: |
uname -a
RUST_BACKTRACE=1 krankerl --version
RUST_BACKTRACE=1 krankerl package
- uses: actions/upload-artifact@v2
with:
name: Deck app tarball
path: build/artifacts/deck.tar.gz

View File

@@ -3,18 +3,31 @@
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Pull request checks
name: Block fixup and squash commits
on: pull_request
on:
pull_request:
types: [opened, ready_for_review, reopened, synchronize]
permissions:
contents: read
concurrency:
group: fixup-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
commit-message-check:
if: github.event.pull_request.draft == false
permissions:
pull-requests: write
name: Block fixup and squash commits
runs-on: ubuntu-latest
steps:
- name: Run check
uses: xt0rted/block-autosquash-commits-action@v2
uses: skjnldsv/block-fixup-merge-action@42d26e1b536ce61e5cf467d65fb76caf4aa85acf # v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -60,12 +60,19 @@ jobs:
with:
path: apps/${{ env.APP_NAME }}
- name: Checkout activity
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
with:
repository: nextcloud/activity
ref: ${{ matrix.server-versions }}
path: apps/activity
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.15.0
with:
php-version: ${{ matrix.php-versions }}
tools: phpunit
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql,
extensions: mbstring, gd, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql,
coverage: none
- name: Set up PHPUnit

View File

@@ -13,7 +13,7 @@ env:
jobs:
integration:
runs-on: ubuntu-18.04
runs-on: ubuntu-latest
strategy:
fail-fast: false
@@ -44,7 +44,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@v2.4.0
uses: actions/checkout@v3
with:
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
@@ -57,7 +57,7 @@ jobs:
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Checkout app
uses: actions/checkout@v2.4.0
uses: actions/checkout@v3
with:
path: apps/${{ env.APP_NAME }}

View File

@@ -1,6 +1,22 @@
# Changelog
All notable changes to this project will be documented in this file.
## 1.6.7
### Fixed
- fix: Detect end of the activity responses (fix #3395) #6518
- fix: Avoid conflicts on deck attachments folder name #5705
## 1.6.6
### Fixed
- Gracefully handle not found card for a share [#4570](https://github.com/nextcloud/deck/pull/4570)
- Fix(occ): set user id for permission sevice from board service [#5073](https://github.com/nextcloud/deck/pull/5073)
- Fix deleted card/board issues @juliushaertl [#5450](https://github.com/nextcloud/deck/pull/5450)
- Fix small issues around delete/undo @juliushaertl [#5447](https://github.com/nextcloud/deck/pull/5447)
## 1.6.5
### Fixed

View File

@@ -16,7 +16,7 @@
- 🚀 Get your project organized
</description>
<version>1.6.5</version>
<version>1.6.7</version>
<licence>agpl</licence>
<author>Julius Härtl</author>
<namespace>Deck</namespace>

View File

@@ -38,7 +38,8 @@
"@test:integration"
],
"test:unit": "phpunit -c tests/phpunit.xml",
"test:integration": "phpunit -c tests/phpunit.integration.xml && cd tests/integration && ./run.sh"
"test:integration": "phpunit -c tests/phpunit.integration.xml",
"test:api": "cd tests/integration && ./run.sh"
},
"autoload-dev": {
"psr-4": {

9
composer.lock generated
View File

@@ -1143,12 +1143,12 @@
"source": {
"type": "git",
"url": "https://github.com/nextcloud-deps/ocp.git",
"reference": "f9c2024f8c87a4dc51c17e3eaf3ee267cfe66e12"
"reference": "5b18c55569528d8190224af04095e9dde1953c72"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/f9c2024f8c87a4dc51c17e3eaf3ee267cfe66e12",
"reference": "f9c2024f8c87a4dc51c17e3eaf3ee267cfe66e12",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/5b18c55569528d8190224af04095e9dde1953c72",
"reference": "5b18c55569528d8190224af04095e9dde1953c72",
"shasum": ""
},
"require": {
@@ -1175,9 +1175,10 @@
],
"description": "Composer package containing Nextcloud's public API (classes, interfaces)",
"support": {
"issues": "https://github.com/nextcloud-deps/ocp/issues",
"source": "https://github.com/nextcloud-deps/ocp/tree/stable23"
},
"time": "2022-09-27T08:15:32+00:00"
"time": "2022-12-20T00:37:08+00:00"
},
{
"name": "nikic/php-parser",

View File

@@ -29,7 +29,7 @@ OC.L10N.register(
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} ha suprimit la targeta {card} a la llista {stack} al tauler {board}",
"You have renamed the card {before} to {card}" : "Heu reanomenat la targeta {before} a {card}",
"{user} has renamed the card {before} to {card}" : "{user} ha reanomenat la targeta {before} a {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} del tauler {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} ha afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Heu actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} ha actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
@@ -37,12 +37,12 @@ OC.L10N.register(
"{user} has archived card {card} in list {stack} on board {board}" : "{user} té la targeta arxivada {card} a la llista {stack} al tauler {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Teniu una targeta no-arxchivada {card} a la llista {stack} al tauler {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} té una targeta no-arxivada {card} a la llista {stack} al tauler {board}",
"You have removed the due date of card {card}" : "Heu suprimit la data de venciment de la targeta {targeta}",
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de venciment de la targeta {targeta}",
"You have set the due date of card {card} to {after}" : "Heu establert la data de venciment de la targeta {card} a {after}",
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de venciment de la targeta {card} a {after}",
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de venciment de la targeta {card} a {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de venciment de la targeta {card} a {after}",
"You have removed the due date of card {card}" : "Heu suprimit la data de caducitat de la targeta {targeta}",
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de caducitat de la targeta {targeta}",
"You have set the due date of card {card} to {after}" : "Heu establert la data de caducitat de la targeta {card} a {after}",
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de caducitat de la targeta {card} a {after}",
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de caducitat de la targeta {card} a {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de caducitat de la targeta {card} a {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Heu afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} ha afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Heu eliminat l'etiqueta {label} de la targeta {card} a la llista {stack} al tauler {board}",
@@ -66,13 +66,13 @@ OC.L10N.register(
"A <strong>card description</strong> inside the Deck app has been changed" : "S'ha canviat una <strong>descripció de targeta</strong> a l'aplicació Tauler",
"Deck" : "Targetes",
"Changes in the <strong>Deck app</strong>" : "Canvis a l'<strong>aplicació Targetes</strong>",
"A <strong>comment</strong> was created on a card" : "S'ha afegit un <strong>comentari</strong> a una targeta",
"A <strong>comment</strong> was created on a card" : "S'ha creat un <strong>comentari</strong> a una targeta",
"Upcoming cards" : "Pròximes targetes",
"Load more" : "Carrega'n més",
"Personal" : "Personal",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "La targeta \"%s\" sobre \"%s\" se us ha assignat per %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} us ha assignat la targeta {deck-card} a {deck-board}.",
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de venciment.",
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de caducitat.",
"The card {deck-card} on {deck-board} has reached its due date." : "La targeta {deck-card} a {deck-board} ha assolit la seva data de caducitat.",
"%s has mentioned you in a comment on \"%s\"." : "%s us ha anomenat en un comentari sobre \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} us ha mencionat en un comentari a {deck-card}.",
@@ -88,7 +88,7 @@ OC.L10N.register(
"copy" : "còpia",
"To do" : "Pendent",
"Doing" : "En procés",
"Done" : "Finalitzat",
"Done" : "Fet",
"Example Task 3" : "Tasca d'exemple 3",
"Example Task 2" : "Tasca d'exemple 2",
"Example Task 1" : "Tasca d'exemple 1",
@@ -99,7 +99,7 @@ OC.L10N.register(
"No file was uploaded" : "No s'ha pujat cap fitxer",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "No sha pogut escriure el fitxer al disc",
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer",
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la pujada del fitxer",
"No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Aquest comentari té més de %s caràcters.\nS'ha afegit com a fitxer adjunt a la targeta amb el nom %s.\nAccessible a l'URL: %s.",
"Card not found" : "No s'ha trobat la targeta",
@@ -131,7 +131,7 @@ OC.L10N.register(
"Overwrite file" : "Sobreescriu el fitxer",
"Keep existing file" : "Mantén el fitxer existent",
"This board is read only" : "Aquest tauler és només de lectura",
"Drop your files to upload" : "Deixeu anar els fitxers per penjar-los",
"Drop your files to upload" : "Deixeu anar els fitxers per pujar-los",
"Add card" : "Afegeix una targeta",
"Archived cards" : "Targetes arxivades",
"Add list" : "Afegeix una llista",
@@ -174,36 +174,38 @@ OC.L10N.register(
"Can share" : "Pot compartir",
"Can manage" : "Pot gestionar",
"Owner" : "Propietari",
"Delete" : "Eliminar",
"Delete" : "Suprimeix",
"Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Esteu segur que voleu transferir el tauler {title} a {user}?",
"Transfer the board." : "Transfereix el tauler.",
"Transfer" : "Transferència",
"The board has been transferred to {user}" : "El tauler s'ha transferit a {user}",
"Failed to transfer the board to {user}" : "No s'ha pogut transferir el tauler a {user}",
"Add a new list" : "Afegir una llista nova",
"Add a new list" : "Afegeix una llista nova",
"Archive all cards" : "Arxiva totes les targetes",
"Unarchive all cards" : "Desarxivar totes les targetes",
"Delete list" : "Suprimeix la llista",
"Archive all cards in this list" : "Arxiva totes les targetes d'aquesta llista",
"Add a new card" : "Afegir una nova targeta",
"Unarchive all cards in this list" : "Desarxivar totes les targetes d'aquesta llista",
"Add a new card" : "Afegeix una nova targeta",
"Card name" : "Nom de la targeta",
"List deleted" : "Llista suprimida",
"Edit" : "Edita",
"Add a new tag" : "Afegir una etiqueta nova",
"Edit" : "Edició",
"Add a new tag" : "Afegeix una etiqueta nova",
"title and color value must be provided" : "sha de proporcionar el valor del títol i del color",
"Board name" : "Nom del taulell",
"Members" : "Membres",
"Upload new files" : "Puja nous fitxers",
"Upload new files" : "Pujada de nous fitxers",
"Share from Files" : "Comparteix des de Fitxers",
"Pending share" : "Compartició pendent",
"Add this attachment" : "Afegeix aquest adjunt",
"Show in Files" : "Mostra a Fitxers",
"Download" : "Baixa",
"Download" : "Baixada",
"Remove attachment" : "Treu l'adjunt",
"Delete Attachment" : "Suprimeix ladjunt",
"Restore Attachment" : "Restaura l'adjunt",
"File to share" : "Fitxer a compartir",
"Invalid path selected" : "S'ha seleccionat una ruta invàlida",
"Invalid path selected" : "S'ha seleccionat un camí no vàlid",
"Open in sidebar view" : "Obre a la vista de la barra lateral",
"Open in bigger view" : "Obre a la vista més gran",
"Attachments" : "Adjunts",
@@ -213,13 +215,13 @@ OC.L10N.register(
"The title cannot be empty." : "El títol no pot estar buit.",
"No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!",
"Failed to load comments" : "No s'han pogut carregar els comentaris",
"Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…",
"Assign to users" : "Assigna als usuaris",
"Assign to users/groups/circles" : "Assigna a usuaris/grups/cercles",
"Assign a user to this card…" : "Assigneu un usuari a aquesta targeta…",
"Due date" : "Per la data",
"Set a due date" : "Definir una data de venciment",
"Remove due date" : "Elimina la data de venciment",
"Assign a tag to this card…" : "Assignació d'una etiqueta a aquesta targeta…",
"Assign to users" : "Assignació als usuaris",
"Assign to users/groups/circles" : "Assignació a usuaris/grups/cercles",
"Assign a user to this card…" : "Assignació d'un usuari a aquesta targeta…",
"Due date" : "Data de caducitat",
"Set a due date" : "Definir una data de caducitat",
"Remove due date" : "Suprimeix la data de caducitat",
"Select Date" : "Selecciona la data",
"Today" : "Avui",
"Tomorrow" : "Demà",
@@ -236,15 +238,15 @@ OC.L10N.register(
"(Unsaved)" : "(No desat)",
"(Saving…)" : "(Desant…)",
"Formatting help" : "Format d'ajuda",
"Edit description" : "Edita descripció",
"Edit description" : "Edició descripció",
"View description" : "Veure descripció",
"Add Attachment" : "Afegeix un adjunt",
"Write a description …" : "Escriviu una descripció …",
"Choose attachment" : "Triar adjunt",
"(group)" : "(grup)",
"Todo items" : "Elements pendents",
"Todo items" : "Tasques pendents",
"{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits",
"Edit card title" : "Edita el títol de la targeta",
"Edit card title" : "Edició del títol de la targeta",
"Assign to me" : "Assigna'm a mi",
"Unassign myself" : "Desasignar a mi mateix",
"Move card" : "Mou la targeta",
@@ -258,8 +260,9 @@ OC.L10N.register(
"All boards" : "Tots els taulers",
"Archived boards" : "Taulers arxivats",
"Shared with you" : "Us han compartit",
"Deck settings" : "Configuració del Tauler",
"Deck settings" : "Paràmetres del Tauler",
"Use bigger card view" : "Utilitza la visualització de targetes més gran",
"Show card ID badge" : "Mostra el distintiu dID de la targeta",
"Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques",
"Limit deck usage of groups" : "Limitar l'ús del tauler de grups",
"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." : "Limitant el Tauler bloquejarà la creació de taulers als usuaris que no són part d'aquests grups. Els usuaris podran seguir treballant en els taulers que hagin estat compartits amb ells.",

View File

@@ -27,7 +27,7 @@
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} ha suprimit la targeta {card} a la llista {stack} al tauler {board}",
"You have renamed the card {before} to {card}" : "Heu reanomenat la targeta {before} a {card}",
"{user} has renamed the card {before} to {card}" : "{user} ha reanomenat la targeta {before} a {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} del tauler {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} ha afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Heu actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} ha actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
@@ -35,12 +35,12 @@
"{user} has archived card {card} in list {stack} on board {board}" : "{user} té la targeta arxivada {card} a la llista {stack} al tauler {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Teniu una targeta no-arxchivada {card} a la llista {stack} al tauler {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} té una targeta no-arxivada {card} a la llista {stack} al tauler {board}",
"You have removed the due date of card {card}" : "Heu suprimit la data de venciment de la targeta {targeta}",
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de venciment de la targeta {targeta}",
"You have set the due date of card {card} to {after}" : "Heu establert la data de venciment de la targeta {card} a {after}",
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de venciment de la targeta {card} a {after}",
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de venciment de la targeta {card} a {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de venciment de la targeta {card} a {after}",
"You have removed the due date of card {card}" : "Heu suprimit la data de caducitat de la targeta {targeta}",
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de caducitat de la targeta {targeta}",
"You have set the due date of card {card} to {after}" : "Heu establert la data de caducitat de la targeta {card} a {after}",
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de caducitat de la targeta {card} a {after}",
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de caducitat de la targeta {card} a {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de caducitat de la targeta {card} a {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Heu afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} ha afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Heu eliminat l'etiqueta {label} de la targeta {card} a la llista {stack} al tauler {board}",
@@ -64,13 +64,13 @@
"A <strong>card description</strong> inside the Deck app has been changed" : "S'ha canviat una <strong>descripció de targeta</strong> a l'aplicació Tauler",
"Deck" : "Targetes",
"Changes in the <strong>Deck app</strong>" : "Canvis a l'<strong>aplicació Targetes</strong>",
"A <strong>comment</strong> was created on a card" : "S'ha afegit un <strong>comentari</strong> a una targeta",
"A <strong>comment</strong> was created on a card" : "S'ha creat un <strong>comentari</strong> a una targeta",
"Upcoming cards" : "Pròximes targetes",
"Load more" : "Carrega'n més",
"Personal" : "Personal",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "La targeta \"%s\" sobre \"%s\" se us ha assignat per %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} us ha assignat la targeta {deck-card} a {deck-board}.",
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de venciment.",
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de caducitat.",
"The card {deck-card} on {deck-board} has reached its due date." : "La targeta {deck-card} a {deck-board} ha assolit la seva data de caducitat.",
"%s has mentioned you in a comment on \"%s\"." : "%s us ha anomenat en un comentari sobre \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} us ha mencionat en un comentari a {deck-card}.",
@@ -86,7 +86,7 @@
"copy" : "còpia",
"To do" : "Pendent",
"Doing" : "En procés",
"Done" : "Finalitzat",
"Done" : "Fet",
"Example Task 3" : "Tasca d'exemple 3",
"Example Task 2" : "Tasca d'exemple 2",
"Example Task 1" : "Tasca d'exemple 1",
@@ -97,7 +97,7 @@
"No file was uploaded" : "No s'ha pujat cap fitxer",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "No sha pogut escriure el fitxer al disc",
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer",
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la pujada del fitxer",
"No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Aquest comentari té més de %s caràcters.\nS'ha afegit com a fitxer adjunt a la targeta amb el nom %s.\nAccessible a l'URL: %s.",
"Card not found" : "No s'ha trobat la targeta",
@@ -129,7 +129,7 @@
"Overwrite file" : "Sobreescriu el fitxer",
"Keep existing file" : "Mantén el fitxer existent",
"This board is read only" : "Aquest tauler és només de lectura",
"Drop your files to upload" : "Deixeu anar els fitxers per penjar-los",
"Drop your files to upload" : "Deixeu anar els fitxers per pujar-los",
"Add card" : "Afegeix una targeta",
"Archived cards" : "Targetes arxivades",
"Add list" : "Afegeix una llista",
@@ -172,36 +172,38 @@
"Can share" : "Pot compartir",
"Can manage" : "Pot gestionar",
"Owner" : "Propietari",
"Delete" : "Eliminar",
"Delete" : "Suprimeix",
"Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Esteu segur que voleu transferir el tauler {title} a {user}?",
"Transfer the board." : "Transfereix el tauler.",
"Transfer" : "Transferència",
"The board has been transferred to {user}" : "El tauler s'ha transferit a {user}",
"Failed to transfer the board to {user}" : "No s'ha pogut transferir el tauler a {user}",
"Add a new list" : "Afegir una llista nova",
"Add a new list" : "Afegeix una llista nova",
"Archive all cards" : "Arxiva totes les targetes",
"Unarchive all cards" : "Desarxivar totes les targetes",
"Delete list" : "Suprimeix la llista",
"Archive all cards in this list" : "Arxiva totes les targetes d'aquesta llista",
"Add a new card" : "Afegir una nova targeta",
"Unarchive all cards in this list" : "Desarxivar totes les targetes d'aquesta llista",
"Add a new card" : "Afegeix una nova targeta",
"Card name" : "Nom de la targeta",
"List deleted" : "Llista suprimida",
"Edit" : "Edita",
"Add a new tag" : "Afegir una etiqueta nova",
"Edit" : "Edició",
"Add a new tag" : "Afegeix una etiqueta nova",
"title and color value must be provided" : "sha de proporcionar el valor del títol i del color",
"Board name" : "Nom del taulell",
"Members" : "Membres",
"Upload new files" : "Puja nous fitxers",
"Upload new files" : "Pujada de nous fitxers",
"Share from Files" : "Comparteix des de Fitxers",
"Pending share" : "Compartició pendent",
"Add this attachment" : "Afegeix aquest adjunt",
"Show in Files" : "Mostra a Fitxers",
"Download" : "Baixa",
"Download" : "Baixada",
"Remove attachment" : "Treu l'adjunt",
"Delete Attachment" : "Suprimeix ladjunt",
"Restore Attachment" : "Restaura l'adjunt",
"File to share" : "Fitxer a compartir",
"Invalid path selected" : "S'ha seleccionat una ruta invàlida",
"Invalid path selected" : "S'ha seleccionat un camí no vàlid",
"Open in sidebar view" : "Obre a la vista de la barra lateral",
"Open in bigger view" : "Obre a la vista més gran",
"Attachments" : "Adjunts",
@@ -211,13 +213,13 @@
"The title cannot be empty." : "El títol no pot estar buit.",
"No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!",
"Failed to load comments" : "No s'han pogut carregar els comentaris",
"Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…",
"Assign to users" : "Assigna als usuaris",
"Assign to users/groups/circles" : "Assigna a usuaris/grups/cercles",
"Assign a user to this card…" : "Assigneu un usuari a aquesta targeta…",
"Due date" : "Per la data",
"Set a due date" : "Definir una data de venciment",
"Remove due date" : "Elimina la data de venciment",
"Assign a tag to this card…" : "Assignació d'una etiqueta a aquesta targeta…",
"Assign to users" : "Assignació als usuaris",
"Assign to users/groups/circles" : "Assignació a usuaris/grups/cercles",
"Assign a user to this card…" : "Assignació d'un usuari a aquesta targeta…",
"Due date" : "Data de caducitat",
"Set a due date" : "Definir una data de caducitat",
"Remove due date" : "Suprimeix la data de caducitat",
"Select Date" : "Selecciona la data",
"Today" : "Avui",
"Tomorrow" : "Demà",
@@ -234,15 +236,15 @@
"(Unsaved)" : "(No desat)",
"(Saving…)" : "(Desant…)",
"Formatting help" : "Format d'ajuda",
"Edit description" : "Edita descripció",
"Edit description" : "Edició descripció",
"View description" : "Veure descripció",
"Add Attachment" : "Afegeix un adjunt",
"Write a description …" : "Escriviu una descripció …",
"Choose attachment" : "Triar adjunt",
"(group)" : "(grup)",
"Todo items" : "Elements pendents",
"Todo items" : "Tasques pendents",
"{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits",
"Edit card title" : "Edita el títol de la targeta",
"Edit card title" : "Edició del títol de la targeta",
"Assign to me" : "Assigna'm a mi",
"Unassign myself" : "Desasignar a mi mateix",
"Move card" : "Mou la targeta",
@@ -256,8 +258,9 @@
"All boards" : "Tots els taulers",
"Archived boards" : "Taulers arxivats",
"Shared with you" : "Us han compartit",
"Deck settings" : "Configuració del Tauler",
"Deck settings" : "Paràmetres del Tauler",
"Use bigger card view" : "Utilitza la visualització de targetes més gran",
"Show card ID badge" : "Mostra el distintiu dID de la targeta",
"Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques",
"Limit deck usage of groups" : "Limitar l'ús del tauler de grups",
"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." : "Limitant el Tauler bloquejarà la creació de taulers als usuaris que no són part d'aquests grups. Els usuaris podran seguir treballant en els taulers que hagin estat compartits amb ells.",

View File

@@ -37,6 +37,7 @@ OC.L10N.register(
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin forfaldsdato.",
"%s has mentioned you in a comment on \"%s\"." : " %s har nævnt dig i en kommentar på \"%s\".",
"The board \"%s\" has been shared with you by %s." : "Tavlen \"%s\" er blevet delt med dig af %s.",
"%s on %s" : "%s på %s",
"No data was provided to create an attachment." : "Ingen data blev givet som kunne vedhæftes",
"Finished" : "Færdiggjort",
"To review" : "Til gennemgang",

View File

@@ -35,6 +35,7 @@
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin forfaldsdato.",
"%s has mentioned you in a comment on \"%s\"." : " %s har nævnt dig i en kommentar på \"%s\".",
"The board \"%s\" has been shared with you by %s." : "Tavlen \"%s\" er blevet delt med dig af %s.",
"%s on %s" : "%s på %s",
"No data was provided to create an attachment." : "Ingen data blev givet som kunne vedhæftes",
"Finished" : "Færdiggjort",
"To review" : "Til gennemgang",

View File

@@ -245,7 +245,7 @@ OC.L10N.register(
"Archive card" : "Αρχειοθέτηση καρτέλας",
"Delete card" : "Διαγραφή καρτέλας",
"Move card to another board" : "Μετακίνηση καρτέλας σε άλλο πίνακα",
"List is empty" : "Η λίστα είναι άδεια.",
"List is empty" : "Η λίστα είναι κενή",
"Card deleted" : "Η καρτέλα διαγράφηκε",
"seconds ago" : " δευτερόλεπτα πριν ",
"All boards" : "Όλοι οι πίνακες",

View File

@@ -243,7 +243,7 @@
"Archive card" : "Αρχειοθέτηση καρτέλας",
"Delete card" : "Διαγραφή καρτέλας",
"Move card to another board" : "Μετακίνηση καρτέλας σε άλλο πίνακα",
"List is empty" : "Η λίστα είναι άδεια.",
"List is empty" : "Η λίστα είναι κενή",
"Card deleted" : "Η καρτέλα διαγράφηκε",
"seconds ago" : " δευτερόλεπτα πριν ",
"All boards" : "Όλοι οι πίνακες",

View File

@@ -1,17 +1,97 @@
OC.L10N.register(
"deck",
{
"You have created a new board {board}" : "You have created a new board {board}",
"{user} has created a new board {board}" : "{user} has created a new board {board}",
"You have deleted the board {board}" : "You have deleted the board {board}",
"{user} has deleted the board {board}" : "{user} has deleted the board {board}",
"You have restored the board {board}" : "You have restored the board {board}",
"{user} has restored the board {board}" : "{user} has restored the board {board}",
"You have shared the board {board} with {acl}" : "You have shared the board {board} with {acl}",
"{user} has shared the board {board} with {acl}" : "{user} has shared the board {board} with {acl}",
"You have removed {acl} from the board {board}" : "You have removed {acl} from the board {board}",
"{user} has removed {acl} from the board {board}" : "{user} has removed {acl} from the board {board}",
"You have renamed the board {before} to {board}" : "You have renamed the board {before} to {board}",
"{user} has renamed the board {before} to {board}" : "{user} has renamed the board {before} to {board}",
"You have archived the board {board}" : "You have archived the board {board}",
"{user} has archived the board {before}" : "{user} has archived the board {before}",
"You have unarchived the board {board}" : "You have unarchived the board {board}",
"{user} has unarchived the board {before}" : "{user} has unarchived the board {before}",
"You have created a new list {stack} on board {board}" : "You have created a new list {stack} on board {board}",
"{user} has created a new list {stack} on board {board}" : "{user} has created a new list {stack} on board {board}",
"You have renamed list {before} to {stack} on board {board}" : "You have renamed list {before} to {stack} on board {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} has renamed list {before} to {stack} on board {board}",
"You have deleted list {stack} on board {board}" : "You have deleted list {stack} on board {board}",
"{user} has deleted list {stack} on board {board}" : "{user} has deleted list {stack} on board {board}",
"You have created card {card} in list {stack} on board {board}" : "You have created card {card} in list {stack} on board {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} has created card {card} in list {stack} on board {board}",
"You have deleted card {card} in list {stack} on board {board}" : "You have deleted card {card} in list {stack} on board {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} has deleted card {card} in list {stack} on board {board}",
"You have renamed the card {before} to {card}" : "You have renamed the card {before} to {card}",
"{user} has renamed the card {before} to {card}" : "{user} has renamed the card {before} to {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "You have added a description to card {card} in list {stack} on board {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} has added a description to card {card} in list {stack} on board {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "You have updated the description of card {card} in list {stack} on board {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} has updated the description of the card {card} in list {stack} on board {board}",
"You have archived card {card} in list {stack} on board {board}" : "You have archived card {card} in list {stack} on board {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} has archived card {card} in list {stack} on board {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "You have unarchived card {card} in list {stack} on board {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} has unarchived card {card} in list {stack} on board {board}",
"You have removed the due date of card {card}" : "You have removed the due date of card {card}",
"{user} has removed the due date of card {card}" : "{user} has removed the due date of card {card}",
"You have set the due date of card {card} to {after}" : "You have set the due date of card {card} to {after}",
"{user} has set the due date of card {card} to {after}" : "{user} has set the due date of card {card} to {after}",
"You have updated the due date of card {card} to {after}" : "You have updated the due date of card {card} to {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} has updated the due date of card {card} to {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "You have added the tag {label} to card {card} in list {stack} on board {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} has added the tag {label} to card {card} in list {stack} on board {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "You have removed the tag {label} from card {card} in list {stack} on board {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} has removed the tag {label} from card {card} in list {stack} on board {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "You have assigned {assigneduser} to card {card} on board {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} has assigned {assigneduser} to card {card} on board {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "You have unassigned {assigneduser} from card {card} on board {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} has unassigned {assigneduser} from card {card} on board {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "You have moved the card {card} from list {stackBefore} to {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} has moved the card {card} from list {stackBefore} to {stack}",
"You have added the attachment {attachment} to card {card}" : "You have added the attachment {attachment} to card {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} has added the attachment {attachment} to card {card}",
"You have updated the attachment {attachment} on card {card}" : "You have updated the attachment {attachment} on card {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} has updated the attachment {attachment} on card {card}",
"You have deleted the attachment {attachment} from card {card}" : "You have deleted the attachment {attachment} from card {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} has deleted the attachment {attachment} from card {card}",
"You have restored the attachment {attachment} to card {card}" : "You have restored the attachment {attachment} to card {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} has restored the attachment {attachment} to card {card}",
"You have commented on card {card}" : "You have commented on card {card}",
"{user} has commented on card {card}" : "{user} has commented on card {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "A <strong>card description</strong> inside the Deck app has been changed",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "Changes in the <strong>Deck app</strong>",
"A <strong>comment</strong> was created on a card" : "A <strong>comment</strong> was created on a card",
"Upcoming cards" : "Upcoming cards",
"Load more" : "Load more",
"Personal" : "Personal",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "The card \"%s\" on \"%s\" has been assigned to you by %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} has assigned the card {deck-card} on {deck-board} to you.",
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
"The card {deck-card} on {deck-board} has reached its due date." : "The card {deck-card} on {deck-board} has reached its due date.",
"%s has mentioned you in a comment on \"%s\"." : "%s has mentioned you in a comment on \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} has mentioned you in a comment on {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
"{user} has shared {deck-board} with you." : "{user} has shared {deck-board} with you.",
"Card comments" : "Card comments",
"%s on %s" : "%s on %s",
"No data was provided to create an attachment." : "No data was provided to create an attachment.",
"Finished" : "Finished",
"To review" : "To review",
"Action needed" : "Action needed",
"Later" : "Later",
"copy" : "copy",
"To do" : "To do",
"Doing" : "Doing",
"Done" : "Done",
"Example Task 3" : "Example Task 3",
"Example Task 2" : "Example Task 2",
"Example Task 1" : "Example Task 1",
"The file was uploaded" : "The file was uploaded",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
@@ -20,63 +100,218 @@ OC.L10N.register(
"Missing a temporary folder" : "Missing a temporary folder",
"Could not write file to disk" : "Could not write file to disk",
"A PHP extension stopped the file upload" : "A PHP extension stopped the file upload",
"No file uploaded or file size exceeds maximum of %s" : "No file uploaded or file size exceeds maximum of %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s.",
"Card not found" : "Card not found",
"Path is already shared with this card" : "Path is already shared with this card",
"Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD",
"Personal planning and team project organization" : "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 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",
"Card details" : "Card details",
"Add board" : "Add board",
"Select the board to link to a project" : "Select the board to link to a project",
"Search by board title" : "Search by board title",
"Select board" : "Select board",
"Create a new card" : "Create a new card",
"Select a board" : "Select a board",
"Select a list" : "Select a list",
"Card title" : "Card title",
"Cancel" : "Cancel",
"Creating the new card …" : "Creating the new card …",
"Card \"{card}\" was added to \"{board}\"" : "Card \"{card}\" was added to \"{board}\"",
"Open card" : "Open card",
"Close" : "Close",
"Create card" : "Create card",
"Select a card" : "Select a card",
"Select the card to link to a project" : "Select the card to link to a project",
"Link to card" : "Link to card",
"File already exists" : "File already exists",
"A file with the name {filename} already exists." : "A file with the name {filename} already exists.",
"Do you want to overwrite it?" : "Do you want to overwrite it?",
"Overwrite file" : "Overwrite file",
"Keep existing file" : "Keep existing file",
"This board is read only" : "This board is read only",
"Drop your files to upload" : "Drop your files to upload",
"Add card" : "Add card",
"Archived cards" : "Archived cards",
"Add list" : "Add list",
"List name" : "List name",
"Active filters" : "Active filters",
"Apply filter" : "Apply filter",
"Filter by tag" : "Filter by tag",
"Filter by assigned user" : "Filter by assigned user",
"Unassigned" : "Unassigned",
"Filter by due date" : "Filter by due date",
"Overdue" : "Overdue",
"Next 24 hours" : "Next 24 hours",
"Next 7 days" : "Next 7 days",
"Next 30 days" : "Next 30 days",
"No due date" : "No due date",
"Clear filter" : "Clear filter",
"Hide archived cards" : "Hide archived cards",
"Show archived cards" : "Show archived cards",
"Toggle compact mode" : "Toggle compact mode",
"Open details" : "Open details",
"Details" : "Details",
"Loading board" : "Loading board",
"No lists available" : "No lists available",
"Create a new list to add cards to this board" : "Create a new list to add cards to this board",
"Board not found" : "Board not found",
"Sharing" : "Sharing",
"Tags" : "Tags",
"Deleted items" : "Deleted items",
"Timeline" : "Timeline",
"Deleted lists" : "Deleted lists",
"Undo" : "Undo",
"Deleted cards" : "Deleted cards",
"Share board with a user, group or circle …" : "Share board with a user, group or circle …",
"Searching for users, groups and circles …" : "Searching for users, groups and circles …",
"No participants found" : "No participants found",
"Board owner" : "Board owner",
"(Group)" : "(Group)",
"(Circle)" : "(Circle)",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Can manage" : "Can manage",
"Owner" : "Owner",
"Delete" : "Delete",
"Failed to create share with {displayName}" : "Failed to create share with {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Are you sure you want to transfer the board {title} to {user}?",
"Transfer the board." : "Transfer the board.",
"Transfer" : "Transfer",
"The board has been transferred to {user}" : "The board has been transferred to {user}",
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
"Add a new list" : "Add a new list",
"Archive all cards" : "Archive all cards",
"Unarchive all cards" : "Unarchive all cards",
"Delete list" : "Delete list",
"Archive all cards in this list" : "Archive all cards in this list",
"Unarchive all cards in this list" : "Unarchive all cards in this list",
"Add a new card" : "Add a new card",
"Card name" : "Card name",
"List deleted" : "List deleted",
"Edit" : "Edit",
"Add a new tag" : "Add a new tag",
"title and color value must be provided" : "title and colour value must be provided",
"Board name" : "Board name",
"Members" : "Members",
"Upload new files" : "Upload new files",
"Share from Files" : "Share from Files",
"Pending share" : "Pending share",
"Add this attachment" : "Add this attachment",
"Show in Files" : "Show in Files",
"Download" : "Download",
"Remove attachment" : "Remove attachment",
"Delete Attachment" : "Delete Attachment",
"Restore Attachment" : "Restore Attachment",
"File to share" : "File to share",
"Invalid path selected" : "Invalid path selected",
"Open in sidebar view" : "Open in sidebar view",
"Open in bigger view" : "Open in bigger view",
"Attachments" : "Attachments",
"Comments" : "Comments",
"Modified" : "Modified",
"Created" : "Created",
"The title cannot be empty." : "The title cannot be empty.",
"No comments yet. Begin the discussion!" : "No comments yet. Begin the discussion!",
"Failed to load comments" : "Failed to load comments",
"Assign a tag to this card…" : "Assign a tag to this card…",
"Assign to users" : "Assign to users",
"Assign to users/groups/circles" : "Assign to users/groups/circles",
"Assign a user to this card…" : "Assign a user to this card…",
"Due date" : "Due date",
"Set a due date" : "Set a due date",
"Remove due date" : "Remove due date",
"Select Date" : "Select Date",
"Today" : "Today",
"Tomorrow" : "Tomorrow",
"Next week" : "Next week",
"Next month" : "Next month",
"Save" : "Save",
"The comment cannot be empty." : "The comment cannot be empty.",
"The comment cannot be longer than 1000 characters." : "The comment cannot be longer than 1000 characters.",
"In reply to" : "In reply to",
"Cancel reply" : "Cancel reply",
"Reply" : "Reply",
"Update" : "Update",
"Description" : "Description",
"(Unsaved)" : "(Unsaved)",
"(Saving…)" : "(Saving…)",
"Formatting help" : "Formatting help",
"Edit description" : "Edit description",
"View description" : "View description",
"Add Attachment" : "Add Attachment",
"Write a description …" : "Write a description …",
"Choose attachment" : "Choose attachment",
"(group)" : "(group)",
"Todo items" : "Todo items",
"{count} comments, {unread} unread" : "{count} comments, {unread} unread",
"Edit card title" : "Edit card title",
"Assign to me" : "Assign to me",
"Unassign myself" : "Unassign myself",
"Move card" : "Move card",
"Unarchive card" : "Unarchive card",
"Archive card" : "Archive card",
"Delete card" : "Delete card",
"Move card to another board" : "Move card to another board",
"List is empty" : "List is empty",
"Card deleted" : "Card deleted",
"seconds ago" : "seconds ago",
"All boards" : "All boards",
"Archived boards" : "Archived boards",
"Shared with you" : "Shared with you",
"Deck settings" : "Deck settings",
"Use bigger card view" : "Use bigger card view",
"Show card ID badge" : "Show card ID badge",
"Show boards in calendar/tasks" : "Show boards in calendar/tasks",
"Limit deck usage of groups" : "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." : "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.",
"Board details" : "Board details",
"Edit board" : "Edit board",
"Clone board" : "Clone board",
"Unarchive board" : "Unarchive board",
"Archive board" : "Archive board",
"Turn on due date reminders" : "Turn on due date reminders",
"Turn off due date reminders" : "Turn off due date reminders",
"Due date reminders" : "Due date reminders",
"All cards" : "All cards",
"Assigned cards" : "Assigned cards",
"No notifications" : "No notifications",
"Delete board" : "Delete board",
"Board {0} deleted" : "Board {0} deleted",
"Only assigned cards" : "Only assigned cards",
"No reminder" : "No reminder",
"An error occurred" : "An error occurred",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards.",
"Delete the board?" : "Delete the board?",
"Loading filtered view" : "Loading filtered view",
"No due" : "No due",
"Search for {searchQuery} in all boards" : "Search for {searchQuery} in all boards",
"No results found" : "No results found",
"{stack} in {board}" : "{stack} in {board}",
"Click to expand description" : "Click to expand description",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments",
"{nbCards} cards" : "{nbCards} cards",
"No upcoming cards" : "No upcoming cards",
"upcoming cards" : "upcoming cards",
"Due on {date}" : "Due on {date}",
"Link to a board" : "Link to a board",
"Link to a card" : "Link to a card",
"Create a card" : "Create a card",
"Message from {author} in {conversationName}" : "Message from {author} in {conversationName}",
"Something went wrong" : "Something went wrong",
"Failed to upload {name}" : "Failed to upload {name}",
"Maximum file size of {size} exceeded" : "Maximum file size of {size} exceeded",
"Error creating the share" : "Error creating the share",
"Share with a Deck card" : "Share with a Deck card",
"Share {file} with a Deck card" : "Share {file} with a Deck card",
"Share" : "Share",
"This week" : "This week"
"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 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",
"Are you sure you want to transfer the board {title} for {user} ?" : "Are you sure you want to transfer the board {title} for {user} ?",
"Transfer the board for {user} successfully" : "Transfer the board for {user} successfully",
"Failed to transfer the board for {user}" : "Failed to transfer the board for {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Are you sure you want to delete the board {title}? This will delete all the data of this board.",
"This week" : "This week",
"Are you sure you want to transfer the board {title} for {user}?" : "Are you sure you want to transfer the board {title} for {user}?"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,15 +1,95 @@
{ "translations": {
"You have created a new board {board}" : "You have created a new board {board}",
"{user} has created a new board {board}" : "{user} has created a new board {board}",
"You have deleted the board {board}" : "You have deleted the board {board}",
"{user} has deleted the board {board}" : "{user} has deleted the board {board}",
"You have restored the board {board}" : "You have restored the board {board}",
"{user} has restored the board {board}" : "{user} has restored the board {board}",
"You have shared the board {board} with {acl}" : "You have shared the board {board} with {acl}",
"{user} has shared the board {board} with {acl}" : "{user} has shared the board {board} with {acl}",
"You have removed {acl} from the board {board}" : "You have removed {acl} from the board {board}",
"{user} has removed {acl} from the board {board}" : "{user} has removed {acl} from the board {board}",
"You have renamed the board {before} to {board}" : "You have renamed the board {before} to {board}",
"{user} has renamed the board {before} to {board}" : "{user} has renamed the board {before} to {board}",
"You have archived the board {board}" : "You have archived the board {board}",
"{user} has archived the board {before}" : "{user} has archived the board {before}",
"You have unarchived the board {board}" : "You have unarchived the board {board}",
"{user} has unarchived the board {before}" : "{user} has unarchived the board {before}",
"You have created a new list {stack} on board {board}" : "You have created a new list {stack} on board {board}",
"{user} has created a new list {stack} on board {board}" : "{user} has created a new list {stack} on board {board}",
"You have renamed list {before} to {stack} on board {board}" : "You have renamed list {before} to {stack} on board {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} has renamed list {before} to {stack} on board {board}",
"You have deleted list {stack} on board {board}" : "You have deleted list {stack} on board {board}",
"{user} has deleted list {stack} on board {board}" : "{user} has deleted list {stack} on board {board}",
"You have created card {card} in list {stack} on board {board}" : "You have created card {card} in list {stack} on board {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} has created card {card} in list {stack} on board {board}",
"You have deleted card {card} in list {stack} on board {board}" : "You have deleted card {card} in list {stack} on board {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} has deleted card {card} in list {stack} on board {board}",
"You have renamed the card {before} to {card}" : "You have renamed the card {before} to {card}",
"{user} has renamed the card {before} to {card}" : "{user} has renamed the card {before} to {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "You have added a description to card {card} in list {stack} on board {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} has added a description to card {card} in list {stack} on board {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "You have updated the description of card {card} in list {stack} on board {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} has updated the description of the card {card} in list {stack} on board {board}",
"You have archived card {card} in list {stack} on board {board}" : "You have archived card {card} in list {stack} on board {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} has archived card {card} in list {stack} on board {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "You have unarchived card {card} in list {stack} on board {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} has unarchived card {card} in list {stack} on board {board}",
"You have removed the due date of card {card}" : "You have removed the due date of card {card}",
"{user} has removed the due date of card {card}" : "{user} has removed the due date of card {card}",
"You have set the due date of card {card} to {after}" : "You have set the due date of card {card} to {after}",
"{user} has set the due date of card {card} to {after}" : "{user} has set the due date of card {card} to {after}",
"You have updated the due date of card {card} to {after}" : "You have updated the due date of card {card} to {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} has updated the due date of card {card} to {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "You have added the tag {label} to card {card} in list {stack} on board {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} has added the tag {label} to card {card} in list {stack} on board {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "You have removed the tag {label} from card {card} in list {stack} on board {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} has removed the tag {label} from card {card} in list {stack} on board {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "You have assigned {assigneduser} to card {card} on board {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} has assigned {assigneduser} to card {card} on board {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "You have unassigned {assigneduser} from card {card} on board {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} has unassigned {assigneduser} from card {card} on board {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "You have moved the card {card} from list {stackBefore} to {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} has moved the card {card} from list {stackBefore} to {stack}",
"You have added the attachment {attachment} to card {card}" : "You have added the attachment {attachment} to card {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} has added the attachment {attachment} to card {card}",
"You have updated the attachment {attachment} on card {card}" : "You have updated the attachment {attachment} on card {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} has updated the attachment {attachment} on card {card}",
"You have deleted the attachment {attachment} from card {card}" : "You have deleted the attachment {attachment} from card {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} has deleted the attachment {attachment} from card {card}",
"You have restored the attachment {attachment} to card {card}" : "You have restored the attachment {attachment} to card {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} has restored the attachment {attachment} to card {card}",
"You have commented on card {card}" : "You have commented on card {card}",
"{user} has commented on card {card}" : "{user} has commented on card {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "A <strong>card description</strong> inside the Deck app has been changed",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "Changes in the <strong>Deck app</strong>",
"A <strong>comment</strong> was created on a card" : "A <strong>comment</strong> was created on a card",
"Upcoming cards" : "Upcoming cards",
"Load more" : "Load more",
"Personal" : "Personal",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "The card \"%s\" on \"%s\" has been assigned to you by %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} has assigned the card {deck-card} on {deck-board} to you.",
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
"The card {deck-card} on {deck-board} has reached its due date." : "The card {deck-card} on {deck-board} has reached its due date.",
"%s has mentioned you in a comment on \"%s\"." : "%s has mentioned you in a comment on \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} has mentioned you in a comment on {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
"{user} has shared {deck-board} with you." : "{user} has shared {deck-board} with you.",
"Card comments" : "Card comments",
"%s on %s" : "%s on %s",
"No data was provided to create an attachment." : "No data was provided to create an attachment.",
"Finished" : "Finished",
"To review" : "To review",
"Action needed" : "Action needed",
"Later" : "Later",
"copy" : "copy",
"To do" : "To do",
"Doing" : "Doing",
"Done" : "Done",
"Example Task 3" : "Example Task 3",
"Example Task 2" : "Example Task 2",
"Example Task 1" : "Example Task 1",
"The file was uploaded" : "The file was uploaded",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
@@ -18,63 +98,218 @@
"Missing a temporary folder" : "Missing a temporary folder",
"Could not write file to disk" : "Could not write file to disk",
"A PHP extension stopped the file upload" : "A PHP extension stopped the file upload",
"No file uploaded or file size exceeds maximum of %s" : "No file uploaded or file size exceeds maximum of %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s.",
"Card not found" : "Card not found",
"Path is already shared with this card" : "Path is already shared with this card",
"Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD",
"Personal planning and team project organization" : "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 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",
"Card details" : "Card details",
"Add board" : "Add board",
"Select the board to link to a project" : "Select the board to link to a project",
"Search by board title" : "Search by board title",
"Select board" : "Select board",
"Create a new card" : "Create a new card",
"Select a board" : "Select a board",
"Select a list" : "Select a list",
"Card title" : "Card title",
"Cancel" : "Cancel",
"Creating the new card …" : "Creating the new card …",
"Card \"{card}\" was added to \"{board}\"" : "Card \"{card}\" was added to \"{board}\"",
"Open card" : "Open card",
"Close" : "Close",
"Create card" : "Create card",
"Select a card" : "Select a card",
"Select the card to link to a project" : "Select the card to link to a project",
"Link to card" : "Link to card",
"File already exists" : "File already exists",
"A file with the name {filename} already exists." : "A file with the name {filename} already exists.",
"Do you want to overwrite it?" : "Do you want to overwrite it?",
"Overwrite file" : "Overwrite file",
"Keep existing file" : "Keep existing file",
"This board is read only" : "This board is read only",
"Drop your files to upload" : "Drop your files to upload",
"Add card" : "Add card",
"Archived cards" : "Archived cards",
"Add list" : "Add list",
"List name" : "List name",
"Active filters" : "Active filters",
"Apply filter" : "Apply filter",
"Filter by tag" : "Filter by tag",
"Filter by assigned user" : "Filter by assigned user",
"Unassigned" : "Unassigned",
"Filter by due date" : "Filter by due date",
"Overdue" : "Overdue",
"Next 24 hours" : "Next 24 hours",
"Next 7 days" : "Next 7 days",
"Next 30 days" : "Next 30 days",
"No due date" : "No due date",
"Clear filter" : "Clear filter",
"Hide archived cards" : "Hide archived cards",
"Show archived cards" : "Show archived cards",
"Toggle compact mode" : "Toggle compact mode",
"Open details" : "Open details",
"Details" : "Details",
"Loading board" : "Loading board",
"No lists available" : "No lists available",
"Create a new list to add cards to this board" : "Create a new list to add cards to this board",
"Board not found" : "Board not found",
"Sharing" : "Sharing",
"Tags" : "Tags",
"Deleted items" : "Deleted items",
"Timeline" : "Timeline",
"Deleted lists" : "Deleted lists",
"Undo" : "Undo",
"Deleted cards" : "Deleted cards",
"Share board with a user, group or circle …" : "Share board with a user, group or circle …",
"Searching for users, groups and circles …" : "Searching for users, groups and circles …",
"No participants found" : "No participants found",
"Board owner" : "Board owner",
"(Group)" : "(Group)",
"(Circle)" : "(Circle)",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Can manage" : "Can manage",
"Owner" : "Owner",
"Delete" : "Delete",
"Failed to create share with {displayName}" : "Failed to create share with {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Are you sure you want to transfer the board {title} to {user}?",
"Transfer the board." : "Transfer the board.",
"Transfer" : "Transfer",
"The board has been transferred to {user}" : "The board has been transferred to {user}",
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
"Add a new list" : "Add a new list",
"Archive all cards" : "Archive all cards",
"Unarchive all cards" : "Unarchive all cards",
"Delete list" : "Delete list",
"Archive all cards in this list" : "Archive all cards in this list",
"Unarchive all cards in this list" : "Unarchive all cards in this list",
"Add a new card" : "Add a new card",
"Card name" : "Card name",
"List deleted" : "List deleted",
"Edit" : "Edit",
"Add a new tag" : "Add a new tag",
"title and color value must be provided" : "title and colour value must be provided",
"Board name" : "Board name",
"Members" : "Members",
"Upload new files" : "Upload new files",
"Share from Files" : "Share from Files",
"Pending share" : "Pending share",
"Add this attachment" : "Add this attachment",
"Show in Files" : "Show in Files",
"Download" : "Download",
"Remove attachment" : "Remove attachment",
"Delete Attachment" : "Delete Attachment",
"Restore Attachment" : "Restore Attachment",
"File to share" : "File to share",
"Invalid path selected" : "Invalid path selected",
"Open in sidebar view" : "Open in sidebar view",
"Open in bigger view" : "Open in bigger view",
"Attachments" : "Attachments",
"Comments" : "Comments",
"Modified" : "Modified",
"Created" : "Created",
"The title cannot be empty." : "The title cannot be empty.",
"No comments yet. Begin the discussion!" : "No comments yet. Begin the discussion!",
"Failed to load comments" : "Failed to load comments",
"Assign a tag to this card…" : "Assign a tag to this card…",
"Assign to users" : "Assign to users",
"Assign to users/groups/circles" : "Assign to users/groups/circles",
"Assign a user to this card…" : "Assign a user to this card…",
"Due date" : "Due date",
"Set a due date" : "Set a due date",
"Remove due date" : "Remove due date",
"Select Date" : "Select Date",
"Today" : "Today",
"Tomorrow" : "Tomorrow",
"Next week" : "Next week",
"Next month" : "Next month",
"Save" : "Save",
"The comment cannot be empty." : "The comment cannot be empty.",
"The comment cannot be longer than 1000 characters." : "The comment cannot be longer than 1000 characters.",
"In reply to" : "In reply to",
"Cancel reply" : "Cancel reply",
"Reply" : "Reply",
"Update" : "Update",
"Description" : "Description",
"(Unsaved)" : "(Unsaved)",
"(Saving…)" : "(Saving…)",
"Formatting help" : "Formatting help",
"Edit description" : "Edit description",
"View description" : "View description",
"Add Attachment" : "Add Attachment",
"Write a description …" : "Write a description …",
"Choose attachment" : "Choose attachment",
"(group)" : "(group)",
"Todo items" : "Todo items",
"{count} comments, {unread} unread" : "{count} comments, {unread} unread",
"Edit card title" : "Edit card title",
"Assign to me" : "Assign to me",
"Unassign myself" : "Unassign myself",
"Move card" : "Move card",
"Unarchive card" : "Unarchive card",
"Archive card" : "Archive card",
"Delete card" : "Delete card",
"Move card to another board" : "Move card to another board",
"List is empty" : "List is empty",
"Card deleted" : "Card deleted",
"seconds ago" : "seconds ago",
"All boards" : "All boards",
"Archived boards" : "Archived boards",
"Shared with you" : "Shared with you",
"Deck settings" : "Deck settings",
"Use bigger card view" : "Use bigger card view",
"Show card ID badge" : "Show card ID badge",
"Show boards in calendar/tasks" : "Show boards in calendar/tasks",
"Limit deck usage of groups" : "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." : "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.",
"Board details" : "Board details",
"Edit board" : "Edit board",
"Clone board" : "Clone board",
"Unarchive board" : "Unarchive board",
"Archive board" : "Archive board",
"Turn on due date reminders" : "Turn on due date reminders",
"Turn off due date reminders" : "Turn off due date reminders",
"Due date reminders" : "Due date reminders",
"All cards" : "All cards",
"Assigned cards" : "Assigned cards",
"No notifications" : "No notifications",
"Delete board" : "Delete board",
"Board {0} deleted" : "Board {0} deleted",
"Only assigned cards" : "Only assigned cards",
"No reminder" : "No reminder",
"An error occurred" : "An error occurred",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards.",
"Delete the board?" : "Delete the board?",
"Loading filtered view" : "Loading filtered view",
"No due" : "No due",
"Search for {searchQuery} in all boards" : "Search for {searchQuery} in all boards",
"No results found" : "No results found",
"{stack} in {board}" : "{stack} in {board}",
"Click to expand description" : "Click to expand description",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments",
"{nbCards} cards" : "{nbCards} cards",
"No upcoming cards" : "No upcoming cards",
"upcoming cards" : "upcoming cards",
"Due on {date}" : "Due on {date}",
"Link to a board" : "Link to a board",
"Link to a card" : "Link to a card",
"Create a card" : "Create a card",
"Message from {author} in {conversationName}" : "Message from {author} in {conversationName}",
"Something went wrong" : "Something went wrong",
"Failed to upload {name}" : "Failed to upload {name}",
"Maximum file size of {size} exceeded" : "Maximum file size of {size} exceeded",
"Error creating the share" : "Error creating the share",
"Share with a Deck card" : "Share with a Deck card",
"Share {file} with a Deck card" : "Share {file} with a Deck card",
"Share" : "Share",
"This week" : "This week"
"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 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",
"Are you sure you want to transfer the board {title} for {user} ?" : "Are you sure you want to transfer the board {title} for {user} ?",
"Transfer the board for {user} successfully" : "Transfer the board for {user} successfully",
"Failed to transfer the board for {user}" : "Failed to transfer the board for {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Are you sure you want to delete the board {title}? This will delete all the data of this board.",
"This week" : "This week",
"Are you sure you want to transfer the board {title} for {user}?" : "Are you sure you want to transfer the board {title} for {user}?"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -18,6 +18,7 @@ OC.L10N.register(
"Details" : "Üksikasjad",
"Sharing" : "Jagamine",
"Tags" : "Sildid",
"Undo" : "Tühista",
"Can edit" : "Võib redigeerida",
"Can share" : "Can share",
"Owner" : "Omanik",
@@ -42,6 +43,7 @@ OC.L10N.register(
"Shared with you" : "Sinuga jagatud",
"No notifications" : "Märguandeid pole",
"An error occurred" : "Tekkis tõrge",
"Share" : "Jaga"
"Share" : "Jaga",
"This week" : "Käesolev nädal"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -16,6 +16,7 @@
"Details" : "Üksikasjad",
"Sharing" : "Jagamine",
"Tags" : "Sildid",
"Undo" : "Tühista",
"Can edit" : "Võib redigeerida",
"Can share" : "Can share",
"Owner" : "Omanik",
@@ -40,6 +41,7 @@
"Shared with you" : "Sinuga jagatud",
"No notifications" : "Märguandeid pole",
"An error occurred" : "Tekkis tõrge",
"Share" : "Jaga"
"Share" : "Jaga",
"This week" : "Käesolev nädal"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -131,7 +131,7 @@ OC.L10N.register(
"Overwrite file" : "Remplacer le fichier",
"Keep existing file" : "Conserver le fichier existant",
"This board is read only" : "Ce tableau est en lecture seule",
"Drop your files to upload" : "Glissez vos fichiers pour les envoyer",
"Drop your files to upload" : "Glissez vos fichiers pour les téléverser",
"Add card" : "Ajouter une carte",
"Archived cards" : "Cartes archivées",
"Add list" : "Ajouter une liste",

View File

@@ -129,7 +129,7 @@
"Overwrite file" : "Remplacer le fichier",
"Keep existing file" : "Conserver le fichier existant",
"This board is read only" : "Ce tableau est en lecture seule",
"Drop your files to upload" : "Glissez vos fichiers pour les envoyer",
"Drop your files to upload" : "Glissez vos fichiers pour les téléverser",
"Add card" : "Ajouter une carte",
"Archived cards" : "Cartes archivées",
"Add list" : "Ajouter une liste",

View File

@@ -71,14 +71,14 @@ OC.L10N.register(
"Load more" : "Carregar mais",
"Personal" : "Pessoal",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "O cartão \"%s\" em \"%s\" foi vinculado com você por %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{usuário} atribuiu a carta {deck-card} no {deck-board} para você.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} atribuiu o cartão {deck-card} no {deck-board} a você.",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
"The card {deck-card} on {deck-board} has reached its due date." : "A carta {deck-card} em {deck-board} atingiu sua data de vencimento.",
"The card {deck-card} on {deck-board} has reached its due date." : "O cartão {deck-card} em {deck-board} atingiu sua data de vencimento.",
"%s has mentioned you in a comment on \"%s\"." : "%s citou você num comentário em \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} mencionou você em um comentário em {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "O painel \"%s\" foi compartilhado com você por %s.",
"{user} has shared {deck-board} with you." : "{user} compartilhou {deck-board} com você.",
"Card comments" : "Comentários nos Cards",
"{user} has shared {deck-board} with you." : "{user} compartilhou o {deck-board} com você.",
"Card comments" : "Comentários do cartão",
"%s on %s" : "%s em %s",
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
"Finished" : "Terminado",
@@ -101,12 +101,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.",
"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.\nEle foi adicionado como um anexo ao cartão de nome %s.\nAcessível na 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 ",
"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" : "O Deck é uma ferramenta de organização ao estilo kanban voltada para o planejamento pessoal e para a organização de projetos para equipes, integrada ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Escreva notas adicionais formatadas em Markdown \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, seus amigos ou sua família\n- 📎 Anexe arquivos e incorpore-os à sua descrição em Markdown\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as alterações 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",
@@ -117,7 +117,7 @@ OC.L10N.register(
"Select a list" : "Selecione uma lista",
"Card title" : "Título do cartão",
"Cancel" : "Cancelar",
"Creating the new card …" : "Criando o novo cartão …",
"Creating the new card …" : "Criando o novo cartão…",
"Card \"{card}\" was added to \"{board}\"" : "O cartão \"{card}\" foi adicionado a \"{board}\" ",
"Open card" : "Abrir o cartão",
"Close" : "Fechar",
@@ -150,7 +150,7 @@ OC.L10N.register(
"Clear filter" : "Limpar filtro",
"Hide archived cards" : "Ocultar cartões arquivados",
"Show archived cards" : "Exibir cartões arquivados",
"Toggle compact mode" : "Alternar para modo compacto",
"Toggle compact mode" : "Alternar modo compacto",
"Open details" : "Abrir detalhes",
"Details" : "Detalhes",
"Loading board" : "Carregando painel",
@@ -176,15 +176,17 @@ OC.L10N.register(
"Owner" : "Proprietário",
"Delete" : "Excluir",
"Failed to create share with {displayName}" : "Falha ao criar compartilhamento com {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
"Transfer the board." : "Transfira a reunião.",
"Are you sure you want to transfer the board {title} to {user}?" : "Deseja realmente transferir o painel {title} para {user}?",
"Transfer the board." : "Transferir o painel.",
"Transfer" : "Transferir",
"The board has been transferred to {user}" : "A quadro foi transferida para {user}",
"Failed to transfer the board to {user}" : "Falha ao transferir o quadro para {user}",
"The board has been transferred to {user}" : "A painel foi transferida para {user}",
"Failed to transfer the board to {user}" : "Não foi possível transferir o painel para {user}",
"Add a new list" : "Adicionar nova lista",
"Archive all cards" : "Arquivar todos os cartões",
"Unarchive all cards" : "Desarquivar todos os cartões",
"Delete list" : "Excluir lista",
"Archive all cards in this list" : "Arquivar todos os cartões desta lista",
"Unarchive all cards in this list" : "Desarquivar todos os cartões desta lista",
"Add a new card" : "Adicionar um novo cartão",
"Card name" : "Nome do cartão",
"List deleted" : "Lista excluída",
@@ -197,7 +199,7 @@ OC.L10N.register(
"Share from Files" : "Compartilhar de Arquivos",
"Pending share" : "Compartilhamento pendente",
"Add this attachment" : "Adicionar este anexo",
"Show in Files" : "Mostrar em Arquivos",
"Show in Files" : "Exibir em Arquivos",
"Download" : "Baixar",
"Remove attachment" : "Remover anexo",
"Delete Attachment" : "Excluir Anexo",
@@ -212,13 +214,13 @@ OC.L10N.register(
"Created" : "Criado",
"The title cannot be empty." : "O título não pode ficar em branco.",
"No comments yet. Begin the discussion!" : "Nenhum comentário ainda. Inicie a conversa!",
"Failed to load comments" : "Falha ao carregar comentários",
"Failed to load comments" : "Não foi possível carregar os comentários",
"Assign a tag to this card…" : "Atribuir uma etiqueta a este cartão...",
"Assign to users" : "Atribuir a usuários",
"Assign to users/groups/circles" : "Atribuir a usuários/grupos/círculos",
"Assign a user to this card…" : "Atribuir um usuário a este cartão...",
"Due date" : "Data de vencimento",
"Set a due date" : "Definir uma data de finalização",
"Set a due date" : "Definir uma data de vencimento",
"Remove due date" : "Remover data de vencimento",
"Select Date" : "Selecionar Data",
"Today" : "Hoje",
@@ -242,7 +244,7 @@ OC.L10N.register(
"Write a description …" : "Escreva uma descrição...",
"Choose attachment" : "Escolher anexo",
"(group)" : "(grupo)",
"Todo items" : "Itens para fazer",
"Todo items" : "Itens a fazer",
"{count} comments, {unread} unread" : "{count} comentários, {unread} não lidos",
"Edit card title" : "Editar título do cartão",
"Assign to me" : "Atribuir a mim",
@@ -252,7 +254,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",
"List is empty" : "A lista está vazia",
"Card deleted" : "Cartão excluído",
"seconds ago" : "segundos atrás",
"All boards" : "Todos os painéis",
@@ -260,7 +262,8 @@ OC.L10N.register(
"Shared with you" : "Compartilhado com você",
"Deck settings" : "Configurações do Deck",
"Use bigger card view" : "Use uma exibição de cartão maior",
"Show boards in calendar/tasks" : "Mostrar painéis em calendários/tarefas",
"Show card ID badge" : "Exibir o distintivo de identificação do cartão",
"Show boards in calendar/tasks" : "Exibir os painéis em calendários/tarefas",
"Limit deck usage of groups" : "Limitar o uso de grupos no deck",
"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." : "Limitar o Deck impedirá que usuários que não fazem parte desses grupos criem seus próprios painéis. Os usuários ainda poderão trabalhar em pastas que foram compartilhadas com eles.",
"Board details" : "Detalhes do painel",
@@ -279,20 +282,20 @@ OC.L10N.register(
"Only assigned cards" : "Apenas cartões atribuídos",
"No reminder" : "Nenhum lembrete",
"An error occurred" : "Ocorreu um erro",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Tem certeza de que deseja excluir o quadro {title}? Isso excluirá todos os dados deste quadro, incluindo cartões arquivados.",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Deseja realmente excluir o painel {title}? Isso excluirá todos os dados deste painel, inclusive os cartões arquivados.",
"Delete the board?" : "Excluir o painel?",
"Loading filtered view" : "Carregando exibição filtrada",
"No due" : "Sem vencimento",
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
"No results found" : "Nenhum resultado encontrado",
"{stack} in {board}" : "{stack} de {board}",
"{stack} in {board}" : "{stack} em {board}",
"Click to expand description" : "Clique para expandir a descrição",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários",
"{nbCards} cards" : "{nbCards} cartões",
"No upcoming cards" : "Não há mais cartões",
"upcoming cards" : "próximos cartões",
"Due on {date}" : "Vencimento em {date}",
"Link to a board" : "Linkar a um painel",
"Link to a board" : "Vincular a um painel",
"Link to a card" : "Vincular a um cartão",
"Create a card" : "Criar um cartão",
"Message from {author} in {conversationName}" : "Mensagem de {author} em {conversationName}",
@@ -304,11 +307,11 @@ OC.L10N.register(
"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",
"Are you sure you want to transfer the board {title} for {user} ?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
"Transfer the board for {user} successfully" : "Transferida a reunião para {user} com sucesso",
"Failed to transfer the board for {user}" : "Falha ao transferir a reunião para {user}",
"Are you sure you want to transfer the board {title} for {user} ?" : "Deseja realmente transferir o painel {title} para {user}?",
"Transfer the board for {user} successfully" : "O painel foi transferido para {user} com sucesso",
"Failed to transfer the board for {user}" : "Não foi possível transferir o painel para {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Deseja realmente excluir o painel {title}? Isto excluirá todos os dados deste painel.",
"This week" : "Esta semana",
"Are you sure you want to transfer the board {title} for {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?"
"Are you sure you want to transfer the board {title} for {user}?" : "Deseja realmente transferir o painel {title} para {user}?"
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -69,14 +69,14 @@
"Load more" : "Carregar mais",
"Personal" : "Pessoal",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "O cartão \"%s\" em \"%s\" foi vinculado com você por %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{usuário} atribuiu a carta {deck-card} no {deck-board} para você.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} atribuiu o cartão {deck-card} no {deck-board} a você.",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
"The card {deck-card} on {deck-board} has reached its due date." : "A carta {deck-card} em {deck-board} atingiu sua data de vencimento.",
"The card {deck-card} on {deck-board} has reached its due date." : "O cartão {deck-card} em {deck-board} atingiu sua data de vencimento.",
"%s has mentioned you in a comment on \"%s\"." : "%s citou você num comentário em \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} mencionou você em um comentário em {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "O painel \"%s\" foi compartilhado com você por %s.",
"{user} has shared {deck-board} with you." : "{user} compartilhou {deck-board} com você.",
"Card comments" : "Comentários nos Cards",
"{user} has shared {deck-board} with you." : "{user} compartilhou o {deck-board} com você.",
"Card comments" : "Comentários do cartão",
"%s on %s" : "%s em %s",
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
"Finished" : "Terminado",
@@ -99,12 +99,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.",
"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.\nEle foi adicionado como um anexo ao cartão de nome %s.\nAcessível na 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 ",
"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" : "O Deck é uma ferramenta de organização ao estilo kanban voltada para o planejamento pessoal e para a organização de projetos para equipes, integrada ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Escreva notas adicionais formatadas em Markdown \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, seus amigos ou sua família\n- 📎 Anexe arquivos e incorpore-os à sua descrição em Markdown\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as alterações 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",
@@ -115,7 +115,7 @@
"Select a list" : "Selecione uma lista",
"Card title" : "Título do cartão",
"Cancel" : "Cancelar",
"Creating the new card …" : "Criando o novo cartão …",
"Creating the new card …" : "Criando o novo cartão…",
"Card \"{card}\" was added to \"{board}\"" : "O cartão \"{card}\" foi adicionado a \"{board}\" ",
"Open card" : "Abrir o cartão",
"Close" : "Fechar",
@@ -148,7 +148,7 @@
"Clear filter" : "Limpar filtro",
"Hide archived cards" : "Ocultar cartões arquivados",
"Show archived cards" : "Exibir cartões arquivados",
"Toggle compact mode" : "Alternar para modo compacto",
"Toggle compact mode" : "Alternar modo compacto",
"Open details" : "Abrir detalhes",
"Details" : "Detalhes",
"Loading board" : "Carregando painel",
@@ -174,15 +174,17 @@
"Owner" : "Proprietário",
"Delete" : "Excluir",
"Failed to create share with {displayName}" : "Falha ao criar compartilhamento com {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
"Transfer the board." : "Transfira a reunião.",
"Are you sure you want to transfer the board {title} to {user}?" : "Deseja realmente transferir o painel {title} para {user}?",
"Transfer the board." : "Transferir o painel.",
"Transfer" : "Transferir",
"The board has been transferred to {user}" : "A quadro foi transferida para {user}",
"Failed to transfer the board to {user}" : "Falha ao transferir o quadro para {user}",
"The board has been transferred to {user}" : "A painel foi transferida para {user}",
"Failed to transfer the board to {user}" : "Não foi possível transferir o painel para {user}",
"Add a new list" : "Adicionar nova lista",
"Archive all cards" : "Arquivar todos os cartões",
"Unarchive all cards" : "Desarquivar todos os cartões",
"Delete list" : "Excluir lista",
"Archive all cards in this list" : "Arquivar todos os cartões desta lista",
"Unarchive all cards in this list" : "Desarquivar todos os cartões desta lista",
"Add a new card" : "Adicionar um novo cartão",
"Card name" : "Nome do cartão",
"List deleted" : "Lista excluída",
@@ -195,7 +197,7 @@
"Share from Files" : "Compartilhar de Arquivos",
"Pending share" : "Compartilhamento pendente",
"Add this attachment" : "Adicionar este anexo",
"Show in Files" : "Mostrar em Arquivos",
"Show in Files" : "Exibir em Arquivos",
"Download" : "Baixar",
"Remove attachment" : "Remover anexo",
"Delete Attachment" : "Excluir Anexo",
@@ -210,13 +212,13 @@
"Created" : "Criado",
"The title cannot be empty." : "O título não pode ficar em branco.",
"No comments yet. Begin the discussion!" : "Nenhum comentário ainda. Inicie a conversa!",
"Failed to load comments" : "Falha ao carregar comentários",
"Failed to load comments" : "Não foi possível carregar os comentários",
"Assign a tag to this card…" : "Atribuir uma etiqueta a este cartão...",
"Assign to users" : "Atribuir a usuários",
"Assign to users/groups/circles" : "Atribuir a usuários/grupos/círculos",
"Assign a user to this card…" : "Atribuir um usuário a este cartão...",
"Due date" : "Data de vencimento",
"Set a due date" : "Definir uma data de finalização",
"Set a due date" : "Definir uma data de vencimento",
"Remove due date" : "Remover data de vencimento",
"Select Date" : "Selecionar Data",
"Today" : "Hoje",
@@ -240,7 +242,7 @@
"Write a description …" : "Escreva uma descrição...",
"Choose attachment" : "Escolher anexo",
"(group)" : "(grupo)",
"Todo items" : "Itens para fazer",
"Todo items" : "Itens a fazer",
"{count} comments, {unread} unread" : "{count} comentários, {unread} não lidos",
"Edit card title" : "Editar título do cartão",
"Assign to me" : "Atribuir a mim",
@@ -250,7 +252,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",
"List is empty" : "A lista está vazia",
"Card deleted" : "Cartão excluído",
"seconds ago" : "segundos atrás",
"All boards" : "Todos os painéis",
@@ -258,7 +260,8 @@
"Shared with you" : "Compartilhado com você",
"Deck settings" : "Configurações do Deck",
"Use bigger card view" : "Use uma exibição de cartão maior",
"Show boards in calendar/tasks" : "Mostrar painéis em calendários/tarefas",
"Show card ID badge" : "Exibir o distintivo de identificação do cartão",
"Show boards in calendar/tasks" : "Exibir os painéis em calendários/tarefas",
"Limit deck usage of groups" : "Limitar o uso de grupos no deck",
"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." : "Limitar o Deck impedirá que usuários que não fazem parte desses grupos criem seus próprios painéis. Os usuários ainda poderão trabalhar em pastas que foram compartilhadas com eles.",
"Board details" : "Detalhes do painel",
@@ -277,20 +280,20 @@
"Only assigned cards" : "Apenas cartões atribuídos",
"No reminder" : "Nenhum lembrete",
"An error occurred" : "Ocorreu um erro",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Tem certeza de que deseja excluir o quadro {title}? Isso excluirá todos os dados deste quadro, incluindo cartões arquivados.",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Deseja realmente excluir o painel {title}? Isso excluirá todos os dados deste painel, inclusive os cartões arquivados.",
"Delete the board?" : "Excluir o painel?",
"Loading filtered view" : "Carregando exibição filtrada",
"No due" : "Sem vencimento",
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
"No results found" : "Nenhum resultado encontrado",
"{stack} in {board}" : "{stack} de {board}",
"{stack} in {board}" : "{stack} em {board}",
"Click to expand description" : "Clique para expandir a descrição",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários",
"{nbCards} cards" : "{nbCards} cartões",
"No upcoming cards" : "Não há mais cartões",
"upcoming cards" : "próximos cartões",
"Due on {date}" : "Vencimento em {date}",
"Link to a board" : "Linkar a um painel",
"Link to a board" : "Vincular a um painel",
"Link to a card" : "Vincular a um cartão",
"Create a card" : "Criar um cartão",
"Message from {author} in {conversationName}" : "Mensagem de {author} em {conversationName}",
@@ -302,11 +305,11 @@
"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",
"Are you sure you want to transfer the board {title} for {user} ?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
"Transfer the board for {user} successfully" : "Transferida a reunião para {user} com sucesso",
"Failed to transfer the board for {user}" : "Falha ao transferir a reunião para {user}",
"Are you sure you want to transfer the board {title} for {user} ?" : "Deseja realmente transferir o painel {title} para {user}?",
"Transfer the board for {user} successfully" : "O painel foi transferido para {user} com sucesso",
"Failed to transfer the board for {user}" : "Não foi possível transferir o painel para {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Deseja realmente excluir o painel {title}? Isto excluirá todos os dados deste painel.",
"This week" : "Esta semana",
"Are you sure you want to transfer the board {title} for {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?"
"Are you sure you want to transfer the board {title} for {user}?" : "Deseja realmente transferir o painel {title} para {user}?"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Не удалось передать доску пользователю {user}",
"Add a new list" : "Создать список",
"Archive all cards" : "Переместить все карточки в архив",
"Unarchive all cards" : "Восстановить все карточки из архива",
"Delete list" : "Удалить список",
"Archive all cards in this list" : "Переместить в архив все карточки текущего списка",
"Unarchive all cards in this list" : "Восстановить из архива все карточки списка",
"Add a new card" : "Создать карточку",
"Card name" : "Название карточки",
"List deleted" : "Список удалён",
@@ -242,7 +244,9 @@ OC.L10N.register(
"Write a description …" : "Добавьте описание...",
"Choose attachment" : "Выберите вложение",
"(group)" : "(группа)",
"Todo items" : "Элементы списка задач",
"{count} comments, {unread} unread" : "{count} комментариев, {unread} непрочитано",
"Edit card title" : "Изменить заголовок карточки",
"Assign to me" : "Назначить себе",
"Unassign myself" : "Отказаться от назначения",
"Move card" : "Переместить карточку",
@@ -256,7 +260,9 @@ OC.L10N.register(
"All boards" : "Все доски",
"Archived boards" : "Архив досок",
"Shared with you" : "Предоставленные вам",
"Deck settings" : "Параметры карточек",
"Use bigger card view" : "Режим просмотра с увеличенными карточками",
"Show card ID badge" : "Показывать идентификатор карточки",
"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." : "Создание собственных рабочих досок пользователям, не входящим в заданные группы, будет заблокировано. Тем не менее, такие пользователи смогут продолжить работать с общими досками, к которым у них есть доступ. ",
@@ -276,12 +282,15 @@ OC.L10N.register(
"Only assigned cards" : "Только для назначенных карточек",
"No reminder" : "Не напоминать",
"An error occurred" : "Произошла ошибка",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Подтвердите удаление доски «{title}»; это действие приведёт к удалению также все данных, принадлежащих этой доске, включая карточки в архиве.",
"Delete the board?" : "Удалить доску?",
"Loading filtered view" : "Выполняется отбор",
"No due" : "Без назначенной даты",
"Search for {searchQuery} in all boards" : "Искать {searchQuery} на всех досках",
"No results found" : "Результаты отсутствуют",
"{stack} in {board}" : "«{stack}» с доски «{board}»",
"Click to expand description" : "Нажмите, чтобы развернуть поле описания",
"{nbCards} cards" : "карточек: {nbCards}",
"No upcoming cards" : "Отсутствуют карточки, ожидающие выполнения",
"upcoming cards" : "карточки, ожидающие выполнения",
"Link to a board" : "Ссылка на доску",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Не удалось передать доску пользователю {user}",
"Add a new list" : "Создать список",
"Archive all cards" : "Переместить все карточки в архив",
"Unarchive all cards" : "Восстановить все карточки из архива",
"Delete list" : "Удалить список",
"Archive all cards in this list" : "Переместить в архив все карточки текущего списка",
"Unarchive all cards in this list" : "Восстановить из архива все карточки списка",
"Add a new card" : "Создать карточку",
"Card name" : "Название карточки",
"List deleted" : "Список удалён",
@@ -240,7 +242,9 @@
"Write a description …" : "Добавьте описание...",
"Choose attachment" : "Выберите вложение",
"(group)" : "(группа)",
"Todo items" : "Элементы списка задач",
"{count} comments, {unread} unread" : "{count} комментариев, {unread} непрочитано",
"Edit card title" : "Изменить заголовок карточки",
"Assign to me" : "Назначить себе",
"Unassign myself" : "Отказаться от назначения",
"Move card" : "Переместить карточку",
@@ -254,7 +258,9 @@
"All boards" : "Все доски",
"Archived boards" : "Архив досок",
"Shared with you" : "Предоставленные вам",
"Deck settings" : "Параметры карточек",
"Use bigger card view" : "Режим просмотра с увеличенными карточками",
"Show card ID badge" : "Показывать идентификатор карточки",
"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." : "Создание собственных рабочих досок пользователям, не входящим в заданные группы, будет заблокировано. Тем не менее, такие пользователи смогут продолжить работать с общими досками, к которым у них есть доступ. ",
@@ -274,12 +280,15 @@
"Only assigned cards" : "Только для назначенных карточек",
"No reminder" : "Не напоминать",
"An error occurred" : "Произошла ошибка",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Подтвердите удаление доски «{title}»; это действие приведёт к удалению также все данных, принадлежащих этой доске, включая карточки в архиве.",
"Delete the board?" : "Удалить доску?",
"Loading filtered view" : "Выполняется отбор",
"No due" : "Без назначенной даты",
"Search for {searchQuery} in all boards" : "Искать {searchQuery} на всех досках",
"No results found" : "Результаты отсутствуют",
"{stack} in {board}" : "«{stack}» с доски «{board}»",
"Click to expand description" : "Нажмите, чтобы развернуть поле описания",
"{nbCards} cards" : "карточек: {nbCards}",
"No upcoming cards" : "Отсутствуют карточки, ожидающие выполнения",
"upcoming cards" : "карточки, ожидающие выполнения",
"Link to a board" : "Ссылка на доску",

View File

@@ -125,7 +125,7 @@ OC.L10N.register(
"Upload new files" : "Додати файл",
"Share from Files" : "Відкрити Файли",
"Add this attachment" : "Долучити вкладення",
"Download" : "Завантажити",
"Download" : "Звантажити",
"Delete Attachment" : "Забрати вкладення",
"Restore Attachment" : "Відновити вкладення",
"File to share" : "Виберіть файл для надання доступу",

View File

@@ -123,7 +123,7 @@
"Upload new files" : "Додати файл",
"Share from Files" : "Відкрити Файли",
"Add this attachment" : "Долучити вкладення",
"Download" : "Завантажити",
"Download" : "Звантажити",
"Delete Attachment" : "Забрати вкладення",
"Restore Attachment" : "Відновити вкладення",
"File to share" : "Виберіть файл для надання доступу",

View File

@@ -134,6 +134,7 @@ OC.L10N.register(
"Archived cards" : "已归档卡片",
"Add list" : "添加列表",
"List name" : "列表名称",
"Active filters" : "已开启的过滤器",
"Apply filter" : "应用筛选",
"Filter by tag" : "按标签筛选",
"Filter by assigned user" : "按指派的用户筛选",
@@ -235,7 +236,9 @@ OC.L10N.register(
"Write a description …" : "写一段描述",
"Choose attachment" : "选择附件",
"(group)" : "(组)",
"Todo items" : "待办事项",
"{count} comments, {unread} unread" : "{count} 条评论,{unread} 未读",
"Edit card title" : "编辑卡片标题",
"Assign to me" : "指派给我",
"Unassign myself" : "不再指派给我",
"Move card" : "移动卡片",

View File

@@ -132,6 +132,7 @@
"Archived cards" : "已归档卡片",
"Add list" : "添加列表",
"List name" : "列表名称",
"Active filters" : "已开启的过滤器",
"Apply filter" : "应用筛选",
"Filter by tag" : "按标签筛选",
"Filter by assigned user" : "按指派的用户筛选",
@@ -233,7 +234,9 @@
"Write a description …" : "写一段描述",
"Choose attachment" : "选择附件",
"(group)" : "(组)",
"Todo items" : "待办事项",
"{count} comments, {unread} unread" : "{count} 条评论,{unread} 未读",
"Edit card title" : "编辑卡片标题",
"Assign to me" : "指派给我",
"Unassign myself" : "不再指派给我",
"Move card" : "移动卡片",

View File

@@ -39,6 +39,7 @@ use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\Label;
use OCA\Deck\Db\Stack;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\NoPermissionException;
use OCA\Deck\Service\PermissionService;
use OCP\Activity\IEvent;
use OCP\Activity\IManager;
@@ -543,4 +544,24 @@ class ActivityManager {
'board' => $board
];
}
public function canSeeCardActivity(int $cardId): bool {
try {
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_READ);
$card = $this->cardMapper->find($cardId);
return $card->getDeletedAt() === 0;
} catch (NoPermissionException $e) {
return false;
}
}
public function canSeeBoardActivity(int $boardId): bool {
try {
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
$board = $this->boardMapper->find($boardId);
return $board->getDeletedAt() === 0;
} catch (NoPermissionException $e) {
return false;
}
}
}

View File

@@ -111,6 +111,9 @@ class DeckProvider implements IProvider {
$event->setAuthor($author);
}
if ($event->getObjectType() === ActivityManager::DECK_OBJECT_BOARD) {
if (!$this->activityManager->canSeeBoardActivity($event->getObjectId())) {
throw new \InvalidArgumentException();
}
if (isset($subjectParams['board']) && $event->getObjectName() === '') {
$event->setObject($event->getObjectType(), $event->getObjectId(), $subjectParams['board']['title']);
}
@@ -125,6 +128,9 @@ class DeckProvider implements IProvider {
}
if (isset($subjectParams['card']) && $event->getObjectType() === ActivityManager::DECK_OBJECT_CARD) {
if (!$this->activityManager->canSeeCardActivity($event->getObjectId())) {
throw new \InvalidArgumentException();
}
if ($event->getObjectName() === '') {
$event->setObject($event->getObjectType(), $event->getObjectId(), $subjectParams['card']['title']);
}

View File

@@ -108,7 +108,7 @@ class ResourceProvider implements IProvider {
private function getBoard(IResource $resource) {
try {
return $this->boardMapper->find($resource->getId(), false, true);
return $this->boardMapper->find((int)$resource->getId(), false, true);
} catch (DoesNotExistException $e) {
} catch (MultipleObjectsReturnedException $e) {
return null;

View File

@@ -79,12 +79,14 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
* @throws DoesNotExistException
*/
public function find($id, $withLabels = false, $withAcl = false): Board {
public function find(int $id, bool $withLabels = false, bool $withAcl = false, bool $allowDeleted = false): Board {
if (!isset($this->boardCache[$id])) {
$qb = $this->db->getQueryBuilder();
$deletedWhere = $allowDeleted ? $qb->expr()->gte('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) : $qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT));
$qb->select('*')
->from('deck_boards')
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
->andWhere($deletedWhere)
->orderBy('id');
$this->boardCache[$id] = $this->findEntity($qb);
}

View File

@@ -126,6 +126,7 @@ class BoardService {
*/
public function setUserId(string $userId): void {
$this->userId = $userId;
$this->permissionService->setUserId($userId);
}
/**
@@ -180,7 +181,7 @@ class BoardService {
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
* @throws BadRequestException
*/
public function find($boardId) {
public function find($boardId, bool $allowDeleted = false) {
$this->boardServiceValidator->check(compact('boardId'));
if ($this->boardsCache && isset($this->boardsCache[$boardId])) {
return $this->boardsCache[$boardId];
@@ -191,7 +192,7 @@ class BoardService {
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
/** @var Board $board */
$board = $this->boardMapper->find($boardId, true, true);
$board = $this->boardMapper->find((int)$boardId, true, true, $allowDeleted);
$this->boardMapper->mapOwner($board);
if ($board->getAcl() !== null) {
foreach ($board->getAcl() as $acl) {
@@ -366,7 +367,7 @@ class BoardService {
$this->boardServiceValidator->check(compact('id'));
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
$board = $this->find($id, true);
$board->setDeletedAt(0);
$board = $this->boardMapper->update($board);
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $board, ActivityManager::SUBJECT_BOARD_RESTORE);
@@ -387,7 +388,7 @@ class BoardService {
$this->boardServiceValidator->check(compact('id'));
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
$board = $this->find($id, true);
$delete = $this->boardMapper->delete($board);
return $delete;
@@ -470,7 +471,7 @@ class BoardService {
$newAcl = $this->aclMapper->insert($acl);
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $newAcl, ActivityManager::SUBJECT_BOARD_SHARE, [], $this->userId);
$this->notificationHelper->sendBoardShared((int)$boardId, $acl);
$this->notificationHelper->sendBoardShared($boardId, $acl);
$this->boardMapper->mapAcl($newAcl);
$this->changeHelper->boardChanged($boardId);

View File

@@ -264,7 +264,7 @@ class CardService {
public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null) {
$this->cardServiceValidator->check(compact('id', 'title', 'stackId', 'type', 'owner', 'order'));
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT, null, true);
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $id)) {
@@ -274,6 +274,14 @@ class CardService {
if ($archived !== null && $card->getArchived() && $archived === true) {
throw new StatusException('Operation not allowed. This card is archived.');
}
if ($card->getDeletedAt() !== 0) {
if ($deletedAt === null || $deletedAt > 0) {
// Only allow operations when restoring the card
throw new NoPermissionException('Operation not allowed. This card was deleted.');
}
}
$changes = new ChangeSet($card);
if ($card->getLastEditor() !== $this->currentUser && $card->getLastEditor() !== null) {
$this->activityManager->triggerEvent(

View File

@@ -83,24 +83,17 @@ class CommentService {
}
/**
* @param string $cardId
* @param string $message
* @param string $replyTo
* @return DataResponse
* @throws BadRequestException
* @throws NotFoundException|NoPermissionException
*/
public function create(string $cardId, string $message, string $replyTo = '0'): DataResponse {
if (!is_numeric($cardId)) {
throw new BadRequestException('A valid card id must be provided');
}
public function create(int $cardId, string $message, string $replyTo = '0'): DataResponse {
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_READ);
// Check if parent is a comment on the same card
if ($replyTo !== '0') {
try {
$comment = $this->commentsManager->get($replyTo);
if ($comment->getObjectType() !== Application::COMMENT_ENTITY_TYPE || $comment->getObjectId() !== $cardId) {
if ($comment->getObjectType() !== Application::COMMENT_ENTITY_TYPE || (int)$comment->getObjectId() !== $cardId) {
throw new CommentNotFoundException();
}
} catch (CommentNotFoundException $e) {
@@ -109,7 +102,7 @@ class CommentService {
}
try {
$comment = $this->commentsManager->create('users', $this->userId, Application::COMMENT_ENTITY_TYPE, $cardId);
$comment = $this->commentsManager->create('users', $this->userId, Application::COMMENT_ENTITY_TYPE, (string)$cardId);
$comment->setMessage($message);
$comment->setVerb('comment');
$comment->setParentId($replyTo);
@@ -145,7 +138,7 @@ class CommentService {
throw new NoPermissionException('Only authors are allowed to edit their comment.');
}
if ($comment->getParentId() !== '0') {
$this->permissionService->checkPermission($this->cardMapper, $comment->getParentId(), Acl::PERMISSION_READ);
$this->permissionService->checkPermission($this->cardMapper, (int)$comment->getParentId(), Acl::PERMISSION_READ);
}
$comment->setMessage($message);

View File

@@ -176,4 +176,12 @@ class ConfigService {
return $this->config->getUserValue($userId ?? $this->getUserId(), 'deck', 'attachment_folder', '/Deck');
}
public function setAttachmentFolder(?string $userId = null, string $path): void {
if ($userId === null && $this->getUserId() === null) {
throw new NoPermissionException('Must be logged in get the attachment folder');
}
$this->config->setUserValue($userId ?? $this->getUserId(), 'deck', 'attachment_folder', $path);
}
}

View File

@@ -31,6 +31,7 @@ use OCA\Deck\Sharing\DeckShareProvider;
use OCA\Deck\StatusException;
use OCP\AppFramework\Http\StreamResponse;
use OCP\Constants;
use OCP\Files\Folder;
use OCP\Files\IMimeTypeDetector;
use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException;
@@ -189,6 +190,16 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
$folder = $userFolder->newFolder($this->configService->getAttachmentFolder());
}
if ($folder->isShared()) {
$folderName = $userFolder->getNonExistingName($this->configService->getAttachmentFolder());
$folder = $userFolder->newFolder($folderName);
$this->configService->setAttachmentFolder($this->userId, $folderName);
}
if (!$folder instanceof Folder || $folder->isShared()) {
throw new NotFoundException('No target folder found');
}
$fileName = $folder->getNonExistingName($fileName);
$target = $folder->newFile($fileName);
$content = fopen($file['tmp_name'], 'rb');

View File

@@ -29,6 +29,7 @@ use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\IPermissionMapper;
use OCA\Deck\Db\User;
use OCA\Deck\NoPermissionException;
@@ -97,13 +98,18 @@ class PermissionService {
* @param $boardId
* @return bool|array
*/
public function getPermissions($boardId) {
public function getPermissions($boardId, ?string $userId = null) {
if ($userId === null) {
$userId = $this->userId;
}
if ($cached = $this->permissionCache->get($boardId)) {
return $cached;
}
$owner = $this->userIsBoardOwner($boardId);
$acls = $this->aclMapper->findAll($boardId);
$board = $this->getBoard($boardId);
$owner = $this->userIsBoardOwner($boardId, $userId);
$acls = $board->getDeletedAt() === 0 ? $this->aclMapper->findAll($boardId) : [];
$permissions = [
Acl::PERMISSION_READ => $owner || $this->userCan($acls, Acl::PERMISSION_READ),
Acl::PERMISSION_EDIT => $owner || $this->userCan($acls, Acl::PERMISSION_EDIT),
@@ -111,7 +117,7 @@ class PermissionService {
Acl::PERMISSION_SHARE => ($owner || $this->userCan($acls, Acl::PERMISSION_SHARE))
&& (!$this->shareManager->sharingDisabledForUser($this->userId))
];
$this->permissionCache->set($boardId, $permissions);
$this->permissionCache->set((string)$boardId, $permissions);
return $permissions;
}
@@ -137,13 +143,10 @@ class PermissionService {
/**
* check permissions for replacing dark magic middleware
*
* @param $mapper IPermissionMapper|null null if $id is a boardId
* @param $id int unique identifier of the Entity
* @param $permission int
* @return bool
* @param numeric $id
* @throws NoPermissionException
*/
public function checkPermission($mapper, $id, $permission, $userId = null) {
public function checkPermission($mapper, $id, $permission, $userId = null, bool $allowDeletedCard = false) {
$boardId = $id;
if ($mapper instanceof IPermissionMapper && !($mapper instanceof BoardMapper)) {
$boardId = $mapper->findBoardId($id);
@@ -157,12 +160,20 @@ class PermissionService {
throw new NoPermissionException('Permission denied');
}
if ($this->userIsBoardOwner($boardId, $userId)) {
return true;
}
try {
$acls = $this->getBoard($boardId)->getAcl() ?? [];
$permissions = $this->getPermissions($boardId, $userId);
if ($permissions[$permission] === true) {
if (!$allowDeletedCard && $mapper instanceof CardMapper) {
$card = $mapper->find($id);
if ($card->getDeletedAt() > 0) {
throw new NoPermissionException('Card is deleted');
}
}
return true;
}
$acls = $this->getBoard((int)$boardId)->getAcl() ?? [];
$result = $this->userCan($acls, $permission, $userId);
if ($result) {
return true;
@@ -194,11 +205,11 @@ class PermissionService {
* @throws MultipleObjectsReturnedException
* @throws DoesNotExistException
*/
private function getBoard($boardId): Board {
if (!isset($this->boardCache[$boardId])) {
$this->boardCache[$boardId] = $this->boardMapper->find($boardId, false, true);
private function getBoard(int $boardId): Board {
if (!isset($this->boardCache[(string)$boardId])) {
$this->boardCache[(string)$boardId] = $this->boardMapper->find($boardId, false, true);
}
return $this->boardCache[$boardId];
return $this->boardCache[(string)$boardId];
}
/**

View File

@@ -30,8 +30,10 @@ use OCA\Deck\Db\Acl;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\NoPermissionException;
use OCA\Deck\Service\PermissionService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Files\NotFoundException;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\Share\IShare;
@@ -53,7 +55,11 @@ class ShareAPIHelper {
public function formatShare(IShare $share): array {
$result = [];
$card = $this->cardMapper->find($share->getSharedWith());
try {
$card = $this->cardMapper->find($share->getSharedWith());
} catch (DoesNotExistException $e) {
throw new NotFoundException($e->getMessage());
}
$boardId = $this->cardMapper->findBoardId($card->getId());
$result['share_with'] = $share->getSharedWith();
$result['share_with_displayname'] = $card->getTitle();
@@ -109,7 +115,7 @@ class ShareAPIHelper {
*/
public function canAccessShare(IShare $share, string $user): bool {
try {
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_READ, $user);
$this->permissionService->checkPermission($this->cardMapper, (int)$share->getSharedWith(), Acl::PERMISSION_READ, $user);
} catch (NoPermissionException $e) {
return false;
}

12133
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,100 +1,100 @@
{
"name": "deck",
"description": "",
"version": "1.6.5",
"authors": [
{
"name": "Julius Härtl",
"email": "jus@bitgrid.net",
"role": "Developer"
},
{
"name": "Michael Weimann",
"email": "mail@michael-weimann.eu",
"role": "Developer"
}
],
"license": "agpl",
"private": true,
"scripts": {
"build": "NODE_ENV=production webpack --progress --config webpack.js",
"dev": "NODE_ENV=development webpack --progress --config webpack.js",
"watch": "NODE_ENV=development webpack --progress --watch --config webpack.js",
"lint": "eslint --ext .js,.vue src",
"lint:fix": "eslint --ext .js,.vue src --fix",
"stylelint": "stylelint src",
"stylelint:fix": "stylelint src --fix",
"test": "jest",
"test:coverage": "jest --coverage"
},
"dependencies": {
"@babel/polyfill": "^7.12.1",
"@babel/runtime": "^7.16.0",
"@juliushaertl/vue-richtext": "^1.0.1",
"@nextcloud/auth": "^1.3.0",
"@nextcloud/axios": "^1.7.0",
"@nextcloud/dialogs": "^3.1.2",
"@nextcloud/event-bus": "^2.1.1",
"@nextcloud/files": "^2.1.0",
"@nextcloud/initial-state": "^1.2.1",
"@nextcloud/l10n": "^1.4.1",
"@nextcloud/moment": "^1.1.1",
"@nextcloud/router": "^2.0.0",
"@nextcloud/vue": "^4.2.0",
"@nextcloud/vue-dashboard": "^2.0.1",
"blueimp-md5": "^2.19.0",
"dompurify": "^2.3.3",
"lodash": "^4.17.21",
"markdown-it": "^12.2.0",
"markdown-it-link-attributes": "^3.0.0",
"markdown-it-task-checkbox": "^1.0.6",
"moment": "^2.29.1",
"nextcloud-vue-collections": "^0.9.0",
"p-queue": "^6.6.2",
"url-search-params-polyfill": "^8.1.1",
"vue": "^2.6.14",
"vue-at": "^2.5.0-beta.2",
"vue-click-outside": "^1.1.0",
"vue-easymde": "^2.0.0",
"vue-infinite-loading": "^2.4.5",
"vue-router": "^3.5.3",
"vue-smooth-dnd": "^0.8.1",
"vuex": "^3.6.2",
"vuex-router-sync": "^5.0.0"
},
"browserslist": [
"extends @nextcloud/browserslist-config"
],
"engines": {
"node": "^14.0.0",
"npm": "^7.0.0"
},
"devDependencies": {
"@nextcloud/babel-config": "^1.0.0",
"@nextcloud/browserslist-config": "^2.2.0",
"@nextcloud/eslint-config": "^6.1.0",
"@nextcloud/stylelint-config": "^1.0.0-beta.0",
"@nextcloud/webpack-vue-config": "^4.1.2",
"@relative-ci/agent": "^3.0.0",
"@vue/test-utils": "^1.2.2",
"jest": "^27.3.1",
"jest-serializer-vue": "^2.0.2",
"vue-jest": "^3.0.7"
},
"jest": {
"moduleFileExtensions": [
"js",
"vue"
],
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/src/$1"
},
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
},
"snapshotSerializers": [
"<rootDir>/node_modules/jest-serializer-vue"
]
}
}
"name": "deck",
"description": "",
"version": "1.6.7",
"authors": [
{
"name": "Julius Härtl",
"email": "jus@bitgrid.net",
"role": "Developer"
},
{
"name": "Michael Weimann",
"email": "mail@michael-weimann.eu",
"role": "Developer"
}
],
"license": "agpl",
"private": true,
"scripts": {
"build": "NODE_ENV=production webpack --progress --config webpack.js",
"dev": "NODE_ENV=development webpack --progress --config webpack.js",
"watch": "NODE_ENV=development webpack --progress --watch --config webpack.js",
"lint": "eslint --ext .js,.vue src",
"lint:fix": "eslint --ext .js,.vue src --fix",
"stylelint": "stylelint src",
"stylelint:fix": "stylelint src --fix",
"test": "jest",
"test:coverage": "jest --coverage"
},
"dependencies": {
"@babel/polyfill": "^7.12.1",
"@babel/runtime": "^7.16.0",
"@juliushaertl/vue-richtext": "^1.0.1",
"@nextcloud/auth": "^1.3.0",
"@nextcloud/axios": "^1.7.0",
"@nextcloud/dialogs": "^3.1.2",
"@nextcloud/event-bus": "^2.1.1",
"@nextcloud/files": "^2.1.0",
"@nextcloud/initial-state": "^1.2.1",
"@nextcloud/l10n": "^1.4.1",
"@nextcloud/moment": "^1.1.1",
"@nextcloud/router": "^2.0.0",
"@nextcloud/vue": "^4.2.0",
"@nextcloud/vue-dashboard": "^2.0.1",
"blueimp-md5": "^2.19.0",
"dompurify": "^2.3.3",
"lodash": "^4.17.21",
"markdown-it": "^12.2.0",
"markdown-it-link-attributes": "^3.0.0",
"markdown-it-task-checkbox": "^1.0.6",
"moment": "^2.29.1",
"nextcloud-vue-collections": "^0.9.0",
"p-queue": "^6.6.2",
"url-search-params-polyfill": "^8.1.1",
"vue": "^2.6.14",
"vue-at": "^2.5.0-beta.2",
"vue-click-outside": "^1.1.0",
"vue-easymde": "^2.0.0",
"vue-infinite-loading": "^2.4.5",
"vue-router": "^3.5.3",
"vue-smooth-dnd": "^0.8.1",
"vuex": "^3.6.2",
"vuex-router-sync": "^5.0.0"
},
"browserslist": [
"extends @nextcloud/browserslist-config"
],
"engines": {
"node": "^14.0.0",
"npm": "^7.0.0"
},
"devDependencies": {
"@nextcloud/babel-config": "^1.0.0",
"@nextcloud/browserslist-config": "^2.2.0",
"@nextcloud/eslint-config": "^6.1.0",
"@nextcloud/stylelint-config": "^1.0.0-beta.0",
"@nextcloud/webpack-vue-config": "^4.1.2",
"@relative-ci/agent": "^3.0.0",
"@vue/test-utils": "^1.2.2",
"jest": "^27.3.1",
"jest-serializer-vue": "^2.0.2",
"vue-jest": "^3.0.7"
},
"jest": {
"moduleFileExtensions": [
"js",
"vue"
],
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/src/$1"
},
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
},
"snapshotSerializers": [
"<rootDir>/node_modules/jest-serializer-vue"
]
}
}

View File

@@ -84,7 +84,20 @@ export default {
params.append('object_id', '' + this.objectId)
params.append('limit', ACTIVITY_FETCH_LIMIT)
const response = await axios.get(generateOcsUrl(`apps/activity/api/v2/activity/${this.filter}`) + '?' + params)
const response = await axios.get(
generateOcsUrl(`apps/activity/api/v2/activity/${this.filter}`) + '?' + params,
{
validateStatus: (status) => {
return (status >= 200 && status < 300) || status === 304
},
},
)
if (response.status === 304) {
this.endReached = true
return []
}
let activities = response.data.ocs.data
if (this.filter === 'deck') {
// We need to manually filter activities here, since currently we use two different types and there is no way
@@ -95,7 +108,7 @@ export default {
})
}
this.activities.push(...activities)
if (response.data.ocs.meta.statuscode === 304 || activities.length === 0) {
if (activities.length === 0) {
this.endReached = true
return []
}

View File

@@ -0,0 +1 @@
68024

View File

@@ -90,3 +90,53 @@ Feature: acl
And the current user should not have "edit" permissions on the board
And the current user should have "share" permissions on the board
And the current user should not have "manage" permissions on the board
Scenario: Share a board multiple times
Given Logging in using web as "user0"
And creates a board named "Double shared board" with color "ff0000"
And shares the board with user "user1"
And shares the board with group "group1"
And creates a board named "Single shared board" with color "00ff00"
And shares the board with user "user1"
When Logging in using web as "user1"
And fetching the board list
Then the response should have a status code "200"
And the response should be a list of objects
And the response should contain an element with the properties
| property | value |
| title | Double shared board |
Scenario: Deleted board is inaccessible to share recipients
Given acting as user "user0"
When creates a board with example content
And remember the last card as "user0-card"
When post a comment with content "hello comment" on the card
And uploads an attachment to the last used card
And remember the last attachment as "user0-attachment"
And shares the board with user "user1"
Then the HTTP status code should be "200"
And delete the board
Given acting as user "user1"
When fetching the attachments for the card "user0-card"
Then the response should have a status code 403
When get the comments on the card
Then the response should have a status code 403
When update a comment with content "hello deleted" on the card
Then the response should have a status code 403
When delete the comment on the card
Then the response should have a status code 403
# 644
When post a comment with content "hello deleted" on the card
Then the response should have a status code 403
When get the card details
Then the response should have a status code 403
When fetching the attachment "user0-attachment" for the card "user0-card"
Then the response should have a status code 403
When deleting the attachment "user0-attachment" for the card "user0-card"
Then the response should have a status code 403

View File

@@ -87,4 +87,14 @@ class AttachmentContext implements Context {
$this->requestContext->sendPlainRequest('GET', '/index.php/apps/deck/cards/' . $cardId . '/attachment/file:' . $attachmentId);
}
/**
* @When fetching the attachments for the card :cardReference
*/
public function fetchingTheAttachmentsForTheCard($cardReference) {
$cardId = $this->boardContext->getRememberedCard($cardReference)['id'] ?? null;
Assert::assertNotNull($cardId, 'Card needs to be available');
$this->requestContext->sendPlainRequest('GET', '/index.php/apps/deck/cards/' . $cardId . '/attachments');
}
}

View File

@@ -17,8 +17,8 @@ class BoardContext implements Context {
/** @var array last card response */
private $card = null;
private $storedCards = [];
private $activities = null;
/** @var ServerContext */
private $serverContext;
/** @BeforeScenario */
@@ -186,7 +186,9 @@ class BoardContext implements Context {
['description' => $description]
));
$this->requestContext->getResponse()->getBody()->seek(0);
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
if ($this->requestContext->getResponse()->getStatusCode() === 200) {
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
}
}
/**
@@ -198,7 +200,22 @@ class BoardContext implements Context {
[$attribute => $value]
));
$this->requestContext->getResponse()->getBody()->seek(0);
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
if ($this->requestContext->getResponse()->getStatusCode() === 200) {
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
}
}
/**
* @Given /^get the card details$/
*/
public function getCard() {
$this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/cards/' . $this->card['id'], array_merge(
$this->card
));
$this->requestContext->getResponse()->getBody()->seek(0);
if ($this->requestContext->getResponse()->getStatusCode() === 200) {
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
}
}
/**
@@ -253,4 +270,36 @@ class BoardContext implements Context {
public function getRememberedCard($arg1) {
return $this->storedCards[$arg1] ?? null;
}
/**
* @Given /^delete the card$/
*/
public function deleteTheCard() {
$this->requestContext->sendJSONrequest('DELETE', '/index.php/apps/deck/cards/' . $this->card['id']);
$this->card['deletedAt'] = time();
}
/**
* @Given /^delete the board/
*/
public function deleteTheBoard() {
$this->requestContext->sendJSONrequest('DELETE', '/index.php/apps/deck/boards/' . $this->board['id']);
}
/**
* @Given /^get the activities for the last card$/
*/
public function getActivitiesForTheLastCard() {
$card = $this->getLastUsedCard();
$this->requestContext->sendOCSRequest('GET', '/apps/activity/api/v2/activity/filter?format=json&type=deck&since=0&object_type=deck_card&object_id=' . $card['id'] . '&limit=50');
$this->activities = json_decode((string)$this->getResponse()->getBody(), true)['ocs']['data'] ?? null;
}
/**
* @Then the fetched activities should have :count entries
*/
public function theFetchedActivitiesShouldHaveEntries($count) {
Assert::assertEquals($count, count($this->activities ?? []));
}
}

View File

@@ -11,6 +11,8 @@ class CommentContext implements Context {
/** @var BoardContext */
protected $boardContext;
private $lastComment = null;
/** @BeforeScenario */
public function gatherContexts(BeforeScenarioScope $scope) {
$environment = $scope->getEnvironment();
@@ -27,5 +29,33 @@ class CommentContext implements Context {
'message' => $content,
'parentId' => null
]);
$this->lastComment = $this->requestContext->getResponseBodyFromJson()['ocs']['data'] ?? null;
}
/**
* @Given /^get the comments on the card$/
*/
public function getCommentsOnTheCard() {
$card = $this->boardContext->getLastUsedCard();
$this->requestContext->sendOCSRequest('GET', '/apps/deck/api/v1.0/cards/' . $card['id'] . '/comments');
}
/**
* @When /^update a comment with content "([^"]*)" on the card$/
*/
public function updateACommentWithContentOnTheCard($content) {
$card = $this->boardContext->getLastUsedCard();
$this->requestContext->sendOCSRequest('PUT', '/apps/deck/api/v1.0/cards/' . $card['id'] . '/comments/'. $this->lastComment['id'], [
'message' => $content,
'parentId' => null
]);
}
/**
* @When /^delete the comment on the card$/
*/
public function deleteTheCommentOnTheCard() {
$card = $this->boardContext->getLastUsedCard();
$this->requestContext->sendOCSRequest('DELETE', '/apps/deck/api/v1.0/cards/' . $card['id'] . '/comments/'. $this->lastComment['id']);
}
}

View File

@@ -166,4 +166,29 @@ class RequestContext implements Context {
$this->getResponse()->getBody()->seek(0);
return json_decode((string)$this->getResponse()->getBody(), true);
}
/**
* @Given /^the response should be a list of objects$/
*/
public function theResponseShouldBeAListOfObjects() {
$jsonResponse = $this->getResponseBodyFromJson();
Assert::assertEquals(array_keys($jsonResponse), range(0, count($jsonResponse) - 1));
}
/**
* @When /^the response should contain an element with the properties$/
*/
public function responseContainsElement(TableNode $element) {
$json = $this->getResponseBodyFromJson();
$found = array_filter($json, function ($board) use ($element) {
foreach ($element as $row) {
if ($row['value'] !== $board[$row['property']]) {
return false;
}
}
return true;
});
Assert::assertEquals(1, count($found));
}
}

View File

@@ -10,15 +10,15 @@ class ServerContext implements Context {
WebDav::__construct as private __tConstruct;
}
private $rawBaseUrl;
private $mappedUserId;
private $lastInsertIds = [];
public function __construct($baseUrl) {
$this->rawBaseUrl = $baseUrl;
$this->__tConstruct($baseUrl . '/index.php/ocs/', ['admin', 'admin'], '123456');
}
/** @var string */
private $mappedUserId;
private $lastInsertIds = [];
/**
* @BeforeSuite

View File

@@ -32,3 +32,80 @@ Feature: decks
And creates a board named "MyBoard" with color "000000"
And create a stack named "ToDo"
When create a card named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters"
Scenario: Cannot access card on a deleted board
Given acting as user "user0"
And creates a board named "MyBoard" with color "000000"
And create a stack named "ToDo"
And create a card named "Overdue task"
And remember the last card as "deletedCard"
And uploads an attachment to the last used card
And remember the last attachment as "my-attachment"
And post a comment with content "My first comment" on the card
And delete the board
When fetching the attachment "my-attachment" for the card "deletedCard"
Then the response should have a status code 403
When get the comments on the card
Then the response should have a status code 403
When post a comment with content "My second comment" on the card
Then the response should have a status code 403
When uploads an attachment to the last used card
Then the response should have a status code 403
When set the description to "Update some text"
Then the response should have a status code 403
When get the card details
Then the response should have a status code 403
When create a card named "Overdue task"
Then the response should have a status code 403
When create a stack named "ToDo"
Then the response should have a status code 403
Scenario: Cannot access card on a deleted card
Given acting as user "user0"
And creates a board named "MyBoard" with color "000000"
And create a stack named "ToDo"
And create a card named "Overdue task"
And remember the last card as "deletedCard"
And uploads an attachment to the last used card
And remember the last attachment as "my-attachment"
And post a comment with content "My first comment" on the card
When get the activities for the last card
Then the fetched activities should have 3 entries
And delete the card
When get the activities for the last card
Then the fetched activities should have 0 entries
When fetching the attachment "my-attachment" for the card "deletedCard"
Then the response should have a status code 403
When get the comments on the card
Then the response should have a status code 403
When post a comment with content "My second comment" on the card
Then the response should have a status code 403
When deleting the attachment "my-attachment" for the card "deletedCard"
Then the response should have a status code 403
When uploads an attachment to the last used card
Then the response should have a status code 403
When get the card details
Then the response should have a status code 403
# We currently still expect to be able to update the card as this is used to undo deletion
When set the description to "Update some text"
Then the response should have a status code 403
When set the card attribute "deletedAt" to "0"
Then the response should have a status code 200
When set the description to "Update some text"
Then the response should have a status code 200

View File

@@ -124,6 +124,7 @@ class ActivityManagerTest extends TestCase {
public function testCreateEvent() {
$board = new Board();
$board->setId(123);
$board->setTitle('');
$this->boardMapper->expects($this->once())
->method('find')

View File

@@ -74,6 +74,9 @@ class DeckProviderTest extends TestCase {
$this->config = $this->createMock(IConfig::class);
$this->cardService = $this->createMock(CardService::class);
$this->provider = new DeckProvider($this->urlGenerator, $this->activityManager, $this->userManager, $this->commentsManager, $this->l10nFactory, $this->config, $this->userId, $this->cardService);
$this->activityManager->method('canSeeCardActivity')->willReturn(true);
$this->activityManager->method('canSeeBoardActivity')->willReturn(true);
}
private function mockEvent($objectType, $objectId, $objectName, $subject, $subjectParameters = []) {

View File

@@ -240,6 +240,8 @@ class PermissionServiceTest extends \Test\TestCase {
->method('sharingDisabledForUser')
->willReturn(false);
$this->aclMapper->method('findAll')->willReturn([]);
if ($result) {
$actual = $this->service->checkPermission($mapper, 1234, $permission);
$this->assertTrue($actual);
@@ -262,6 +264,8 @@ class PermissionServiceTest extends \Test\TestCase {
$this->boardMapper->expects($this->any())->method('find')->willReturn($board);
}
$this->aclMapper->method('findAll')->willReturn([]);
if ($result) {
$actual = $this->service->checkPermission($mapper, 1234, $permission);
$this->assertTrue($actual);