Compare commits

..

594 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
Julius Härtl
e9e55f8091 Bump version to 1.6.5
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-18 16:27:25 +01:00
Nextcloud bot
aff4cb6ac0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-17 02:21:32 +00:00
Nextcloud bot
69e8fe23b4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-12 02:22:19 +00:00
Julius Härtl
ec9c4220b5 Merge pull request #4203 from nextcloud/backport/4180/stable23 2022-11-11 14:59:19 +01:00
Nextcloud bot
babf767286 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-11 02:21:24 +00:00
Johannes Szeibert
5e3eca1e29 minor style fixes
Signed-off-by: Johannes Szeibert <johannes@szeibert.de>
2022-11-10 08:31:51 +00:00
Nextcloud bot
983365830c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-10 02:23:02 +00:00
Marcel Klehr
139e901af6 Merge pull request #4183 from nextcloud/backport/4101/stable23 2022-11-09 14:13:24 +01:00
Nextcloud bot
f98ab9ed8e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-09 02:21:49 +00:00
Nextcloud bot
d34562b7bd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-05 02:22:36 +00:00
Julius Härtl
512b0d7664 Merge pull request #4177 from nextcloud/backport/4173/stable23 2022-11-04 08:25:57 +01:00
Nextcloud bot
d2c81dde9c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-04 02:21:22 +00:00
Julius Härtl
2dff9d5a09 Fix test compatibility with PHP 7.3
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-03 21:46:05 +01:00
Julius Härtl
76e08f2a21 Fix validation of attachment data
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-03 20:43:09 +01:00
Julius Härtl
d83fdfcb0a Unify getting the share for attachments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-03 20:42:46 +01:00
Julius Härtl
9d498ca84c Add integration test for attachment handling on cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-03 20:42:46 +01:00
mokkin
2d05e84de9 disables autocomplete on card creation
solves https://github.com/nextcloud/deck/issues/4083

Signed-off-by: mokkin <markus@haybach.com>
2022-11-03 18:26:25 +01:00
Nextcloud bot
3bf57dd6d7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-03 02:21:19 +00:00
Nextcloud bot
27110581fd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-02 02:21:37 +00:00
Nextcloud bot
c735e4b017 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-01 02:21:44 +00:00
Julius Härtl
c20da909a5 Merge pull request #4175 from nextcloud/backport/4059/stable23 2022-10-31 21:17:45 +01:00
Julius Härtl
2d64c52079 Adapt to older PHP versions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-31 14:22:41 +01:00
Julius Härtl
53dc650e51 Add some tests for parameter validation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-31 14:22:41 +01:00
Luka Trovic
ff77c45a50 feat: add validators to check values in services
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-10-31 14:22:38 +01:00
Nextcloud bot
357f30464d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-31 02:21:08 +00:00
Nextcloud bot
561d081a95 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-30 02:24:14 +00:00
Nextcloud bot
34541cab03 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-29 02:23:27 +00:00
Marcel Klehr
0dfbcd4631 Merge pull request #4159 from nextcloud/release/1.6.4 2022-10-27 11:47:12 +02:00
Nextcloud bot
2742334cf9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-27 02:21:19 +00:00
Marcel Klehr
1a1cb058d3 v1.6.4
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2022-10-26 16:19:23 +02:00
Nextcloud bot
03dd572d0c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-25 02:26:20 +00:00
Nextcloud bot
59efdf8964 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-24 02:21:58 +00:00
Julius Härtl
631e688a03 Merge pull request #4133 from nextcloud/backport/4065/stable23 2022-10-18 19:22:04 +02:00
Julius Härtl
1db5d7cf47 Cache user membership for circles
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-18 11:35:12 +02:00
Julius Härtl
6f6d2df9de Pin postgres to 14
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-18 11:30:30 +02:00
Julius Härtl
a5eecd9d19 Merge pull request #4119 from nextcloud/backport/3439/stable23 2022-10-18 11:26:24 +02:00
Nextcloud bot
7e949052dc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-18 02:21:43 +00:00
Julius Härtl
4cc32a1e8b Activity: Set event link also for notifications that get emitted from activity
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-14 10:51:08 +00:00
Nextcloud bot
bf9f9da3b0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-13 02:22:25 +00:00
Nextcloud bot
f70595ea2a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-08 02:21:54 +00:00
Marcel Klehr
e6f9c136e9 Merge pull request #4020 from nextcloud/backport/4014/stable23 2022-10-07 12:07:49 +02:00
Nextcloud bot
632cd3079f [tx-robot] Update transifex configuration
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-07 02:21:52 +00:00
Nextcloud bot
578fd46765 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-06 02:26:18 +00:00
Nextcloud bot
3dec4b7f2c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-05 02:21:25 +00:00
Côme Chilliet
3f7a2b31b3 Merge pull request #4094 from nextcloud/migrate-stable23-christophwurst-package
Migrate to nextcloud/OCP package in stable23
2022-10-02 10:39:42 +02:00
Joas Schilling
c072d713cb Migrate to nextcloud/OCP package in stable23
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-10-02 09:18:37 +02:00
Nextcloud bot
9fe5ec7fab [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-10-01 02:24:40 +00:00
Nextcloud bot
3ec0579256 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-30 03:23:43 +00:00
Nextcloud bot
ebc4ad45ff [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-28 02:46:19 +00:00
Nextcloud bot
a4d89a5b3d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-26 02:47:20 +00:00
Nextcloud bot
bf504624f4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-24 02:47:25 +00:00
Nextcloud bot
4e7ce3e061 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-23 02:42:12 +00:00
Nextcloud bot
96da8d8b06 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-22 02:45:51 +00:00
Nextcloud bot
8d51826169 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-20 02:45:59 +00:00
Nextcloud bot
188e60c7d0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-17 02:45:16 +00:00
Nextcloud bot
fc47f8b719 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-16 02:39:40 +00:00
Nextcloud bot
44b744017d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-15 02:45:11 +00:00
Nextcloud bot
693acfa8df [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-14 02:39:56 +00:00
Nextcloud bot
655f82e1cf [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-13 02:40:43 +00:00
Nextcloud bot
4e54a77075 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-12 02:39:44 +00:00
Nextcloud bot
ce123d10e5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-09 02:40:43 +00:00
Nextcloud bot
82c9e7d174 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-08 02:40:34 +00:00
Nextcloud bot
f8cf9a1856 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-07 02:40:03 +00:00
Nextcloud bot
6219004c51 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-06 02:39:40 +00:00
Nextcloud bot
28a65a2e98 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-05 02:39:01 +00:00
Nextcloud bot
edcb5c4eca [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-04 02:38:04 +00:00
Nextcloud bot
05109c351f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-03 02:44:38 +00:00
Robin Appelman
c3a5898271 disable Create card button while no stack is chosen
make the `isBoardAndStackChoosen` method do what it says

Signed-off-by: Robin Appelman <robin@icewind.nl>
2022-09-02 11:12:48 +00:00
Nextcloud bot
5befacc95e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-09-01 02:50:09 +00:00
Nextcloud bot
3e0a0e0a0e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-28 02:36:34 +00:00
Nextcloud bot
5f4bd548fe [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-27 02:36:46 +00:00
Julius Härtl
ae7e4e04ad Merge pull request #3998 from nextcloud/backport/3980/stable23 2022-08-26 10:50:31 +02:00
Julius Härtl
89173f4ef7 Make CappedMemoryCache usage compatible with older releases
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-08-26 10:04:07 +02:00
Raul Ferreira Fuentes
ff09639924 Merge pull request #3996 from nextcloud/backport/3982/stable23
[stable23] Improve CalDAV integration performance
2022-08-25 12:13:49 +00:00
Julius Härtl
811e19db0e Use capped memory cache for board permissions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-08-25 10:47:43 +00:00
Julius Härtl
1cf0930f2a Avoid fetching archived cards for calendars
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-08-25 10:47:37 +00:00
Julius Härtl
8154741d6d Avoid querying each card when getting the calendars only
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-08-25 10:47:36 +00:00
Nextcloud bot
e4a9482979 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-24 02:39:43 +00:00
Nextcloud bot
b23d53e541 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-22 02:37:17 +00:00
Nextcloud bot
65e4e65bd6 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-21 02:36:37 +00:00
Nextcloud bot
2ebcda8ca9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-20 02:37:00 +00:00
Nextcloud bot
e686c6b32b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-13 02:37:52 +00:00
Nextcloud bot
f3526cc996 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-12 02:36:58 +00:00
Nextcloud bot
673addc6ba [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-09 02:36:39 +00:00
Julius Härtl
7a5c745bdf Merge pull request #3960 from nextcloud/backport/3952/stable23 2022-08-08 09:32:35 +02:00
Julius Härtl
c46ca8a03a Fetch attachment folder for the correct user during cron job
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-08-08 07:00:56 +00:00
Nextcloud bot
b686cae095 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-07 02:41:01 +00:00
Nextcloud bot
4c7f64e427 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-06 02:37:37 +00:00
Nextcloud bot
699b089655 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-05 02:13:44 +00:00
Nextcloud bot
3cc1db09d1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-08-03 02:13:45 +00:00
Julius Härtl
912dd4778e Merge pull request #3926 from nextcloud/backport/3898/stable23
[stable23] Switch to 'markdown-it-task-checkbox' for rendering of task lists
2022-08-01 22:05:56 +02:00
Nextcloud bot
cd3ff3e8bc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-29 02:13:36 +00:00
Nextcloud bot
28c39ae6b4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-28 02:13:42 +00:00
Nextcloud bot
efa7838993 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-27 02:13:40 +00:00
Nextcloud bot
04c131d58f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-25 02:39:12 +00:00
Nextcloud bot
da8e2886ae [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-24 02:40:50 +00:00
Nextcloud bot
57c7ac6ebf [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-23 02:38:37 +00:00
Nextcloud bot
cfc5bb266d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-21 02:38:55 +00:00
q-wertz
04619d16dd Switch to 'markdown-it-task-checkbox' for rendering of task lists
Signed-off-by: q-wertz <clemens.sonnleitner@web.de>
2022-07-19 09:49:38 +02:00
Nextcloud bot
9f709a851f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-19 02:38:02 +00:00
Nextcloud bot
0b1accc395 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-18 02:37:18 +00:00
Nextcloud bot
db1167a05f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-14 02:37:46 +00:00
Julius Härtl
1f4d1a7ea2 Merge pull request #3918 from nextcloud/backport/3916/stable23
[stable23] Prevent opening card and applyLabelFilter on card drag end
2022-07-12 16:36:58 +02:00
Julien Veyssier
0f83e606a5 refs #2594 prevent opening card and applyLabelFilter on card drag end
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2022-07-12 11:57:24 +00:00
Nextcloud bot
6edb957849 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-08 02:37:18 +00:00
Nextcloud bot
1151f907f5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-06 02:35:57 +00:00
Nextcloud bot
c330cff60b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-04 02:35:51 +00:00
Nextcloud bot
809383702a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-07-02 02:37:25 +00:00
Raul Ferreira Fuentes
a341206ff0 Merge pull request #3886 from nextcloud/backport/3884/stable23
[stable23] Fix z-index for deck sidebar
2022-06-28 15:26:13 +02:00
Raul
b33fe37499 Fix z-index for deck sidebar
The sidebar would previously render above the user menu (logout, settings, etc)

Signed-off-by: Raul <r.ferreira.fuentes@gmail.com>
2022-06-28 12:40:37 +00:00
Nextcloud bot
05f764bc17 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-06-22 02:40:28 +00:00
Nextcloud bot
f5307362ee [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-06-14 02:41:54 +00:00
Nextcloud bot
ce40630b2f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-06-12 02:41:06 +00:00
Nextcloud bot
afbc1c263c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-06-09 02:45:34 +00:00
Nextcloud bot
24a2ee5bd4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-06-07 02:44:08 +00:00
Nextcloud bot
8542dfc7e1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-06-03 02:47:54 +00:00
Nextcloud bot
165604cbac [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-06-02 02:47:11 +00:00
Julius Härtl
841f66e854 Merge pull request #3848 from nextcloud/release/1.6.3
release/1.6.3
2022-06-01 11:30:13 +02:00
Julius Härtl
c4a3eec533 Pin engines
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-06-01 11:26:40 +02:00
Julius Härtl
9fb6db4c31 Merge pull request #3845 from nextcloud/backport/3528/stable23
[stable23] Add app config to toggle the default calendar setting as an admin
2022-05-30 18:20:52 +02:00
Julius Härtl
47b71f93c8 Add app config to toggle the default calendar setting as an admin
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-05-30 12:42:32 +00:00
Luka Trovic
42c01d7c3b changes for 1.6.3
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-05-29 22:39:56 +02:00
Nextcloud bot
c3b610bc38 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-29 02:46:55 +00:00
Nextcloud bot
2d7edbf2f2 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-28 02:43:26 +00:00
Nextcloud bot
26f1288440 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-26 02:44:19 +00:00
Nextcloud bot
55f52d5d68 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-24 02:47:14 +00:00
Nextcloud bot
e8ed6fb89e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-23 02:43:47 +00:00
Nextcloud bot
36e8a88588 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-22 02:43:42 +00:00
Nextcloud bot
aa7dfbd749 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-21 02:47:14 +00:00
Nextcloud bot
cec655c1fa [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-20 02:46:29 +00:00
Julius Härtl
228457e387 Merge pull request #3816 from nextcloud/backport/3811/stable23
[stable23] Align Duedate-delete icon properly - fixes nextcloud/deck#3791
2022-05-13 09:34:59 +02:00
Nextcloud bot
66f985a9fb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-13 02:41:49 +00:00
ben
54706cfe8d Align Duedate-delete icon properly - fixes nextcloud/deck#3791
Signed-off-by: ben <ben@ro.tt>
2022-05-12 14:54:20 +00:00
Julius Härtl
48bf117339 Merge pull request #3805 from nextcloud/backport/3682/stable23
[stable23] Increase file count after sharing
2022-05-12 09:57:43 +02:00
Julius Härtl
d585e14240 Fix php-cs-fixer failure
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-05-12 09:09:32 +02:00
Julius Härtl
6a790154c2 Move all caching to helper
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-05-11 14:44:04 +00:00
Luka Trovic
33913be41f fix: move shares count cache logic to the DeckShareProvider
Signed-off-by: Luka Trovic <luka@nextcloud.com>

fix: conflicts

Signed-off-by: Luka Trovic <luka@nextcloud.com>

fix: conflicts and test issues

Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-05-11 14:44:04 +00:00
Luka Trovic
393e08519d fix: update attachments count when sharing
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-05-11 14:44:03 +00:00
Luka Trovic
dfcf096caa fix: increase file count after sharing
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-05-11 14:44:03 +00:00
Julius Härtl
4859456588 Merge pull request #3795 from nextcloud/backport/3681/stable23-bis
[stable23] Show cards after moving into another list
2022-05-10 12:33:22 +02:00
Luka Trovic
366df500e6 fix: feedback
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-05-09 16:35:23 +01:00
Luka Trovic
7c6cdfd498 fix: show card after moving into another list
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-05-09 16:34:15 +01:00
Nextcloud bot
29fb2e63ad [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-06 02:41:17 +00:00
Nextcloud bot
e021d400f3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-05 02:41:07 +00:00
Julius Härtl
139a8a0fb7 Merge pull request #3780 from nextcloud/backport/3777/stable23
[stable23] Fetch full board data after cloning
2022-05-04 17:17:10 +02:00
Julius Härtl
43e91b9082 Fetch full board data after cloning
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-05-04 10:29:29 +00:00
Nextcloud bot
316f5fb25a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-04 02:42:59 +00:00
Nextcloud bot
008b41a2ad [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-05-03 02:41:25 +00:00
Nextcloud bot
e5e836101c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-30 02:39:56 +00:00
Julius Härtl
dd261fec6c Merge pull request #3770 from nextcloud/backport/3769/stable23
[stable23] Handle qb mapper exception messages properly
2022-04-29 18:45:33 +02:00
Julius Härtl
5214377341 Handle qb mapper exception messages properly
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-04-29 15:28:34 +00:00
Julius Härtl
ad4174f6bd Bump version to 1.6.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-04-29 16:32:07 +02:00
Julius Härtl
976e68e40c Merge pull request #3766 from nextcloud/backport/3761/stable23
[stable23] Fix text selection in dark mode and modal view
2022-04-29 16:29:09 +02:00
Julius Härtl
9c33cdf3d3 Fix text selection in dark mode and modal view
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-04-29 15:57:53 +02:00
Nextcloud bot
d5eea830a5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-29 02:41:08 +00:00
Julius Härtl
c8e94c2de4 Merge pull request #3755 from nextcloud/backport/3745/stable23
[stable23] Add missing indices
2022-04-28 10:11:28 +02:00
Nextcloud bot
f838d91304 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-28 02:41:23 +00:00
Julius Härtl
f4c615252b Add missing indices
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-04-26 16:26:29 +00:00
Nextcloud bot
f084193daf [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-24 02:41:16 +00:00
Nextcloud bot
20b9b1e1e9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-23 02:39:29 +00:00
Nextcloud bot
eae7fd88d8 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-22 02:40:27 +00:00
Julius Härtl
983247b9e8 Merge pull request #3741 from nextcloud/backport/stable23/3683
[stable23] Fix paramter replacements when creating deck cards from talk messages
2022-04-21 09:36:47 +02:00
Joas Schilling
afbd6ce1b0 Fix node linting
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-04-20 18:39:44 +02:00
Joas Schilling
31311f1123 Fix paramter replacements when creating deck cards from talk messages
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-04-20 18:39:33 +02:00
Julius Härtl
7a3fb009d6 Merge pull request #3734 from nextcloud/backport/3692/stable23
[stable23] Fix hidden attachment icon on archived cards
2022-04-20 18:14:17 +02:00
Luka Trovic
a7974d32ee fix: hidden attachment icon on archived cards
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-04-20 14:22:25 +00:00
Julius Härtl
558ac704f5 Merge pull request #3497 from nextcloud/bugfix/noid/share-query-opt
[stable23] Use explicit cast to make use of index
2022-04-19 21:43:16 +02:00
Nextcloud bot
0c98a04699 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-17 02:38:10 +00:00
Nextcloud bot
4f9b71dcad [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-14 02:42:23 +00:00
Nextcloud bot
b2367314fc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-13 02:40:14 +00:00
Julius Härtl
c04e5c1681 Use explicit cast to make use of index
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-04-12 10:13:22 +02:00
Julius Härtl
541eeb0b06 Merge pull request #3664 from nextcloud/backport/stable23/2496
[stable23] Transfer ownership
2022-04-11 18:29:14 +02:00
Julius Härtl
1bd62d7fa2 Merge pull request #3713 from nextcloud/backport/3670/stable23
[stable23] Properly check for the stack AND setting board permissions
2022-04-11 18:28:14 +02:00
Julius Härtl
03a9915dd5 Merge pull request #3717 from nextcloud/backport/3625/stable23
[stable23] Fix: Check all circle shares for permissions
2022-04-11 18:27:51 +02:00
Bink
b6cce55325 Fix: Check all circle shares for permissions instead of returning after the first 2022-04-11 14:45:58 +00:00
Julius Härtl
47345e10f1 Properly check for the stack AND setting board permissions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-04-11 14:35:10 +00:00
Julius Härtl
39784dc940 Remove unused argument
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-04-11 16:25:54 +02:00
Julius Härtl
1cdea9dba0 Merge pull request #3706 from nextcloud/backport/3501/stable23
[stable23] Add a missing translation - not found in transifex
2022-04-11 09:53:30 +02:00
Nextcloud bot
49591d6699 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-09 02:39:15 +00:00
Luka Trovic
101e15c1b7 add a missing translation - not found in transifex
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-04-08 19:35:33 +00:00
Nextcloud bot
4d9743f8d3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-06 02:39:52 +00:00
Nextcloud bot
51433ac4a9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-04-05 02:39:55 +00:00
Nextcloud bot
2cde9ac16c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-31 02:41:41 +00:00
Nextcloud bot
fb2a38e684 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-30 02:39:31 +00:00
Nextcloud bot
ff4f33264b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-29 02:39:53 +00:00
Nextcloud bot
879e936728 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-28 02:39:00 +00:00
Nextcloud bot
c47bfd21eb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-25 03:07:27 +00:00
Nextcloud bot
c59b6f8882 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-24 02:38:34 +00:00
Julius Härtl
4dabc22f27 lint: fix eslint
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 16:03:22 +01:00
Julius Härtl
490cfb2396 Fix tests and move to 7.3 as a min php version
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 16:03:22 +01:00
Julius Härtl
f840bbba11 PHP 7.2 compatbility
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 16:03:22 +01:00
Julius Härtl
cffcd4fd66 Adjust documentaion wording
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:40 +01:00
Julius Härtl
a3336cb0a0 Handle board exceptions more gracefully
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:40 +01:00
Julius Härtl
379f1144b3 Cover case where the owner is preserved
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:40 +01:00
Luka Trovic
eb69512b5f fix: feedback
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-03-22 14:22:40 +01:00
Luka Trovic
f46c31f120 feat: add api endpoint and UI to transfer a board to a different user
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-03-22 14:22:40 +01:00
Julius Härtl
b75fb76c08 fix: test cases using generator
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:39 +01:00
Julius Härtl
3d925fb145 Reuse single board transfer for all user boards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:39 +01:00
Julius Härtl
7786c86f47 fix: Properly handle limited scope for remapping users
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:39 +01:00
Julius Härtl
7f3a318fc5 cleanup test cases
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:39 +01:00
Julius Härtl
525a14c428 Allow transfer of single boards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:39 +01:00
Julius Härtl
48ec97386c fix: Psalm
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:22:33 +01:00
Julius Härtl
26c76fbb46 fix: unit tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:15:15 +01:00
Luka Trovic
c95c96fb40 feat: add integration test for transferring board ownership with data
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-03-22 14:15:15 +01:00
Luka Trovic
981fc8e16f fix: integration tests
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-03-22 14:15:15 +01:00
Luka Trovic
b7f3c2d140 fix: unit test & psalm static code analysis issues
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-03-22 14:15:15 +01:00
Max
b01d472745 fix: queries with the new base mapper in BoardMapper
Signed-off-by: Max <max@nextcloud.com>
2022-03-22 14:15:15 +01:00
Max
05dbf67531 fix: Assignment is the new AssignedUsers
Signed-off-by: Max <max@nextcloud.com>
2022-03-22 14:15:14 +01:00
Julius Härtl
a8c22482f6 Make queries work with the new base mapper
Signed-off-by: Julius Härtl <jus@bitgrid.net>

fix: conflicts
2022-03-22 14:15:14 +01:00
Julius Härtl
c0886cfc7a Just cleanup old ACL rules, there are none for the board owner so nothing to cleanup or persist there
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:15:14 +01:00
Julius Härtl
7c68414435 Use proper description of what gets transferred
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:15:14 +01:00
Julius Härtl
da745f9306 Fix card mapper query for transfer
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-22 14:15:14 +01:00
Sergey Shliakhov
16413735d2 Fix coding styles
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Signed-off-by: Max <max@nextcloud.com>
2022-03-22 14:15:14 +01:00
Sergey Shliakhov
e70e7128c0 Transfer deck ownership even if target user already participant of a board
https://github.com/nextcloud/deck/pull/1955#issuecomment-640392715
Signed-off-by: Sergey Shliakhov <husband.sergey@gmail.com>
2022-03-22 14:15:14 +01:00
Sergey Shliakhov
36a9d2e95c Check type before transfer card participants ownership
Signed-off-by: Sergey Shliakhov <husband.sergey@gmail.com>

temp
2022-03-22 14:15:14 +01:00
Sergey Shliakhov
ce85b4378f Fix wrong class name
Signed-off-by: Sergey Shliakhov <husband.sergey@gmail.com>
2022-03-22 14:15:14 +01:00
Sergey Shliakhov
d52697823d Fix code style
Signed-off-by: Sergey Shliakhov <husband.sergey@gmail.com>
2022-03-22 14:15:13 +01:00
Sergey Shliakhov
53d462b3da Add tests
Signed-off-by: Sergey Shliakhov <husband.sergey@gmail.com>
2022-03-22 14:15:13 +01:00
Sergey Shliakhov
fc9fa5dc25 Update docs
Signed-off-by: Sergey Shliakhov <husband.sergey@gmail.com>

fix: conflicts
2022-03-22 14:15:11 +01:00
Sergey Shliakhov
eb8a321637 Add deck:transfer-ownership command
Signed-off-by: Sergey Shliakhov <husband.sergey@gmail.com>
2022-03-22 14:14:46 +01:00
Julius Härtl
ce77725ef0 Merge pull request #3663 from nextcloud/backport/3560/stable23
[stable23] Sort boards non case sensitive
2022-03-22 09:53:25 +01:00
ben
a88e028793 fixes nextcloud/deck#3410
Signed-off-by: ben <git@rott.io>
2022-03-22 08:43:03 +00:00
Nextcloud bot
0655ab8d59 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-18 02:38:31 +00:00
Julius Härtl
2c5b8c5fba Merge pull request #3641 from nextcloud/backport/3635/stable23
[stable23] 🐛 Fix missing files sidebar
2022-03-17 08:19:44 +01:00
Vinicius Reis
1057dc7039 fix style-lint
Signed-off-by: Vinicius Reis <vinicius.reis@nextcloud.com>
2022-03-17 00:02:32 -03:00
Nextcloud bot
8274d090c3 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-03-17 02:41:19 +00:00
Vinicius Reis
c213727180 🐛 Fix missing files sidebar
Signed-off-by: Vinicius Reis <vinicius.reis@nextcloud.com>
2022-03-14 14:10:53 +00:00
Julius Härtl
a5565d192d Merge pull request #3630 from nextcloud/release/1.6.1
Release 1.6.1
2022-03-10 09:54:27 +01:00
Julius Härtl
d25c8f6945 Bump version to 1.6.1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-10 09:35:57 +01:00
Julius Härtl
e31ff9f247 Merge pull request #3626 from nextcloud/backport/3611/stable23
[stable23] Generate fixed link for activity emails
2022-03-09 20:19:59 +01:00
Luka Trovic
2d8bb1e654 fix: generate fixed link for activity emails
Signed-off-by: Luka Trovic <luka@nextcloud.com>

fix: generate fixed link for activity emails

Signed-off-by: Luka Trovic <luka@nextcloud.com>

Fix tests

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-09 17:24:18 +00:00
Julius Härtl
18babccfe1 Create appstore-build-publish.yml 2022-03-04 13:58:09 +01:00
Julius Härtl
4646499917 Merge pull request #3618 from nextcloud/backport/3552/stable23
[stable23] return the selector for collections
2022-03-04 13:55:39 +01:00
dartcafe
da9c18b4cb return the selector for collections
Signed-off-by: dartcafe <github@dartcafe.de>
2022-03-04 08:53:40 +00:00
Julius Härtl
94134fc7d6 Merge pull request #3614 from nextcloud/backport/3612/stable23
[stable23] Make insert attachment buttom easy to click
2022-03-02 21:04:30 +01:00
Luka Trovic
113cc5c578 fix: make insert attachment buttom easy to click
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-03-02 16:24:21 +00:00
Nextcloud bot
0d12c2a4ec [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-19 02:38:00 +00:00
Nextcloud bot
3d1ed51ea9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-17 02:38:51 +00:00
Nextcloud bot
31152d9763 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-08 02:38:05 +00:00
Nextcloud bot
044afef32d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-06 02:36:59 +00:00
Nextcloud bot
1e35c7b836 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-05 02:37:27 +00:00
Nextcloud bot
0a43156a91 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-02-01 02:37:25 +00:00
Nextcloud bot
fd9ad30e3e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-31 02:37:25 +00:00
Nextcloud bot
c5fc9f6833 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-24 02:37:10 +00:00
Nextcloud bot
298d72c651 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-19 02:38:12 +00:00
Julien Veyssier
64e231630f Merge pull request #3543 from nextcloud/backport/3541/stable23
[stable23] Fix confusion between stackId and boardId in StackService
2022-01-18 16:37:37 +01:00
Julien Veyssier
314fdc43ad fix confusion between stackId and boardId in StackService::update()
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2022-01-18 15:23:22 +00:00
Nextcloud bot
6962187497 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-18 02:56:03 +00:00
Julius Härtl
0f9fdbd82a Merge pull request #3537 from nextcloud/backport/3529/stable23
[stable23] Fix talk integration
2022-01-14 23:05:23 +01:00
Joas Schilling
c6f8b22837 Fix talk integration
title and description where not populated and also opposed to documentation the link is not absolute

Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-01-14 21:11:14 +00:00
Nextcloud bot
a3cdd5e19d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-13 02:37:09 +00:00
Julius Härtl
239bb5e4cb Merge pull request #3523 from nextcloud/backport/3502/stable23 2022-01-12 13:45:53 +01:00
Nextcloud bot
2a121536de [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-12 02:37:24 +00:00
Julius Härtl
1f645a3059 Merge pull request #3526 from nextcloud/backport/3500/stable23
[stable23] Fix CalDAV blocking and modernize circles API usage
2022-01-11 19:06:10 +01:00
Julius Härtl
92efa7f5ec Move any circles API usage to internal service
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-01-11 08:27:16 +00:00
Julius Härtl
70664c1853 Avoid blocking calendar access if something goes wrong while fetching deck entries
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-01-11 08:27:15 +00:00
Luka Trovic
8ac2bbbbbc exclude deleted boards in the selection for target
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-01-11 08:00:46 +00:00
Nextcloud bot
7560619939 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-01-11 02:37:39 +00:00
Julius Härtl
7ce68f74c4 Merge pull request #3520 from nextcloud/backport/3512/stable23 2022-01-10 21:08:19 +01:00
Simon Spannagel
fa493ddd9a CardApiController: Fix order of optional parameters
Signed-off-by: Simon Spannagel <simonspa@kth.se>
2022-01-10 11:02:06 +00:00
Julius Härtl
d4c9147419 Bump version to 1.6.0
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-30 16:35:01 +01:00
Julius Härtl
21b81ff56c Merge pull request #3462 from nextcloud/backport/3459/stable23 2021-11-30 16:31:59 +01:00
Julius Härtl
4645c5077d Merge pull request #3463 from nextcloud/backport/3458/stable23 2021-11-30 16:31:52 +01:00
Julius Härtl
9a7bcafa6c Properly handle setters now that there is a default value of null with unset acl/labels
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-30 12:24:00 +00:00
Julius Härtl
53ebe480cf Fix cursor generation if no results are found
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-30 12:22:22 +00:00
Julius Härtl
e4db5e4d28 Bump version to 1.6.0-beta3
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-24 16:07:12 +01:00
Julius Härtl
2b8dee5081 Merge pull request #3449 from nextcloud/backport/3444/stable23 2021-11-24 15:57:59 +01:00
Julius Härtl
a8d41797ef Keep API results the same as before
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-24 14:06:49 +00:00
Julius Härtl
bc9fe51036 Avoid fetching board details multiple times
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-24 14:06:49 +00:00
Julius Härtl
d16799948f Cache card to board id relation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-24 14:06:49 +00:00
Julien Veyssier
764dd947d4 Merge pull request #3446 from nextcloud/backport/3365/stable23
[stable23] Switch to QBMapper in BoardMapper
2021-11-24 10:53:51 +01:00
Julius Härtl
ea35f64d2a Update psalm baseline
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-24 08:41:08 +00:00
Julien Veyssier
a2205db748 switch to QBMapper in BoardMapper
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-11-24 08:41:08 +00:00
Jonas
a80d87a3e9 Merge pull request #3440 from nextcloud/backport/3428/stable23
[stable23] Allow to download an attachment without navigating to the files app
2021-11-22 19:10:45 +01:00
Julius Härtl
12ed617a56 Allow to download an attachment without navigating to the files app
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-22 17:40:34 +00:00
Julius Härtl
ffccbf73fd Bump version to 1.6.0-beta2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-19 17:15:00 +01:00
Julius Härtl
8514e91edc Merge pull request #3433 from nextcloud/backport/3432/stable23
[stable23] Fix event name for updating the description
2021-11-19 12:13:51 +01:00
Julius Härtl
8926363092 Fix event name for updating the description
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-19 09:14:44 +00:00
Joas Schilling
2be4fff781 Merge pull request #3418 from nextcloud/update-stable23-target-versions
Update stable23 target versions
2021-11-11 22:53:17 +01:00
Joas Schilling
8f52667d2c Update stable23 target versions
Signed-off-by: Joas Schilling <coding@schilljs.com>
2021-11-11 09:27:35 +01:00
Julius Härtl
ec43071adb Bump version to 1.6.0-beta1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-10 16:20:40 +01:00
Julius Härtl
d3d4269245 Merge pull request #3414 from nextcloud/dependabot/github_actions/actions/checkout-2.4.0 2021-11-10 09:49:25 +01:00
Nextcloud bot
ff7a813052 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-10 02:36:01 +00:00
Nextcloud bot
51d6b9e352 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-09 04:07:33 +00:00
Nextcloud bot
df90c81272 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-08 02:49:12 +00:00
Nextcloud bot
af03e61142 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-07 02:32:56 +00:00
dependabot[bot]
6234632ae9 Bump actions/checkout from 2.3.5 to 2.4.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.5 to 2.4.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.5...v2.4.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-06 06:51:56 +00:00
dependabot[bot]
393c88e592 Merge pull request #3413 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/webpack-vue-config-4.1.2 2021-11-06 06:51:16 +00:00
dependabot[bot]
92db5f3deb Bump @nextcloud/webpack-vue-config from 4.1.0 to 4.1.2
Bumps [@nextcloud/webpack-vue-config](https://github.com/nextcloud/webpack-vue-config) from 4.1.0 to 4.1.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.0...v4.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-06 06:11:09 +00:00
dependabot[bot]
1169818a3d Merge pull request #3412 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/initial-state-1.2.1 2021-11-06 06:09:08 +00:00
dependabot[bot]
dd32544e5e Bump @nextcloud/initial-state from 1.2.0 to 1.2.1
Bumps [@nextcloud/initial-state](https://github.com/nextcloud/nextcloud-initial-state) from 1.2.0 to 1.2.1.
- [Release notes](https://github.com/nextcloud/nextcloud-initial-state/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-initial-state/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-initial-state/compare/v1.2.0...v1.2.1)

---
updated-dependencies:
- dependency-name: "@nextcloud/initial-state"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-06 05:30:27 +00:00
dependabot[bot]
095c80e993 Merge pull request #3411 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/event-bus-2.1.1 2021-11-06 05:29:36 +00:00
dependabot[bot]
0daf7021ec Bump @nextcloud/event-bus from 2.1.0 to 2.1.1
Bumps [@nextcloud/event-bus](https://github.com/nextcloud/nextcloud-event-bus) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/nextcloud/nextcloud-event-bus/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-event-bus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-event-bus/compare/v2.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: "@nextcloud/event-bus"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-06 03:57:00 +00:00
Nextcloud bot
3f0f4315fc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-11-06 02:33:20 +00:00
Julius Härtl
4b5aabd433 Merge pull request #2710 from nextcloud/enh/dateShortcuts3 2021-11-05 18:03:22 +01:00
Julius Härtl
0ce431e7a6 Merge pull request #3384 from nextcloud/techdept/noid/cleanup-middleware 2021-11-05 18:01:28 +01:00
Julius Härtl
83fc4323f4 Keep exceptions http response generic and return the request ID for further tracing
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-11-05 17:41:11 +01:00
Julius Härtl
100bc30d9b Merge pull request #3397 from nextcloud/dependabot/npm_and_yarn/master/relative-ci/agent-3.0.0
Bump @relative-ci/agent from 2.1.0 to 3.0.0
2021-11-01 21:28:47 +01:00
Julius Härtl
4044953df0 Merge pull request #3399 from nextcloud/dependabot/composer/vimeo/psalm-4.11.2
Bump vimeo/psalm from 4.10.0 to 4.11.2
2021-11-01 21:28:29 +01:00
Julius Härtl
be5ca006d6 Merge pull request #3400 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.16.0
Bump @babel/runtime from 7.15.4 to 7.16.0
2021-11-01 21:28:17 +01:00
Julius Härtl
c89e971059 Merge pull request #3398 from nextcloud/dependabot/npm_and_yarn/master/vue-router-3.5.3
Bump vue-router from 3.5.2 to 3.5.3
2021-11-01 21:27:48 +01:00
dependabot[bot]
e85a754756 Bump @babel/runtime from 7.15.4 to 7.16.0
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.15.4 to 7.16.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.16.0/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>
2021-10-30 04:59:10 +00:00
dependabot[bot]
70dfa9e7d2 Bump vimeo/psalm from 4.10.0 to 4.11.2
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.10.0 to 4.11.2.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.10.0...4.11.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-30 03:51:29 +00:00
dependabot[bot]
aab0d5eecc Bump vue-router from 3.5.2 to 3.5.3
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.5.2...v3.5.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-30 03:26:29 +00:00
dependabot[bot]
87005ce981 Bump @relative-ci/agent from 2.1.0 to 3.0.0
Bumps [@relative-ci/agent](https://github.com/relative-ci/agent) from 2.1.0 to 3.0.0.
- [Release notes](https://github.com/relative-ci/agent/releases)
- [Commits](https://github.com/relative-ci/agent/compare/v2.1.0...v3.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-30 03:24:40 +00:00
Nextcloud bot
0425a3c39c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-30 02:33:50 +00:00
Nextcloud bot
e2674f45fc [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-29 02:33:12 +00:00
Julius Härtl
1f43dbb3fc Merge pull request #3391 from kffl/master 2021-10-27 13:53:32 +02:00
Paweł Kuffel
1469756d93 use displayname instead of uid for mentions
Signed-off-by: Paweł Kuffel <pawel@kuffel.io>
2021-10-27 10:42:55 +02:00
Julius Härtl
8bba4d09ac Merge pull request #3386 from nextcloud/dependabot/npm_and_yarn/master/jest-27.3.1
Bump jest from 27.2.5 to 27.3.1
2021-10-23 15:08:43 +02:00
dependabot[bot]
a4a0f17891 Bump jest from 27.2.5 to 27.3.1
Bumps [jest](https://github.com/facebook/jest) from 27.2.5 to 27.3.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.2.5...v27.3.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-23 01:03:18 +00:00
Nextcloud bot
5b0e0cc7bb [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-22 02:32:41 +00:00
Nextcloud bot
b3364f4460 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-21 02:34:54 +00:00
Nextcloud bot
9ca7a0a077 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-20 02:53:51 +00:00
dependabot[bot]
37b05250cc Merge pull request #3382 from nextcloud/dependabot/github_actions/actions/checkout-2.3.5 2021-10-16 02:31:09 +00:00
dependabot[bot]
45c254698b Bump actions/checkout from 2.3.4 to 2.3.5
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.3.4...v2.3.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-16 01:04:08 +00:00
Julius Härtl
6f56989fa7 Merge pull request #3324 from valerydmitrieva/fix-button-position 2021-10-12 12:24:50 +02:00
Julius Härtl
96a5fbf0d4 Merge pull request #3376 from nextcloud/enh/print-names 2021-10-12 11:49:36 +02:00
Julius Härtl
f051114b3e Merge pull request #3375 from nextcloud/enh/print-dates 2021-10-12 11:46:43 +02:00
Michael Weimann
48c28690b2 show absolute dates when printing
relates to #3250

Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2021-10-10 18:20:12 +02:00
Michael Weimann
2cbef172d4 print assignee names
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2021-10-10 12:34:43 +02:00
dependabot[bot]
2a60428133 Merge pull request #3373 from nextcloud/dependabot/npm_and_yarn/master/jest-27.2.5 2021-10-09 02:21:30 +00:00
dependabot[bot]
15f790ee31 Bump jest from 27.2.4 to 27.2.5
Bumps [jest](https://github.com/facebook/jest) from 27.2.4 to 27.2.5.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.2.4...v27.2.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-09 01:02:08 +00:00
Nextcloud bot
d8ff4ed7a9 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-07 02:35:59 +00:00
Julius Härtl
7718dbb17d Merge pull request #3364 from nextcloud/bugfix/3334 2021-10-06 11:23:58 +02:00
Julius Härtl
fa1b675a54 Fix optional parameter order
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-10-06 10:06:52 +02:00
Lera Dmitrieva
a2c7531dba Fix menu button position in card modal
Signed-off-by: Lera Dmitrieva <dmit.valerya@yandex.ru>
2021-10-05 14:22:19 +03:00
Julius Härtl
c72714fa70 Merge pull request #3327 from Themanwhosmellslikesugar/fix/do-not-show-both-checkbox
Do not show both bullets and checkboxes for checklists
2021-10-05 12:04:16 +02:00
Dmitriy Ivanko
da109ca720 Reduce indent between checkbox and label
Signed-off-by: Dmitriy Ivanko <tmwsls12@gmail.com>
2021-10-05 12:40:53 +03:00
Dmitry Ivanko
0fcbe2cb47 Do not show both bullets and checkboxes for checklists
Signed-off-by: Dmitriy Ivanko <tmwsls12@gmail.com>
2021-10-05 12:40:53 +03:00
Julius Härtl
86fd1fbc0f Merge pull request #3362 from nextcloud/enh/improve-search-perf 2021-10-05 11:38:52 +02:00
Julien Veyssier
dd0a22ba04 use term in DB query instead of filtering in php
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-10-04 18:33:53 +02:00
Julien Veyssier
7425d00ba5 harmonize since and before search params
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-10-04 18:33:53 +02:00
Julien Veyssier
ca04efb736 apply date search filter in SQL queries instead of computing it in php
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-10-04 18:33:53 +02:00
Julius Härtl
ce595bdd9d Merge pull request #3323 from old-green-frog/extend-dnd-zone-in-sidebar 2021-10-04 16:42:24 +02:00
Julius Härtl
c706fb7536 Merge pull request #3344 from nextcloud/enh/paginated-search-for-boards-and-cards 2021-10-04 16:41:48 +02:00
Julien Veyssier
b533d11c13 use distinct pagination cursor for cards and boards, use cursor and limit in SearchSe
rvice::searchBoards()

Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-10-04 15:23:19 +02:00
Julius Härtl
ede6a05dec Merge pull request #3326 from nextcloud/feature/input-focus 2021-10-04 15:22:21 +02:00
Julius Härtl
3651f6b6cb Merge pull request #3337 from nextcloud/dependabot/npm_and_yarn/master/vue-easymde-2.0.0 2021-10-04 12:04:09 +02:00
dependabot[bot]
92b0b24bb2 Bump vue-easymde from 1.4.0 to 2.0.0
Bumps [vue-easymde](https://github.com/NikulinIlya/vue-easymde) from 1.4.0 to 2.0.0.
- [Release notes](https://github.com/NikulinIlya/vue-easymde/releases)
- [Commits](https://github.com/NikulinIlya/vue-easymde/compare/1.4.0...v2.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 06:32:48 +00:00
Julius Härtl
65613b1c96 Merge pull request #3353 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/axios-1.7.0
Bump @nextcloud/axios from 1.6.0 to 1.7.0
2021-10-04 08:31:47 +02:00
dependabot[bot]
52ca67f22c Bump @nextcloud/axios from 1.6.0 to 1.7.0
Bumps [@nextcloud/axios](https://github.com/nextcloud/nextcloud-axios) from 1.6.0 to 1.7.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.6.0...v1.7.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>
2021-10-04 06:10:34 +00:00
Julius Härtl
5d39a38b6f Merge pull request #3354 from nextcloud/dependabot/github_actions/shivammathur/setup-php-2.15.0 2021-10-04 08:08:50 +02:00
Julius Härtl
c2373ac244 Merge pull request #3352 from nextcloud/dependabot/npm_and_yarn/master/blueimp-md5-2.19.0 2021-10-04 08:08:44 +02:00
Julius Härtl
38ff93bf14 Merge pull request #3357 from nextcloud/revert-3343-fix/paginated-search 2021-10-04 07:36:23 +02:00
Julius Härtl
77f57a926b Revert "Fix search pagination cursor" 2021-10-04 07:36:08 +02:00
Julius Härtl
d61d9f015c Merge pull request #3343 from nextcloud/fix/paginated-search 2021-10-04 07:32:55 +02:00
dependabot[bot]
d519b60195 Bump blueimp-md5 from 2.18.0 to 2.19.0
Bumps [blueimp-md5](https://github.com/blueimp/JavaScript-MD5) from 2.18.0 to 2.19.0.
- [Release notes](https://github.com/blueimp/JavaScript-MD5/releases)
- [Commits](https://github.com/blueimp/JavaScript-MD5/compare/v2.18.0...v2.19.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 05:27:53 +00:00
dependabot[bot]
144bc6a217 Bump shivammathur/setup-php from 2.14.0 to 2.15.0
Bumps [shivammathur/setup-php](https://github.com/shivammathur/setup-php) from 2.14.0 to 2.15.0.
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/2.14.0...2.15.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 05:27:41 +00:00
Julius Härtl
11aa39253f Merge pull request #3349 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/event-bus-2.1.0
Bump @nextcloud/event-bus from 2.0.0 to 2.1.0
2021-10-04 07:27:25 +02:00
Julius Härtl
67b9e91dde Merge pull request #3348 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/browserslist-config-2.2.0
Bump @nextcloud/browserslist-config from 2.1.0 to 2.2.0
2021-10-04 07:27:14 +02:00
dependabot[bot]
24aeae8367 Bump @nextcloud/event-bus from 2.0.0 to 2.1.0
Bumps [@nextcloud/event-bus](https://github.com/nextcloud/nextcloud-event-bus) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/nextcloud/nextcloud-event-bus/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-event-bus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-event-bus/compare/v2.0.0...v2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 05:27:09 +00:00
Julius Härtl
db114ea587 Merge pull request #3350 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/vue-4.2.0
Bump @nextcloud/vue from 4.1.1 to 4.2.0
2021-10-04 07:27:01 +02:00
dependabot[bot]
21d5aa1ab5 Bump @nextcloud/browserslist-config from 2.1.0 to 2.2.0
Bumps [@nextcloud/browserslist-config](https://github.com/nextcloud/browserslist-config) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/nextcloud/browserslist-config/releases)
- [Commits](https://github.com/nextcloud/browserslist-config/compare/v2.1.0...v2.2.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>
2021-10-04 05:26:53 +00:00
dependabot[bot]
fce9fe4bd9 Bump @nextcloud/vue from 4.1.1 to 4.2.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 4.1.1 to 4.2.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.1.1...v4.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 05:26:42 +00:00
Julius Härtl
ab6477c5d3 Merge pull request #3351 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/files-2.1.0
Bump @nextcloud/files from 2.0.0 to 2.1.0
2021-10-04 07:26:27 +02:00
Julius Härtl
d95a420a76 Merge pull request #3347 from nextcloud/dependabot/npm_and_yarn/master/jest-27.2.4
Bump jest from 27.1.1 to 27.2.4
2021-10-04 07:25:43 +02:00
Nextcloud bot
500c73605b [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-04 02:37:13 +00:00
dependabot[bot]
0bcb0d29d7 Bump jest from 27.1.1 to 27.2.4
Bumps [jest](https://github.com/facebook/jest) from 27.1.1 to 27.2.4.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.1.1...v27.2.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-02 08:19:12 +00:00
dependabot[bot]
b3a04624e5 Bump @nextcloud/files from 2.0.0 to 2.1.0
Bumps @nextcloud/files from 2.0.0 to 2.1.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-02 08:18:45 +00:00
dependabot[bot]
f5f3622a79 Merge pull request #3355 from nextcloud/dependabot/github_actions/actions/setup-node-2.4.1 2021-10-02 08:17:41 +00:00
dependabot[bot]
b9023d14f9 Bump actions/setup-node from 2.4.0 to 2.4.1
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.4.0 to 2.4.1.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.4.0...v2.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-02 07:48:26 +00:00
dependabot[bot]
8b102ddb66 Merge pull request #3346 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.10 2021-10-02 07:47:36 +00:00
dependabot[bot]
b118dc0e5e Bump phpunit/phpunit from 9.5.9 to 9.5.10
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.9 to 9.5.10.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.9...9.5.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-02 03:21:43 +00:00
Nextcloud bot
8dcddc1e73 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-10-02 02:37:07 +00:00
Julien Veyssier
9dbfeac56a fix search pagination cursor, use LastModified of last card
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-09-30 10:30:53 +02:00
dependabot[bot]
a3e31f8c2d Merge pull request #3335 from nextcloud/dependabot/npm_and_yarn/master/dompurify-2.3.3 2021-09-25 02:11:50 +00:00
dependabot[bot]
259d9b325e Bump dompurify from 2.3.2 to 2.3.3
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.2 to 2.3.3.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.3.2...2.3.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-25 01:01:29 +00:00
old-green-frog
6551ba2210 Extend drag-and-drop zone in card sidebar
Signed-off-by: Igor Denisenko <old-green-frog@mail.ru>
2021-09-20 09:37:32 +03:00
dependabot[bot]
e11bea04e6 Merge pull request #3330 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/vue-4.1.1 2021-09-18 03:38:03 +00:00
dependabot[bot]
6ab433fd86 Bump @nextcloud/vue from 4.1.0 to 4.1.1
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-vue/blob/v4.1.1/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v4.1.0...v4.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-18 02:14:24 +00:00
dependabot[bot]
4343639ff0 Merge pull request #3329 from nextcloud/dependabot/npm_and_yarn/master/dompurify-2.3.2 2021-09-18 02:13:32 +00:00
dependabot[bot]
2f3c359034 Bump dompurify from 2.3.1 to 2.3.2
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.3.1...2.3.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-18 01:02:47 +00:00
Michael Weimann
963e927aae add autofocus on board edit
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2021-09-17 11:14:12 +02:00
Julius Härtl
0783fde14b Merge pull request #3316 from nextcloud/bugfix/additional-checks
Additional check for stacks
2021-09-14 21:01:10 +02:00
Julius Härtl
52e7d73f10 Additional check for stacks
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-09-14 20:52:52 +02:00
Nextcloud bot
89da9273dd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-14 02:41:57 +00:00
Nextcloud bot
e119d05556 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-13 02:40:03 +00:00
Julius Härtl
567439f0b4 Merge pull request #3313 from nextcloud/dependabot/composer/vimeo/psalm-4.10.0
Bump vimeo/psalm from 4.9.3 to 4.10.0
2021-09-12 16:25:27 +02:00
Julius Härtl
96725f5a28 Merge pull request #3315 from nextcloud/dependabot/github_actions/shivammathur/setup-php-2.14.0
Bump shivammathur/setup-php from 2.13.0 to 2.14.0
2021-09-12 16:24:35 +02:00
Nextcloud bot
43699ec3d7 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-12 02:40:05 +00:00
dependabot[bot]
d9bd7fbb1f Bump vimeo/psalm from 4.9.3 to 4.10.0
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.9.3 to 4.10.0.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.9.3...4.10.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-11 02:20:47 +00:00
dependabot[bot]
bf3ec30b5a Bump shivammathur/setup-php from 2.13.0 to 2.14.0
Bumps [shivammathur/setup-php](https://github.com/shivammathur/setup-php) from 2.13.0 to 2.14.0.
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/2.13.0...2.14.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-11 02:20:44 +00:00
dependabot[bot]
a3557ba875 Merge pull request #3314 from nextcloud/dependabot/npm_and_yarn/master/jest-27.1.1 2021-09-11 02:20:05 +00:00
dependabot[bot]
c6f3e5bb9d Bump jest from 27.1.0 to 27.1.1
Bumps [jest](https://github.com/facebook/jest) from 27.1.0 to 27.1.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.1.0...v27.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-11 01:02:13 +00:00
Julius Härtl
c011c53f73 Merge pull request #2791 from fm-sys/md_link_target
Open description links in new tab
2021-09-09 17:45:06 +02:00
Florian Meyer
6335f50dfb Open description links in new tab
Signed-off-by: Florian Meyer <meyer_florian@magenta.de>
2021-09-09 15:11:32 +02:00
Nextcloud bot
136a5ab078 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-09 02:38:54 +00:00
Julius Härtl
0ed7c4d02f Update psalm baseline
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-09-08 20:36:37 +02:00
Nextcloud bot
a4bc6b9029 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-08 02:38:19 +00:00
Julius Härtl
6caa7bcfcb Merge pull request #3298 from nextcloud/bugfix/attachment-delete
Delete file shares through attachments API
2021-09-07 13:10:24 +02:00
Julien Veyssier
b9758a7ae8 Merge pull request #3299 from nextcloud/bugfix/noid/calendar-setting
Return false instead of throwing when getting calendar setting
2021-09-07 11:09:37 +02:00
Julius Härtl
021aa698d9 Return false instead of throwing when getting calendar integration setting
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-09-07 10:54:02 +02:00
Julius Härtl
643302be5e Merge pull request #3294 from nextcloud/bugfix/print-style 2021-09-06 15:58:21 +02:00
Michael Weimann
d3c8cb0285 fix print style issues
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2021-09-06 13:11:38 +00:00
Nextcloud bot
6bbe91acfd [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-06 02:38:51 +00:00
Julius Härtl
13dcacc3bb Delete file shares through attachments API
Previously the file was deleted in the file structure of the user is not
expected as the file might not only be related to the card.

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-09-05 12:13:21 +02:00
Nextcloud bot
e27e8d2ff6 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-09-05 02:38:18 +00:00
dependabot[bot]
3345e9b36d Merge pull request #3290 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.9 2021-09-04 04:24:05 +00:00
dependabot[bot]
108cbfaf33 Bump phpunit/phpunit from 9.5.8 to 9.5.9
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.8 to 9.5.9.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.8...9.5.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-04 03:10:34 +00:00
dependabot[bot]
07017b4a19 Merge pull request #3289 from nextcloud/dependabot/composer/symfony/event-dispatcher-4.4.30 2021-09-04 03:09:44 +00:00
dependabot[bot]
81f64e7b19 Bump symfony/event-dispatcher from 4.4.27 to 4.4.30
Bumps [symfony/event-dispatcher](https://github.com/symfony/event-dispatcher) from 4.4.27 to 4.4.30.
- [Release notes](https://github.com/symfony/event-dispatcher/releases)
- [Changelog](https://github.com/symfony/event-dispatcher/blob/5.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/event-dispatcher/compare/v4.4.27...v4.4.30)

---
updated-dependencies:
- dependency-name: symfony/event-dispatcher
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-04 02:14:11 +00:00
dependabot[bot]
b8e0eb3a97 Merge pull request #3291 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.15.4 2021-09-04 02:13:30 +00:00
dependabot[bot]
63b68a59e3 Bump @babel/runtime from 7.15.3 to 7.15.4
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.15.3 to 7.15.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.15.4/packages/babel-runtime)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-04 01:01:21 +00:00
Nextcloud bot
f55c3b294e [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-31 02:37:45 +00:00
Julius Härtl
d68c3768b4 Merge pull request #3276 from nextcloud/dependabot/npm_and_yarn/master/jest-27.1.0
Bump jest from 27.0.6 to 27.1.0
2021-08-30 10:15:31 +02:00
Julius Härtl
f067057df7 Merge pull request #3277 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/vue-4.1.0
Bump @nextcloud/vue from 4.0.3 to 4.1.0
2021-08-30 10:15:21 +02:00
Julius Härtl
bad3f5c89e Merge pull request #3275 from nextcloud/dependabot/github_actions/shivammathur/setup-php-2.13.0
Bump shivammathur/setup-php from 2.12.0 to 2.13.0
2021-08-30 10:14:56 +02:00
dependabot[bot]
c5e7f473cb Bump @nextcloud/vue from 4.0.3 to 4.1.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 4.0.3 to 4.1.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.0.3...v4.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-28 02:09:30 +00:00
dependabot[bot]
9f93e88164 Bump jest from 27.0.6 to 27.1.0
Bumps [jest](https://github.com/facebook/jest) from 27.0.6 to 27.1.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.0.6...v27.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-28 02:09:09 +00:00
dependabot[bot]
0077852d4a Bump shivammathur/setup-php from 2.12.0 to 2.13.0
Bumps [shivammathur/setup-php](https://github.com/shivammathur/setup-php) from 2.12.0 to 2.13.0.
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/2.12.0...2.13.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-28 01:05:13 +00:00
Julius Härtl
28b10682f5 Merge pull request #3266 from nextcloud/dependabot/npm_and_yarn/master/relative-ci/agent-2.1.0
Bump @relative-ci/agent from 2.0.0 to 2.1.0
2021-08-23 17:25:37 +02:00
Julius Härtl
c3f46db990 Merge pull request #3259 from nextcloud/dependabot/composer/vimeo/psalm-4.9.3 2021-08-23 17:25:08 +02:00
dependabot[bot]
82bc8a66fd Bump @relative-ci/agent from 2.0.0 to 2.1.0
Bumps [@relative-ci/agent](https://github.com/relative-ci/agent) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/relative-ci/agent/releases)
- [Commits](https://github.com/relative-ci/agent/compare/v2.0.0...v2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-21 02:10:32 +00:00
Julius Härtl
e3b6627a23 Merge pull request #3256 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/eslint-config-6.1.0
Bump @nextcloud/eslint-config from 6.0.0 to 6.1.0
2021-08-20 18:02:07 +02:00
Julius Härtl
315ea4b991 Merge pull request #3263 from nextcloud/bugfix/3248
Defer obtaining the user session in the config service
2021-08-20 18:01:57 +02:00
Julius Härtl
07fcfb3078 Add to baseline
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-08-20 17:56:09 +02:00
dependabot[bot]
5f3d5e800d Bump @nextcloud/eslint-config from 6.0.0 to 6.1.0
Bumps [@nextcloud/eslint-config](https://github.com/nextcloud/eslint-config) from 6.0.0 to 6.1.0.
- [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.0.0...v6.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-20 17:51:09 +02:00
Julius Härtl
7b0579625e Defer obtaining the user session in the config service which might be injected before login has hapened
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-08-20 17:34:58 +02:00
Nextcloud bot
4f0d5b1f37 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-18 02:36:59 +00:00
dependabot[bot]
dc07b34d52 Bump vimeo/psalm from 4.8.1 to 4.9.3
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.8.1 to 4.9.3.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.8.1...4.9.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-16 10:28:07 +00:00
Julius Härtl
540aba5ecd Merge pull request #3257 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.15.3
Bump @babel/runtime from 7.14.8 to 7.15.3
2021-08-16 12:27:05 +02:00
dependabot[bot]
c3a1cdd6b3 Bump @babel/runtime from 7.14.8 to 7.15.3
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.14.8 to 7.15.3.
- [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.15.3/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>
2021-08-14 03:49:29 +00:00
dependabot[bot]
0537af0323 Merge pull request #3255 from nextcloud/dependabot/npm_and_yarn/master/dompurify-2.3.1 2021-08-14 03:48:23 +00:00
dependabot[bot]
d3e36f6f0c Bump dompurify from 2.3.0 to 2.3.1
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.3.0 to 2.3.1.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.3.0...2.3.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-14 01:45:10 +00:00
dependabot[bot]
0818274451 Merge pull request #3254 from nextcloud/dependabot/composer/php-parallel-lint/php-parallel-lint-1.3.1 2021-08-14 01:44:18 +00:00
dependabot[bot]
3c4b8b6ce3 Bump php-parallel-lint/php-parallel-lint from 1.3.0 to 1.3.1
Bumps [php-parallel-lint/php-parallel-lint](https://github.com/php-parallel-lint/PHP-Parallel-Lint) from 1.3.0 to 1.3.1.
- [Release notes](https://github.com/php-parallel-lint/PHP-Parallel-Lint/releases)
- [Changelog](https://github.com/php-parallel-lint/PHP-Parallel-Lint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-parallel-lint/PHP-Parallel-Lint/compare/v1.3.0...v1.3.1)

---
updated-dependencies:
- dependency-name: php-parallel-lint/php-parallel-lint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-14 01:01:01 +00:00
Nextcloud bot
098f5863f8 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-10 02:44:31 +00:00
Julius Härtl
00f4bc188e Merge pull request #3237 from nextcloud/dependabot/npm_and_yarn/master/markdown-it-12.2.0
Bump markdown-it from 12.1.0 to 12.2.0
2021-08-09 09:30:37 +02:00
Julius Härtl
6a80f6c8f6 Merge pull request #3238 from nextcloud/dependabot/github_actions/actions/setup-node-2.4.0
Bump actions/setup-node from 2.3.0 to 2.4.0
2021-08-09 09:30:28 +02:00
dependabot[bot]
26e7b3a868 Bump markdown-it from 12.1.0 to 12.2.0
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 12.1.0 to 12.2.0.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/12.1.0...12.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-07 03:44:01 +00:00
dependabot[bot]
556930cf93 Bump actions/setup-node from 2.3.0 to 2.4.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.3.0 to 2.4.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.3.0...v2.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-07 03:43:47 +00:00
dependabot[bot]
42009b233a Merge pull request #3234 from nextcloud/dependabot/composer/symfony/event-dispatcher-4.4.27 2021-08-07 03:43:04 +00:00
dependabot[bot]
9f3a1e6cda Bump symfony/event-dispatcher from 4.4.19 to 4.4.27
Bumps [symfony/event-dispatcher](https://github.com/symfony/event-dispatcher) from 4.4.19 to 4.4.27.
- [Release notes](https://github.com/symfony/event-dispatcher/releases)
- [Changelog](https://github.com/symfony/event-dispatcher/blob/5.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/event-dispatcher/compare/v4.4.19...v4.4.27)

---
updated-dependencies:
- dependency-name: symfony/event-dispatcher
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-07 02:25:16 +00:00
dependabot[bot]
544e4d99ee Merge pull request #3236 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.8 2021-08-07 02:24:35 +00:00
dependabot[bot]
97c83fad8d Bump phpunit/phpunit from 9.5.7 to 9.5.8
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.7 to 9.5.8.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.7...9.5.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-07 01:01:23 +00:00
Nextcloud bot
95a811362d [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-06 02:38:49 +00:00
Julius Härtl
4dc4603d2d Merge pull request #3225 from nextcloud/bugfix/3194
Check for null value to avoid TypeError in the group manager
2021-08-04 18:41:22 +02:00
Julius Härtl
443e383f2a Merge pull request #3199 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/eslint-config-6.0.0
Bump @nextcloud/eslint-config from 5.1.0 to 6.0.0
2021-08-04 08:23:20 +02:00
dependabot[bot]
d98c2bc926 Bump @nextcloud/eslint-config from 5.1.0 to 6.0.0
Bumps [@nextcloud/eslint-config](https://github.com/nextcloud/eslint-config) from 5.1.0 to 6.0.0.
- [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/v5.1.0...v6.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-03 19:32:36 +02:00
Julius Härtl
cb9fc6c9a2 Check for null value to avoid TypeError in the group manager
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-08-03 09:47:27 +02:00
Julius Härtl
f2052702b5 Merge pull request #3217 from nextcloud/bugfix/noid/circle-membertype
Move circle checks to a unified service and improve member checks
2021-08-03 09:27:59 +02:00
Julius Härtl
3e68801774 Create fixup.yml 2021-08-03 09:24:22 +02:00
Julius Härtl
ff17167719 Create dependabot-approve-merge.yml 2021-08-03 09:23:58 +02:00
Julius Härtl
7a15853f77 Create command-rebase.yml 2021-08-03 09:23:10 +02:00
Julius Härtl
82dbd800d6 Move circle checks to a unified service and improve member checks
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-08-03 09:15:18 +02:00
Nextcloud bot
53e29ad124 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-08-01 02:12:48 +00:00
Julius Härtl
2b1f3623d0 Merge pull request #3206 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.7
Bump phpunit/phpunit from 9.5.6 to 9.5.7
2021-07-26 12:23:10 +02:00
Julius Härtl
ee7020886e Merge pull request #3207 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.14.8
Bump @babel/runtime from 7.14.6 to 7.14.8
2021-07-26 12:23:03 +02:00
Julius Härtl
ac9665298f Merge pull request #3208 from nextcloud/dependabot/npm_and_yarn/master/vue/test-utils-1.2.2
Bump @vue/test-utils from 1.2.1 to 1.2.2
2021-07-26 12:22:56 +02:00
Julius Härtl
fe67cd42f9 Merge pull request #3209 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/webpack-vue-config-4.1.0
Bump @nextcloud/webpack-vue-config from 4.0.3 to 4.1.0
2021-07-26 12:22:49 +02:00
Julius Härtl
acc0b4cd0c Merge pull request #3210 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/babel-config-1.0.0
Bump @nextcloud/babel-config from 1.0.0-beta.1 to 1.0.0
2021-07-26 12:22:39 +02:00
Julius Härtl
0025bb2c52 Merge pull request #3211 from nextcloud/dependabot/github_actions/actions/setup-node-2.3.0
Bump actions/setup-node from 2.2.0 to 2.3.0
2021-07-26 12:22:10 +02:00
dependabot[bot]
7ab042d1a8 Bump actions/setup-node from 2.2.0 to 2.3.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v2.2.0...v2.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-24 02:48:35 +00:00
dependabot[bot]
c02ad2d851 Bump @nextcloud/babel-config from 1.0.0-beta.1 to 1.0.0
Bumps [@nextcloud/babel-config](https://github.com/nextcloud/babel-config) from 1.0.0-beta.1 to 1.0.0.
- [Release notes](https://github.com/nextcloud/babel-config/releases)
- [Commits](https://github.com/nextcloud/babel-config/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-24 01:02:13 +00:00
dependabot[bot]
6012f0887d Bump @nextcloud/webpack-vue-config from 4.0.3 to 4.1.0
Bumps [@nextcloud/webpack-vue-config](https://github.com/nextcloud/webpack-vue-config) from 4.0.3 to 4.1.0.
- [Release notes](https://github.com/nextcloud/webpack-vue-config/releases)
- [Commits](https://github.com/nextcloud/webpack-vue-config/compare/v4.0.3...v4.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-24 01:01:56 +00:00
dependabot[bot]
17065190ab Bump @vue/test-utils from 1.2.1 to 1.2.2
Bumps [@vue/test-utils](https://github.com/vuejs/vue-test-utils/tree/HEAD/packages/test-utils) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/vuejs/vue-test-utils/releases)
- [Changelog](https://github.com/vuejs/vue-test-utils/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-test-utils/commits/v1.2.2/packages/test-utils)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-24 01:01:41 +00:00
dependabot[bot]
77046f378f Bump @babel/runtime from 7.14.6 to 7.14.8
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.14.6 to 7.14.8.
- [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.14.8/packages/babel-runtime)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-24 01:01:23 +00:00
dependabot[bot]
2bf3aa0e8e Bump phpunit/phpunit from 9.5.6 to 9.5.7
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.6 to 9.5.7.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.6...9.5.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-24 01:00:50 +00:00
Julius Härtl
68da328343 Merge pull request #3204 from leoossa/leoossa-patch-1 2021-07-22 12:53:36 +02:00
leoossa
bc0dd7118c Merge branch 'master' into leoossa-patch-1 2021-07-22 10:29:55 +02:00
Julius Härtl
dbf9519326 Delete stale.yml 2021-07-22 09:41:02 +02:00
leoossa
47cbe7bea7 Add A-deck Chrome extension to 3rd-Parties 2021-07-21 08:49:39 +02:00
Julius Härtl
5d5424d2a4 Merge pull request #3200 from nextcloud/dependabot/github_actions/shivammathur/setup-php-2.12.0
Bump shivammathur/setup-php from 2.11.0 to 2.12.0
2021-07-19 08:51:43 +02:00
Julius Härtl
2cc24dcd60 Merge pull request #3187 from nextcloud/dependabot/github_actions/actions/setup-node-2.2.0
Bump actions/setup-node from 1 to 2.2.0
2021-07-19 08:51:25 +02:00
dependabot[bot]
49ed6f9beb Bump actions/setup-node from 1 to 2.2.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 1 to 2.2.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v1...v2.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-19 08:33:00 +02:00
dependabot[bot]
ec069d5e0d Bump shivammathur/setup-php from 2.11.0 to 2.12.0
Bumps [shivammathur/setup-php](https://github.com/shivammathur/setup-php) from 2.11.0 to 2.12.0.
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/2.11.0...2.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-19 06:31:48 +00:00
Julius Härtl
9b8df3c157 Pin mariadb to 10.5 for tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-07-19 08:31:22 +02:00
Julius Härtl
e399e5bd46 Merge pull request #3198 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/vue-4.0.3
Bump @nextcloud/vue from 3.10.1 to 4.0.3
2021-07-19 08:29:18 +02:00
dependabot[bot]
9aab543604 Bump @nextcloud/vue from 3.10.1 to 4.0.3
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 3.10.1 to 4.0.3.
- [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/v3.10.1...v4.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-17 01:01:31 +00:00
Nextcloud bot
80b8e3ad5c [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-15 02:37:46 +00:00
Julius Härtl
499bef97fb Merge pull request #3181 from nextcloud/dependabot/npm_and_yarn/master/dompurify-2.3.0
Bump dompurify from 2.2.9 to 2.3.0
2021-07-13 15:28:46 +02:00
dependabot[bot]
b6e4f0993a Bump dompurify from 2.2.9 to 2.3.0
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.2.9 to 2.3.0.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.2.9...2.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-13 12:08:07 +00:00
Julius Härtl
53c31ba221 Merge pull request #3189 from nextcloud/dependabot/github_actions/actions/checkout-2.3.4
Bump actions/checkout from 1 to 2.3.4
2021-07-13 14:07:16 +02:00
dependabot[bot]
849d3adb09 Bump actions/checkout from 1 to 2.3.4
Bumps [actions/checkout](https://github.com/actions/checkout) from 1 to 2.3.4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v1...v2.3.4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-13 07:56:33 +00:00
Julius Härtl
9d90e0f3e2 Merge pull request #3188 from nextcloud/dependabot/github_actions/shivammathur/setup-php-2.11.0
Bump shivammathur/setup-php from 1 to 2.11.0
2021-07-13 09:56:10 +02:00
dependabot[bot]
a22b223244 Bump shivammathur/setup-php from 1 to 2.11.0
Bumps [shivammathur/setup-php](https://github.com/shivammathur/setup-php) from 1 to 2.11.0.
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/v1...2.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-13 07:33:15 +00:00
Julius Härtl
c3468125f9 Merge pull request #3179 from splitt3r/enh/dependatbot-for-actions
Add Dependabot for GitHub Actions
2021-07-13 09:32:53 +02:00
Nextcloud bot
9e7cff9839 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-10 02:43:13 +00:00
Julius Härtl
13d2b98da4 Merge pull request #3177 from nextcloud/enh/collections-files-load-perf
Use async import for vue component on collections entrypoint
2021-07-09 16:25:10 +02:00
Kai
4b327a53c1 Unify quotation of ecosystem
Signed-off-by: splitt3r <splitt3r@users.noreply.github.com>
2021-07-09 13:48:47 +02:00
Kai
d441ba4f3d Add Dependabot for GitHub Actions
Signed-off-by: splitt3r <splitt3r@users.noreply.github.com>
2021-07-09 12:55:27 +02:00
Nextcloud bot
9140efef29 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-09 02:37:47 +00:00
Julius Härtl
7119137a75 Use async import for vue component on collections entrypoint
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-07-08 10:35:42 +02:00
Nextcloud bot
b7cbfa03a5 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-08 02:37:52 +00:00
Nextcloud bot
3ee19abfc1 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-07 02:37:14 +00:00
Nextcloud bot
25262b648f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-07-06 02:38:03 +00:00
Julius Härtl
bf746e4c92 Merge pull request #3161 from nextcloud/bugfix/sql-queries
Reduce duplicate queries when fetching user boards an permissions
2021-07-05 20:27:41 +02:00
Julius Härtl
eec7f5ff21 Merge pull request #3167 from nextcloud/dependabot/npm_and_yarn/master/jest-27.0.6
Bump jest from 27.0.5 to 27.0.6
2021-07-05 19:54:24 +02:00
Julius Härtl
34f1a80caa Merge pull request #3166 from nextcloud/dependabot/npm_and_yarn/master/markdown-it-12.1.0
Bump markdown-it from 12.0.6 to 12.1.0
2021-07-05 19:54:17 +02:00
Julius Härtl
ae2aa8caff Reduce duplicate queries when fetching user boards an permissions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-07-05 19:53:43 +02:00
dependabot[bot]
bb2703526e Bump jest from 27.0.5 to 27.0.6
Bumps [jest](https://github.com/facebook/jest) from 27.0.5 to 27.0.6.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.0.5...v27.0.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-03 01:03:10 +00:00
dependabot[bot]
dc85757d1b Bump markdown-it from 12.0.6 to 12.1.0
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 12.0.6 to 12.1.0.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/12.0.6...12.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-03 01:01:56 +00:00
Julius Härtl
62f3fce3ea Merge pull request #3151 from nextcloud/bugfix/noid/log-exceptions
Always log generic exceptions
2021-07-02 17:55:00 +02:00
Nextcloud bot
f353caad7f [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-06-30 02:37:18 +00:00
dependabot[bot]
92ace35f79 Merge pull request #3157 from nextcloud/dependabot/npm_and_yarn/master/vue-router-3.5.2 2021-06-28 08:40:21 +00:00
dependabot[bot]
185f4684ca Bump vue-router from 3.5.1 to 3.5.2
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.5.1...v3.5.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-28 08:33:52 +00:00
dependabot[bot]
e5036fcbbb Merge pull request #3155 from nextcloud/dependabot/composer/vimeo/psalm-4.8.1 2021-06-28 08:33:03 +00:00
dependabot[bot]
113f5e1bf7 Bump vimeo/psalm from 4.7.3 to 4.8.1
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.7.3 to 4.8.1.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.7.3...4.8.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-28 08:25:55 +00:00
dependabot[bot]
05d0f228aa Merge pull request #3156 from nextcloud/dependabot/composer/phpunit/phpunit-9.5.6 2021-06-28 08:25:11 +00:00
dependabot[bot]
256c7cb873 Bump phpunit/phpunit from 9.5.5 to 9.5.6
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.5 to 9.5.6.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.5...9.5.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-28 08:17:31 +00:00
Julius Härtl
117d8fe6ba Merge pull request #3158 from nextcloud/dependabot/npm_and_yarn/master/jest-27.0.5
Bump jest from 27.0.4 to 27.0.5
2021-06-28 10:13:43 +02:00
Nextcloud bot
0ba63ca548 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2021-06-26 02:36:40 +00:00
dependabot[bot]
ba08bd25a7 Bump jest from 27.0.4 to 27.0.5
Bumps [jest](https://github.com/facebook/jest) from 27.0.4 to 27.0.5.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.0.4...v27.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-26 01:01:49 +00:00
Julius Härtl
ee0b5a6150 Merge pull request #3149 from nextcloud/update-master-version
Update version on master
2021-06-25 15:54:25 +02:00
Joas Schilling
a81a1761b5 Update version on master
Signed-off-by: Joas Schilling <coding@schilljs.com>
2021-06-25 15:41:13 +02:00
Julius Härtl
0fc220baef Always log generic exceptions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-06-25 11:05:53 +02:00
Jakob Röhrl
06de1a7e85 rebase
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
2021-06-24 14:10:28 +02:00
Jakob Röhrl
d56acf99af date shortcuts
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
2021-06-24 14:02:58 +02:00
Jakob Röhrl
01d8f2815d date shortcut
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
2021-06-24 14:02:57 +02:00
135 changed files with 11322 additions and 11029 deletions

View File

@@ -3,6 +3,10 @@ module.exports = {
'@nextcloud',
],
rules: {
'valid-jsdoc': ['off'],
'jsdoc/require-param-description': ['off'],
'jsdoc/require-param-type': ['off'],
'jsdoc/check-param-names': ['off'],
'jsdoc/no-undefined-types': ['off'],
'jsdoc/require-property-description' : ['off']
},
}

View File

@@ -39,3 +39,13 @@ updates:
versions:
- "< 16"
- ">= 15.a"
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
day: saturday
time: "03:00"
timezone: Europe/Paris
open-pull-requests-limit: 10
reviewers:
- juliushaertl

25
.github/stale.yml vendored
View File

@@ -1,25 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- "1. to develop"
- "2. developing"
- "3. to review"
- "discussion"
- "bounty"
- "bug"
- "enhancement"
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.

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@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7
- name: Setup PHP
uses: shivammathur/setup-php@v1
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

46
.github/workflows/command-rebase.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Rebase command
on:
issue_comment:
types: created
jobs:
rebase:
runs-on: ubuntu-latest
# On pull requests and if the comment starts with `/rebase`
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/rebase')
steps:
- name: Add reaction on start
uses: peter-evans/create-or-update-comment@v1
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "+1"
- name: Checkout the latest code
uses: actions/checkout@v2.4.0
with:
fetch-depth: 0
token: ${{ secrets.COMMAND_BOT_PAT }}
- name: Automatic Rebase
uses: cirrus-actions/rebase@1.5
env:
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
- name: Add reaction on failure
uses: peter-evans/create-or-update-comment@v1
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "-1"

View File

@@ -0,0 +1,29 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Dependabot
on:
pull_request_target:
branches:
- master
- stable*
jobs:
auto-approve-merge:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
steps:
# Github actions bot approve
- uses: hmarr/auto-approve-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Nextcloud bot approve and merge request
- uses: ahmadnassri/action-dependabot-auto-merge@v2
with:
target: patch
github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }}

33
.github/workflows/fixup.yml vendored Normal file
View File

@@ -0,0 +1,33 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Block fixup and squash commits
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: skjnldsv/block-fixup-merge-action@42d26e1b536ce61e5cf467d65fb76caf4aa85acf # v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -19,13 +19,13 @@ jobs:
matrix:
php-versions: ['7.4']
databases: ['sqlite', 'mysql', 'pgsql']
server-versions: ['stable22']
server-versions: ['stable23']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
services:
postgres:
image: postgres
image: postgres:14
ports:
- 4445:5432/tcp
env:
@@ -43,7 +43,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@v2
uses: actions/checkout@v2.4.0
with:
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
@@ -56,16 +56,23 @@ 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
uses: actions/checkout@v2.4.0
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@v2
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

@@ -17,9 +17,9 @@ jobs:
name: php${{ matrix.php-versions }} lint
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2.4.0
- name: Set up php${{ matrix.php-versions }}
uses: shivammathur/setup-php@v1
uses: shivammathur/setup-php@2.15.0
with:
php-version: ${{ matrix.php-versions }}
coverage: none
@@ -31,9 +31,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
uses: actions/checkout@v2.4.0
- name: Set up php
uses: shivammathur/setup-php@master
uses: shivammathur/setup-php@2.15.0
with:
php-version: 7.4
coverage: none
@@ -50,9 +50,9 @@ jobs:
node-version: [14.x]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2.4.0
- name: Use node ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v2.4.1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
@@ -67,16 +67,16 @@ jobs:
strategy:
matrix:
node-versions: [14.x]
node-version: [14.x]
name: stylelint node${{ matrix.node-versions }}
name: stylelint node${{ matrix.node-version }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v2.4.0
- name: Set up node ${{ matrix.node-versions }}
uses: actions/setup-node@v1
- name: Set up node ${{ matrix.node-version }}
uses: actions/setup-node@v2.4.1
with:
node-versions: ${{ matrix.node-versions }}
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7

View File

@@ -17,15 +17,15 @@ jobs:
node-version: [14.x]
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2.4.0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
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@v1
uses: shivammathur/setup-php@2.15.0
with:
php-version: '7.4'
tools: composer

View File

@@ -12,9 +12,9 @@ jobs:
node-version: [14.x]
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2.4.0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v2.4.1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7

View File

@@ -13,20 +13,20 @@ env:
jobs:
integration:
runs-on: ubuntu-18.04
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-versions: ['7.3', '7.4']
databases: ['sqlite', 'mysql', 'pgsql']
server-versions: ['stable22']
server-versions: ['stable23']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
services:
postgres:
image: postgres
image: postgres:14
ports:
- 4445:5432/tcp
env:
@@ -44,7 +44,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
@@ -57,12 +57,12 @@ 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
uses: actions/checkout@v3
with:
path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@v2
uses: shivammathur/setup-php@2.15.0
with:
php-version: ${{ matrix.php-versions }}
tools: phpunit

35
.github/workflows/psalm.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Static analysis
on:
pull_request:
push:
branches:
- master
- main
- stable*
jobs:
static-analysis:
runs-on: ubuntu-latest
name: Nextcloud
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up php
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
coverage: none
- name: Install dependencies
run: composer i
- name: Run coding standards check
run: composer run psalm

View File

@@ -1,31 +0,0 @@
name: Static analysis
on:
pull_request:
push:
branches:
- master
- stable*
jobs:
static-psalm-analysis:
runs-on: ubuntu-latest
strategy:
matrix:
ocp-version: [ 'dev-stable22' ]
name: Nextcloud ${{ matrix.ocp-version }}
steps:
- name: Checkout
uses: actions/checkout@master
- name: Set up php
uses: shivammathur/setup-php@master
with:
php-version: 7.4
tools: composer:v1
coverage: none
- name: Install dependencies
run: composer i
- name: Install dependencies
run: composer require --dev christophwurst/nextcloud:${{ matrix.ocp-version }}
- name: Run coding standards check
run: composer run psalm

View File

@@ -0,0 +1,65 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Update nextcloud/ocp
on:
workflow_dispatch:
schedule:
- cron: "5 2 * * 0"
jobs:
update-nextcloud-ocp:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
branches: ["master", "stable25", "stable24", "stable23"]
name: update-nextcloud-ocp-${{ matrix.branches }}
steps:
- uses: actions/checkout@v3
with:
ref: ${{ matrix.branches }}
submodules: true
- name: Set up php7.4
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
extensions: ctype,curl,dom,fileinfo,gd,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
coverage: none
- name: Composer install
run: composer install
- name: Composer update nextcloud/ocp
run: composer require --dev nextcloud/ocp:dev-${{ matrix.branches }}
continue-on-error: true
- name: Reset checkout dirs
run: |
git clean -f 3rdparty
git clean -f vendor
git checkout 3rdparty vendor
continue-on-error: true
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: Update psalm baseline
committer: GitHub <noreply@github.com>
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
signoff: true
branch: automated/noid/${{ matrix.branches }}-update-nextcloud-ocp
title: "[${{ matrix.branches }}] Update nextcloud/ocp dependency"
body: |
Auto-generated update of [nextcloud/ocp](https://github.com/nextcloud-deps/ocp/) dependency
labels: |
dependencies
3. to review

View File

@@ -1,6 +1,6 @@
[main]
host = https://www.transifex.com
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
lang_map = sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb
[o:nextcloud:p:nextcloud:r:deck]
file_filter = translationfiles/<lang>/deck.po

View File

@@ -1,124 +1,132 @@
# Changelog
All notable changes to this project will be documented in this file.
## 1.5.8
## 1.6.7
### Fixed
- Align Duedate-delete icon properly - fixes nextcloud/deck#3791 [#3817](https://github.com/nextcloud/deck/pull/3817)
- Increase file count after sharing [#3806](https://github.com/nextcloud/deck/pull/3806)
- Show cards after moving into another list [#3794](https://github.com/nextcloud/deck/pull/3794)
- Fetch full board data after cloning [#3781](https://github.com/nextcloud/deck/pull/3781)
- 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
- minor style fixes [#4203](https://github.com/nextcloud/deck/pull/4203)
- Add integration test for attachment handling on cards [#4177](https://github.com/nextcloud/deck/pull/4177)
- feat: add validators to check values in services @juliushaertl [#4175](https://github.com/nextcloud/deck/pull/4175)
- disables autocomplete on card creation @juliushaertl [#4183](https://github.com/nextcloud/deck/pull/4183)
## 1.6.4
### Fixed
- Cache user membership for circles [#4133](https://github.com/nextcloud/deck/pull/4133)
- Set event link also for notifications that get emitted from activities [#4119](https://github.com/nextcloud/deck/pull/4119)
- disable Create card button while no stack is chosen [#4020](https://github.com/nextcloud/deck/pull/4020)
- to nextcloud/OCP package in stable23 [#4094](https://github.com/nextcloud/deck/pull/4094)
- Use capped memory cache for board permissions [#3998](https://github.com/nextcloud/deck/pull/3998)
- Improve CalDAV integration performance [#3996](https://github.com/nextcloud/deck/pull/3996)
- Fetch attachment folder for the correct user during cron job [#3960](https://github.com/nextcloud/deck/pull/3960)
- Switch to 'markdown-it-task-checkbox' for rendering of task lists [#3926](https://github.com/nextcloud/deck/pull/3926)
- Prevent opening card and applyLabelFilter on card drag end [#3918](https://github.com/nextcloud/deck/pull/3918)
- Fix z-index for deck sidebar [#3886](https://github.com/nextcloud/deck/pull/3886)
## 1.5.7
## 1.6.3
### Fixed
- Align Duedate-delete icon properly - fixes nextcloud/deck#3791 [#3816](https://github.com/nextcloud/deck/pull/3816)
- Increase file count after sharing [#3805](https://github.com/nextcloud/deck/pull/3805)
- Show cards after moving into another list [#3795](https://github.com/nextcloud/deck/pull/3795)
- Fetch full board data after cloning [#3780](https://github.com/nextcloud/deck/pull/3780)
- Handle qb mapper exception messages properly [#3770](https://github.com/nextcloud/deck/pull/3770)
## 1.6.2
### Added
- Transfer ownership @juliushaertl [#3665](https://github.com/nextcloud/deck/pull/3665)
- Transfer ownership @juliushaertl [#3664](https://github.com/nextcloud/deck/pull/3664)
### Fixed
- Fix: Check all circle shares for permissions [#3721](https://github.com/nextcloud/deck/pull/3721)
- Add a missing translation - not found in transifex [#3707](https://github.com/nextcloud/deck/pull/3707)
- 🐛 Fix missing files sidebar [#3642](https://github.com/nextcloud/deck/pull/3642)
- [stable23] Use explicit cast to make use of index [#3731](https://github.com/nextcloud/deck/pull/3731)
- Fix hidden attachment icon on archived cards [#3735](https://github.com/nextcloud/deck/pull/3735)
- [stable23] Sort boards non case sensitive [#3739](https://github.com/nextcloud/deck/pull/3739)
- add autofocus on board edit #3326 @juliushaertl [#3743](https://github.com/nextcloud/deck/pull/3743)
- Fix paramter replacements when creating deck cards from talk messages @juliushaertl [#3742](https://github.com/nextcloud/deck/pull/3742)
- Fix text selection in dark mode and modal view [#3767](https://github.com/nextcloud/deck/pull/3767)
- 🐛 Fix missing files sidebar [#3641](https://github.com/nextcloud/deck/pull/3641)
- Add a missing translation - not found in transifex [#3706](https://github.com/nextcloud/deck/pull/3706)
- Fix: Check all circle shares for permissions [#3717](https://github.com/nextcloud/deck/pull/3717)
- Sort boards non case sensitive [#3663](https://github.com/nextcloud/deck/pull/3663)
- Use explicit cast to make use of index @juliushaertl [#3497](https://github.com/nextcloud/deck/pull/3497)
- Fix paramter replacements when creating deck cards from talk messages @juliushaertl [#3741](https://github.com/nextcloud/deck/pull/3741)
- Fix hidden attachment icon on archived cards [#3734](https://github.com/nextcloud/deck/pull/3734)
- Fix text selection in dark mode and modal view [#3766](https://github.com/nextcloud/deck/pull/3766)
### Other
- Properly check for the stack AND setting board permissions [#3714](https://github.com/nextcloud/deck/pull/3714)
- Add missing indices [#3756](https://github.com/nextcloud/deck/pull/3756)
- Properly check for the stack AND setting board permissions [#3713](https://github.com/nextcloud/deck/pull/3713)
- Add missing indices [#3755](https://github.com/nextcloud/deck/pull/3755)
## 1.5.6
## 1.6.1
### Fixed
- Allow to download an attachment without navigating to the files app [#3441](https://api.github.com/repos/nextcloud/deck/pulls/3441)
- Fix CalDAV blocking and modernize circles API usage [#3527](https://api.github.com/repos/nextcloud/deck/pulls/3527)
- CardApiController: Fix order of optional parameters [#3521](https://api.github.com/repos/nextcloud/deck/pulls/3521)
- Fix cursor generation if no results are found [#3460](https://api.github.com/repos/nextcloud/deck/pulls/3460)
- Exclude deleted boards in the selection for target [#3524](https://api.github.com/repos/nextcloud/deck/pulls/3524)
- Generate fixed link for activity emails [#3627](https://api.github.com/repos/nextcloud/deck/pulls/3627)
- Make insert attachment buttom easy to click [#3615](https://api.github.com/repos/nextcloud/deck/pulls/3615)
- Fix confusion between stackId and boardId in StackService [#3544](https://api.github.com/repos/nextcloud/deck/pulls/3544)
- Exclude deleted boards in the selection for target [#3523](https://api.github.com/repos/nextcloud/deck/pulls/3523)
- CardApiController: Fix order of optional parameters [#3520](https://api.github.com/repos/nextcloud/deck/pulls/3520)
- Fix cursor generation if no results are found [#3462](https://api.github.com/repos/nextcloud/deck/pulls/3462)
- Fix CalDAV blocking and modernize circles API usage [#3526](https://api.github.com/repos/nextcloud/deck/pulls/3526)
- Fix overview card listing [#3463](https://api.github.com/repos/nextcloud/deck/pulls/3463)
- Generate fixed link for activity emails [#3626](https://api.github.com/repos/nextcloud/deck/pulls/3626)
- return the selector for collections [#3618](https://api.github.com/repos/nextcloud/deck/pulls/3618)
- Fix confusion between stackId and boardId in StackService [#3543](https://api.github.com/repos/nextcloud/deck/pulls/3543)
- Fix talk integration [#3537](https://api.github.com/repos/nextcloud/deck/pulls/3537)
- Make insert attachment buttom easy to click [#3614](https://api.github.com/repos/nextcloud/deck/pulls/3614)
## 1.5.5
- Fix release asset build
## 1.5.4
### Fixed
- #3378 Fix menu button position in card modal
- #3392 Use displayname instead of uid for mentions (reopened against master)
- #3361 Improve combined search @eneiluj
- #3381 Extend drag-and-drop zone in card sidebar @Artem4590
- #3366 Fix optional parameter order
- #3407 Keep exceptions http response generic
## 1.5.3
### Fied
- #3317 Additional check for stacks
## 1.5.2
### Fixed
- #3300 Fix print style issues
- #3303 Delete file shares through attachments API
- #3306 Return false instead of throwing when getting calendar setting
## 1.5.1 - 2021-09-03
### Fixed
- #3224 Move circle checks to a unified service and improve member checks
- #3231 Check for null value to avoid TypeError in the group manager
- #3264 Defer obtaining the user session in the config service
## 1.5.0 - 2021-07-09
## 1.6.0
### Added
* Nextcloud 22 compatibility
* [#3105](https://github.com/nextcloud/deck/pull/3105) Compatibility with Cirlces changes in 22
* [#3147](https://github.com/nextcloud/deck/pull/3147) Add card button to the dashboard widget @jakobroehrl
* [#2854](https://github.com/nextcloud/deck/pull/2854) Add card button in card overview @jakobroehrl
* [#3078](https://github.com/nextcloud/deck/pull/3078) Show on shared boards unassigned cards to all users @jakobroehrl
- #3449 Cache most frequent queries
- #3177 Use async import for vue component on collections entrypoint @juliushaertl
- #2791 Open description links in new tab @fm-sys
- #3344 Improve combined search @eneiluj
- #3362 Improve search performance @eneiluj
- #2710 Due date shortcuts in the datepicker @jakobroehrl
### Fixed
* [#2935](https://github.com/nextcloud/deck/pull/2935) Rich object string parameters for notifications @nickvergessen
* [#2950](https://github.com/nextcloud/deck/pull/2950) Remove notification on unshare and add type hints
* [#2983](https://github.com/nextcloud/deck/pull/2983) Fix codemirror description width
* [#2989](https://github.com/nextcloud/deck/pull/2989) Fix unified comments search with postgres
* [#3005](https://github.com/nextcloud/deck/pull/3005) Do not query the lookupserver when looking for sharees
* [#3011](https://github.com/nextcloud/deck/pull/3011) L10n: Spelling unification @Valdnet
* [#3014](https://github.com/nextcloud/deck/pull/3014) Proper error handling when fetching comments fails
* [#3016](https://github.com/nextcloud/deck/pull/3016) Allow searching for filters without a query to match all that have a given filter set
* [#3021](https://github.com/nextcloud/deck/pull/3021) L10n: Add word "Card" @Valdnet
* [#3025](https://github.com/nextcloud/deck/pull/3025) Show comment counter and highlight if unread comments are available
* [#3036](https://github.com/nextcloud/deck/pull/3036) Add link to migration tool for Trello @maxammann
* [#3037](https://github.com/nextcloud/deck/pull/3037) Catch any error during circle detail fetching
* [#3038](https://github.com/nextcloud/deck/pull/3038) Get attachment from the user node instead of the share source
* [#3092](https://github.com/nextcloud/deck/pull/3092) Refactor update to have proper order of optional parameters
* [#3113](https://github.com/nextcloud/deck/pull/3113) Use new viewer syntax with destructuring object @azul
* [#3142](https://github.com/nextcloud/deck/pull/3142) Always pass user id in share provider
* [#3152](https://github.com/nextcloud/deck/pull/3152) Only offer stack creation in emptycontent with proper permissions
* [#3165](https://github.com/nextcloud/deck/pull/3165) Always log generic exceptions
* [#3168](https://github.com/nextcloud/deck/pull/3168) Reduce duplicate queries when fetching user boards an permissions
- #3446 Switch to QBMapper in BoardMapper
- #3433 Fix event name for updating the description
- #3463 Fix overview card listing
- #3440 Allow to download an attachment without navigating to the files app
- #3462 Fix cursor generation if no results are found
- #3161 Reduce duplicate queries when fetching user boards an permissions @juliushaertl
- #3151 Always log generic exceptions @juliushaertl
- #3217 Move circle checks to a unified service and improve member checks @juliushaertl
- #3225 Check for null value to avoid TypeError in the group manager @juliushaertl
- #3263 Defer obtaining the user session in the config service @juliushaertl
- #3294 Fix print style issues @weeman1337
- #3299 Return false instead of throwing when getting calendar setting @juliushaertl
- #3298 Delete file shares through attachments API @juliushaertl
- #3343 Fix search pagination cursor @eneiluj
- #3326 add autofocus on board edit @weeman1337
- #3323 Extend drag-and-drop zone in card sidebar @old-green-frog
- #3364 Fix optional parameter order @juliushaertl
- #3324 Fix menu button position in card modal @valerydmitrieva
- #3391 Use displayname instead of uid for mentions (reopened against master) @kffl
- #3316 Additional check for stacks @juliushaertl
- #3357 Revert "Fix search pagination cursor" @juliushaertl
- #3327 Do not show both bullets and checkboxes for checklists @Themanwhosmellslikesugar
- #3375 Show absolute dates when printing @weeman1337
- #3376 Print assignee names @weeman1337
- #3384 Keep exceptions http response generic @juliushaertl
## 1.4.0 - 2021-04-13
@@ -155,15 +163,15 @@ All notable changes to this project will be documented in this file.
## 1.3.0-beta2
### Fixed
* [#2700](https://github.com/nextcloud/deck/pull/2700) Attempt to copy file on dropping it to deck
* [#2701](https://github.com/nextcloud/deck/pull/2701) Fix uploading files by drag and drop
* [#2700](https://github.com/nextcloud/deck/pull/2700) Attempt to copy file on dropping it to deck @juliushaertl
* [#2701](https://github.com/nextcloud/deck/pull/2701) Fix uploading files by drag and drop @juliushaertl
* [#2707](https://github.com/nextcloud/deck/pull/2707) L10n: Change to a capital letter @Valdnet
* [#2712](https://github.com/nextcloud/deck/pull/2712) Docs: Fix table in section "GET /api/v1.0/config" @das-g
* [#2716](https://github.com/nextcloud/deck/pull/2716) Remove repair step which is no longer needed as we cleanup properly
* [#2716](https://github.com/nextcloud/deck/pull/2716) Remove repair step which is no longer needed as we cleanup properly @juliushaertl
* [#2723](https://github.com/nextcloud/deck/pull/2723) Pad random color with leading zeroes @PVince81
* [#2729](https://github.com/nextcloud/deck/pull/2729) Remove invalid activity parameters @nickvergessen
* [#2750](https://github.com/nextcloud/deck/pull/2750) Fix deck activity emails not being translated @nickvergessen
* [#2751](https://github.com/nextcloud/deck/pull/2751) Properly set author for activity events that are triggered by cron
* [#2751](https://github.com/nextcloud/deck/pull/2751) Properly set author for activity events that are triggered by cron @juliushaertl
## 1.2.2 - 2020-11-24
@@ -272,31 +280,31 @@ All notable changes to this project will be documented in this file.
### Fixed
* [#2116](https://github.com/nextcloud/deck/pull/2116) Fix navigation layout issues
* [#2118](https://github.com/nextcloud/deck/pull/2118) Use proper parameter when handling attachments
* [#2116](https://github.com/nextcloud/deck/pull/2116) Fix navigation layout issues @juliushaertl
* [#2118](https://github.com/nextcloud/deck/pull/2118) Use proper parameter when handling attachments @juliushaertl
## 1.0.4 - 2020-06-26
### Fixed
* [#2062](https://github.com/nextcloud/deck/pull/2062) Fix saving card description after toggling checkboxes
* [#2062](https://github.com/nextcloud/deck/pull/2062) Fix saving card description after toggling checkboxes @juliushaertl
* [#2065](https://github.com/nextcloud/deck/pull/2065) Adding CSS rule for Markdown Blockquotes @reox
* [#2059](https://github.com/nextcloud/deck/pull/2059) Fix fetching attachments on card change
* [#2060](https://github.com/nextcloud/deck/pull/2060) Use mixing for relative date in card sidebar
* [#2059](https://github.com/nextcloud/deck/pull/2059) Fix fetching attachments on card change @juliushaertl
* [#2060](https://github.com/nextcloud/deck/pull/2060) Use mixing for relative date in card sidebar @juliushaertl
## 1.0.3 - 2020-06-19
### Fixed
* [#2019](https://github.com/nextcloud/deck/pull/2019) Remove old global css rule
* [#2020](https://github.com/nextcloud/deck/pull/2020) Fix navigation issue with leftover nodes
* [#2021](https://github.com/nextcloud/deck/pull/2021) Fix description issues
* [#2022](https://github.com/nextcloud/deck/pull/2022) Fix replyto issues with the comments API
* [#2027](https://github.com/nextcloud/deck/pull/2027) Allow to unassign current user from card
* [#2019](https://github.com/nextcloud/deck/pull/2019) Remove old global css rule @juliushaertl
* [#2020](https://github.com/nextcloud/deck/pull/2020) Fix navigation issue with leftover nodes @juliushaertl
* [#2021](https://github.com/nextcloud/deck/pull/2021) Fix description issues @juliushaertl
* [#2022](https://github.com/nextcloud/deck/pull/2022) Fix replyto issues with the comments API @juliushaertl
* [#2027](https://github.com/nextcloud/deck/pull/2027) Allow to unassign current user from card @juliushaertl
* [#2029](https://github.com/nextcloud/deck/pull/2029) Fix wording : stack -> list @cloud2018
* [#2032](https://github.com/nextcloud/deck/pull/2032) Force order by id as second sorting key
* [#2045](https://github.com/nextcloud/deck/pull/2045) Improve label styling
* [#2032](https://github.com/nextcloud/deck/pull/2032) Force order by id as second sorting key @juliushaertl
* [#2045](https://github.com/nextcloud/deck/pull/2045) Improve label styling @juliushaertl
* [#2010](https://github.com/nextcloud/deck/pull/2010) User documentation fixes @Nyco
* [#1998](https://github.com/nextcloud/deck/pull/1998) Add Checklist explaination to the doc @4rnoP

View File

@@ -25,7 +25,8 @@ Deck is a kanban style organization tool aimed at personal planning and project
- [trello-to-deck](https://github.com/maxammann/trello-to-deck) - Migrates cards from Trello
- [mail2deck](https://github.com/newroco/mail2deck) - Provides an "email in" solution
- [A-deck](https://github.com/leoossa/A-deck) - Chrome Extension that allows to create new card in selected stack based on current tab
-
## Installation/Update
This app is supposed to work on the two latest Nextcloud versions.

View File

@@ -16,7 +16,7 @@
- 🚀 Get your project organized
</description>
<version>1.5.8</version>
<version>1.6.7</version>
<licence>agpl</licence>
<author>Julius Härtl</author>
<namespace>Deck</namespace>
@@ -35,7 +35,7 @@
<database min-version="9.4">pgsql</database>
<database>sqlite</database>
<database min-version="5.5">mysql</database>
<nextcloud min-version="22" max-version="22"/>
<nextcloud min-version="23" max-version="23"/>
</dependencies>
<background-jobs>
<job>OCA\Deck\Cron\DeleteCron</job>

View File

@@ -8,24 +8,22 @@
"email": "jus@bitgrid.net"
}
],
"config": {
"platform": {
"php": "7.3"
}
},
"require": {
"cogpowered/finediff": "0.3.*"
},
"require-dev": {
"roave/security-advisories": "dev-master",
"christophwurst/nextcloud": "^22@dev",
"phpunit/phpunit": "^8",
"nextcloud/coding-standard": "^0.5.0",
"symfony/event-dispatcher": "^4.0",
"vimeo/psalm": "^4.3",
"php-parallel-lint/php-parallel-lint": "^1.2"
"php-parallel-lint/php-parallel-lint": "^1.2",
"nextcloud/ocp": "dev-stable23"
},
"config": {
"platform": {
"php": "7.3"
},
"optimize-autoloader": true,
"classmap-authoritative": true
},
@@ -40,6 +38,12 @@
"@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": {
"OCP\\": "vendor/nextcloud/ocp/OCP"
}
}
}

95
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "a984e9e37aadc6504b0f9ddbd6604835",
"content-hash": "388de1616aef9f3496ad3432af301215",
"packages": [
{
"name": "cogpowered/finediff",
@@ -230,49 +230,6 @@
],
"time": "2021-03-30T17:13:30+00:00"
},
{
"name": "christophwurst/nextcloud",
"version": "v22.1.1",
"source": {
"type": "git",
"url": "https://github.com/ChristophWurst/nextcloud_composer.git",
"reference": "8bb086cd016128b5ef8353662fd1852db3248d1e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ChristophWurst/nextcloud_composer/zipball/8bb086cd016128b5ef8353662fd1852db3248d1e",
"reference": "8bb086cd016128b5ef8353662fd1852db3248d1e",
"shasum": ""
},
"require": {
"php": "^7.3 || ~8.0.0",
"psr/container": "^1.0",
"psr/event-dispatcher": "^1.0",
"psr/log": "^1.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "23.0.0-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"AGPL-3.0-or-later"
],
"authors": [
{
"name": "Christoph Wurst",
"email": "christoph@winzerhof-wurst.at"
}
],
"description": "Composer package containing Nextcloud's public API (classes, interfaces)",
"support": {
"issues": "https://github.com/ChristophWurst/nextcloud_composer/issues",
"source": "https://github.com/ChristophWurst/nextcloud_composer/tree/v22.1.1"
},
"time": "2021-11-11T14:01:42+00:00"
},
{
"name": "composer/package-versions-deprecated",
"version": "1.11.99.5",
@@ -1180,6 +1137,49 @@
},
"time": "2021-01-11T14:15:58+00:00"
},
{
"name": "nextcloud/ocp",
"version": "dev-stable23",
"source": {
"type": "git",
"url": "https://github.com/nextcloud-deps/ocp.git",
"reference": "5b18c55569528d8190224af04095e9dde1953c72"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/5b18c55569528d8190224af04095e9dde1953c72",
"reference": "5b18c55569528d8190224af04095e9dde1953c72",
"shasum": ""
},
"require": {
"php": "^7.3 || ~8.0.0",
"psr/container": "^1.1.1",
"psr/event-dispatcher": "^1.0",
"psr/log": "^1.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "23.0.0-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"AGPL-3.0-or-later"
],
"authors": [
{
"name": "Christoph Wurst",
"email": "christoph@winzerhof-wurst.at"
}
],
"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-12-20T00:37:08+00:00"
},
{
"name": "nikic/php-parser",
"version": "v4.13.2",
@@ -5247,11 +5247,14 @@
"minimum-stability": "stable",
"stability-flags": {
"roave/security-advisories": 20,
"christophwurst/nextcloud": 20
"nextcloud/ocp": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
"plugin-api-version": "2.2.0"
"platform-overrides": {
"php": "7.3"
},
"plugin-api-version": "2.3.0"
}

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" : "Списъкът е изтрит",
@@ -260,6 +262,7 @@ OC.L10N.register(
"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." : "Ограничаването на приложението Deck/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.",

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" : "Списъкът е изтрит",
@@ -258,6 +260,7 @@
"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." : "Ограничаването на приложението Deck/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.",

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",
@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}",
"Add a new list" : "Ajouter une nouvelle liste",
"Archive all cards" : "Archiver toutes les cartes",
"Unarchive all cards" : "Désarchiver toutes les cartes",
"Delete list" : "Supprimer la liste",
"Archive all cards in this list" : "Archiver toutes les cartes de cette liste",
"Unarchive all cards in this list" : "Désarchiver toutes les cartes de cette liste",
"Add a new card" : "Ajouter une nouvelle carte",
"Card name" : "Nom de la carte",
"List deleted" : "Liste supprimée",

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",
@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}",
"Add a new list" : "Ajouter une nouvelle liste",
"Archive all cards" : "Archiver toutes les cartes",
"Unarchive all cards" : "Désarchiver toutes les cartes",
"Delete list" : "Supprimer la liste",
"Archive all cards in this list" : "Archiver toutes les cartes de cette liste",
"Unarchive all cards in this list" : "Désarchiver toutes les cartes de cette liste",
"Add a new card" : "Ajouter une nouvelle carte",
"Card name" : "Nom de la carte",
"List deleted" : "Liste supprimée",

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen",
"Add a new list" : "Új lista hozzáadása",
"Archive all cards" : "Az összes kártya archiválása",
"Unarchive all cards" : "Az összes kártya archiválásának visszavonása",
"Delete list" : "Lista törlése",
"Archive all cards in this list" : "Az összes kártya archiválása ebben a listában",
"Unarchive all cards in this list" : "Az összes kártya archiválásának visszavonása ebben a listában",
"Add a new card" : "Új kártya hozzáadása",
"Card name" : "Kártya neve",
"List deleted" : "Lista törölve",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Megosztva Önnel",
"Deck settings" : "Kártyák beállításai",
"Use bigger card view" : "Nagyobb kártyanézet használata",
"Show card ID badge" : "Kártyaazonosító jelvény megjelenítése",
"Show boards in calendar/tasks" : "Táblák megjelenítése a naptárak/teendők között",
"Limit deck usage of groups" : "A kártyák használatának csoportokra korlátozása",
"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." : "A Kártyák korlátozása blokkolja a saját táblák létrehozását azoknál a felhasználóknál, akik nem tagjai a megadott csoportoknak. A felhasználók továbbra is tudnak dolgozni a velük megosztott táblákon.",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Keresés a(z) {searchQuery} kifejezésre az összes táblában",
"No results found" : "Nincs találat",
"{stack} in {board}" : "{stack} itt: {board}",
"Click to expand description" : "Kattintson a leírás kibontásához",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Létrehozva: {created}\n* Utoljára módosítva: {lastMod}\n* {nbAttachments} melléklet\n* {nbComments} megjegyzés",
"{nbCards} cards" : "{nbCards} kártya",
"No upcoming cards" : "Nincsenek közelgő kártyák",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen",
"Add a new list" : "Új lista hozzáadása",
"Archive all cards" : "Az összes kártya archiválása",
"Unarchive all cards" : "Az összes kártya archiválásának visszavonása",
"Delete list" : "Lista törlése",
"Archive all cards in this list" : "Az összes kártya archiválása ebben a listában",
"Unarchive all cards in this list" : "Az összes kártya archiválásának visszavonása ebben a listában",
"Add a new card" : "Új kártya hozzáadása",
"Card name" : "Kártya neve",
"List deleted" : "Lista törölve",
@@ -258,6 +260,7 @@
"Shared with you" : "Megosztva Önnel",
"Deck settings" : "Kártyák beállításai",
"Use bigger card view" : "Nagyobb kártyanézet használata",
"Show card ID badge" : "Kártyaazonosító jelvény megjelenítése",
"Show boards in calendar/tasks" : "Táblák megjelenítése a naptárak/teendők között",
"Limit deck usage of groups" : "A kártyák használatának csoportokra korlátozása",
"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." : "A Kártyák korlátozása blokkolja a saját táblák létrehozását azoknál a felhasználóknál, akik nem tagjai a megadott csoportoknak. A felhasználók továbbra is tudnak dolgozni a velük megosztott táblákon.",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "Keresés a(z) {searchQuery} kifejezésre az összes táblában",
"No results found" : "Nincs találat",
"{stack} in {board}" : "{stack} itt: {board}",
"Click to expand description" : "Kattintson a leírás kibontásához",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Létrehozva: {created}\n* Utoljára módosítva: {lastMod}\n* {nbAttachments} melléklet\n* {nbComments} megjegyzés",
"{nbCards} cards" : "{nbCards} kártya",
"No upcoming cards" : "Nincsenek közelgő kártyák",

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

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Chyba pri presune nástenky na {user}",
"Add a new list" : "Pridať nový zoznam",
"Archive all cards" : "Archivovať všetky karty",
"Unarchive all cards" : "Zrušiť archiváciu všetkých kariet",
"Delete list" : "Vymazať zoznam",
"Archive all cards in this list" : "Archivovať všetky karty v tomto zozname",
"Unarchive all cards in this list" : "Zrušiť archiváciu všetkých kariet v tomto zozname",
"Add a new card" : "Pridať novú kartu",
"Card name" : "Názov karty",
"List deleted" : "Zoznam bol vymazaný",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Vám sprístupnené",
"Deck settings" : "Nastavenia paluby",
"Use bigger card view" : "Použiť väčšie zobrazenie karty",
"Show card ID badge" : "Ukázať ID karty",
"Show boards in calendar/tasks" : "Zobrazovať nástenky v kalendári/úlohách",
"Limit deck usage of groups" : "Obmedziť použitie Deck na skupiny",
"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." : "Obmedzenie Násteniek bráni používateľom, ktorí nie sú súčasťou týchto skupín, aby si vytvárali vlastné nástenky. Môžu však stále pracovať na nástenkách, ktoré im niekto sprístupní.",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Chyba pri presune nástenky na {user}",
"Add a new list" : "Pridať nový zoznam",
"Archive all cards" : "Archivovať všetky karty",
"Unarchive all cards" : "Zrušiť archiváciu všetkých kariet",
"Delete list" : "Vymazať zoznam",
"Archive all cards in this list" : "Archivovať všetky karty v tomto zozname",
"Unarchive all cards in this list" : "Zrušiť archiváciu všetkých kariet v tomto zozname",
"Add a new card" : "Pridať novú kartu",
"Card name" : "Názov karty",
"List deleted" : "Zoznam bol vymazaný",
@@ -258,6 +260,7 @@
"Shared with you" : "Vám sprístupnené",
"Deck settings" : "Nastavenia paluby",
"Use bigger card view" : "Použiť väčšie zobrazenie karty",
"Show card ID badge" : "Ukázať ID karty",
"Show boards in calendar/tasks" : "Zobrazovať nástenky v kalendári/úlohách",
"Limit deck usage of groups" : "Obmedziť použitie Deck na skupiny",
"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." : "Obmedzenie Násteniek bráni používateľom, ktorí nie sú súčasťou týchto skupín, aby si vytvárali vlastné nástenky. Môžu však stále pracovať na nástenkách, ktoré im niekto sprístupní.",

View File

@@ -260,7 +260,7 @@ OC.L10N.register(
"All boards" : "Alla tavlor",
"Archived boards" : "Arkiverade tavlor",
"Shared with you" : "Delad med dig",
"Deck settings" : "Deckinställningar",
"Deck settings" : "Deck-inställningar",
"Use bigger card view" : "Visa större kort",
"Show card ID badge" : "Visa kortets ID-märke",
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",

View File

@@ -258,7 +258,7 @@
"All boards" : "Alla tavlor",
"Archived boards" : "Arkiverade tavlor",
"Shared with you" : "Delad med dig",
"Deck settings" : "Deckinställningar",
"Deck settings" : "Deck-inställningar",
"Use bigger card view" : "Visa större kort",
"Show card ID badge" : "Visa kortets ID-märke",
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",

View File

@@ -11,7 +11,7 @@ OC.L10N.register(
"{user} has shared the board {board} with {acl}" : "{user} поділився дошкою {board} з {acl}",
"You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}",
"{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}",
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} у {board}",
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} на {board}",
"{user} has renamed the board {before} to {board}" : "{user} змінив назву дошки {before} на {board}",
"You have archived the board {board}" : "Ви заархівували дошку {board}",
"{user} has archived the board {before}" : "{user} заархівував дошку {before}",
@@ -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" : "Виберіть файл для надання доступу",
@@ -190,7 +190,7 @@ OC.L10N.register(
"Something went wrong" : "От халепа!",
"Maximum file size of {size} exceeded" : "Досягнуто максимальний розмір файлу {size}",
"Error creating the share" : "Помилка створення спільного доступу",
"Share" : "Поділитися",
"Share" : "Спільний доступ",
"This week" : "Цього тижня"
},
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");

View File

@@ -9,7 +9,7 @@
"{user} has shared the board {board} with {acl}" : "{user} поділився дошкою {board} з {acl}",
"You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}",
"{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}",
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} у {board}",
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} на {board}",
"{user} has renamed the board {before} to {board}" : "{user} змінив назву дошки {before} на {board}",
"You have archived the board {board}" : "Ви заархівували дошку {board}",
"{user} has archived the board {before}" : "{user} заархівував дошку {before}",
@@ -123,7 +123,7 @@
"Upload new files" : "Додати файл",
"Share from Files" : "Відкрити Файли",
"Add this attachment" : "Долучити вкладення",
"Download" : "Завантажити",
"Download" : "Звантажити",
"Delete Attachment" : "Забрати вкладення",
"Restore Attachment" : "Відновити вкладення",
"File to share" : "Виберіть файл для надання доступу",
@@ -188,7 +188,7 @@
"Something went wrong" : "От халепа!",
"Maximum file size of {size} exceeded" : "Досягнуто максимальний розмір файлу {size}",
"Error creating the share" : "Помилка створення спільного доступу",
"Share" : "Поділитися",
"Share" : "Спільний доступ",
"This week" : "Цього тижня"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
}

View File

@@ -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']);
}
@@ -121,9 +124,13 @@ class DeckProvider implements IProvider {
'link' => $this->deckUrl('/board/' . $event->getObjectId()),
];
$params['board'] = $board;
$event->setLink($this->deckUrl('/board/' . $event->getObjectId()));
}
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']);
}
@@ -134,8 +141,8 @@ class DeckProvider implements IProvider {
];
if (array_key_exists('board', $subjectParams)) {
$archivedParam = $subjectParams['card']['archived'] ? 'archived/' : '';
$card['link'] = $this->cardService->getRedirectUrlForCard($event->getObjectId());
$event->setLink($card['link']);
}
$params['card'] = $card;
}

View File

@@ -100,12 +100,15 @@ class ResourceProvider implements IProvider {
if ($board->getOwner() === $user->getUID()) {
return true;
}
if ($board->getAcl() === null) {
return false;
}
return $this->permissionService->userCan($board->getAcl(), Acl::PERMISSION_READ, $user->getUID());
}
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

@@ -127,6 +127,9 @@ class ResourceProviderCard implements IProvider {
if ($board->getOwner() === $user->getUID()) {
return true;
}
if ($board->getAcl() === null) {
return false;
}
return $this->permissionService->userCan($board->getAcl(), Acl::PERMISSION_READ, $user->getUID());
}

View File

@@ -52,12 +52,6 @@ class Calendar extends ExternalCalendar {
$this->board = $board;
$this->principalUri = $principalUri;
if ($board) {
$this->children = $this->backend->getChildren($board->getId());
} else {
$this->children = [];
}
}
public function getOwner() {
@@ -122,7 +116,7 @@ class Calendar extends ExternalCalendar {
public function getChild($name) {
if ($this->childExists($name)) {
$card = array_values(array_filter(
$this->children,
$this->getBackendChildren(),
function ($card) use (&$name) {
return $card->getCalendarPrefix() . '-' . $card->getId() . '.ics' === $name;
}
@@ -137,7 +131,7 @@ class Calendar extends ExternalCalendar {
public function getChildren() {
$childNames = array_map(function ($card) {
return $card->getCalendarPrefix() . '-' . $card->getId() . '.ics';
}, $this->children);
}, $this->getBackendChildren());
$children = [];
@@ -148,9 +142,23 @@ class Calendar extends ExternalCalendar {
return $children;
}
private function getBackendChildren() {
if ($this->children) {
return $this->children;
}
if ($this->board) {
$this->children = $this->backend->getChildren($this->board->getId());
} else {
$this->children = [];
}
return $this->children;
}
public function childExists($name) {
return count(array_filter(
$this->children,
$this->getBackendChildren(),
function ($card) use (&$name) {
return $card->getCalendarPrefix() . '-' . $card->getId() . '.ics' === $name;
}

View File

@@ -67,13 +67,13 @@ class AttachmentMapper extends DeckMapper implements IPermissionMapper {
$row = $cursor->fetch(PDO::FETCH_ASSOC);
if ($row === false) {
$cursor->closeCursor();
throw new DoesNotExistException('Did expect one result but found none when executing' . $qb);
throw new DoesNotExistException('Did expect one result but found none when executing query: ' . $qb->getSQL());
}
$row2 = $cursor->fetch();
$cursor->closeCursor();
if ($row2 !== false) {
throw new MultipleObjectsReturnedException('Did not expect more than one result when executing' . $qb);
throw new MultipleObjectsReturnedException('Did not expect more than one result when executing query: ' . $qb->getSQL());
}
return $this->mapRowToEntity($row);
@@ -89,7 +89,7 @@ class AttachmentMapper extends DeckMapper implements IPermissionMapper {
$row = $cursor->fetch(PDO::FETCH_ASSOC);
if ($row === false) {
$cursor->closeCursor();
throw new DoesNotExistException('Did expect one result but found none when executing' . $qb);
throw new DoesNotExistException('Did expect one result but found none when executing query: ' . $qb->getSQL());
}
$cursor->closeCursor();
return $this->mapRowToEntity($row);

View File

@@ -28,8 +28,10 @@ class Board extends RelationalEntity {
protected $owner;
protected $color;
protected $archived = false;
protected $labels = [];
protected $acl = [];
/** @var Label[]|null */
protected $labels = null;
/** @var Acl[]|null */
protected $acl = null;
protected $permissions = [];
protected $users = [];
protected $shared;
@@ -61,6 +63,10 @@ class Board extends RelationalEntity {
if ($this->shared === -1) {
unset($json['shared']);
}
// FIXME: Ideally the API responses should follow the internal data structure and return null if the labels/acls have not been fetched from the db
// however this would be a breaking change for consumers of the API
$json['acl'] = $this->acl ?? [];
$json['labels'] = $this->labels ?? [];
return $json;
}
@@ -68,21 +74,27 @@ class Board extends RelationalEntity {
* @param Label[] $labels
*/
public function setLabels($labels) {
foreach ($labels as $l) {
$this->labels[] = $l;
}
$this->labels = $labels;
}
/**
* @param Acl[] $acl
*/
public function setAcl($acl) {
foreach ($acl as $a) {
$this->acl[] = $a;
}
$this->acl = $acl;
}
public function getETag() {
return md5((string)$this->getLastModified());
}
/** @returns Acl[]|null */
public function getAcl(): ?array {
return $this->acl;
}
/** @returns Label[]|null */
public function getLabels(): ?array {
return $this->labels;
}
}

View File

@@ -26,13 +26,14 @@ namespace OCA\Deck\Db;
use OC\Cache\CappedMemoryCache;
use OCA\Deck\Service\CirclesService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\QBMapper;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\IUserManager;
use OCP\IGroupManager;
use Psr\Log\LoggerInterface;
class BoardMapper extends DeckMapper implements IPermissionMapper {
class BoardMapper extends QBMapper implements IPermissionMapper {
private $labelMapper;
private $aclMapper;
private $stackMapper;
@@ -43,6 +44,8 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
/** @var CappedMemoryCache */
private $userBoardCache;
/** @var CappedMemoryCache */
private $boardCache;
public function __construct(
IDBConnection $db,
@@ -64,6 +67,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
$this->logger = $logger;
$this->userBoardCache = new CappedMemoryCache();
$this->boardCache = new CappedMemoryCache();
}
@@ -71,40 +75,54 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @param $id
* @param bool $withLabels
* @param bool $withAcl
* @return \OCP\AppFramework\Db\Entity
* @return Board
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
* @throws DoesNotExistException
*/
public function find($id, $withLabels = false, $withAcl = false) {
$sql = 'SELECT id, title, owner, color, archived, deleted_at, last_modified FROM `*PREFIX*deck_boards` ' .
'WHERE `id` = ?';
$board = $this->findEntity($sql, [$id]);
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);
}
// FIXME is this necessary? it was NOT done with the old mapper
// $this->mapOwner($board);
// Add labels
if ($withLabels) {
if ($withLabels && $this->boardCache[$id]->getLabels() === null) {
$labels = $this->labelMapper->findAll($id);
$board->setLabels($labels);
$this->boardCache[$id]->setLabels($labels);
}
// Add acl
if ($withAcl) {
if ($withAcl && $this->boardCache[$id]->getAcl() === null) {
$acl = $this->aclMapper->findAll($id);
$board->setAcl($acl);
$this->boardCache[$id]->setAcl($acl);
}
return $board;
return $this->boardCache[$id];
}
public function findAllForUser(string $userId, int $since = -1, $includeArchived = true): array {
$useCache = ($since === -1 && $includeArchived === true);
public function findAllForUser(string $userId, ?int $since = null, bool $includeArchived = true, ?int $before = null,
?string $term = null): array {
$useCache = ($since === -1 && $includeArchived === true && $before === null && $term === null);
if (!isset($this->userBoardCache[$userId]) || !$useCache) {
$groups = $this->groupManager->getUserGroupIds(
$this->userManager->get($userId)
);
$userBoards = $this->findAllByUser($userId, null, null, $since, $includeArchived);
$groupBoards = $this->findAllByGroups($userId, $groups, null, null, $since, $includeArchived);
$circleBoards = $this->findAllByCircles($userId, null, null, $since, $includeArchived);
$userBoards = $this->findAllByUser($userId, null, null, $since, $includeArchived, $before, $term);
$groupBoards = $this->findAllByGroups($userId, $groups, null, null, $since, $includeArchived, $before, $term);
$circleBoards = $this->findAllByCircles($userId, null, null, $since, $includeArchived, $before, $term);
$allBoards = array_unique(array_merge($userBoards, $groupBoards, $circleBoards));
foreach ($allBoards as $board) {
$this->boardCache[$board->getId()] = $board;
}
if ($useCache) {
$this->userBoardCache[$userId] = $allBoards;
}
@@ -121,19 +139,91 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @param null $offset
* @return array
*/
public function findAllByUser($userId, $limit = null, $offset = null, $since = -1, $includeArchived = true) {
// FIXME: One moving to QBMapper we should allow filtering the boards probably by method chaining for additional where clauses
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?';
public function findAllByUser(string $userId, ?int $limit = null, ?int $offset = null, ?int $since = null,
bool $includeArchived = true, ?int $before = null, ?string $term = null) {
// FIXME this used to be a UNION to get boards owned by $userId and the user shares in one single query
// Is it possible with the query builder?
$qb = $this->db->getQueryBuilder();
$qb->select('id', 'title', 'owner', 'color', 'archived', 'deleted_at', 'last_modified')
// this does not work in MySQL/PostgreSQL
//->selectAlias('0', 'shared')
->from('deck_boards', 'b')
->where($qb->expr()->eq('owner', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
$qb->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
->andWhere($qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)));
}
$sql .= ' UNION ' .
'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?';
if ($since !== null) {
$qb->andWhere($qb->expr()->gt('last_modified', $qb->createNamedParameter($since, IQueryBuilder::PARAM_INT)));
}
if ($before !== null) {
$qb->andWhere($qb->expr()->lt('last_modified', $qb->createNamedParameter($before, IQueryBuilder::PARAM_INT)));
}
if ($term !== null) {
$qb->andWhere(
$qb->expr()->iLike(
'title',
$qb->createNamedParameter(
'%' . $this->db->escapeLikeParameter($term) . '%',
IQueryBuilder::PARAM_STR
)
)
);
}
$qb->orderBy('b.id');
if ($limit !== null) {
$qb->setMaxResults($limit);
}
if ($offset !== null) {
$qb->setFirstResult($offset);
}
$entries = $this->findEntities($qb);
foreach ($entries as $entry) {
$entry->setShared(0);
}
// shared with user
$qb->resetQueryParts();
$qb->select('b.id', 'title', 'owner', 'color', 'archived', 'deleted_at', 'last_modified')
//->selectAlias('1', 'shared')
->from('deck_boards', 'b')
->innerJoin('b', 'deck_board_acl', 'acl', $qb->expr()->eq('b.id', 'acl.board_id'))
->where($qb->expr()->eq('acl.participant', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)))
->andWhere($qb->expr()->eq('acl.type', $qb->createNamedParameter(Acl::PERMISSION_TYPE_USER, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->neq('b.owner', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
$qb->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
->andWhere($qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)));
}
$entries = $this->findEntities($sql, [$userId, $since, $userId, Acl::PERMISSION_TYPE_USER, $userId, $since], $limit, $offset);
if ($since !== null) {
$qb->andWhere($qb->expr()->gt('last_modified', $qb->createNamedParameter($since, IQueryBuilder::PARAM_INT)));
}
if ($before !== null) {
$qb->andWhere($qb->expr()->lt('last_modified', $qb->createNamedParameter($before, IQueryBuilder::PARAM_INT)));
}
if ($term !== null) {
$qb->andWhere(
$qb->expr()->iLike(
'title',
$qb->createNamedParameter(
'%' . $this->db->escapeLikeParameter($term) . '%',
IQueryBuilder::PARAM_STR
)
)
);
}
$qb->orderBy('b.id');
if ($limit !== null) {
$qb->setMaxResults($limit);
}
if ($offset !== null) {
$qb->setFirstResult($offset);
}
$sharedEntries = $this->findEntities($qb);
foreach ($sharedEntries as $entry) {
$entry->setShared(1);
}
$entries = array_merge($entries, $sharedEntries);
/* @var Board $entry */
foreach ($entries as $entry) {
$acl = $this->aclMapper->findAll($entry->id);
@@ -142,9 +232,19 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
return $entries;
}
public function findAllByOwner(string $userId, int $limit = null, int $offset = null) {
$sql = 'SELECT * FROM `*PREFIX*deck_boards` WHERE owner = ?';
return $this->findEntities($sql, [$userId], $limit, $offset);
public function findAllByOwner(string $userId, ?int $limit = null, ?int $offset = null) {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from('deck_boards')
->where($qb->expr()->eq('owner', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)))
->orderBy('id');
if ($limit !== null) {
$qb->setMaxResults($limit);
}
if ($offset !== null) {
$qb->setFirstResult($offset);
}
return $this->findEntities($qb);
}
/**
@@ -156,23 +256,57 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @param null $offset
* @return array
*/
public function findAllByGroups($userId, $groups, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
public function findAllByGroups(string $userId, array $groups, ?int $limit = null, ?int $offset = null, ?int $since = null,
bool $includeArchived = true, ?int $before = null, ?string $term = null) {
if (count($groups) <= 0) {
return [];
}
$sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
'INNER JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE owner != ? AND type=? AND (';
$qb = $this->db->getQueryBuilder();
$qb->select('b.id', 'title', 'owner', 'color', 'archived', 'deleted_at', 'last_modified')
//->selectAlias('2', 'shared')
->from('deck_boards', 'b')
->innerJoin('b', 'deck_board_acl', 'acl', $qb->expr()->eq('b.id', 'acl.board_id'))
->where($qb->expr()->eq('acl.type', $qb->createNamedParameter(Acl::PERMISSION_TYPE_GROUP, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->neq('b.owner', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
$or = $qb->expr()->orx();
for ($i = 0, $iMax = count($groups); $i < $iMax; $i++) {
$sql .= 'acl.participant = ? ';
if (count($groups) > 1 && $i < count($groups) - 1) {
$sql .= ' OR ';
}
$or->add(
$qb->expr()->eq('acl.participant', $qb->createNamedParameter($groups[$i], IQueryBuilder::PARAM_STR))
);
}
$sql .= ')';
$qb->andWhere($or);
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
$qb->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
->andWhere($qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)));
}
if ($since !== null) {
$qb->andWhere($qb->expr()->gt('last_modified', $qb->createNamedParameter($since, IQueryBuilder::PARAM_INT)));
}
if ($before !== null) {
$qb->andWhere($qb->expr()->lt('last_modified', $qb->createNamedParameter($before, IQueryBuilder::PARAM_INT)));
}
if ($term !== null) {
$qb->andWhere(
$qb->expr()->iLike(
'title',
$qb->createNamedParameter(
'%' . $this->db->escapeLikeParameter($term) . '%',
IQueryBuilder::PARAM_STR
)
)
);
}
$qb->orderBy('b.id');
if ($limit !== null) {
$qb->setMaxResults($limit);
}
if ($offset !== null) {
$qb->setFirstResult($offset);
}
$entries = $this->findEntities($qb);
foreach ($entries as $entry) {
$entry->setShared(2);
}
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_GROUP], $groups), $limit, $offset);
/* @var Board $entry */
foreach ($entries as $entry) {
$acl = $this->aclMapper->findAll($entry->id);
@@ -181,25 +315,59 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
return $entries;
}
public function findAllByCircles($userId, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
public function findAllByCircles(string $userId, ?int $limit = null, ?int $offset = null, ?int $since = null,
bool $includeArchived = true, ?int $before = null, ?string $term = null) {
$circles = $this->circlesService->getUserCircles($userId);
if (count($circles) === 0) {
return [];
}
$sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
'INNER JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE owner != ? AND type=? AND (';
$qb = $this->db->getQueryBuilder();
$qb->select('b.id', 'title', 'owner', 'color', 'archived', 'deleted_at', 'last_modified')
//->selectAlias('2', 'shared')
->from('deck_boards', 'b')
->innerJoin('b', 'deck_board_acl', 'acl', $qb->expr()->eq('b.id', 'acl.board_id'))
->where($qb->expr()->eq('acl.type', $qb->createNamedParameter(Acl::PERMISSION_TYPE_CIRCLE, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->neq('b.owner', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
$or = $qb->expr()->orx();
for ($i = 0, $iMax = count($circles); $i < $iMax; $i++) {
$sql .= 'acl.participant = ? ';
if (count($circles) > 1 && $i < count($circles) - 1) {
$sql .= ' OR ';
}
$or->add(
$qb->expr()->eq('acl.participant', $qb->createNamedParameter($circles[$i], IQueryBuilder::PARAM_STR))
);
}
$sql .= ')';
$qb->andWhere($or);
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
$qb->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
->andWhere($qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)));
}
if ($since !== null) {
$qb->andWhere($qb->expr()->gt('last_modified', $qb->createNamedParameter($since, IQueryBuilder::PARAM_INT)));
}
if ($before !== null) {
$qb->andWhere($qb->expr()->lt('last_modified', $qb->createNamedParameter($before, IQueryBuilder::PARAM_INT)));
}
if ($term !== null) {
$qb->andWhere(
$qb->expr()->iLike(
'title',
$qb->createNamedParameter(
'%' . $this->db->escapeLikeParameter($term) . '%',
IQueryBuilder::PARAM_STR
)
)
);
}
$qb->orderBy('b.id');
if ($limit !== null) {
$qb->setMaxResults($limit);
}
if ($offset !== null) {
$qb->setFirstResult($offset);
}
$entries = $this->findEntities($qb);
foreach ($entries as $entry) {
$entry->setShared(2);
}
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_CIRCLE], $circles), $limit, $offset);
/* @var Board $entry */
foreach ($entries as $entry) {
$acl = $this->aclMapper->findAll($entry->id);
@@ -208,21 +376,26 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
return $entries;
}
public function findAll() {
$sql = 'SELECT id from *PREFIX*deck_boards;';
return $this->findEntities($sql);
public function findAll(): array {
$qb = $this->db->getQueryBuilder();
$qb->select('id')
->from('deck_boards');
return $this->findEntities($qb);
}
public function findToDelete() {
// add buffer of 5 min
$timeLimit = time() - (60 * 5);
$sql = 'SELECT id, title, owner, color, archived, deleted_at, last_modified FROM `*PREFIX*deck_boards` ' .
'WHERE `deleted_at` > 0 AND `deleted_at` < ?';
return $this->findEntities($sql, [$timeLimit]);
$qb = $this->db->getQueryBuilder();
$qb->select('id', 'title', 'owner', 'color', 'archived', 'deleted_at', 'last_modified')
->from('deck_boards')
->where($qb->expr()->gt('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->lt('deleted_at', $qb->createNamedParameter($timeLimit, IQueryBuilder::PARAM_INT)));
return $this->findEntities($qb);
}
public function delete(/** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */
\OCP\AppFramework\Db\Entity $entity) {
\OCP\AppFramework\Db\Entity $entity): \OCP\AppFramework\Db\Entity {
// delete acl
$acl = $this->aclMapper->findAll($entity->getId());
foreach ($acl as $item) {
@@ -323,6 +496,11 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* Reset cache for a given board or a given user
*/
public function flushCache(?int $boardId = null, ?string $userId = null) {
if ($boardId) {
unset($this->boardCache[$boardId]);
} else {
$this->boardCache = null;
}
if ($userId) {
unset($this->userBoardCache[$userId]);
} else {

View File

@@ -30,6 +30,8 @@ use OCA\Deck\Search\Query\SearchQuery;
use OCP\AppFramework\Db\Entity;
use OCP\AppFramework\Db\QBMapper;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\ICache;
use OCP\ICacheFactory;
use OCP\IDBConnection;
use OCP\IGroupManager;
use OCP\IUser;
@@ -46,6 +48,8 @@ class CardMapper extends QBMapper implements IPermissionMapper {
private $groupManager;
/** @var IManager */
private $notificationManager;
/** @var ICache */
private $cache;
private $databaseType;
private $database4ByteSupport;
@@ -55,6 +59,7 @@ class CardMapper extends QBMapper implements IPermissionMapper {
IUserManager $userManager,
IGroupManager $groupManager,
IManager $notificationManager,
ICacheFactory $cacheFactory,
$databaseType = 'sqlite3',
$database4ByteSupport = true
) {
@@ -63,6 +68,7 @@ class CardMapper extends QBMapper implements IPermissionMapper {
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->notificationManager = $notificationManager;
$this->cache = $cacheFactory->createDistributed('deck-cardMapper');
$this->databaseType = $databaseType;
$this->database4ByteSupport = $database4ByteSupport;
}
@@ -75,7 +81,9 @@ class CardMapper extends QBMapper implements IPermissionMapper {
$description = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $entity->getDescription());
$entity->setDescription($description);
}
return parent::insert($entity);
$entity = parent::insert($entity);
$this->cache->remove('findBoardId:' . $entity->getId());
return $entity;
}
public function update(Entity $entity, $updateModified = true): Entity {
@@ -107,6 +115,10 @@ class CardMapper extends QBMapper implements IPermissionMapper {
} catch (Exception $e) {
}
}
// Invalidate cache when the card may be moved to a different board
if (isset($updatedFields['stackId'])) {
$this->cache->remove('findBoardId:' . $entity->getId());
}
return parent::update($entity);
}
@@ -181,6 +193,7 @@ class CardMapper extends QBMapper implements IPermissionMapper {
->from('deck_cards', 'c')
->join('c', 'deck_stacks', 's', 's.id = c.stack_id')
->where($qb->expr()->eq('s.board_id', $qb->createNamedParameter($boardId)))
->andWhere($qb->expr()->eq('c.archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
->andWhere($qb->expr()->eq('c.deleted_at', $qb->createNamedParameter('0')))
->orderBy('c.duedate')
->setMaxResults($limit)
@@ -479,8 +492,8 @@ class CardMapper extends QBMapper implements IPermissionMapper {
}
return $qb->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE);
}
public function searchRaw($boardIds, $term, $limit = null, $offset = null) {
$qb = $this->queryCardsByBoards($boardIds)
@@ -506,9 +519,8 @@ class CardMapper extends QBMapper implements IPermissionMapper {
}
public function delete(Entity $entity): Entity {
// delete assigned labels
$this->labelMapper->deleteLabelAssignmentsForCard($entity->getId());
// delete card
$this->cache->remove('findBoardId:' . $entity->getId());
return parent::delete($entity);
}
@@ -547,11 +559,22 @@ class CardMapper extends QBMapper implements IPermissionMapper {
}
public function findBoardId($id): ?int {
$sql = 'SELECT id FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_stacks` WHERE id IN (SELECT stack_id FROM `*PREFIX*deck_cards` WHERE id = ?))';
$stmt = $this->db->prepare($sql);
$stmt->bindParam(1, $id, \PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchColumn() ?? null;
$result = $this->cache->get('findBoardId:' . $id);
if ($result === null) {
try {
$qb = $this->db->getQueryBuilder();
$qb->select('board_id')
->from('deck_stacks', 's')
->innerJoin('s', 'deck_cards', 'c', 'c.stack_id = s.id')
->where($qb->expr()->eq('c.id', $qb->createNamedParameter($id)));
$queryResult = $qb->executeQuery();
$result = $queryResult->fetchOne();
} catch (\Exception $e) {
$result = false;
}
$this->cache->set('findBoardId:' . $id, $result);
}
return $result !== false ? $result : null;
}
public function mapOwner(Card &$card) {

View File

@@ -35,6 +35,7 @@ use OCA\Deck\Event\CardUpdatedEvent;
use OCA\Deck\NoPermissionException;
use OCA\Deck\NotFoundException;
use OCA\Deck\Notification\NotificationHelper;
use OCA\Deck\Validators\AssignmentServiceValidator;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\Entity;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
@@ -76,6 +77,11 @@ class AssignmentService {
private $eventDispatcher;
/** @var string|null */
private $currentUser;
/**
* @var AssignmentServiceValidator
*/
private $assignmentServiceValidator;
public function __construct(
PermissionService $permissionService,
@@ -86,8 +92,10 @@ class AssignmentService {
ActivityManager $activityManager,
ChangeHelper $changeHelper,
IEventDispatcher $eventDispatcher,
AssignmentServiceValidator $assignmentServiceValidator,
$userId
) {
$this->assignmentServiceValidator = $assignmentServiceValidator;
$this->permissionService = $permissionService;
$this->cardMapper = $cardMapper;
$this->assignedUsersMapper = $assignedUsersMapper;
@@ -96,6 +104,8 @@ class AssignmentService {
$this->changeHelper = $changeHelper;
$this->activityManager = $activityManager;
$this->eventDispatcher = $eventDispatcher;
$this->assignmentServiceValidator->check(compact('userId'));
$this->currentUser = $userId;
}
@@ -109,13 +119,7 @@ class AssignmentService {
* @throws DoesNotExistException
*/
public function assignUser($cardId, $userId, int $type = Assignment::TYPE_USER) {
if (is_numeric($cardId) === false) {
throw new BadRequestException('card id must be a number');
}
if ($userId === false || $userId === null) {
throw new BadRequestException('user id must be provided');
}
$this->assignmentServiceValidator->check(compact('cardId', 'userId'));
if ($type !== Assignment::TYPE_USER && $type !== Assignment::TYPE_GROUP) {
throw new BadRequestException('Invalid type provided for assignemnt');
@@ -168,16 +172,9 @@ class AssignmentService {
* @throws MultipleObjectsReturnedException
*/
public function unassignUser($cardId, $userId, $type = 0) {
$this->assignmentServiceValidator->check(compact('cardId', 'userId'));
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
if (is_numeric($cardId) === false) {
throw new BadRequestException('card id must be a number');
}
if ($userId === false || $userId === null) {
throw new BadRequestException('user must be provided');
}
$assignments = $this->assignedUsersMapper->findAll($cardId);
foreach ($assignments as $assignment) {
if ($assignment->getParticipant() === $userId && $assignment->getType() === $type) {

View File

@@ -36,6 +36,7 @@ use OCA\Deck\NoPermissionException;
use OCA\Deck\NotFoundException;
use OCA\Deck\Cache\AttachmentCacheHelper;
use OCA\Deck\StatusException;
use OCA\Deck\Validators\AttachmentServiceValidator;
use OCP\AppFramework\Db\IMapperException;
use OCP\AppFramework\Http\Response;
use OCP\IL10N;
@@ -58,8 +59,10 @@ class AttachmentService {
private $activityManager;
/** @var ChangeHelper */
private $changeHelper;
/** @var AttachmentServiceValidator */
private $attachmentServiceValidator;
public function __construct(AttachmentMapper $attachmentMapper, CardMapper $cardMapper, ChangeHelper $changeHelper, PermissionService $permissionService, Application $application, AttachmentCacheHelper $attachmentCacheHelper, $userId, IL10N $l10n, ActivityManager $activityManager) {
public function __construct(AttachmentMapper $attachmentMapper, CardMapper $cardMapper, ChangeHelper $changeHelper, PermissionService $permissionService, Application $application, AttachmentCacheHelper $attachmentCacheHelper, $userId, IL10N $l10n, ActivityManager $activityManager, AttachmentServiceValidator $attachmentServiceValidator) {
$this->attachmentMapper = $attachmentMapper;
$this->cardMapper = $cardMapper;
$this->permissionService = $permissionService;
@@ -69,6 +72,7 @@ class AttachmentService {
$this->l10n = $l10n;
$this->activityManager = $activityManager;
$this->changeHelper = $changeHelper;
$this->attachmentServiceValidator = $attachmentServiceValidator;
// Register shipped attachment services
// TODO: move this to a plugin based approach once we have different types of attachments
@@ -174,17 +178,7 @@ class AttachmentService {
* @throws BadRequestException
*/
public function create($cardId, $type, $data) {
if (is_numeric($cardId) === false) {
throw new BadRequestException('card id must be a number');
}
if ($type === false || $type === null) {
throw new BadRequestException('type must be provided');
}
if ($data === false || $data === null) {
//throw new BadRequestException('data must be provided');
}
$this->attachmentServiceValidator->check(compact('cardId', 'type'));
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
@@ -269,6 +263,8 @@ class AttachmentService {
* @throws NoPermissionException
*/
public function update($cardId, $attachmentId, $data, $type = 'deck_file') {
$this->attachmentServiceValidator->check(compact('cardId', 'type', 'data'));
try {
$service = $this->getService($type);
} catch (InvalidAttachmentType $e) {
@@ -290,9 +286,6 @@ class AttachmentService {
}
}
if ($data === false || $data === null) {
//throw new BadRequestException('data must be provided');
}
try {
$attachment = $this->attachmentMapper->find($attachmentId);
} catch (\Exception $e) {

View File

@@ -52,6 +52,7 @@ use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper;
use OCP\IUserManager;
use OCA\Deck\BadRequestException;
use OCA\Deck\Validators\BoardServiceValidator;
use OCP\IURLGenerator;
class BoardService {
@@ -75,6 +76,7 @@ class BoardService {
private $boardsCache = null;
private $urlGenerator;
private $boardServiceValidator;
public function __construct(
@@ -94,6 +96,7 @@ class BoardService {
IEventDispatcher $eventDispatcher,
ChangeHelper $changeHelper,
IURLGenerator $urlGenerator,
BoardServiceValidator $boardServiceValidator,
$userId
) {
$this->boardMapper = $boardMapper;
@@ -113,6 +116,7 @@ class BoardService {
$this->userId = $userId;
$this->urlGenerator = $urlGenerator;
$this->cardMapper = $cardMapper;
$this->boardServiceValidator = $boardServiceValidator;
}
/**
@@ -122,13 +126,15 @@ class BoardService {
*/
public function setUserId(string $userId): void {
$this->userId = $userId;
$this->permissionService->setUserId($userId);
}
/**
* Get all boards that are shared with a user, their groups or circles
*/
public function getUserBoards(int $since = -1, bool $includeArchived = true): array {
return $this->boardMapper->findAllForUser($this->userId, $since, $includeArchived);
public function getUserBoards(?int $since = null, bool $includeArchived = true, ?int $before = null,
?string $term = null): array {
return $this->boardMapper->findAllForUser($this->userId, $since, $includeArchived, $before, $term);
}
/**
@@ -175,7 +181,8 @@ 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];
}
@@ -185,11 +192,13 @@ 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);
foreach ($board->getAcl() as &$acl) {
if ($acl !== null) {
$this->boardMapper->mapAcl($acl);
if ($board->getAcl() !== null) {
foreach ($board->getAcl() as $acl) {
if ($acl !== null) {
$this->boardMapper->mapAcl($acl);
}
}
}
$permissions = $this->permissionService->matchPermissions($board);
@@ -228,9 +237,7 @@ class BoardService {
* @throws BadRequestException
*/
public function isArchived($mapper, $id) {
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
$this->boardServiceValidator->check(compact('id'));
try {
$boardId = $id;
@@ -257,13 +264,7 @@ class BoardService {
* @throws BadRequestException
*/
public function isDeleted($mapper, $id) {
if ($mapper === false || $mapper === null) {
throw new BadRequestException('mapper must be provided');
}
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
$this->boardServiceValidator->check(compact('mapper', 'id'));
try {
$boardId = $id;
@@ -289,17 +290,7 @@ class BoardService {
* @throws BadRequestException
*/
public function create($title, $userId, $color) {
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if ($userId === false || $userId === null) {
throw new BadRequestException('userId must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
$this->boardServiceValidator->check(compact('title', 'userId', 'color'));
if (!$this->permissionService->canCreate()) {
throw new NoPermissionException('Creating boards has been disabled for your account.');
@@ -350,9 +341,7 @@ class BoardService {
* @throws BadRequestException
*/
public function delete($id) {
if (is_numeric($id) === false) {
throw new BadRequestException('board id must be a number');
}
$this->boardServiceValidator->check(compact('id'));
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
@@ -375,12 +364,10 @@ class BoardService {
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
*/
public function deleteUndo($id) {
if (is_numeric($id) === false) {
throw new BadRequestException('board id must be a number');
}
$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);
@@ -398,12 +385,10 @@ class BoardService {
* @throws BadRequestException
*/
public function deleteForce($id) {
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
$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;
@@ -421,21 +406,7 @@ class BoardService {
* @throws BadRequestException
*/
public function update($id, $title, $color, $archived) {
if (is_numeric($id) === false) {
throw new BadRequestException('board id must be a number');
}
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
if (is_bool($archived) === false) {
throw new BadRequestException('archived must be a boolean');
}
$this->boardServiceValidator->check(compact('id', 'title', 'color', 'archived'));
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
@@ -485,29 +456,7 @@ class BoardService {
* @throws \OCA\Deck\NoPermissionException
*/
public function addAcl($boardId, $type, $participant, $edit, $share, $manage) {
if (is_numeric($boardId) === false) {
throw new BadRequestException('board id must be a number');
}
if ($type === false || $type === null) {
throw new BadRequestException('type must be provided');
}
if ($participant === false || $participant === null) {
throw new BadRequestException('participant must be provided');
}
if ($edit === null) {
throw new BadRequestException('edit must be provided');
}
if ($share === null) {
throw new BadRequestException('share must be provided');
}
if ($manage === null) {
throw new BadRequestException('manage must be provided');
}
$this->boardServiceValidator->check(compact('boardId', 'type', 'participant', 'edit', 'share', 'manage'));
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_SHARE);
[$edit, $share, $manage] = $this->applyPermissions($boardId, $edit, $share, $manage);
@@ -522,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);
@@ -553,21 +502,7 @@ class BoardService {
* @throws BadRequestException
*/
public function updateAcl($id, $edit, $share, $manage) {
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
if ($edit === null) {
throw new BadRequestException('edit must be provided');
}
if ($share === null) {
throw new BadRequestException('share must be provided');
}
if ($manage === null) {
throw new BadRequestException('manage must be provided');
}
$this->boardServiceValidator->check(compact('id', 'edit', 'share', 'manage'));
$this->permissionService->checkPermission($this->aclMapper, $id, Acl::PERMISSION_SHARE);
@@ -639,9 +574,7 @@ class BoardService {
* @throws BadRequestException
*/
public function clone($id, $userId) {
if (is_numeric($id) === false) {
throw new BadRequestException('board id must be a number');
}
$this->boardServiceValidator->check(compact('id', 'userId'));
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_READ);

View File

@@ -43,6 +43,7 @@ use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\StatusException;
use OCA\Deck\BadRequestException;
use OCA\Deck\Validators\CardServiceValidator;
use OCP\Comments\ICommentsManager;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IUserManager;
@@ -65,6 +66,7 @@ class CardService {
private $eventDispatcher;
private $userManager;
private $urlGenerator;
private $cardServiceValidator;
public function __construct(
CardMapper $cardMapper,
@@ -82,6 +84,7 @@ class CardService {
ChangeHelper $changeHelper,
IEventDispatcher $eventDispatcher,
IURLGenerator $urlGenerator,
CardServiceValidator $cardServiceValidator,
$userId
) {
$this->cardMapper = $cardMapper;
@@ -100,6 +103,7 @@ class CardService {
$this->eventDispatcher = $eventDispatcher;
$this->currentUser = $userId;
$this->urlGenerator = $urlGenerator;
$this->cardServiceValidator = $cardServiceValidator;
}
public function enrich($card) {
@@ -122,6 +126,7 @@ class CardService {
}
public function fetchDeleted($boardId) {
$this->cardServiceValidator->check(compact('boardId'));
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
$cards = $this->cardMapper->findDeleted($boardId);
foreach ($cards as $card) {
@@ -187,29 +192,7 @@ class CardService {
* @throws BadrequestException
*/
public function create($title, $stackId, $type, $order, $owner, $description = '', $duedate = null) {
if ($title === 'false' || $title === null) {
throw new BadRequestException('title must be provided');
}
if (mb_strlen($title) > Card::TITLE_MAX_LENGTH) {
throw new BadRequestException('The title cannot exceed 255 characters');
}
if (is_numeric($stackId) === false) {
throw new BadRequestException('stack id must be a number');
}
if ($type === 'false' || $type === null) {
throw new BadRequestException('type must be provided');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
if ($owner === false || $owner === null) {
throw new BadRequestException('owner must be provided');
}
$this->cardServiceValidator->check(compact('title', 'stackId', 'type', 'order', 'owner'));
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->stackMapper, $stackId)) {
@@ -279,31 +262,9 @@ class CardService {
* @throws BadRequestException
*/
public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null) {
if (is_numeric($id) === false) {
throw new BadRequestException('card id must be a number');
}
$this->cardServiceValidator->check(compact('id', 'title', 'stackId', 'type', 'owner', 'order'));
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if (mb_strlen($title) > Card::TITLE_MAX_LENGTH) {
throw new BadRequestException('The title cannot exceed 255 characters');
}
if (is_numeric($stackId) === false) {
throw new BadRequestException('stack id must be a number $$$');
}
if ($type === false || $type === null) {
throw new BadRequestException('type must be provided');
}
if ($owner === false || $owner === null) {
throw new BadRequestException('owner must be provided');
}
$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)) {
@@ -313,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(
@@ -384,17 +353,7 @@ class CardService {
* @throws BadRequestException
*/
public function rename($id, $title) {
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if (mb_strlen($title) > Card::TITLE_MAX_LENGTH) {
throw new BadRequestException('The title cannot exceed 255 characters');
}
$this->cardServiceValidator->check(compact('id', 'title'));
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $id)) {
@@ -425,17 +384,8 @@ class CardService {
* @throws BadRequestException
*/
public function reorder($id, $stackId, $order) {
if (is_numeric($id) === false) {
throw new BadRequestException('card id must be a number');
}
$this->cardServiceValidator->check(compact('id', 'stackId', 'order'));
if (is_numeric($stackId) === false) {
throw new BadRequestException('stack id must be a number');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
@@ -490,9 +440,8 @@ class CardService {
* @throws BadRequestException
*/
public function archive($id) {
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
$this->cardServiceValidator->check(compact('id'));
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $id)) {
@@ -520,9 +469,8 @@ class CardService {
* @throws BadRequestException
*/
public function unarchive($id) {
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
$this->cardServiceValidator->check(compact('id'));
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $id)) {
@@ -549,13 +497,8 @@ class CardService {
* @throws BadRequestException
*/
public function assignLabel($cardId, $labelId) {
if (is_numeric($cardId) === false) {
throw new BadRequestException('card id must be a number');
}
$this->cardServiceValidator->check(compact('cardId', 'labelId'));
if (is_numeric($labelId) === false) {
throw new BadRequestException('label id must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $cardId)) {
@@ -583,13 +526,8 @@ class CardService {
* @throws BadRequestException
*/
public function removeLabel($cardId, $labelId) {
if (is_numeric($cardId) === false) {
throw new BadRequestException('card id must be a number');
}
$this->cardServiceValidator->check(compact('cardId', 'labelId'));
if (is_numeric($labelId) === false) {
throw new BadRequestException('label id must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $cardId)) {

View File

@@ -40,6 +40,8 @@ use Throwable;
class CirclesService {
private $circlesEnabled;
private $userCircleCache = [];
public function __construct(IAppManager $appManager) {
$this->circlesEnabled = $appManager->isEnabledForUser('circles');
}
@@ -70,6 +72,10 @@ class CirclesService {
return false;
}
if (isset($this->userCircleCache[$circleId][$userId])) {
return $this->userCircleCache[$circleId][$userId];
}
try {
/** @var CirclesManager $circlesManager */
$circlesManager = \OC::$server->get(CirclesManager::class);
@@ -77,7 +83,14 @@ class CirclesService {
$circlesManager->startSession($federatedUser);
$circle = $circlesManager->getCircle($circleId);
$member = $circle->getInitiator();
return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER;
$isUserInCircle = $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER;
if (!isset($this->userCircleCache[$circleId])) {
$this->userCircleCache[$circleId] = [];
}
$this->userCircleCache[$circleId][$userId] = $isUserInCircle;
return $isUserInCircle;
} catch (Throwable $e) {
}
return false;

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;
@@ -137,7 +138,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
public function extendData(Attachment $attachment) {
$userFolder = $this->rootFolder->getUserFolder($this->userId);
$share = $this->shareProvider->getShareById($attachment->getId());
$share = $this->getShareForAttachment($attachment);
$files = $userFolder->getById($share->getNode()->getId());
if (count($files) === 0) {
return $attachment;
@@ -160,7 +161,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
// Problem: Folders
/** @psalm-suppress InvalidCatch */
try {
$share = $this->shareProvider->getShareById($attachment->getId());
$share = $this->getShareForAttachment($attachment);
} catch (ShareNotFound $e) {
throw new NotFoundException('File not found');
}
@@ -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');
@@ -240,7 +251,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
}
public function update(Attachment $attachment) {
$share = $this->shareProvider->getShareById($attachment->getId());
$share = $this->getShareForAttachment($attachment);
$target = $share->getNode();
$file = $this->getUploadedFile();
$fileName = $file['name'];
@@ -257,8 +268,13 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
return $attachment;
}
/**
* @throws NoPermissionException
* @throws NotFoundException
* @throws ShareNotFound
*/
public function delete(Attachment $attachment) {
$share = $this->shareProvider->getShareById($attachment->getId());
$share = $this->getShareForAttachment($attachment);
$file = $share->getNode();
$attachment->setData($file->getName());
@@ -281,4 +297,21 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
public function markAsDeleted(Attachment $attachment) {
throw new \Exception('Not implemented');
}
/**
* @throws NoPermissionException
*/
private function getShareForAttachment(Attachment $attachment): IShare {
try {
$share = $this->shareProvider->getShareById($attachment->getId());
} catch (ShareNotFound $e) {
throw new NoPermissionException('No permission to access the attachment from the card');
}
if ((int)$share->getSharedWith() !== (int)$attachment->getCardId()) {
throw new NoPermissionException('No permission to access the attachment from the card');
}
return $share;
}
}

View File

@@ -59,7 +59,7 @@ class FullTextSearchService {
/** @var CardMapper */
private $cardMapper;
public function __construct(
BoardMapper $boardMapper, StackMapper $stackMapper, CardMapper $cardMapper
) {
@@ -187,6 +187,6 @@ class FullTextSearchService {
* @return Board[]
*/
private function getBoardsFromUser(string $userId): array {
return $this->boardMapper->findAllByUser($userId, null, null, -1);
return $this->boardMapper->findAllByUser($userId, null, null, null);
}
}

View File

@@ -29,6 +29,7 @@ use OCA\Deck\Db\Acl;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\StatusException;
use OCA\Deck\BadRequestException;
use OCA\Deck\Validators\LabelServiceValidator;
class LabelService {
@@ -40,12 +41,21 @@ class LabelService {
private $boardService;
/** @var ChangeHelper */
private $changeHelper;
/** @var LabelServiceValidator */
private $labelServiceValidator;
public function __construct(LabelMapper $labelMapper, PermissionService $permissionService, BoardService $boardService, ChangeHelper $changeHelper) {
public function __construct(
LabelMapper $labelMapper,
PermissionService $permissionService,
BoardService $boardService,
ChangeHelper $changeHelper,
LabelServiceValidator $labelServiceValidator
) {
$this->labelMapper = $labelMapper;
$this->permissionService = $permissionService;
$this->boardService = $boardService;
$this->changeHelper = $changeHelper;
$this->labelServiceValidator = $labelServiceValidator;
}
/**
@@ -76,17 +86,7 @@ class LabelService {
* @throws BadRequestException
*/
public function create($title, $color, $boardId) {
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
if (is_numeric($boardId) === false) {
throw new BadRequestException('board id must be a number');
}
$this->labelServiceValidator->check(compact('title', 'color', 'boardId'));
$this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE);
@@ -121,9 +121,7 @@ class LabelService {
* @throws BadRequestException
*/
public function delete($id) {
if (is_numeric($id) === false) {
throw new BadRequestException('label id must be a number');
}
$this->labelServiceValidator->check(compact('id'));
$this->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE);
if ($this->boardService->isArchived($this->labelMapper, $id)) {
@@ -146,17 +144,7 @@ class LabelService {
* @throws BadRequestException
*/
public function update($id, $title, $color) {
if (is_numeric($id) === false) {
throw new BadRequestException('label id must be a number');
}
if ($title === false || $title === null || $title === "") {
throw new BadRequestException('title must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
$this->labelServiceValidator->check(compact('title', 'color', 'id'));
$this->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE);

View File

@@ -29,11 +29,11 @@ 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;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\Entity;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\IConfig;
use OCP\IGroupManager;
@@ -65,6 +65,7 @@ class PermissionService {
private $users = [];
private $boardCache;
private $permissionCache;
public function __construct(
ILogger $logger,
@@ -88,6 +89,7 @@ class PermissionService {
$this->userId = $userId;
$this->boardCache = new CappedMemoryCache();
$this->permissionCache = new CappedMemoryCache();
}
/**
@@ -96,16 +98,27 @@ class PermissionService {
* @param $boardId
* @return bool|array
*/
public function getPermissions($boardId) {
$owner = $this->userIsBoardOwner($boardId);
$acls = $this->aclMapper->findAll($boardId);
return [
public function getPermissions($boardId, ?string $userId = null) {
if ($userId === null) {
$userId = $this->userId;
}
if ($cached = $this->permissionCache->get($boardId)) {
return $cached;
}
$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),
Acl::PERMISSION_MANAGE => $owner || $this->userCan($acls, Acl::PERMISSION_MANAGE),
Acl::PERMISSION_SHARE => ($owner || $this->userCan($acls, Acl::PERMISSION_SHARE))
&& (!$this->shareManager->sharingDisabledForUser($this->userId))
];
$this->permissionCache->set((string)$boardId, $permissions);
return $permissions;
}
/**
@@ -117,7 +130,7 @@ class PermissionService {
*/
public function matchPermissions(Board $board) {
$owner = $this->userIsBoardOwner($board->getId());
$acls = $board->getAcl();
$acls = $board->getAcl() ?? [];
return [
Acl::PERMISSION_READ => $owner || $this->userCan($acls, Acl::PERMISSION_READ),
Acl::PERMISSION_EDIT => $owner || $this->userCan($acls, Acl::PERMISSION_EDIT),
@@ -130,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);
@@ -150,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;
@@ -187,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];
}
/**
@@ -343,5 +361,6 @@ class PermissionService {
*/
public function setUserId(string $userId): void {
$this->userId = $userId;
$this->permissionCache->clear();
}
}

View File

@@ -90,25 +90,19 @@ class SearchService {
}
public function searchBoards(string $term, ?int $limit, ?int $cursor): array {
$boards = $this->boardService->getUserBoards();
// get boards that have a lastmodified date which is lower than the cursor
// and which match the search term
$filteredBoards = array_filter($boards, static function (Board $board) use ($term, $cursor) {
return (
($cursor === null || $board->getLastModified() < $cursor)
&& mb_stripos(mb_strtolower($board->getTitle()), mb_strtolower($term)) > -1
);
});
$boards = $this->boardService->getUserBoards(null, true, $cursor, mb_strtolower($term));
// sort the boards, recently modified first
usort($filteredBoards, function ($boardA, $boardB) {
usort($boards, function ($boardA, $boardB) {
$ta = $boardA->getLastModified();
$tb = $boardB->getLastModified();
return $ta === $tb
? 0
: ($ta > $tb ? -1 : 1);
});
// limit the number of results
return array_slice($filteredBoards, 0, $limit);
return array_slice($boards, 0, $limit);
}
public function searchComments(string $term, ?int $limit = null, ?int $cursor = null): array {

View File

@@ -37,6 +37,7 @@ use OCA\Deck\Db\Stack;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\NoPermissionException;
use OCA\Deck\StatusException;
use OCA\Deck\Validators\StackServiceValidator;
class StackService {
private $stackMapper;
@@ -50,6 +51,7 @@ class StackService {
private $attachmentService;
private $activityManager;
private $changeHelper;
private $stackServiceValidator;
public function __construct(
StackMapper $stackMapper,
@@ -62,6 +64,7 @@ class StackService {
AssignmentMapper $assignedUsersMapper,
AttachmentService $attachmentService,
ActivityManager $activityManager,
StackServiceValidator $stackServiceValidator,
ChangeHelper $changeHelper
) {
$this->stackMapper = $stackMapper;
@@ -75,6 +78,7 @@ class StackService {
$this->attachmentService = $attachmentService;
$this->activityManager = $activityManager;
$this->changeHelper = $changeHelper;
$this->stackServiceValidator = $stackServiceValidator;
}
private function enrichStackWithCards($stack, $since = -1) {
@@ -202,17 +206,7 @@ class StackService {
* @throws BadRequestException
*/
public function create($title, $boardId, $order) {
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
if (is_numeric($boardId) === false) {
throw new BadRequestException('board id must be a number');
}
$this->stackServiceValidator->check(compact('title', 'boardId', 'order'));
$this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE);
if ($this->boardService->isArchived(null, $boardId)) {
@@ -275,21 +269,7 @@ class StackService {
* @throws BadRequestException
*/
public function update($id, $title, $boardId, $order, $deletedAt) {
if (is_numeric($id) === false) {
throw new BadRequestException('stack id must be a number');
}
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if (is_numeric($boardId) === false) {
throw new BadRequestException('board id must be a number');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
$this->stackServiceValidator->check(compact('id', 'title', 'boardId', 'order'));
$this->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE);
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_MANAGE);
@@ -325,13 +305,7 @@ class StackService {
* @throws BadRequestException
*/
public function reorder($id, $order) {
if (is_numeric($id) === false) {
throw new BadRquestException('id must be a number');
}
if ($order === false || $order === null) {
throw new BadRequestException('order must be provided');
}
$this->stackServiceValidator->check(compact('id', 'order'));
$this->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE);
$stackToSort = $this->stackMapper->find($id);

View File

@@ -115,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;
}

View File

@@ -0,0 +1,37 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class AssignmentServiceValidator extends BaseValidator {
public function rules() {
return [
'cardId' => ['numeric'],
'userId' => ['not_empty', 'not_null', 'not_false', 'max:64'],
];
}
}

View File

@@ -0,0 +1,37 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class AttachmentServiceValidator extends BaseValidator {
public function rules() {
return [
'cardId' => ['numeric'],
'type' => ['not_empty', 'not_null', 'not_false'],
'data' => ['not_empty', 'not_null', 'not_false', 'max:255'],
];
}
}

View File

@@ -0,0 +1,182 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
use Exception;
use OCA\Deck\BadRequestException;
abstract class BaseValidator {
/**
* @return array
*/
abstract public function rules();
/**
* Validate given entries
*
* @param array $data
* @return void
* @throws BadRequestException
*/
private function validate($data) {
$rules = $this->rules();
foreach ($data as $field => $value) {
$field_rule = $rules[$field];
if (is_array($field_rule)) {
foreach ($field_rule as $rule) {
// The format for specifying validation rules and parameters follows an
// easy {rule}:{parameters} formatting convention. For instance the
// rule "Max:3" states that the value may only be three letters.
if (strpos($rule, ':') !== false) {
[$rule, $parameter] = explode(':', $rule, 2);
if (!$this->{$rule}($value, $parameter)) {
throw new BadRequestException(
$this->getErrorMessage($rule, $field, $parameter));
}
} else {
if (!$this->{$rule}($value)) {
throw new BadRequestException(
$field . ' must be provided and must be '. str_replace("_", " ", $rule));
}
}
}
}
if (is_callable($field_rule) && !$field_rule($value)) {
throw new BadRequestException($field . ' must be provided');
}
}
}
/**
* @param array $data
* @return void
* @throws BadRequestException
*/
public function check(array $data) {
$this->validate($data);
}
/**
* @param $value
* @return bool
*/
private function numeric($value): bool {
return is_numeric($value);
}
/**
* @param $value
* @return bool
*/
private function bool($value): bool {
return is_bool($value);
}
/**
* @param $value
* @return bool
*/
private function not_false($value): bool {
return ($value !== false) && ($value !== 'false');
}
/**
* @param $value
* @return bool
*/
private function not_null($value): bool {
return !is_null($value);
}
/**
* @param $value
* @return bool
*/
private function not_empty($value): bool {
return !empty($value);
}
/**
* @throws Exception
*/
private function max($value, $limit): bool {
if (!$limit || !is_numeric($limit)) {
throw new Exception("Validation rule max requires at least 1 parameter. " . json_encode($limit));
}
return $this->getSize($value) <= $limit;
}
/**
* @throws Exception
*/
private function min($value, $limit): bool {
if (!$limit || !is_numeric($limit)) {
throw new Exception("Validation rule max requires at least 1 parameter.");
}
return $this->getSize($value) >= $limit;
}
/**
* Get the size of an attribute.
*
* @param mixed $value
* @return int
*/
protected function getSize($value): int {
// This method will determine if the attribute is a number or string and
// return the proper size accordingly. If it is a number, then number itself
// is the size.
if (is_int($value)) {
return $value;
} elseif (is_array($value)) {
return count($value);
}
return mb_strlen($value ?? '');
}
/**
* @param $rule
* @param $field
* @param $parameter
* @return string
*/
protected function getErrorMessage($rule, $field, $parameter = null): string {
if (in_array($rule, ['max', 'min'])) {
return $rule === 'max'
? $field . ' cannot be longer than '. $parameter . ' characters '
: $field . ' must be at least '. $parameter . ' characters long ';
}
return $field . ' must be provided and must be '. str_replace("_", " ", $rule);
}
}

View File

@@ -0,0 +1,47 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class BoardServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'boardId' => ['numeric'],
'type' => ['numeric'],
'mapper' => ['not_empty', 'not_null', 'not_false'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:100'],
'userId' => ['not_empty', 'not_null', 'not_false', 'max:64'],
'color' => ['not_empty', 'not_null', 'not_false', 'max:6'],
'participant' => ['not_empty', 'not_null', 'not_false', 'max:64'],
'edit' => ['not_null'],
'share' => ['not_null'],
'manage' => ['not_null'],
'archived' => ['bool']
];
}
}

View File

@@ -0,0 +1,44 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class CardServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:255'],
'cardId' => ['numeric'],
'stackId' => ['numeric'],
'boardId' => ['numeric'],
'labelId' => ['numeric'],
'type' => ['not_empty', 'not_null', 'not_false', 'max:64'],
'order' => ['numeric'],
'owner' => ['not_empty', 'not_null', 'not_false', 'max:64'],
];
}
}

View File

@@ -0,0 +1,39 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class LabelServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:100'],
'boardId' => ['numeric', 'not_null'],
'color' => ['not_empty', 'not_null', 'not_false', 'max:6']
];
}
}

View File

@@ -0,0 +1,39 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class StackServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:100'],
'boardId' => ['numeric', 'not_null'],
'order' => ['numeric', 'not_null']
];
}
}

17929
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,99 +1,100 @@
{
"name": "deck",
"description": "",
"version": "1.5.8",
"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.14.6",
"@juliushaertl/vue-richtext": "^1.0.1",
"@nextcloud/auth": "^1.3.0",
"@nextcloud/axios": "^1.6.0",
"@nextcloud/dialogs": "^3.1.2",
"@nextcloud/event-bus": "^2.0.0",
"@nextcloud/files": "^2.0.0",
"@nextcloud/initial-state": "^1.2.0",
"@nextcloud/l10n": "^1.4.1",
"@nextcloud/moment": "^1.1.1",
"@nextcloud/router": "^2.0.0",
"@nextcloud/vue": "^3.10.1",
"@nextcloud/vue-dashboard": "^2.0.1",
"blueimp-md5": "^2.18.0",
"dompurify": "^2.2.9",
"lodash": "^4.17.21",
"markdown-it": "^12.0.6",
"markdown-it-task-lists": "^2.1.1",
"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": "^1.4.0",
"vue-infinite-loading": "^2.4.5",
"vue-router": "^3.5.1",
"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-beta.1",
"@nextcloud/browserslist-config": "^2.1.0",
"@nextcloud/eslint-config": "^5.1.0",
"@nextcloud/stylelint-config": "^1.0.0-beta.0",
"@nextcloud/webpack-vue-config": "^4.0.3",
"@relative-ci/agent": "^2.0.0",
"@vue/test-utils": "^1.2.1",
"jest": "^27.0.4",
"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

@@ -59,6 +59,11 @@ export default {
Content,
AppContent,
},
provide() {
return {
boardApi,
}
},
data() {
return {
addButton: {
@@ -112,11 +117,6 @@ export default {
this.$router.push({ name: 'board' })
},
},
provide() {
return {
boardApi,
}
},
}
</script>

View File

@@ -137,7 +137,7 @@ export default {
},
computed: {
isBoardAndStackChoosen() {
return !(this.selectedBoard === '')
return !(this.selectedBoard === '' || this.selectedStack === '')
},
},
beforeMount() {

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

@@ -76,110 +76,108 @@
<ActionButton v-else icon="icon-filter" />
</Actions>
<template>
<div v-if="filterVisible" class="filter">
<h3>{{ t('deck', 'Filter by tag') }}</h3>
<div v-for="label in labelsSorted" :key="label.id" class="filter--item">
<input
:id="label.id"
v-model="filter.tags"
type="checkbox"
class="checkbox"
:value="label.id"
@change="setFilter">
<label :for="label.id"><span class="label" :style="labelStyle(label)">{{ label.title }}</span></label>
</div>
<h3>{{ t('deck', 'Filter by assigned user') }}</h3>
<div class="filter--item">
<input
id="unassigned"
v-model="filter.unassigned"
type="checkbox"
class="checkbox"
value="unassigned"
@change="setFilter"
@click="beforeSetFilter">
<label for="unassigned">{{ t('deck', 'Unassigned') }}</label>
</div>
<div v-for="user in board.users" :key="user.uid" class="filter--item">
<input
:id="user.uid"
v-model="filter.users"
type="checkbox"
class="checkbox"
:value="user.uid"
@change="setFilter">
<label :for="user.uid"><Avatar :user="user.uid" :size="24" :disable-menu="true" /> {{ user.displayname }}</label>
</div>
<h3>{{ t('deck', 'Filter by due date') }}</h3>
<div class="filter--item">
<input
id="overdue"
v-model="filter.due"
type="radio"
class="radio"
value="overdue"
@change="setFilter"
@click="beforeSetFilter">
<label for="overdue">{{ t('deck', 'Overdue') }}</label>
</div>
<div class="filter--item">
<input
id="dueToday"
v-model="filter.due"
type="radio"
class="radio"
value="dueToday"
@change="setFilter"
@click="beforeSetFilter">
<label for="dueToday">{{ t('deck', 'Next 24 hours') }}</label>
</div>
<div class="filter--item">
<input
id="dueWeek"
v-model="filter.due"
type="radio"
class="radio"
value="dueWeek"
@change="setFilter"
@click="beforeSetFilter">
<label for="dueWeek">{{ t('deck', 'Next 7 days') }}</label>
</div>
<div class="filter--item">
<input
id="dueMonth"
v-model="filter.due"
type="radio"
class="radio"
value="dueMonth"
@change="setFilter"
@click="beforeSetFilter">
<label for="dueMonth">{{ t('deck', 'Next 30 days') }}</label>
</div>
<div class="filter--item">
<input
id="noDue"
v-model="filter.due"
type="radio"
class="radio"
value="noDue"
@change="setFilter"
@click="beforeSetFilter">
<label for="noDue">{{ t('deck', 'No due date') }}</label>
</div>
<Button :disabled="!isFilterActive" @click="clearFilter">
{{ t('deck', 'Clear filter') }}
</Button>
<div v-if="filterVisible" class="filter">
<h3>{{ t('deck', 'Filter by tag') }}</h3>
<div v-for="label in labelsSorted" :key="label.id" class="filter--item">
<input
:id="label.id"
v-model="filter.tags"
type="checkbox"
class="checkbox"
:value="label.id"
@change="setFilter">
<label :for="label.id"><span class="label" :style="labelStyle(label)">{{ label.title }}</span></label>
</div>
</template>
<h3>{{ t('deck', 'Filter by assigned user') }}</h3>
<div class="filter--item">
<input
id="unassigned"
v-model="filter.unassigned"
type="checkbox"
class="checkbox"
value="unassigned"
@change="setFilter"
@click="beforeSetFilter">
<label for="unassigned">{{ t('deck', 'Unassigned') }}</label>
</div>
<div v-for="user in board.users" :key="user.uid" class="filter--item">
<input
:id="user.uid"
v-model="filter.users"
type="checkbox"
class="checkbox"
:value="user.uid"
@change="setFilter">
<label :for="user.uid"><Avatar :user="user.uid" :size="24" :disable-menu="true" /> {{ user.displayname }}</label>
</div>
<h3>{{ t('deck', 'Filter by due date') }}</h3>
<div class="filter--item">
<input
id="overdue"
v-model="filter.due"
type="radio"
class="radio"
value="overdue"
@change="setFilter"
@click="beforeSetFilter">
<label for="overdue">{{ t('deck', 'Overdue') }}</label>
</div>
<div class="filter--item">
<input
id="dueToday"
v-model="filter.due"
type="radio"
class="radio"
value="dueToday"
@change="setFilter"
@click="beforeSetFilter">
<label for="dueToday">{{ t('deck', 'Next 24 hours') }}</label>
</div>
<div class="filter--item">
<input
id="dueWeek"
v-model="filter.due"
type="radio"
class="radio"
value="dueWeek"
@change="setFilter"
@click="beforeSetFilter">
<label for="dueWeek">{{ t('deck', 'Next 7 days') }}</label>
</div>
<div class="filter--item">
<input
id="dueMonth"
v-model="filter.due"
type="radio"
class="radio"
value="dueMonth"
@change="setFilter"
@click="beforeSetFilter">
<label for="dueMonth">{{ t('deck', 'Next 30 days') }}</label>
</div>
<div class="filter--item">
<input
id="noDue"
v-model="filter.due"
type="radio"
class="radio"
value="noDue"
@change="setFilter"
@click="beforeSetFilter">
<label for="noDue">{{ t('deck', 'No due date') }}</label>
</div>
<Button :disabled="!isFilterActive" @click="clearFilter">
{{ t('deck', 'Clear filter') }}
</Button>
</div>
</Popover>
<Actions>

View File

@@ -208,7 +208,7 @@ export default {
confirmClasses: 'error',
cancel: t('deck', 'Cancel'),
},
async(result) => {
async (result) => {
if (result) {
try {
this.isLoading = true

View File

@@ -43,24 +43,22 @@
<li v-if="addLabel" class="editing">
<!-- New Tag -->
<template>
<form class="label-form" @submit.prevent="clickAddLabel">
<ColorPicker class="color-picker-wrapper" :value="'#' + addLabelObj.color" @input="updateColor">
<div :style="{ backgroundColor: '#' + addLabelObj.color }" class="color0 icon-colorpicker" />
</ColorPicker>
<input v-model="addLabelObj.title" type="text">
<input v-tooltip="{content: missingDataLabel, show: !addLabelObjValidated, trigger: 'manual' }"
:disabled="!addLabelObjValidated"
type="submit"
value=""
class="icon-confirm">
<Actions>
<ActionButton icon="icon-close" @click="addLabel=false">
{{ t('deck', 'Cancel') }}
</ActionButton>
</Actions>
</form>
</template>
<form class="label-form" @submit.prevent="clickAddLabel">
<ColorPicker class="color-picker-wrapper" :value="'#' + addLabelObj.color" @input="updateColor">
<div :style="{ backgroundColor: '#' + addLabelObj.color }" class="color0 icon-colorpicker" />
</ColorPicker>
<input v-model="addLabelObj.title" type="text">
<input v-tooltip="{content: missingDataLabel, show: !addLabelObjValidated, trigger: 'manual' }"
:disabled="!addLabelObjValidated"
type="submit"
value=""
class="icon-confirm">
<Actions>
<ActionButton icon="icon-close" @click="addLabel=false">
{{ t('deck', 'Cancel') }}
</ActionButton>
</Actions>
</form>
</li>
<button v-if="canManage && !isArchived" @click="clickShowAddLabel()">
<span class="icon-add" />{{ t('deck', 'Add a new tag') }}

View File

@@ -71,7 +71,7 @@
</a>
</div>
<Actions v-if="selectable">
<ActionButton icon="icon-confirm" @click="$emit('selectAttachment', attachment)">
<ActionButton icon="icon-confirm" @click="$emit('select-attachment', attachment)">
{{ t('deck', 'Add this attachment') }}
</ActionButton>
</Actions>
@@ -89,10 +89,10 @@
{{ t('deck', 'Remove attachment') }}
</ActionButton>
<ActionButton v-if="!attachment.extendedData.fileid && attachment.deletedAt === 0" icon="icon-delete" @click="$emit('deleteAttachment', attachment)">
<ActionButton v-if="!attachment.extendedData.fileid && attachment.deletedAt === 0" icon="icon-delete" @click="$emit('delete-attachment', attachment)">
{{ t('deck', 'Delete Attachment') }}
</ActionButton>
<ActionButton v-else-if="!attachment.extendedData.fileid" icon="icon-history" @click="$emit('restoreAttachment', attachment)">
<ActionButton v-else-if="!attachment.extendedData.fileid" icon="icon-history" @click="$emit('restore-attachment', attachment)">
{{ t('deck', 'Restore Attachment') }}
</ActionButton>
</Actions>
@@ -173,7 +173,7 @@ export default {
}
},
attachmentPreview() {
return (attachment) => (attachment.extendedData.fileid ? generateUrl(`/core/preview?fileId=${attachment.extendedData.fileid}&x=64&y=64&a=true`) : null)
return (attachment) => (attachment.extendedData.fileid ? generateUrl(`/core/preview?fileId=${attachment.extendedData.fileid}&x=64&y=64`) : null)
},
attachmentUrl() {
return (attachment) => generateUrl(`/apps/deck/cards/${attachment.cardId}/attachment/${attachment.id}`)
@@ -225,7 +225,7 @@ export default {
},
shareFromFiles() {
picker.pick()
.then(async(path) => {
.then(async (path) => {
console.debug(`path ${path} selected for sharing`)
if (!path.startsWith('/')) {
throw new Error(t('files', 'Invalid path selected'))

View File

@@ -24,8 +24,8 @@
<AttachmentList
:card-id="card.id"
:removable="true"
@deleteAttachment="deleteAttachment"
@restoreAttachment="restoreAttachment" />
@delete-attachment="deleteAttachment"
@restore-attachment="restoreAttachment" />
</template>
<script>

View File

@@ -101,6 +101,7 @@
:lang="lang"
:formatter="format"
:disabled="saving || !canEdit"
:shortcuts="shortcuts"
confirm />
<Actions v-if="canEdit">
<ActionButton v-if="copiedCard.duedate" icon="icon-delete" @click="removeDue()">
@@ -176,6 +177,48 @@ export default {
stringify: this.stringify,
parse: this.parse,
},
shortcuts: [
{
text: t('deck', 'Today'),
onClick() {
const date = new Date()
date.setDate(date.getDate())
date.setHours(23)
date.setMinutes(59)
return date
},
},
{
text: t('deck', 'Tomorrow'),
onClick() {
const date = new Date()
date.setDate(date.getDate() + 1)
date.setHours(23)
date.setMinutes(59)
return date
},
},
{
text: t('deck', 'Next week'),
onClick() {
const date = new Date()
date.setDate(date.getDate() + 7)
date.setHours(23)
date.setMinutes(59)
return date
},
},
{
text: t('deck', 'Next month'),
onClick() {
const date = new Date()
date.setDate(date.getDate() + 30)
date.setHours(23)
date.setMinutes(59)
return date
},
},
],
}
},
computed: {
@@ -316,6 +359,14 @@ export default {
</script>
<style lang="scss" scoped>
.section-wrapper::v-deep .mx-datepicker-main.mx-datepicker-popup {
left: 0 !important;
}
.section-wrapper::v-deep .mx-datepicker-main.mx-datepicker-popup.mx-datepicker-sidebar {
padding: 0 !important;
}
.section-wrapper {
display: flex;
max-width: 100%;

View File

@@ -19,47 +19,45 @@
</div>
</div>
<li v-else class="comment">
<template>
<div class="comment--header">
<Avatar :user="comment.actorId" />
<span class="has-tooltip username">
{{ comment.actorDisplayName }}
</span>
<Actions v-show="!edit" :force-menu="true">
<ActionButton icon="icon-reply" :close-after-click="true" @click="replyTo()">
{{ t('deck', 'Reply') }}
</ActionButton>
<ActionButton v-if="canEdit"
icon="icon-rename"
:close-after-click="true"
@click="showUpdateForm()">
{{ t('deck', 'Update') }}
</ActionButton>
<ActionButton v-if="canEdit"
icon="icon-delete"
:close-after-click="true"
@click="deleteComment()">
{{ t('deck', 'Delete') }}
</ActionButton>
</Actions>
<Actions v-if="edit">
<ActionButton icon="icon-close" @click="hideUpdateForm" />
</Actions>
<div class="spacer" />
<div class="timestamp">
{{ relativeDate(comment.creationDateTime) }}
</div>
<div class="comment--header">
<Avatar :user="comment.actorId" />
<span class="has-tooltip username">
{{ comment.actorDisplayName }}
</span>
<Actions v-show="!edit" :force-menu="true">
<ActionButton icon="icon-reply" :close-after-click="true" @click="replyTo()">
{{ t('deck', 'Reply') }}
</ActionButton>
<ActionButton v-if="canEdit"
icon="icon-rename"
:close-after-click="true"
@click="showUpdateForm()">
{{ t('deck', 'Update') }}
</ActionButton>
<ActionButton v-if="canEdit"
icon="icon-delete"
:close-after-click="true"
@click="deleteComment()">
{{ t('deck', 'Delete') }}
</ActionButton>
</Actions>
<Actions v-if="edit">
<ActionButton icon="icon-close" @click="hideUpdateForm" />
</Actions>
<div class="spacer" />
<div class="timestamp">
{{ relativeDate(comment.creationDateTime) }}
</div>
<CommentItem v-if="comment.replyTo" :reply="true" :comment="comment.replyTo" />
<div v-show="!edit" ref="richTextElement">
<RichText
class="comment--content"
:text="richText(comment)"
:arguments="richArgs(comment)"
:autolink="true" />
</div>
<CommentForm v-if="edit" v-model="commentMsg" @submit="updateComment" />
</template>
</div>
<CommentItem v-if="comment.replyTo" :reply="true" :comment="comment.replyTo" />
<div v-show="!edit" ref="richTextElement">
<RichText
class="comment--content"
:text="richText(comment)"
:arguments="richArgs(comment)"
:autolink="true" />
</div>
<CommentForm v-if="edit" v-model="commentMsg" @submit="updateComment" />
</li>
</template>

View File

@@ -57,7 +57,7 @@
ref="markdownEditor"
v-model="description"
:configs="mdeConfig"
@input="updateDescription"
@update:modelValue="updateDescription"
@blur="saveDescription" />
<Modal v-if="modalShow" :title="t('deck', 'Choose attachment')" @close="modalShow=false">
@@ -66,7 +66,7 @@
<AttachmentList
:card-id="card.id"
:selectable="true"
@selectAttachment="addAttachment" />
@select-attachment="addAttachment" />
</div>
</Modal>
</div>
@@ -74,7 +74,8 @@
<script>
import MarkdownIt from 'markdown-it'
import MarkdownItTaskLists from 'markdown-it-task-lists'
import MarkdownItTaskCheckbox from 'markdown-it-task-checkbox'
import MarkdownItLinkAttributes from 'markdown-it-link-attributes'
import AttachmentList from './AttachmentList'
import { Actions, ActionButton, Modal } from '@nextcloud/vue'
import { formatFileSize } from '@nextcloud/files'
@@ -84,7 +85,14 @@ import { mapState, mapGetters } from 'vuex'
const markdownIt = new MarkdownIt({
linkify: true,
})
markdownIt.use(MarkdownItTaskLists, { enabled: true, label: true, labelAfter: true })
markdownIt.use(MarkdownItTaskCheckbox, { disabled: false, idPrefix: 'task-item-', ulClass: 'contains-task-list' })
markdownIt.use(MarkdownItLinkAttributes, {
attrs: {
target: '_blank',
rel: 'noreferrer noopener',
},
})
export default {
name: 'Description',
@@ -223,7 +231,7 @@ export default {
updateDescription() {
this.descriptionLastEdit = Date.now()
clearTimeout(this.descriptionSaveTimeout)
this.descriptionSaveTimeout = setTimeout(async() => {
this.descriptionSaveTimeout = setTimeout(async () => {
await this.saveDescription()
}, 2500)
},

View File

@@ -53,6 +53,19 @@
<PopoverMenu :menu="popover" />
<slot />
</div>
<div class="avatar-print-list">
<div v-for="user in avatarUsers" :key="user.id" class="avatar-print-list-item">
<Avatar
class="avatar-print-list-avatar"
:user="user.participant.uid"
:display-name="user.participant.displayname"
:disable-menu="true"
:is-no-user="user.type !== 0"
:size="24" />
{{ user.participant.displayname }}
</div>
</div>
</div>
</template>
@@ -116,6 +129,15 @@ export default {
}),
]
},
avatarUsers() {
if (!this.users) {
return []
}
return this.users.filter((user) => {
return [0, 1, 7].includes(user.type)
})
},
},
methods: {
togglePopover() {
@@ -176,4 +198,26 @@ export default {
display: block;
margin: 40px -6px;
}
.avatar-print-list {
display: none;
}
@media print {
.avatar-list {
display: none;
}
.avatar-print-list-item {
align-items: center;
display: flex;
gap: 10px;
margin-bottom: 10px;
}
.avatar-print-list {
display: block;
padding-top: 5px;
}
}
</style>

View File

@@ -41,7 +41,7 @@
<AvatarList :users="card.assignedUsers" />
<CardMenu :card="card" />
<CardMenu class="card-menu" :card="card" />
</div>
</template>
<script>
@@ -150,4 +150,15 @@ export default {
.fade-enter, .fade-leave-to {
opacity: 0;
}
@media print {
.badges {
align-items: flex-start;
max-height: none !important;
}
.card-menu {
display: none;
}
}
</style>

View File

@@ -51,6 +51,7 @@
<input v-model="copiedCard.title"
v-focus
type="text"
autocomplete="off"
required
pattern=".*\S+.*">
<input type="submit" value="" class="icon-confirm">

View File

@@ -23,7 +23,7 @@
<template>
<div v-if="card" class="duedate">
<transition name="zoom">
<div v-if="card.duedate" :class="dueIcon">
<div v-if="card.duedate" :class="dueIcon" :title="absoluteDate">
<span>{{ relativeDate }}</span>
</div>
</transition>
@@ -62,14 +62,14 @@ export default {
}
return moment(this.card.duedate).fromNow()
},
dueDateTooltip() {
return moment(this.card.duedate).format('LLLL')
absoluteDate() {
return moment(this.card.duedate).format('L')
},
},
}
</script>
<style lang="scss" coped>
<style lang="scss" scoped>
.icon.due {
background-position: 4px center;
border-radius: 3px;
@@ -105,6 +105,7 @@ export default {
padding: 3px 4px;
}
&::before,
span {
margin-left: 20px;
white-space: nowrap;
@@ -112,4 +113,18 @@ export default {
overflow: hidden;
}
}
@media print {
.icon.due {
background-color: transparent !important;
span {
display: none;
}
&::before {
content: attr(title);
}
}
}
</style>

View File

@@ -39,6 +39,9 @@
<script>
import { ColorPicker, ActionButton, Actions, AppNavigationItem } from '@nextcloud/vue'
/**
*
*/
function randomColor() {
let randomHexColor = ((1 << 24) * Math.random() | 0).toString(16)
while (randomHexColor.length < 6) {
@@ -67,9 +70,9 @@ export default {
startCreateBoard(e) {
this.editing = true
},
createBoard(e) {
async createBoard(e) {
const title = e.currentTarget.childNodes[0].value
this.$store.dispatch('createBoard', {
await this.$store.dispatch('createBoard', {
title,
color: this.color.substring(1),
})

View File

@@ -63,10 +63,15 @@ import { Actions, ActionButton } from '@nextcloud/vue'
const createCancelToken = () => axios.CancelToken.source()
/**
* @param root0
* @param root0.query
* @param root0.cursor
*/
function search({ query, cursor }) {
const cancelToken = createCancelToken()
const request = async() => axios.get(generateOcsUrl('apps/deck/api/v1.0/search'), {
const request = async () => axios.get(generateOcsUrl('apps/deck/api/v1.0/search'), {
cancelToken: cancelToken.token,
params: {
term: query,

View File

@@ -21,6 +21,11 @@ ul {
ul {
list-style-type: disc;
.task-list-item {
margin-left: -20px;
list-style-type: none;
}
}
h1 {
@@ -67,7 +72,7 @@ img {
}
input[type=checkbox] {
margin: 0px 10px 0px 0px;
margin: 0px 3px 0px 0px;
line-height: 10px;
font-size: 10px;
display: inline-block;

View File

@@ -25,9 +25,8 @@ const buildSelector = (selector, propsData = {}) => {
return new Promise((resolve, reject) => {
const container = document.createElement('div')
document.getElementById('body-user').append(container)
const View = Vue.extend(selector)
const ComponentVM = new View({
propsData,
const ComponentVM = new Vue({
render: (h) => h(selector, propsData),
}).$mount(container)
ComponentVM.$root.$on('close', () => {
ComponentVM.$el.remove()

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