Compare commits
119 Commits
v1.8.2
...
fix-archiv
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5959fa8da | ||
|
|
b47c7aca34 | ||
|
|
ca91e7a2ed | ||
|
|
b92fddaf65 | ||
|
|
b7de565bac | ||
|
|
9c8e1a9f6e | ||
|
|
7e479b0505 | ||
|
|
8f65ec2ede | ||
|
|
6912ae09cf | ||
|
|
eaa3315348 | ||
|
|
5669bd73cc | ||
|
|
57989384fa | ||
|
|
74c04b2d71 | ||
|
|
74565debbb | ||
|
|
a2744823c1 | ||
|
|
a918459105 | ||
|
|
f9acf7778f | ||
|
|
8537bd00c7 | ||
|
|
4b62c34cc3 | ||
|
|
94d84f2b16 | ||
|
|
14e7c33886 | ||
|
|
60ee9f77ca | ||
|
|
3eaba6fe1a | ||
|
|
cef14ed254 | ||
|
|
0828ae6017 | ||
|
|
3af54d7186 | ||
|
|
f01a4433ed | ||
|
|
b64b29cf6e | ||
|
|
d93b431554 | ||
|
|
d00bd159d2 | ||
|
|
816a8c08f0 | ||
|
|
2c3113334a | ||
|
|
857a0797b4 | ||
|
|
efc3511e15 | ||
|
|
aaccd2e7d2 | ||
|
|
1921143bfd | ||
|
|
07b7df8e68 | ||
|
|
c4804cfcb7 | ||
|
|
6bc5f1df47 | ||
|
|
f8a8cc691c | ||
|
|
a4b2a137e5 | ||
|
|
96b5c3da1d | ||
|
|
a716c0968a | ||
|
|
48c8333ed1 | ||
|
|
8224ff13c3 | ||
|
|
e150cd25e8 | ||
|
|
6206a0cdd1 | ||
|
|
d66b54dd13 | ||
|
|
5491c9444e | ||
|
|
0fc5708253 | ||
|
|
918342eeb7 | ||
|
|
ec66e0f291 | ||
|
|
d76a1f539b | ||
|
|
c81501c2ea | ||
|
|
d62bd4e99a | ||
|
|
863ce50a27 | ||
|
|
a9c4e626ac | ||
|
|
982df96c3c | ||
|
|
bc070cbeb9 | ||
|
|
dbac5f82d3 | ||
|
|
58c7786cf7 | ||
|
|
14db941950 | ||
|
|
36a531c204 | ||
|
|
0fa1f74699 | ||
|
|
9189723970 | ||
|
|
d7bcdeb5a7 | ||
|
|
4d9e81e22f | ||
|
|
466c39d12a | ||
|
|
86e7d04c80 | ||
|
|
a6b5ae3fde | ||
|
|
bb3f41dd69 | ||
|
|
b2bdf4a49d | ||
|
|
91268cdd4c | ||
|
|
6b621d2faa | ||
|
|
93db4fd2d8 | ||
|
|
f166552de0 | ||
|
|
aab3352624 | ||
|
|
26f33e5bc6 | ||
|
|
da4db42380 | ||
|
|
aa46b49ab7 | ||
|
|
b70e893364 | ||
|
|
a6bb454df5 | ||
|
|
099e76aeab | ||
|
|
309b00f2d9 | ||
|
|
acd181133c | ||
|
|
86f8999d30 | ||
|
|
661a64656e | ||
|
|
3380103a8f | ||
|
|
7ebf6e4150 | ||
|
|
05fdd9765c | ||
|
|
72a8c4dd83 | ||
|
|
423630bea6 | ||
|
|
2c9bcbae0b | ||
|
|
f70747ea15 | ||
|
|
b4c1525958 | ||
|
|
ed5df26704 | ||
|
|
d8253d41fd | ||
|
|
4eb7988e2c | ||
|
|
4f68aed812 | ||
|
|
322d01d3e1 | ||
|
|
aa34a0cce3 | ||
|
|
93a988f8f1 | ||
|
|
630fa5b07e | ||
|
|
77f623d261 | ||
|
|
30a4e88cff | ||
|
|
01b897bd8b | ||
|
|
be36e6de6a | ||
|
|
96b7a7ccb3 | ||
|
|
d8dd65d7ee | ||
|
|
aecdcb847d | ||
|
|
a383d389c4 | ||
|
|
565b2edfdd | ||
|
|
c1b4beeb64 | ||
|
|
9d489564d6 | ||
|
|
24a4260e55 | ||
|
|
71e5c0d743 | ||
|
|
48d28dc317 | ||
|
|
ad007bd51a | ||
|
|
6ed7f672fc |
6
.github/workflows/cypress.yml
vendored
6
.github/workflows/cypress.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
# containers: [1, 2, 3]
|
||||
php-versions: [ '7.4' ]
|
||||
databases: [ 'sqlite' ]
|
||||
server-versions: [ 'stable25' ]
|
||||
server-versions: [ 'master' ]
|
||||
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
@@ -96,7 +96,7 @@ jobs:
|
||||
npm_package_name: ${{ env.APP_NAME }}
|
||||
|
||||
- name: Upload test failure screenshots
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload screenshots
|
||||
@@ -104,7 +104,7 @@ jobs:
|
||||
retention-days: 5
|
||||
|
||||
- name: Upload nextcloud logs
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload nextcloud log
|
||||
|
||||
4
.github/workflows/integration.yml
vendored
4
.github/workflows/integration.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
matrix:
|
||||
php-versions: ['7.4']
|
||||
databases: ['sqlite', 'mysql', 'pgsql']
|
||||
server-versions: ['stable25']
|
||||
server-versions: ['master']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
|
||||
- name: Set up PHPUnit
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer i
|
||||
run: composer i --no-dev
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
|
||||
2
.github/workflows/phpunit.yml
vendored
2
.github/workflows/phpunit.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
databases: ['sqlite', 'mysql', 'pgsql']
|
||||
server-versions: ['stable25']
|
||||
server-versions: ['master']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||
|
||||
|
||||
2
.github/workflows/update-nextcloud-ocp.yml
vendored
2
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -49,7 +49,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v3
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: Update psalm baseline
|
||||
|
||||
@@ -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 = hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:deck]
|
||||
file_filter = translationfiles/<lang>/deck.po
|
||||
|
||||
48
CHANGELOG.md
48
CHANGELOG.md
@@ -1,24 +1,8 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 1.8.2
|
||||
|
||||
### Fixed
|
||||
|
||||
- minor style fixes [#4201](https://github.com/nextcloud/deck/pull/4201)
|
||||
- feat: add validators to check values in services [#4174](https://github.com/nextcloud/deck/pull/4174)
|
||||
- Add integration test for attachment handling on cards [#4179](https://github.com/nextcloud/deck/pull/4179)
|
||||
- Add missing userId property [#4198](https://github.com/nextcloud/deck/pull/4198)
|
||||
|
||||
## 1.8.1
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix Duedate activity @nickvergessen [#4155](https://github.com/nextcloud/deck/pull/4155)
|
||||
|
||||
## 1.8.0
|
||||
|
||||
### Added
|
||||
## 1.8.0-beta.1
|
||||
### Enhancements
|
||||
|
||||
- Nextcloud 25 compatibility
|
||||
- Performance improvements
|
||||
@@ -30,26 +14,10 @@ All notable changes to this project will be documented in this file.
|
||||
- Improve filter popover accessibility @juliushaertl [#3820](https://github.com/nextcloud/deck/pull/3820)
|
||||
- Set ids to skip to content/navigation @juliushaertl [#3924](https://github.com/nextcloud/deck/pull/3924)
|
||||
- Invert icons properly in dark mode @juliushaertl [#3939](https://github.com/nextcloud/deck/pull/3939)
|
||||
- Implement card reference widget @eneiluj [#4031](https://github.com/nextcloud/deck/pull/4031)
|
||||
- Implement new dashboard widget interfaces @eneiluj [#4033](https://github.com/nextcloud/deck/pull/4033)
|
||||
- Add related resources panel to board sharing tab sidebar @Pytal [#4000](https://github.com/nextcloud/deck/pull/4000)
|
||||
- Bump dependencies
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix sorting stacks [#4116](https://github.com/nextcloud/deck/pull/4116)
|
||||
- Fix issue with duedate format [#4140](https://github.com/nextcloud/deck/pull/4140)
|
||||
- Fix missing icon for activity rendering [#4090](https://github.com/nextcloud/deck/pull/4090)
|
||||
- disables autocomplete on card creation [#4142](https://github.com/nextcloud/deck/pull/4142)
|
||||
- Set event link also for notifications that get emitted from activities [#4117](https://github.com/nextcloud/deck/pull/4117)
|
||||
- Fix attachment creator name: show display name @eneiluj [#4036](https://github.com/nextcloud/deck/pull/4036)
|
||||
- Fix reference provider when caching @eneiluj [#4056](https://github.com/nextcloud/deck/pull/4056)
|
||||
- Use global import for nextcloud-vue [#4072](https://github.com/nextcloud/deck/pull/4072)
|
||||
- Disable Create card button while no stack is chosen @icewind1991 [#4014](https://github.com/nextcloud/deck/pull/4014)
|
||||
- Adjust testing matrix for Nextcloud 25 on stable25 @nickvergessen [#4068](https://github.com/nextcloud/deck/pull/4068)
|
||||
- Fix Card menu not displaying when description is not set @marcelklehr [#4105](https://github.com/nextcloud/deck/pull/4105)
|
||||
- Reference widget adjustments for Text [#4075](https://github.com/nextcloud/deck/pull/4075)
|
||||
- use OCP\Collaboration\Reference\Reference [#4078](https://github.com/nextcloud/deck/pull/4078)
|
||||
- Cache user membership for circles [#4141](https://github.com/nextcloud/deck/pull/4141)
|
||||
- set last modified when the card was found. Fixes #3763 @ylebre [#3796](https://github.com/nextcloud/deck/pull/3796)
|
||||
- Increase file count after sharing @luka-nextcloud [#3682](https://github.com/nextcloud/deck/pull/3682)
|
||||
- Align Duedate-delete icon properly - fixes nextcloud/deck#3791 @Ben-Ro [#3811](https://github.com/nextcloud/deck/pull/3811)
|
||||
@@ -494,7 +462,7 @@ Android app team for helping to improve our REST API:
|
||||
- Fix comment activities on Nextcloud 15
|
||||
- Fix issues with Edge
|
||||
- API: Fix numeric types that were returned as strings
|
||||
- API: Fix If-Modified-Since header parsing
|
||||
- API: Fix If-Modified-Since header parsing
|
||||
|
||||
|
||||
## 0.5.1 - 2018-12-05
|
||||
@@ -621,7 +589,7 @@ Android app team for helping to improve our REST API:
|
||||
### Fixed
|
||||
- Various frontend fixes
|
||||
- Fix sidebar drag issues
|
||||
- Improvements for IE11
|
||||
- Improvements for IE11
|
||||
- Fix bug when draging a card to an empty stack
|
||||
|
||||
## 0.2.1 - 2017-07-04
|
||||
@@ -695,7 +663,7 @@ Android app team for helping to improve our REST API:
|
||||
|
||||
### Fixed
|
||||
- Various styling improvements
|
||||
- Fix problems with MySQL and PostgreSQL
|
||||
- Fix problems with MySQL and PostgreSQL
|
||||
- Select first color by default when creating boards
|
||||
- Fix error when changing board permissions
|
||||
|
||||
@@ -703,9 +671,9 @@ Android app team for helping to improve our REST API:
|
||||
|
||||
### Added
|
||||
- Sharing boards with other users
|
||||
- Create and manage boards
|
||||
- Create and manage boards
|
||||
- Sort cards on stacks by drag-and-drop
|
||||
- Assign labels
|
||||
- Markdown notes for each card
|
||||
- Archive cards
|
||||
- Archive cards
|
||||
|
||||
|
||||
10
Makefile
10
Makefile
@@ -30,6 +30,16 @@ build: clean-dist install-deps build-js
|
||||
|
||||
release: clean-dist install-deps-nodev build-js
|
||||
|
||||
lint: lint-js lint-php
|
||||
|
||||
lint-js:
|
||||
npm run lint
|
||||
npm run stylelint
|
||||
|
||||
lint-php:
|
||||
composer run lint 1>/dev/null
|
||||
composer run cs:check
|
||||
|
||||
build-js: install-deps-js
|
||||
npm run build
|
||||
|
||||
|
||||
@@ -65,13 +65,18 @@ Improvements on Nextcloud server and Deck itself will improve the situation.
|
||||
|
||||
## Developing
|
||||
|
||||
### Nextcloud environment
|
||||
|
||||
You need to setup a [development environment](https://docs.nextcloud.com/server/latest/developer_manual//getting_started/devenv.html) of the current nextcloud version. You can also alternatively install & run the [nextcloud docker container](https://github.com/juliushaertl/nextcloud-docker-dev).
|
||||
After the finished installation, you can clone the deck project directly in the `/[nextcloud-docker-dev-dir]/workspace/server/apps/` folder.
|
||||
|
||||
### PHP
|
||||
|
||||
Nothing to prepare, just dig into the code.
|
||||
|
||||
### JavaScript
|
||||
|
||||
This requires at least Node 14 and npm 7 to be installed.
|
||||
This requires at least Node 16 and npm 7 to be installed.
|
||||
|
||||
Deck requires running a `make build-js` to install npm dependencies and build the JavaScript code using webpack. While developing you can also use `make watch` to rebuild everytime the code changes.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>1.8.2</version>
|
||||
<version>1.9.0-beta.1</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<namespace>Deck</namespace>
|
||||
@@ -34,7 +34,7 @@
|
||||
<database min-version="9.4">pgsql</database>
|
||||
<database>sqlite</database>
|
||||
<database min-version="8.0">mysql</database>
|
||||
<nextcloud min-version="25" max-version="25"/>
|
||||
<nextcloud min-version="26" max-version="26"/>
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\Deck\Cron\DeleteCron</job>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"symfony/event-dispatcher": "^4.0",
|
||||
"vimeo/psalm": "^4.3",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.2",
|
||||
"nextcloud/ocp": "dev-stable25"
|
||||
"nextcloud/ocp": "dev-master"
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
|
||||
145
composer.lock
generated
145
composer.lock
generated
@@ -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": "445858d371d9a1c7057d0603c566966a",
|
||||
"content-hash": "ef9413dedd4d47de717c4dea87a07000",
|
||||
"packages": [
|
||||
{
|
||||
"name": "cogpowered/finediff",
|
||||
@@ -1192,16 +1192,16 @@
|
||||
},
|
||||
{
|
||||
"name": "nextcloud/ocp",
|
||||
"version": "dev-stable25",
|
||||
"version": "dev-master",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nextcloud-deps/ocp.git",
|
||||
"reference": "9b19a5a12c990cafe832aa8ccc95be4f57f24c9d"
|
||||
"reference": "3c68cd0de0c5dea151f28f414d9a30e37950217f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/9b19a5a12c990cafe832aa8ccc95be4f57f24c9d",
|
||||
"reference": "9b19a5a12c990cafe832aa8ccc95be4f57f24c9d",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/3c68cd0de0c5dea151f28f414d9a30e37950217f",
|
||||
"reference": "3c68cd0de0c5dea151f28f414d9a30e37950217f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1210,6 +1210,7 @@
|
||||
"psr/event-dispatcher": "^1.0",
|
||||
"psr/log": "^1.1"
|
||||
},
|
||||
"default-branch": true,
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@@ -1229,22 +1230,22 @@
|
||||
"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/stable25"
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
|
||||
},
|
||||
"time": "2022-11-11T00:48:02+00:00"
|
||||
"time": "2022-10-22T00:59:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
"version": "v4.14.0",
|
||||
"version": "v4.15.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
|
||||
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
|
||||
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
|
||||
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1285,9 +1286,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0"
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1"
|
||||
},
|
||||
"time": "2022-05-31T20:59:12+00:00"
|
||||
"time": "2022-09-04T07:30:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "openlss/lib-array2xml",
|
||||
@@ -1674,25 +1675,30 @@
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/type-resolver",
|
||||
"version": "1.6.1",
|
||||
"version": "1.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
||||
"reference": "77a32518733312af16a44300404e945338981de3"
|
||||
"reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
|
||||
"reference": "77a32518733312af16a44300404e945338981de3",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d",
|
||||
"reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2 || ^8.0",
|
||||
"php": "^7.4 || ^8.0",
|
||||
"phpdocumentor/reflection-common": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-tokenizer": "*",
|
||||
"psalm/phar": "^4.8"
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
"phpstan/phpstan": "^1.8",
|
||||
"phpstan/phpstan-phpunit": "^1.1",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"rector/rector": "^0.13.9",
|
||||
"vimeo/psalm": "^4.25"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -1718,9 +1724,9 @@
|
||||
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
|
||||
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
|
||||
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2"
|
||||
},
|
||||
"time": "2022-03-15T21:29:03+00:00"
|
||||
"time": "2022-10-14T12:47:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
@@ -2042,16 +2048,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "9.5.24",
|
||||
"version": "9.5.25",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5"
|
||||
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5",
|
||||
"reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
|
||||
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2073,14 +2079,14 @@
|
||||
"phpunit/php-timer": "^5.0.2",
|
||||
"sebastian/cli-parser": "^1.0.1",
|
||||
"sebastian/code-unit": "^1.0.6",
|
||||
"sebastian/comparator": "^4.0.5",
|
||||
"sebastian/comparator": "^4.0.8",
|
||||
"sebastian/diff": "^4.0.3",
|
||||
"sebastian/environment": "^5.1.3",
|
||||
"sebastian/exporter": "^4.0.3",
|
||||
"sebastian/exporter": "^4.0.5",
|
||||
"sebastian/global-state": "^5.0.1",
|
||||
"sebastian/object-enumerator": "^4.0.3",
|
||||
"sebastian/resource-operations": "^3.0.3",
|
||||
"sebastian/type": "^3.1",
|
||||
"sebastian/type": "^3.2",
|
||||
"sebastian/version": "^3.0.2"
|
||||
},
|
||||
"suggest": {
|
||||
@@ -2124,7 +2130,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2134,9 +2140,13 @@
|
||||
{
|
||||
"url": "https://github.com/sebastianbergmann",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-30T07:42:16+00:00"
|
||||
"time": "2022-09-25T03:44:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
@@ -2936,16 +2946,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/comparator",
|
||||
"version": "4.0.6",
|
||||
"version": "4.0.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/comparator.git",
|
||||
"reference": "55f4261989e546dc112258c7a75935a81a7ce382"
|
||||
"reference": "fa0f136dd2334583309d32b62544682ee972b51a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
|
||||
"reference": "55f4261989e546dc112258c7a75935a81a7ce382",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
|
||||
"reference": "fa0f136dd2334583309d32b62544682ee972b51a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2998,7 +3008,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/comparator/issues",
|
||||
"source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
|
||||
"source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3006,7 +3016,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-26T15:49:45+00:00"
|
||||
"time": "2022-09-14T12:41:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/complexity",
|
||||
@@ -3196,16 +3206,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
"version": "4.0.4",
|
||||
"version": "4.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/exporter.git",
|
||||
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
|
||||
"reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
|
||||
"reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3261,7 +3271,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/exporter/issues",
|
||||
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
|
||||
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3269,7 +3279,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-11-11T14:18:36+00:00"
|
||||
"time": "2022-09-14T06:03:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/global-state",
|
||||
@@ -3624,16 +3634,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/type",
|
||||
"version": "3.1.0",
|
||||
"version": "3.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/type.git",
|
||||
"reference": "fb44e1cc6e557418387ad815780360057e40753e"
|
||||
"reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e",
|
||||
"reference": "fb44e1cc6e557418387ad815780360057e40753e",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
|
||||
"reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3645,7 +3655,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.1-dev"
|
||||
"dev-master": "3.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -3668,7 +3678,7 @@
|
||||
"homepage": "https://github.com/sebastianbergmann/type",
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/type/issues",
|
||||
"source": "https://github.com/sebastianbergmann/type/tree/3.1.0"
|
||||
"source": "https://github.com/sebastianbergmann/type/tree/3.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3676,7 +3686,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-29T06:55:37+00:00"
|
||||
"time": "2022-09-12T14:47:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/version",
|
||||
@@ -3733,16 +3743,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v5.4.12",
|
||||
"version": "v5.4.14",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1"
|
||||
"reference": "984ea2c0f45f42dfed01d2f3987b187467c4b16d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1",
|
||||
"reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/984ea2c0f45f42dfed01d2f3987b187467c4b16d",
|
||||
"reference": "984ea2c0f45f42dfed01d2f3987b187467c4b16d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3812,7 +3822,7 @@
|
||||
"terminal"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/console/tree/v5.4.12"
|
||||
"source": "https://github.com/symfony/console/tree/v5.4.14"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3828,7 +3838,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-17T13:18:05+00:00"
|
||||
"time": "2022-10-07T08:01:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
@@ -5036,16 +5046,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/string",
|
||||
"version": "v5.4.12",
|
||||
"version": "v5.4.14",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "2fc515e512d721bf31ea76bd02fe23ada4640058"
|
||||
"reference": "089e7237497fae7a9c404d0c3aeb8db3254733e4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/2fc515e512d721bf31ea76bd02fe23ada4640058",
|
||||
"reference": "2fc515e512d721bf31ea76bd02fe23ada4640058",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/089e7237497fae7a9c404d0c3aeb8db3254733e4",
|
||||
"reference": "089e7237497fae7a9c404d0c3aeb8db3254733e4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5102,7 +5112,7 @@
|
||||
"utf8"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/string/tree/v5.4.12"
|
||||
"source": "https://github.com/symfony/string/tree/v5.4.14"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5118,7 +5128,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-12T17:03:11+00:00"
|
||||
"time": "2022-10-05T15:16:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "theseer/tokenizer",
|
||||
@@ -5172,16 +5182,16 @@
|
||||
},
|
||||
{
|
||||
"name": "vimeo/psalm",
|
||||
"version": "4.27.0",
|
||||
"version": "4.29.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vimeo/psalm.git",
|
||||
"reference": "faf106e717c37b8c81721845dba9de3d8deed8ff"
|
||||
"reference": "7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vimeo/psalm/zipball/faf106e717c37b8c81721845dba9de3d8deed8ff",
|
||||
"reference": "faf106e717c37b8c81721845dba9de3d8deed8ff",
|
||||
"url": "https://api.github.com/repos/vimeo/psalm/zipball/7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3",
|
||||
"reference": "7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5220,6 +5230,7 @@
|
||||
"phpdocumentor/reflection-docblock": "^5",
|
||||
"phpmyadmin/sql-parser": "5.1.0||dev-master",
|
||||
"phpspec/prophecy": ">=1.9.0",
|
||||
"phpstan/phpdoc-parser": "1.2.* || 1.6.4",
|
||||
"phpunit/phpunit": "^9.0",
|
||||
"psalm/plugin-phpunit": "^0.16",
|
||||
"slevomat/coding-standard": "^7.0",
|
||||
@@ -5273,9 +5284,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/vimeo/psalm/issues",
|
||||
"source": "https://github.com/vimeo/psalm/tree/4.27.0"
|
||||
"source": "https://github.com/vimeo/psalm/tree/4.29.0"
|
||||
},
|
||||
"time": "2022-08-31T13:47:09+00:00"
|
||||
"time": "2022-10-11T17:09:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
|
||||
@@ -13,7 +13,7 @@ describe('Board', function() {
|
||||
})
|
||||
|
||||
it('Can create a board', function() {
|
||||
const board = 'TestBoard'
|
||||
const board = 'Test'
|
||||
|
||||
cy.intercept({
|
||||
method: 'POST',
|
||||
|
||||
@@ -183,10 +183,8 @@ 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" : "Списъкът е изтрит",
|
||||
@@ -262,7 +260,6 @@ 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/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"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,7 +258,6 @@
|
||||
"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/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.",
|
||||
|
||||
@@ -183,10 +183,8 @@ OC.L10N.register(
|
||||
"Failed to transfer the board to {user}" : "Nepodařilo se předat vlastnictví tabule uživateli {user}",
|
||||
"Add a new list" : "Přidat nový sloupec",
|
||||
"Archive all cards" : "Archivovat všechny karty",
|
||||
"Unarchive all cards" : "Zrušit archivaci všech karet",
|
||||
"Delete list" : "Smazat seznam",
|
||||
"Archive all cards in this list" : "Archivovat všechny karty v tomto seznamu",
|
||||
"Unarchive all cards in this list" : "Zrušit archivaci všech karet v tomto seznamu",
|
||||
"Add a new card" : "Přidat novou kartu",
|
||||
"Card name" : "Název karty",
|
||||
"List deleted" : "Seznam smazán",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "Sdíleno s vámi",
|
||||
"Deck settings" : "Nastavení pro Deck",
|
||||
"Use bigger card view" : "Použít větší zobrazení karet",
|
||||
"Show card ID badge" : "Zobrazit odznáček s identifikátorem karty",
|
||||
"Show boards in calendar/tasks" : "Zobrazit tabule v kalendáři/úkolech",
|
||||
"Limit deck usage of groups" : "Omezit využití 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." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"Failed to transfer the board to {user}" : "Nepodařilo se předat vlastnictví tabule uživateli {user}",
|
||||
"Add a new list" : "Přidat nový sloupec",
|
||||
"Archive all cards" : "Archivovat všechny karty",
|
||||
"Unarchive all cards" : "Zrušit archivaci všech karet",
|
||||
"Delete list" : "Smazat seznam",
|
||||
"Archive all cards in this list" : "Archivovat všechny karty v tomto seznamu",
|
||||
"Unarchive all cards in this list" : "Zrušit archivaci všech karet v tomto seznamu",
|
||||
"Add a new card" : "Přidat novou kartu",
|
||||
"Card name" : "Název karty",
|
||||
"List deleted" : "Seznam smazán",
|
||||
@@ -260,7 +258,6 @@
|
||||
"Shared with you" : "Sdíleno s vámi",
|
||||
"Deck settings" : "Nastavení pro Deck",
|
||||
"Use bigger card view" : "Použít větší zobrazení karet",
|
||||
"Show card ID badge" : "Zobrazit odznáček s identifikátorem karty",
|
||||
"Show boards in calendar/tasks" : "Zobrazit tabule v kalendáři/úkolech",
|
||||
"Limit deck usage of groups" : "Omezit využití 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." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny.",
|
||||
|
||||
@@ -183,10 +183,8 @@ OC.L10N.register(
|
||||
"Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden",
|
||||
"Add a new list" : "Eine neue Liste hinzufügen",
|
||||
"Archive all cards" : "Alle Karten archivieren",
|
||||
"Unarchive all cards" : "Alle Karten dearchivieren",
|
||||
"Delete list" : "Liste löschen",
|
||||
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
|
||||
"Unarchive all cards in this list" : "Alle Karten dieser Liste dearchivieren",
|
||||
"Add a new card" : "Neue Karte hinzufügen",
|
||||
"Card name" : "Kartenname",
|
||||
"List deleted" : "Liste gelöscht",
|
||||
@@ -215,10 +213,10 @@ OC.L10N.register(
|
||||
"The title cannot be empty." : "Der Titel darf nicht leer sein.",
|
||||
"No comments yet. Begin the discussion!" : "Bislang keine Kommentare. Beginne die Diskussion!",
|
||||
"Failed to load comments" : "Das Laden der Kommentare ist fehlgeschlagen",
|
||||
"Assign a tag to this card…" : "Dieser Karte ein Schlagwort zuweisen …",
|
||||
"Assign a tag to this card…" : "Dieser Karte ein Schlagwort zuweisen…",
|
||||
"Assign to users" : "Benutzern zuweisen",
|
||||
"Assign to users/groups/circles" : "An Benutzer, Gruppen oder Kreise zuweisen",
|
||||
"Assign a user to this card…" : "Diese Karte einem Benutzer zuweisen …",
|
||||
"Assign a user to this card…" : "Diese Karte einem Benutzer zuweisen…",
|
||||
"Due date" : "Fälligkeitsdatum",
|
||||
"Set a due date" : "Ein Ablaufdatum setzen",
|
||||
"Remove due date" : "Fälligkeitsdatum löschen",
|
||||
@@ -237,7 +235,7 @@ OC.L10N.register(
|
||||
"Description" : "Beschreibung",
|
||||
"(Unsaved)" : "(nicht gespeichert)",
|
||||
"(Saving…)" : "(Speichere…)",
|
||||
"Formatting help" : "Hilfe zur Formatierung",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Edit description" : "Beschreibung bearbeiten",
|
||||
"View description" : "Beschreibung anzeigen",
|
||||
"Add Attachment" : "Anhang anhängen",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden",
|
||||
"Add a new list" : "Eine neue Liste hinzufügen",
|
||||
"Archive all cards" : "Alle Karten archivieren",
|
||||
"Unarchive all cards" : "Alle Karten dearchivieren",
|
||||
"Delete list" : "Liste löschen",
|
||||
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
|
||||
"Unarchive all cards in this list" : "Alle Karten dieser Liste dearchivieren",
|
||||
"Add a new card" : "Neue Karte hinzufügen",
|
||||
"Card name" : "Kartenname",
|
||||
"List deleted" : "Liste gelöscht",
|
||||
@@ -213,10 +211,10 @@
|
||||
"The title cannot be empty." : "Der Titel darf nicht leer sein.",
|
||||
"No comments yet. Begin the discussion!" : "Bislang keine Kommentare. Beginne die Diskussion!",
|
||||
"Failed to load comments" : "Das Laden der Kommentare ist fehlgeschlagen",
|
||||
"Assign a tag to this card…" : "Dieser Karte ein Schlagwort zuweisen …",
|
||||
"Assign a tag to this card…" : "Dieser Karte ein Schlagwort zuweisen…",
|
||||
"Assign to users" : "Benutzern zuweisen",
|
||||
"Assign to users/groups/circles" : "An Benutzer, Gruppen oder Kreise zuweisen",
|
||||
"Assign a user to this card…" : "Diese Karte einem Benutzer zuweisen …",
|
||||
"Assign a user to this card…" : "Diese Karte einem Benutzer zuweisen…",
|
||||
"Due date" : "Fälligkeitsdatum",
|
||||
"Set a due date" : "Ein Ablaufdatum setzen",
|
||||
"Remove due date" : "Fälligkeitsdatum löschen",
|
||||
@@ -235,7 +233,7 @@
|
||||
"Description" : "Beschreibung",
|
||||
"(Unsaved)" : "(nicht gespeichert)",
|
||||
"(Saving…)" : "(Speichere…)",
|
||||
"Formatting help" : "Hilfe zur Formatierung",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Edit description" : "Beschreibung bearbeiten",
|
||||
"View description" : "Beschreibung anzeigen",
|
||||
"Add Attachment" : "Anhang anhängen",
|
||||
|
||||
@@ -183,10 +183,8 @@ OC.L10N.register(
|
||||
"Failed to transfer the board to {user}" : "Das Board konnte nicht auf {user} übertragen werden",
|
||||
"Add a new list" : "Eine neue Liste hinzufügen",
|
||||
"Archive all cards" : "Alle Karten archivieren",
|
||||
"Unarchive all cards" : "Alle Karten dearchivieren",
|
||||
"Delete list" : "Liste löschen",
|
||||
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
|
||||
"Unarchive all cards in this list" : "Alle Karten in dieser Liste dearchivieren",
|
||||
"Add a new card" : "Neue Karte hinzufügen",
|
||||
"Card name" : "Kartenname",
|
||||
"List deleted" : "Liste gelöscht",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "Mit Ihnen geteilt",
|
||||
"Deck settings" : "Deck-Einstellungen",
|
||||
"Use bigger card view" : "Größere Kartenansicht verwenden",
|
||||
"Show card ID badge" : "Abzeichen mit Karten-ID zeigen",
|
||||
"Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen",
|
||||
"Limit deck usage of groups" : "Nutzung auf Gruppen einschränken",
|
||||
"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." : "Wenn Sie Deck einschränken, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"Failed to transfer the board to {user}" : "Das Board konnte nicht auf {user} übertragen werden",
|
||||
"Add a new list" : "Eine neue Liste hinzufügen",
|
||||
"Archive all cards" : "Alle Karten archivieren",
|
||||
"Unarchive all cards" : "Alle Karten dearchivieren",
|
||||
"Delete list" : "Liste löschen",
|
||||
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
|
||||
"Unarchive all cards in this list" : "Alle Karten in dieser Liste dearchivieren",
|
||||
"Add a new card" : "Neue Karte hinzufügen",
|
||||
"Card name" : "Kartenname",
|
||||
"List deleted" : "Liste gelöscht",
|
||||
@@ -260,7 +258,6 @@
|
||||
"Shared with you" : "Mit Ihnen geteilt",
|
||||
"Deck settings" : "Deck-Einstellungen",
|
||||
"Use bigger card view" : "Größere Kartenansicht verwenden",
|
||||
"Show card ID badge" : "Abzeichen mit Karten-ID zeigen",
|
||||
"Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen",
|
||||
"Limit deck usage of groups" : "Nutzung auf Gruppen einschränken",
|
||||
"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." : "Wenn Sie Deck einschränken, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.",
|
||||
|
||||
@@ -183,10 +183,8 @@ OC.L10N.register(
|
||||
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
|
||||
"Add a new list" : "Añadir una lista nueva",
|
||||
"Archive all cards" : "Archivar todas las tarjetas",
|
||||
"Unarchive all cards" : "Desarchivar todas las tarjetas",
|
||||
"Delete list" : "Eliminar lista",
|
||||
"Archive all cards in this list" : "Archivar todas las tarjetas en esta lista",
|
||||
"Unarchive all cards in this list" : "Desarchivar todas las tarjetas en esta lista",
|
||||
"Add a new card" : "Añadir una nueva tarjeta",
|
||||
"Card name" : "Nombre de la tarjeta",
|
||||
"List deleted" : "Lista borrada",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "Compartido contigo",
|
||||
"Deck settings" : "Configuración del tablero",
|
||||
"Use bigger card view" : "Usar vista de tarjeta mayor",
|
||||
"Show card ID badge" : "Mostrar insignia de la ID de tarjeta",
|
||||
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
|
||||
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
|
||||
"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 Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
|
||||
"Add a new list" : "Añadir una lista nueva",
|
||||
"Archive all cards" : "Archivar todas las tarjetas",
|
||||
"Unarchive all cards" : "Desarchivar todas las tarjetas",
|
||||
"Delete list" : "Eliminar lista",
|
||||
"Archive all cards in this list" : "Archivar todas las tarjetas en esta lista",
|
||||
"Unarchive all cards in this list" : "Desarchivar todas las tarjetas en esta lista",
|
||||
"Add a new card" : "Añadir una nueva tarjeta",
|
||||
"Card name" : "Nombre de la tarjeta",
|
||||
"List deleted" : "Lista borrada",
|
||||
@@ -260,7 +258,6 @@
|
||||
"Shared with you" : "Compartido contigo",
|
||||
"Deck settings" : "Configuración del tablero",
|
||||
"Use bigger card view" : "Usar vista de tarjeta mayor",
|
||||
"Show card ID badge" : "Mostrar insignia de la ID de tarjeta",
|
||||
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
|
||||
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
|
||||
"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 Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
|
||||
|
||||
@@ -183,10 +183,8 @@ 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",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "Partagés avec vous",
|
||||
"Deck settings" : "Paramètres de Deck",
|
||||
"Use bigger card view" : "Utiliser la vue large des cartes",
|
||||
"Show card ID badge" : "Afficher la carte d'identité du badge",
|
||||
"Show boards in calendar/tasks" : "Afficher les tableaux dans les agendas/tâches",
|
||||
"Limit deck usage of groups" : "Limiter l'utilisation du tableau aux groupes",
|
||||
"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." : "Limiter Deck empêchera les utilisateurs ne faisant pas partie de ces groupes de créer leurs propres tableaux. Ces utilisateurs pourront toujours travailler sur les tableaux qui ont été partagés avec eux.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"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",
|
||||
@@ -260,7 +258,6 @@
|
||||
"Shared with you" : "Partagés avec vous",
|
||||
"Deck settings" : "Paramètres de Deck",
|
||||
"Use bigger card view" : "Utiliser la vue large des cartes",
|
||||
"Show card ID badge" : "Afficher la carte d'identité du badge",
|
||||
"Show boards in calendar/tasks" : "Afficher les tableaux dans les agendas/tâches",
|
||||
"Limit deck usage of groups" : "Limiter l'utilisation du tableau aux groupes",
|
||||
"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." : "Limiter Deck empêchera les utilisateurs ne faisant pas partie de ces groupes de créer leurs propres tableaux. Ces utilisateurs pourront toujours travailler sur les tableaux qui ont été partagés avec eux.",
|
||||
|
||||
@@ -183,10 +183,8 @@ 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",
|
||||
@@ -262,7 +260,6 @@ 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.",
|
||||
@@ -289,7 +286,6 @@ 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",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"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,7 +258,6 @@
|
||||
"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.",
|
||||
@@ -287,7 +284,6 @@
|
||||
"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",
|
||||
|
||||
@@ -70,7 +70,6 @@ OC.L10N.register(
|
||||
"Personal" : "Asmeniniai",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortelę \"%s\" ties \"%s\" priskyrė jums %s.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortelė „%s“, esanti lentoje „%s“, pasiekė savo galutinį terminą.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "Kortelė {deck-card}, esanti lentoje {deck-board} pasiekė savo galutinio termino datą.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s paminėjo jus komentare ties \"%s\".",
|
||||
"The board \"%s\" has been shared with you by %s." : "Lentą \"%s\" su jumis bendrina %s.",
|
||||
"%s on %s" : "%s ant %s",
|
||||
@@ -201,9 +200,9 @@ OC.L10N.register(
|
||||
"Assign to users" : "Priskirti naudotojams",
|
||||
"Assign to users/groups/circles" : "Priskirti naudotojams/grupėms/ratams",
|
||||
"Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…",
|
||||
"Due date" : "Galutinio termino data",
|
||||
"Due date" : "Terminas",
|
||||
"Set a due date" : "Nustatyti galutinį terminą",
|
||||
"Remove due date" : "Šalinti galutinio termino datą",
|
||||
"Remove due date" : "Pašalinti terminą",
|
||||
"Select Date" : "Pasirinkti datą",
|
||||
"Today" : "Šiandien",
|
||||
"Tomorrow" : "Rytoj",
|
||||
@@ -244,9 +243,9 @@ OC.L10N.register(
|
||||
"Clone board" : "Dubliuoti lentą",
|
||||
"Unarchive board" : "Išarchyvuoti lentą",
|
||||
"Archive board" : "Archyvuoti lentą",
|
||||
"Turn on due date reminders" : "Įjungti priminimus apie galutinio termino datą",
|
||||
"Turn off due date reminders" : "Išjungti priminimus apie galutinio termino datą",
|
||||
"Due date reminders" : "Priminimai apie galutinio termino datą",
|
||||
"Turn on due date reminders" : "Įjungti priminimus apie galutinį terminą",
|
||||
"Turn off due date reminders" : "Išjungti priminimus apie galutinį terminą",
|
||||
"Due date reminders" : "Priminimai apie galutinį terminą",
|
||||
"All cards" : "Visos kortelės",
|
||||
"Assigned cards" : "Priskirtos kortelės",
|
||||
"No notifications" : "Pranešimų nėra",
|
||||
@@ -258,7 +257,6 @@ OC.L10N.register(
|
||||
"Delete the board?" : "Ištrinti lentą?",
|
||||
"No due" : "Be galutinio termino",
|
||||
"No results found" : "Nerasta jokių rezultatų",
|
||||
"Due on {date}" : "Galutinis terminas {date}",
|
||||
"Link to a board" : "Susieti su lenta",
|
||||
"Link to a card" : "Susieti su kortele",
|
||||
"Create a card" : "Sukurti kortelę",
|
||||
|
||||
@@ -68,7 +68,6 @@
|
||||
"Personal" : "Asmeniniai",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortelę \"%s\" ties \"%s\" priskyrė jums %s.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortelė „%s“, esanti lentoje „%s“, pasiekė savo galutinį terminą.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "Kortelė {deck-card}, esanti lentoje {deck-board} pasiekė savo galutinio termino datą.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s paminėjo jus komentare ties \"%s\".",
|
||||
"The board \"%s\" has been shared with you by %s." : "Lentą \"%s\" su jumis bendrina %s.",
|
||||
"%s on %s" : "%s ant %s",
|
||||
@@ -199,9 +198,9 @@
|
||||
"Assign to users" : "Priskirti naudotojams",
|
||||
"Assign to users/groups/circles" : "Priskirti naudotojams/grupėms/ratams",
|
||||
"Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…",
|
||||
"Due date" : "Galutinio termino data",
|
||||
"Due date" : "Terminas",
|
||||
"Set a due date" : "Nustatyti galutinį terminą",
|
||||
"Remove due date" : "Šalinti galutinio termino datą",
|
||||
"Remove due date" : "Pašalinti terminą",
|
||||
"Select Date" : "Pasirinkti datą",
|
||||
"Today" : "Šiandien",
|
||||
"Tomorrow" : "Rytoj",
|
||||
@@ -242,9 +241,9 @@
|
||||
"Clone board" : "Dubliuoti lentą",
|
||||
"Unarchive board" : "Išarchyvuoti lentą",
|
||||
"Archive board" : "Archyvuoti lentą",
|
||||
"Turn on due date reminders" : "Įjungti priminimus apie galutinio termino datą",
|
||||
"Turn off due date reminders" : "Išjungti priminimus apie galutinio termino datą",
|
||||
"Due date reminders" : "Priminimai apie galutinio termino datą",
|
||||
"Turn on due date reminders" : "Įjungti priminimus apie galutinį terminą",
|
||||
"Turn off due date reminders" : "Išjungti priminimus apie galutinį terminą",
|
||||
"Due date reminders" : "Priminimai apie galutinį terminą",
|
||||
"All cards" : "Visos kortelės",
|
||||
"Assigned cards" : "Priskirtos kortelės",
|
||||
"No notifications" : "Pranešimų nėra",
|
||||
@@ -256,7 +255,6 @@
|
||||
"Delete the board?" : "Ištrinti lentą?",
|
||||
"No due" : "Be galutinio termino",
|
||||
"No results found" : "Nerasta jokių rezultatų",
|
||||
"Due on {date}" : "Galutinis terminas {date}",
|
||||
"Link to a board" : "Susieti su lenta",
|
||||
"Link to a card" : "Susieti su kortele",
|
||||
"Create a card" : "Sukurti kortelę",
|
||||
|
||||
@@ -183,10 +183,8 @@ OC.L10N.register(
|
||||
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
|
||||
"Add a new list" : "Dodaj nową listę",
|
||||
"Archive all cards" : "Zarchiwizuj wszystkie karty",
|
||||
"Unarchive all cards" : "Przywróć wszystkie karty z archiwum",
|
||||
"Delete list" : "Usuń listę",
|
||||
"Archive all cards in this list" : "Zarchiwizuj wszystkie karty na tej liście",
|
||||
"Unarchive all cards in this list" : "Cofnij archiwizację wszystkich kart z tej listy",
|
||||
"Add a new card" : "Dodaj nową kartę",
|
||||
"Card name" : "Nazwa karty",
|
||||
"List deleted" : "Lista usunięta",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "Udostępnione Tobie",
|
||||
"Deck settings" : "Ustawienia Tablicy",
|
||||
"Use bigger card view" : "Użyj większego widoku karty",
|
||||
"Show card ID badge" : "Pokaż ID karty",
|
||||
"Show boards in calendar/tasks" : "Pokaż tablice w kalendarzu/zadaniach",
|
||||
"Limit deck usage of groups" : "Ogranicz użycie tablic dla grup",
|
||||
"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." : "Ograniczenie Tablicy zablokuje użytkownikom z tych grup możliwość tworzenia własnych tablic. Użytkownicy nadal będą mogli pracować na tablicach, które zostały im udostępnione.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
|
||||
"Add a new list" : "Dodaj nową listę",
|
||||
"Archive all cards" : "Zarchiwizuj wszystkie karty",
|
||||
"Unarchive all cards" : "Przywróć wszystkie karty z archiwum",
|
||||
"Delete list" : "Usuń listę",
|
||||
"Archive all cards in this list" : "Zarchiwizuj wszystkie karty na tej liście",
|
||||
"Unarchive all cards in this list" : "Cofnij archiwizację wszystkich kart z tej listy",
|
||||
"Add a new card" : "Dodaj nową kartę",
|
||||
"Card name" : "Nazwa karty",
|
||||
"List deleted" : "Lista usunięta",
|
||||
@@ -260,7 +258,6 @@
|
||||
"Shared with you" : "Udostępnione Tobie",
|
||||
"Deck settings" : "Ustawienia Tablicy",
|
||||
"Use bigger card view" : "Użyj większego widoku karty",
|
||||
"Show card ID badge" : "Pokaż ID karty",
|
||||
"Show boards in calendar/tasks" : "Pokaż tablice w kalendarzu/zadaniach",
|
||||
"Limit deck usage of groups" : "Ogranicz użycie tablic dla grup",
|
||||
"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." : "Ograniczenie Tablicy zablokuje użytkownikom z tych grup możliwość tworzenia własnych tablic. Użytkownicy nadal będą mogli pracować na tablicach, które zostały im udostępnione.",
|
||||
|
||||
@@ -183,10 +183,8 @@ 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ý",
|
||||
@@ -262,7 +260,6 @@ 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í.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"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,7 +258,6 @@
|
||||
"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í.",
|
||||
|
||||
23
l10n/sv.js
23
l10n/sv.js
@@ -136,7 +136,6 @@ OC.L10N.register(
|
||||
"Archived cards" : "Arkiverade kort",
|
||||
"Add list" : "Lägg till lista...",
|
||||
"List name" : "Namn på lista",
|
||||
"Active filters" : "Aktiva filter",
|
||||
"Apply filter" : "Tillämpa filter",
|
||||
"Filter by tag" : "Filtrera efter tagg",
|
||||
"Filter by assigned user" : "Filtrera efter tilldelad användare",
|
||||
@@ -176,17 +175,11 @@ OC.L10N.register(
|
||||
"Owner" : "Ägare",
|
||||
"Delete" : "Ta bort",
|
||||
"Failed to create share with {displayName}" : "Kunde inte skapa delning med {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Är du säker att du vill överföra tavlan {title} till {user}?",
|
||||
"Transfer the board." : "Överför tavlan.",
|
||||
"Transfer" : "Överför",
|
||||
"The board has been transferred to {user}" : "Tavlan har överförts till {user}",
|
||||
"Failed to transfer the board to {user}" : "Kunde inte överföra tavlan till {user}",
|
||||
"Add a new list" : "Lägg till en ny lista",
|
||||
"Archive all cards" : "Arkivera alla kort",
|
||||
"Unarchive all cards" : "Ta ut alla kort ur arkivet",
|
||||
"Delete list" : "Ta bort lista",
|
||||
"Archive all cards in this list" : "Arkivera alla kort i denna lista",
|
||||
"Unarchive all cards in this list" : "Ta ut alla kort i denna lista ur arkivet",
|
||||
"Add a new card" : "Lägg till ett nytt kort",
|
||||
"Card name" : "Kortets namn",
|
||||
"List deleted" : "Listan har raderats",
|
||||
@@ -244,9 +237,7 @@ OC.L10N.register(
|
||||
"Write a description …" : "Ange en beskrivning ...",
|
||||
"Choose attachment" : "Välj bilaga",
|
||||
"(group)" : " (grupp)",
|
||||
"Todo items" : "Todo saker",
|
||||
"{count} comments, {unread} unread" : "{count} kommentarer, {unread} olästa",
|
||||
"Edit card title" : "Ändra korttitel",
|
||||
"Assign to me" : "Tilldela till mig",
|
||||
"Unassign myself" : "Ta bort från mig själv",
|
||||
"Move card" : "Flytta kort",
|
||||
@@ -260,9 +251,7 @@ OC.L10N.register(
|
||||
"All boards" : "Alla tavlor",
|
||||
"Archived boards" : "Arkiverade tavlor",
|
||||
"Shared with you" : "Delad med dig",
|
||||
"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",
|
||||
"Limit deck usage of groups" : "Begränsa användningen av grupper",
|
||||
"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." : "Begränsning av Deck blockerar användare som inte ingår i dessa grupper från att skapa egna tavlor. Användare kan dock fortfarande integrera med tavlor som har delats med dem.",
|
||||
@@ -282,19 +271,13 @@ OC.L10N.register(
|
||||
"Only assigned cards" : "Bara tilldelade kort",
|
||||
"No reminder" : "Ingen påminnelse",
|
||||
"An error occurred" : "Ett fel uppstod",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Är du säker på att du vill radera brädet {title}? Detta kommer radera all data som tillhör brädet inklusive arkiverade kort.",
|
||||
"Delete the board?" : "Ta bort tavlan?",
|
||||
"Loading filtered view" : "Laddar filtrerad vy",
|
||||
"No due" : "Inget slut",
|
||||
"Search for {searchQuery} in all boards" : "Sök efter {searchQuery} i alla tavlor",
|
||||
"No results found" : "Inga resultat funna",
|
||||
"{stack} in {board}" : "{stack} i {board}",
|
||||
"Click to expand description" : "Klicka för att utöka beskrivningen",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Skapades {created}\n* Ändrades senast {lastMod}\n* {nbAttachments} bilagor\n* {nbComments} kommentarer",
|
||||
"{nbCards} cards" : "{nbCards} kort",
|
||||
"No upcoming cards" : "Inga kommande kort",
|
||||
"upcoming cards" : "kommande kort",
|
||||
"Due on {date}" : "Går ut {date}",
|
||||
"Link to a board" : "Länka till en tavla",
|
||||
"Link to a card" : "Länka till ett kort",
|
||||
"Create a card" : "Skapa ett kort",
|
||||
@@ -307,11 +290,7 @@ OC.L10N.register(
|
||||
"Share {file} with a Deck card" : "Dela {file} med ett Deck-kort",
|
||||
"Share" : "Dela",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Är du säker på att du vill överföra brädet {title} för {user}?",
|
||||
"Transfer the board for {user} successfully" : "Överförde brädet för {user}",
|
||||
"Failed to transfer the board for {user}" : "Misslyckades med att överföra brädet för {user}",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Är du säker på att du vill radera tavla {title}? Detta kommer att radera all information från denna tavla.",
|
||||
"This week" : "Denna vecka",
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Är du säker på att du vill överföra brädet {title} för {user}?"
|
||||
"This week" : "Denna vecka"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
23
l10n/sv.json
23
l10n/sv.json
@@ -134,7 +134,6 @@
|
||||
"Archived cards" : "Arkiverade kort",
|
||||
"Add list" : "Lägg till lista...",
|
||||
"List name" : "Namn på lista",
|
||||
"Active filters" : "Aktiva filter",
|
||||
"Apply filter" : "Tillämpa filter",
|
||||
"Filter by tag" : "Filtrera efter tagg",
|
||||
"Filter by assigned user" : "Filtrera efter tilldelad användare",
|
||||
@@ -174,17 +173,11 @@
|
||||
"Owner" : "Ägare",
|
||||
"Delete" : "Ta bort",
|
||||
"Failed to create share with {displayName}" : "Kunde inte skapa delning med {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Är du säker att du vill överföra tavlan {title} till {user}?",
|
||||
"Transfer the board." : "Överför tavlan.",
|
||||
"Transfer" : "Överför",
|
||||
"The board has been transferred to {user}" : "Tavlan har överförts till {user}",
|
||||
"Failed to transfer the board to {user}" : "Kunde inte överföra tavlan till {user}",
|
||||
"Add a new list" : "Lägg till en ny lista",
|
||||
"Archive all cards" : "Arkivera alla kort",
|
||||
"Unarchive all cards" : "Ta ut alla kort ur arkivet",
|
||||
"Delete list" : "Ta bort lista",
|
||||
"Archive all cards in this list" : "Arkivera alla kort i denna lista",
|
||||
"Unarchive all cards in this list" : "Ta ut alla kort i denna lista ur arkivet",
|
||||
"Add a new card" : "Lägg till ett nytt kort",
|
||||
"Card name" : "Kortets namn",
|
||||
"List deleted" : "Listan har raderats",
|
||||
@@ -242,9 +235,7 @@
|
||||
"Write a description …" : "Ange en beskrivning ...",
|
||||
"Choose attachment" : "Välj bilaga",
|
||||
"(group)" : " (grupp)",
|
||||
"Todo items" : "Todo saker",
|
||||
"{count} comments, {unread} unread" : "{count} kommentarer, {unread} olästa",
|
||||
"Edit card title" : "Ändra korttitel",
|
||||
"Assign to me" : "Tilldela till mig",
|
||||
"Unassign myself" : "Ta bort från mig själv",
|
||||
"Move card" : "Flytta kort",
|
||||
@@ -258,9 +249,7 @@
|
||||
"All boards" : "Alla tavlor",
|
||||
"Archived boards" : "Arkiverade tavlor",
|
||||
"Shared with you" : "Delad med dig",
|
||||
"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",
|
||||
"Limit deck usage of groups" : "Begränsa användningen av grupper",
|
||||
"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." : "Begränsning av Deck blockerar användare som inte ingår i dessa grupper från att skapa egna tavlor. Användare kan dock fortfarande integrera med tavlor som har delats med dem.",
|
||||
@@ -280,19 +269,13 @@
|
||||
"Only assigned cards" : "Bara tilldelade kort",
|
||||
"No reminder" : "Ingen påminnelse",
|
||||
"An error occurred" : "Ett fel uppstod",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Är du säker på att du vill radera brädet {title}? Detta kommer radera all data som tillhör brädet inklusive arkiverade kort.",
|
||||
"Delete the board?" : "Ta bort tavlan?",
|
||||
"Loading filtered view" : "Laddar filtrerad vy",
|
||||
"No due" : "Inget slut",
|
||||
"Search for {searchQuery} in all boards" : "Sök efter {searchQuery} i alla tavlor",
|
||||
"No results found" : "Inga resultat funna",
|
||||
"{stack} in {board}" : "{stack} i {board}",
|
||||
"Click to expand description" : "Klicka för att utöka beskrivningen",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Skapades {created}\n* Ändrades senast {lastMod}\n* {nbAttachments} bilagor\n* {nbComments} kommentarer",
|
||||
"{nbCards} cards" : "{nbCards} kort",
|
||||
"No upcoming cards" : "Inga kommande kort",
|
||||
"upcoming cards" : "kommande kort",
|
||||
"Due on {date}" : "Går ut {date}",
|
||||
"Link to a board" : "Länka till en tavla",
|
||||
"Link to a card" : "Länka till ett kort",
|
||||
"Create a card" : "Skapa ett kort",
|
||||
@@ -305,11 +288,7 @@
|
||||
"Share {file} with a Deck card" : "Dela {file} med ett Deck-kort",
|
||||
"Share" : "Dela",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Är du säker på att du vill överföra brädet {title} för {user}?",
|
||||
"Transfer the board for {user} successfully" : "Överförde brädet för {user}",
|
||||
"Failed to transfer the board for {user}" : "Misslyckades med att överföra brädet för {user}",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Är du säker på att du vill radera tavla {title}? Detta kommer att radera all information från denna tavla.",
|
||||
"This week" : "Denna vecka",
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Är du säker på att du vill överföra brädet {title} för {user}?"
|
||||
"This week" : "Denna vecka"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -183,10 +183,8 @@ OC.L10N.register(
|
||||
"Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı",
|
||||
"Add a new list" : "Yeni liste ekle",
|
||||
"Archive all cards" : "Tüm kartları arşivle",
|
||||
"Unarchive all cards" : "Tüm kartları arşivden çıkar",
|
||||
"Delete list" : "Listeyi sil",
|
||||
"Archive all cards in this list" : "Bu listedeki tüm kartları arşivle",
|
||||
"Unarchive all cards in this list" : "Bu listedeki tüm kartları arşivden çıkar",
|
||||
"Add a new card" : "Yeni kart ekle",
|
||||
"Card name" : "Kart adı",
|
||||
"List deleted" : "Liste silindi",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "Sizinle paylaşıldı",
|
||||
"Deck settings" : "Tahta ayarları",
|
||||
"Use bigger card view" : "Daha büyük kart görünümü kullanılsın",
|
||||
"Show card ID badge" : "Kart kodu etiketi görüntülensin",
|
||||
"Show boards in calendar/tasks" : "Takvimler ve görevlerde panolar görüntülensin",
|
||||
"Limit deck usage of groups" : "Tahtayı şu gruplar kullanabilsin",
|
||||
"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." : "Tahta kullanımı gruplar ile sınırlandığında belirtilen grupların üyesi olmayan kişiler kendi tahtalarını oluşturamaz. Bu kullanıcılar ancak kendileri ile paylaşılan tahtalar üzerinde çalışabilir.",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı",
|
||||
"Add a new list" : "Yeni liste ekle",
|
||||
"Archive all cards" : "Tüm kartları arşivle",
|
||||
"Unarchive all cards" : "Tüm kartları arşivden çıkar",
|
||||
"Delete list" : "Listeyi sil",
|
||||
"Archive all cards in this list" : "Bu listedeki tüm kartları arşivle",
|
||||
"Unarchive all cards in this list" : "Bu listedeki tüm kartları arşivden çıkar",
|
||||
"Add a new card" : "Yeni kart ekle",
|
||||
"Card name" : "Kart adı",
|
||||
"List deleted" : "Liste silindi",
|
||||
@@ -260,7 +258,6 @@
|
||||
"Shared with you" : "Sizinle paylaşıldı",
|
||||
"Deck settings" : "Tahta ayarları",
|
||||
"Use bigger card view" : "Daha büyük kart görünümü kullanılsın",
|
||||
"Show card ID badge" : "Kart kodu etiketi görüntülensin",
|
||||
"Show boards in calendar/tasks" : "Takvimler ve görevlerde panolar görüntülensin",
|
||||
"Limit deck usage of groups" : "Tahtayı şu gruplar kullanabilsin",
|
||||
"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." : "Tahta kullanımı gruplar ile sınırlandığında belirtilen grupların üyesi olmayan kişiler kendi tahtalarını oluşturamaz. Bu kullanıcılar ancak kendileri ile paylaşılan tahtalar üzerinde çalışabilir.",
|
||||
|
||||
@@ -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}",
|
||||
@@ -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);");
|
||||
|
||||
@@ -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}",
|
||||
@@ -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);"
|
||||
}
|
||||
@@ -183,10 +183,8 @@ 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" : "清單已被刪除",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "收到的分享",
|
||||
"Deck settings" : "看板設定",
|
||||
"Use bigger card view" : "使用較大的卡片視圖",
|
||||
"Show card ID badge" : "顯示卡片 ID 徽章",
|
||||
"Show boards in calendar/tasks" : "在日曆/任務中顯示面板",
|
||||
"Limit deck usage of groups" : "限制群組使用 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." : "限制 Deck 將阻止不屬於這些群組的用戶創建自己的面板。用戶仍然可以在與他們的面板上工作。",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"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,7 +258,6 @@
|
||||
"Shared with you" : "收到的分享",
|
||||
"Deck settings" : "看板設定",
|
||||
"Use bigger card view" : "使用較大的卡片視圖",
|
||||
"Show card ID badge" : "顯示卡片 ID 徽章",
|
||||
"Show boards in calendar/tasks" : "在日曆/任務中顯示面板",
|
||||
"Limit deck usage of groups" : "限制群組使用 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." : "限制 Deck 將阻止不屬於這些群組的用戶創建自己的面板。用戶仍然可以在與他們的面板上工作。",
|
||||
|
||||
@@ -183,10 +183,8 @@ 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" : "列表已刪除",
|
||||
@@ -262,7 +260,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "與您分享",
|
||||
"Deck settings" : "Deck 設定",
|
||||
"Use bigger card view" : "使用較大的卡片檢視",
|
||||
"Show card ID badge" : "顯示卡片 ID 徽章",
|
||||
"Show boards in calendar/tasks" : "在日曆/工作項目中顯示佈告欄",
|
||||
"Limit deck usage of groups" : "限制群組的 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." : "限制 Deck 將會阻止不屬於這些群組的使用者建立自己的佈告欄。使用者仍然可以在與他們分享的佈告欄上工作。",
|
||||
|
||||
@@ -181,10 +181,8 @@
|
||||
"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,7 +258,6 @@
|
||||
"Shared with you" : "與您分享",
|
||||
"Deck settings" : "Deck 設定",
|
||||
"Use bigger card view" : "使用較大的卡片檢視",
|
||||
"Show card ID badge" : "顯示卡片 ID 徽章",
|
||||
"Show boards in calendar/tasks" : "在日曆/工作項目中顯示佈告欄",
|
||||
"Limit deck usage of groups" : "限制群組的 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." : "限制 Deck 將會阻止不屬於這些群組的使用者建立自己的佈告欄。使用者仍然可以在與他們分享的佈告欄上工作。",
|
||||
|
||||
@@ -33,7 +33,6 @@ use OCP\AppFramework\OCS\OCSException;
|
||||
use OCP\AppFramework\OCSController;
|
||||
use OCP\ILogger;
|
||||
use OCP\IRequest;
|
||||
use OCP\Util;
|
||||
use OCP\IConfig;
|
||||
|
||||
class ExceptionMiddleware extends Middleware {
|
||||
@@ -85,9 +84,9 @@ class ExceptionMiddleware extends Middleware {
|
||||
'message' => 'Permission denied'
|
||||
], 403);
|
||||
}
|
||||
|
||||
|
||||
if ($exception instanceof StatusException) {
|
||||
if ($this->config->getSystemValue('loglevel', Util::WARN) === Util::DEBUG) {
|
||||
if ($this->config->getSystemValue('loglevel', ILogger::WARN) === ILogger::DEBUG) {
|
||||
$this->logger->logException($exception);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ class CardReferenceProvider implements IReferenceProvider {
|
||||
private IURLGenerator $urlGenerator;
|
||||
private BoardService $boardService;
|
||||
private StackService $stackService;
|
||||
private ?string $userId;
|
||||
|
||||
public function __construct(CardService $cardService,
|
||||
BoardService $boardService,
|
||||
@@ -51,7 +50,6 @@ class CardReferenceProvider implements IReferenceProvider {
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
$this->boardService = $boardService;
|
||||
$this->stackService = $stackService;
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,7 +81,7 @@ class CardReferenceProvider implements IReferenceProvider {
|
||||
$card = $this->sanitizeSerializedCard($card);
|
||||
$board = $this->sanitizeSerializedBoard($board);
|
||||
$stack = $this->sanitizeSerializedStack($stack);
|
||||
|
||||
/** @var IReference $reference */
|
||||
$reference = new Reference($referenceText);
|
||||
$reference->setRichObject(Application::APP_ID . '-card', [
|
||||
'id' => $boardId . '/' . $cardId,
|
||||
|
||||
@@ -35,7 +35,6 @@ 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;
|
||||
@@ -77,11 +76,6 @@ class AssignmentService {
|
||||
private $eventDispatcher;
|
||||
/** @var string|null */
|
||||
private $currentUser;
|
||||
/**
|
||||
* @var AssignmentServiceValidator
|
||||
*/
|
||||
private $assignmentServiceValidator;
|
||||
|
||||
|
||||
public function __construct(
|
||||
PermissionService $permissionService,
|
||||
@@ -92,10 +86,8 @@ class AssignmentService {
|
||||
ActivityManager $activityManager,
|
||||
ChangeHelper $changeHelper,
|
||||
IEventDispatcher $eventDispatcher,
|
||||
AssignmentServiceValidator $assignmentServiceValidator,
|
||||
$userId
|
||||
) {
|
||||
$this->assignmentServiceValidator = $assignmentServiceValidator;
|
||||
$this->permissionService = $permissionService;
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->assignedUsersMapper = $assignedUsersMapper;
|
||||
@@ -104,8 +96,6 @@ class AssignmentService {
|
||||
$this->changeHelper = $changeHelper;
|
||||
$this->activityManager = $activityManager;
|
||||
$this->eventDispatcher = $eventDispatcher;
|
||||
|
||||
$this->assignmentServiceValidator->check(compact('userId'));
|
||||
$this->currentUser = $userId;
|
||||
}
|
||||
|
||||
@@ -119,7 +109,13 @@ class AssignmentService {
|
||||
* @throws DoesNotExistException
|
||||
*/
|
||||
public function assignUser($cardId, $userId, int $type = Assignment::TYPE_USER) {
|
||||
$this->assignmentServiceValidator->check(compact('cardId', 'userId'));
|
||||
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');
|
||||
}
|
||||
|
||||
if ($type !== Assignment::TYPE_USER && $type !== Assignment::TYPE_GROUP) {
|
||||
throw new BadRequestException('Invalid type provided for assignemnt');
|
||||
@@ -172,9 +168,16 @@ 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) {
|
||||
|
||||
@@ -36,7 +36,6 @@ 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;
|
||||
@@ -61,22 +60,17 @@ class AttachmentService {
|
||||
/** @var ChangeHelper */
|
||||
private $changeHelper;
|
||||
private IUserManager $userManager;
|
||||
/** @var AttachmentServiceValidator */
|
||||
private AttachmentServiceValidator $attachmentServiceValidator;
|
||||
|
||||
public function __construct(
|
||||
AttachmentMapper $attachmentMapper,
|
||||
CardMapper $cardMapper,
|
||||
IUserManager $userManager,
|
||||
ChangeHelper $changeHelper,
|
||||
PermissionService $permissionService,
|
||||
Application $application,
|
||||
AttachmentCacheHelper $attachmentCacheHelper,
|
||||
$userId,
|
||||
IL10N $l10n,
|
||||
ActivityManager $activityManager,
|
||||
AttachmentServiceValidator $attachmentServiceValidator
|
||||
) {
|
||||
public function __construct(AttachmentMapper $attachmentMapper,
|
||||
CardMapper $cardMapper,
|
||||
IUserManager $userManager,
|
||||
ChangeHelper $changeHelper,
|
||||
PermissionService $permissionService,
|
||||
Application $application,
|
||||
AttachmentCacheHelper $attachmentCacheHelper,
|
||||
$userId,
|
||||
IL10N $l10n,
|
||||
ActivityManager $activityManager) {
|
||||
$this->attachmentMapper = $attachmentMapper;
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->permissionService = $permissionService;
|
||||
@@ -87,7 +81,6 @@ class AttachmentService {
|
||||
$this->activityManager = $activityManager;
|
||||
$this->changeHelper = $changeHelper;
|
||||
$this->userManager = $userManager;
|
||||
$this->attachmentServiceValidator = $attachmentServiceValidator;
|
||||
|
||||
// Register shipped attachment services
|
||||
// TODO: move this to a plugin based approach once we have different types of attachments
|
||||
@@ -194,7 +187,17 @@ class AttachmentService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function create($cardId, $type, $data) {
|
||||
$this->attachmentServiceValidator->check(compact('cardId', 'type'));
|
||||
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->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
|
||||
|
||||
@@ -280,8 +283,6 @@ 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) {
|
||||
@@ -303,6 +304,9 @@ class AttachmentService {
|
||||
}
|
||||
}
|
||||
|
||||
if ($data === false || $data === null) {
|
||||
//throw new BadRequestException('data must be provided');
|
||||
}
|
||||
try {
|
||||
$attachment = $this->attachmentMapper->find($attachmentId);
|
||||
} catch (\Exception $e) {
|
||||
|
||||
@@ -42,6 +42,7 @@ use OCA\Deck\Event\AclUpdatedEvent;
|
||||
use OCA\Deck\NoPermissionException;
|
||||
use OCA\Deck\Notification\NotificationHelper;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
@@ -53,9 +54,10 @@ 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;
|
||||
use OCP\Server;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
|
||||
class BoardService {
|
||||
private BoardMapper $boardMapper;
|
||||
@@ -77,7 +79,6 @@ class BoardService {
|
||||
private ?array $boardsCache = null;
|
||||
private IURLGenerator $urlGenerator;
|
||||
private IDBConnection $connection;
|
||||
private BoardServiceValidator $boardServiceValidator;
|
||||
|
||||
public function __construct(
|
||||
BoardMapper $boardMapper,
|
||||
@@ -97,7 +98,6 @@ class BoardService {
|
||||
ChangeHelper $changeHelper,
|
||||
IURLGenerator $urlGenerator,
|
||||
IDBConnection $connection,
|
||||
BoardServiceValidator $boardServiceValidator,
|
||||
?string $userId
|
||||
) {
|
||||
$this->boardMapper = $boardMapper;
|
||||
@@ -118,7 +118,6 @@ class BoardService {
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->connection = $connection;
|
||||
$this->boardServiceValidator = $boardServiceValidator;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -183,7 +182,6 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function find($boardId) {
|
||||
$this->boardServiceValidator->check(compact('boardId'));
|
||||
if ($this->boardsCache && isset($this->boardsCache[$boardId])) {
|
||||
return $this->boardsCache[$boardId];
|
||||
}
|
||||
@@ -238,7 +236,9 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function isArchived($mapper, $id) {
|
||||
$this->boardServiceValidator->check(compact('id'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('id must be a number');
|
||||
}
|
||||
|
||||
try {
|
||||
$boardId = $id;
|
||||
@@ -265,7 +265,13 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function isDeleted($mapper, $id) {
|
||||
$this->boardServiceValidator->check(compact('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');
|
||||
}
|
||||
|
||||
try {
|
||||
$boardId = $id;
|
||||
@@ -291,7 +297,17 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function create($title, $userId, $color) {
|
||||
$this->boardServiceValidator->check(compact('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');
|
||||
}
|
||||
|
||||
if (!$this->permissionService->canCreate()) {
|
||||
throw new NoPermissionException('Creating boards has been disabled for your account.');
|
||||
@@ -342,7 +358,9 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function delete($id) {
|
||||
$this->boardServiceValidator->check(compact('id'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('board id must be a number');
|
||||
}
|
||||
|
||||
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
$board = $this->find($id);
|
||||
@@ -365,7 +383,9 @@ class BoardService {
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||
*/
|
||||
public function deleteUndo($id) {
|
||||
$this->boardServiceValidator->check(compact('id'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('board id must be a number');
|
||||
}
|
||||
|
||||
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
$board = $this->find($id);
|
||||
@@ -386,7 +406,9 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function deleteForce($id) {
|
||||
$this->boardServiceValidator->check(compact('id'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('id must be a number');
|
||||
}
|
||||
|
||||
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
$board = $this->find($id);
|
||||
@@ -407,7 +429,21 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function update($id, $title, $color, $archived) {
|
||||
$this->boardServiceValidator->check(compact('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->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
$board = $this->find($id);
|
||||
@@ -457,7 +493,29 @@ class BoardService {
|
||||
* @throws \OCA\Deck\NoPermissionException
|
||||
*/
|
||||
public function addAcl($boardId, $type, $participant, $edit, $share, $manage) {
|
||||
$this->boardServiceValidator->check(compact('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->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_SHARE);
|
||||
[$edit, $share, $manage] = $this->applyPermissions($boardId, $edit, $share, $manage);
|
||||
@@ -503,7 +561,21 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function updateAcl($id, $edit, $share, $manage) {
|
||||
$this->boardServiceValidator->check(compact('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->permissionService->checkPermission($this->aclMapper, $id, Acl::PERMISSION_SHARE);
|
||||
|
||||
@@ -523,12 +595,14 @@ class BoardService {
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws DbException
|
||||
* @throws DoesNotExistException
|
||||
* @throws \OCA\Deck\NoPermissionException
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||
* @throws BadRequestException
|
||||
* @throws NoPermissionException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function deleteAcl(int $id): bool {
|
||||
public function deleteAcl(int $id): ?Acl {
|
||||
$this->permissionService->checkPermission($this->aclMapper, $id, Acl::PERMISSION_SHARE);
|
||||
/** @var Acl $acl */
|
||||
$acl = $this->aclMapper->find($id);
|
||||
@@ -553,8 +627,10 @@ class BoardService {
|
||||
}
|
||||
}
|
||||
|
||||
$deletedAcl = $this->aclMapper->delete($acl);
|
||||
$this->eventDispatcher->dispatchTyped(new AclDeletedEvent($acl));
|
||||
return (bool) $this->aclMapper->delete($acl);
|
||||
|
||||
return $deletedAcl;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -567,7 +643,9 @@ class BoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function clone($id, $userId) {
|
||||
$this->boardServiceValidator->check(compact('id', 'userId'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('board id must be a number');
|
||||
}
|
||||
|
||||
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_READ);
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ 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\IRequest;
|
||||
@@ -70,7 +69,6 @@ class CardService {
|
||||
private IURLGenerator $urlGenerator;
|
||||
private LoggerInterface $logger;
|
||||
private IRequest $request;
|
||||
private CardServiceValidator $cardServiceValidator;
|
||||
|
||||
public function __construct(
|
||||
CardMapper $cardMapper,
|
||||
@@ -90,7 +88,6 @@ class CardService {
|
||||
IURLGenerator $urlGenerator,
|
||||
LoggerInterface $logger,
|
||||
IRequest $request,
|
||||
CardServiceValidator $cardServiceValidator,
|
||||
?string $userId
|
||||
) {
|
||||
$this->cardMapper = $cardMapper;
|
||||
@@ -111,7 +108,6 @@ class CardService {
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
$this->logger = $logger;
|
||||
$this->request = $request;
|
||||
$this->cardServiceValidator = $cardServiceValidator;
|
||||
}
|
||||
|
||||
public function enrich($card) {
|
||||
@@ -134,7 +130,6 @@ 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) {
|
||||
@@ -195,7 +190,29 @@ class CardService {
|
||||
* @throws BadrequestException
|
||||
*/
|
||||
public function create($title, $stackId, $type, $order, $owner, $description = '', $duedate = null) {
|
||||
$this->cardServiceValidator->check(compact('title', 'stackId', 'type', 'order', 'owner'));
|
||||
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->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
|
||||
if ($this->boardService->isArchived($this->stackMapper, $stackId)) {
|
||||
@@ -265,7 +282,29 @@ class CardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null) {
|
||||
$this->cardServiceValidator->check(compact('id', 'title', 'stackId', 'type', 'owner', 'order'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('card 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');
|
||||
}
|
||||
|
||||
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->stackMapper, $stackId, Acl::PERMISSION_EDIT);
|
||||
@@ -348,7 +387,17 @@ class CardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function rename($id, $title) {
|
||||
$this->cardServiceValidator->check(compact('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->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
|
||||
if ($this->boardService->isArchived($this->cardMapper, $id)) {
|
||||
@@ -379,8 +428,17 @@ class CardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function reorder($id, $stackId, $order) {
|
||||
$this->cardServiceValidator->check(compact('id', 'stackId', 'order'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('card id must be a number');
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -435,8 +493,9 @@ class CardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function archive($id) {
|
||||
$this->cardServiceValidator->check(compact('id'));
|
||||
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('id must be a number');
|
||||
}
|
||||
|
||||
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
|
||||
if ($this->boardService->isArchived($this->cardMapper, $id)) {
|
||||
@@ -464,8 +523,9 @@ class CardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function unarchive($id) {
|
||||
$this->cardServiceValidator->check(compact('id'));
|
||||
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('id must be a number');
|
||||
}
|
||||
|
||||
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
|
||||
if ($this->boardService->isArchived($this->cardMapper, $id)) {
|
||||
@@ -492,8 +552,13 @@ class CardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function assignLabel($cardId, $labelId) {
|
||||
$this->cardServiceValidator->check(compact('cardId', 'labelId'));
|
||||
if (is_numeric($cardId) === false) {
|
||||
throw new BadRequestException('card id must be a number');
|
||||
}
|
||||
|
||||
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)) {
|
||||
@@ -521,8 +586,13 @@ class CardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function removeLabel($cardId, $labelId) {
|
||||
$this->cardServiceValidator->check(compact('cardId', 'labelId'));
|
||||
if (is_numeric($cardId) === false) {
|
||||
throw new BadRequestException('card id must be a number');
|
||||
}
|
||||
|
||||
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)) {
|
||||
|
||||
@@ -138,7 +138,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
|
||||
|
||||
public function extendData(Attachment $attachment) {
|
||||
$userFolder = $this->rootFolder->getUserFolder($this->userId);
|
||||
$share = $this->getShareForAttachment($attachment);
|
||||
$share = $this->shareProvider->getShareById($attachment->getId());
|
||||
$files = $userFolder->getById($share->getNode()->getId());
|
||||
if (count($files) === 0) {
|
||||
return $attachment;
|
||||
@@ -161,7 +161,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
|
||||
// Problem: Folders
|
||||
/** @psalm-suppress InvalidCatch */
|
||||
try {
|
||||
$share = $this->getShareForAttachment($attachment);
|
||||
$share = $this->shareProvider->getShareById($attachment->getId());
|
||||
} catch (ShareNotFound $e) {
|
||||
throw new NotFoundException('File not found');
|
||||
}
|
||||
@@ -241,7 +241,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
|
||||
}
|
||||
|
||||
public function update(Attachment $attachment) {
|
||||
$share = $this->getShareForAttachment($attachment);
|
||||
$share = $this->shareProvider->getShareById($attachment->getId());
|
||||
$target = $share->getNode();
|
||||
$file = $this->getUploadedFile();
|
||||
$fileName = $file['name'];
|
||||
@@ -258,13 +258,8 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
|
||||
return $attachment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NoPermissionException
|
||||
* @throws NotFoundException
|
||||
* @throws ShareNotFound
|
||||
*/
|
||||
public function delete(Attachment $attachment) {
|
||||
$share = $this->getShareForAttachment($attachment);
|
||||
$share = $this->shareProvider->getShareById($attachment->getId());
|
||||
$file = $share->getNode();
|
||||
$attachment->setData($file->getName());
|
||||
|
||||
@@ -287,21 +282,4 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ 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 {
|
||||
|
||||
@@ -41,21 +40,12 @@ class LabelService {
|
||||
private $boardService;
|
||||
/** @var ChangeHelper */
|
||||
private $changeHelper;
|
||||
/** @var LabelServiceValidator */
|
||||
private LabelServiceValidator $labelServiceValidator;
|
||||
|
||||
public function __construct(
|
||||
LabelMapper $labelMapper,
|
||||
PermissionService $permissionService,
|
||||
BoardService $boardService,
|
||||
ChangeHelper $changeHelper,
|
||||
LabelServiceValidator $labelServiceValidator
|
||||
) {
|
||||
public function __construct(LabelMapper $labelMapper, PermissionService $permissionService, BoardService $boardService, ChangeHelper $changeHelper) {
|
||||
$this->labelMapper = $labelMapper;
|
||||
$this->permissionService = $permissionService;
|
||||
$this->boardService = $boardService;
|
||||
$this->changeHelper = $changeHelper;
|
||||
$this->labelServiceValidator = $labelServiceValidator;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -86,7 +76,17 @@ class LabelService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function create($title, $color, $boardId) {
|
||||
$this->labelServiceValidator->check(compact('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->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE);
|
||||
|
||||
@@ -119,7 +119,9 @@ class LabelService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function delete($id) {
|
||||
$this->labelServiceValidator->check(compact('id'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('label id must be a number');
|
||||
}
|
||||
|
||||
$this->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
if ($this->boardService->isArchived($this->labelMapper, $id)) {
|
||||
@@ -142,7 +144,17 @@ class LabelService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function update($id, $title, $color) {
|
||||
$this->labelServiceValidator->check(compact('title', 'color', 'id'));
|
||||
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->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ use OCA\Deck\Db\StackMapper;
|
||||
use OCA\Deck\Model\CardDetails;
|
||||
use OCA\Deck\NoPermissionException;
|
||||
use OCA\Deck\StatusException;
|
||||
use OCA\Deck\Validators\StackServiceValidator;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class StackService {
|
||||
@@ -55,7 +54,6 @@ class StackService {
|
||||
private ActivityManager $activityManager;
|
||||
private ChangeHelper $changeHelper;
|
||||
private LoggerInterface $logger;
|
||||
private StackServiceValidator $stackServiceValidator;
|
||||
|
||||
public function __construct(
|
||||
StackMapper $stackMapper,
|
||||
@@ -69,8 +67,7 @@ class StackService {
|
||||
AttachmentService $attachmentService,
|
||||
ActivityManager $activityManager,
|
||||
ChangeHelper $changeHelper,
|
||||
LoggerInterface $logger,
|
||||
StackServiceValidator $stackServiceValidator
|
||||
LoggerInterface $logger
|
||||
) {
|
||||
$this->stackMapper = $stackMapper;
|
||||
$this->boardMapper = $boardMapper;
|
||||
@@ -84,7 +81,6 @@ class StackService {
|
||||
$this->activityManager = $activityManager;
|
||||
$this->changeHelper = $changeHelper;
|
||||
$this->logger = $logger;
|
||||
$this->stackServiceValidator = $stackServiceValidator;
|
||||
}
|
||||
|
||||
private function enrichStackWithCards($stack, $since = -1) {
|
||||
@@ -222,7 +218,17 @@ class StackService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function create($title, $boardId, $order) {
|
||||
$this->stackServiceValidator->check(compact('title', 'boardId', 'order'));
|
||||
if ($title === false || $title === null || mb_strlen($title) === 0) {
|
||||
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->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE);
|
||||
if ($this->boardService->isArchived(null, $boardId)) {
|
||||
@@ -285,7 +291,21 @@ class StackService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function update($id, $title, $boardId, $order, $deletedAt) {
|
||||
$this->stackServiceValidator->check(compact('id', 'title', 'boardId', 'order'));
|
||||
if (is_numeric($id) === false) {
|
||||
throw new BadRequestException('stack id must be a number');
|
||||
}
|
||||
|
||||
if ($title === false || $title === null || mb_strlen($title) === 0) {
|
||||
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->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_MANAGE);
|
||||
@@ -321,7 +341,13 @@ class StackService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function reorder($id, $order) {
|
||||
$this->stackServiceValidator->check(compact('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->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE);
|
||||
$stackToSort = $this->stackMapper->find($id);
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
<?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'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
<?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'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,182 +0,0 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
<?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']
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
<?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'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
<?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']
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
<?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']
|
||||
];
|
||||
}
|
||||
}
|
||||
1694
package-lock.json
generated
1694
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
210
package.json
210
package.json
@@ -1,106 +1,106 @@
|
||||
{
|
||||
"name": "deck",
|
||||
"description": "",
|
||||
"version": "1.8.2",
|
||||
"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.19.0",
|
||||
"@juliushaertl/vue-richtext": "^1.0.1",
|
||||
"@nextcloud/auth": "^2.0.0",
|
||||
"@nextcloud/axios": "^2.0.0",
|
||||
"@nextcloud/dialogs": "^3.2.0",
|
||||
"@nextcloud/event-bus": "^3.0.2",
|
||||
"@nextcloud/files": "^2.1.0",
|
||||
"@nextcloud/initial-state": "^2.0.0",
|
||||
"@nextcloud/l10n": "^1.6.0",
|
||||
"@nextcloud/moment": "^1.2.1",
|
||||
"@nextcloud/router": "^2.0.0",
|
||||
"@nextcloud/vue": "^7.0.0-beta.4",
|
||||
"@nextcloud/vue-dashboard": "^2.0.1",
|
||||
"@nextcloud/vue-richtext": "^2.0.1",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"dompurify": "^2.4.0",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
"markdown-it-task-checkbox": "^1.0.6",
|
||||
"moment": "^2.29.4",
|
||||
"nextcloud-vue-collections": "^0.10.0",
|
||||
"p-queue": "^7.3.0",
|
||||
"url-search-params-polyfill": "^8.1.1",
|
||||
"vue": "^2.7.9",
|
||||
"vue-at": "^2.5.0",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-easymde": "^2.0.0",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-material-design-icons": "^5.1.2",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue-smooth-dnd": "^0.8.1",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-router-sync": "^5.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^16.0.0",
|
||||
"npm": "^7.0.0 || ^8.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.0.0",
|
||||
"@nextcloud/browserslist-config": "^2.3.0",
|
||||
"@nextcloud/eslint-config": "^8.0.0",
|
||||
"@nextcloud/stylelint-config": "^2.2.0",
|
||||
"@nextcloud/webpack-vue-config": "^5.3.0",
|
||||
"@relative-ci/agent": "^4.1.0",
|
||||
"@vue/test-utils": "^1.3.0",
|
||||
"cypress": "^10.8.0",
|
||||
"eslint-webpack-plugin": "^3.2.0",
|
||||
"jest": "^29.0.1",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"stylelint-webpack-plugin": "^3.3.0",
|
||||
"vue-jest": "^3.0.7",
|
||||
"vue-template-compiler": "^2.7.9"
|
||||
},
|
||||
"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.9.0-beta.1",
|
||||
"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.19.4",
|
||||
"@juliushaertl/vue-richtext": "^1.0.1",
|
||||
"@nextcloud/auth": "^2.0.0",
|
||||
"@nextcloud/axios": "^2.1.0",
|
||||
"@nextcloud/dialogs": "^3.2.0",
|
||||
"@nextcloud/event-bus": "^3.0.2",
|
||||
"@nextcloud/files": "^2.1.0",
|
||||
"@nextcloud/initial-state": "^2.0.0",
|
||||
"@nextcloud/l10n": "^1.6.0",
|
||||
"@nextcloud/moment": "^1.2.1",
|
||||
"@nextcloud/router": "^2.0.0",
|
||||
"@nextcloud/vue": "^7.0.1",
|
||||
"@nextcloud/vue-dashboard": "^2.0.1",
|
||||
"@nextcloud/vue-richtext": "^2.0.4",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"dompurify": "^2.4.0",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
"markdown-it-task-checkbox": "^1.0.6",
|
||||
"moment": "^2.29.4",
|
||||
"nextcloud-vue-collections": "^0.10.0",
|
||||
"p-queue": "^7.3.0",
|
||||
"url-search-params-polyfill": "^8.1.1",
|
||||
"vue": "^2.7.13",
|
||||
"vue-at": "^2.5.1",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-easymde": "^2.0.0",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-material-design-icons": "^5.1.2",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue-smooth-dnd": "^0.8.1",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-router-sync": "^5.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^16.0.0",
|
||||
"npm": "^7.0.0 || ^8.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.0.0",
|
||||
"@nextcloud/browserslist-config": "^2.3.0",
|
||||
"@nextcloud/eslint-config": "^8.0.0",
|
||||
"@nextcloud/stylelint-config": "^2.2.0",
|
||||
"@nextcloud/webpack-vue-config": "^5.3.0",
|
||||
"@relative-ci/agent": "^4.1.1",
|
||||
"@vue/test-utils": "^1.3.0",
|
||||
"cypress": "^10.10.0",
|
||||
"eslint-webpack-plugin": "^3.2.0",
|
||||
"jest": "^29.2.1",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"stylelint-webpack-plugin": "^3.3.0",
|
||||
"vue-jest": "^3.0.7",
|
||||
"vue-template-compiler": "^2.7.13"
|
||||
},
|
||||
"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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,8 +86,6 @@ export default {
|
||||
|
||||
li {
|
||||
display: flex;
|
||||
height: 44px;
|
||||
|
||||
&:hover, &:active, &.focus {
|
||||
button {
|
||||
opacity: 1;
|
||||
@@ -106,7 +104,10 @@ export default {
|
||||
.title {
|
||||
flex-grow: 2;
|
||||
padding: 3px 0px;
|
||||
|
||||
> span:not(.timestamp) {
|
||||
line-height: 1.2em;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.timestamp {
|
||||
font-size: 0.9em;
|
||||
color: var(--color-text-lighter);
|
||||
|
||||
@@ -53,12 +53,18 @@
|
||||
</form>
|
||||
</transition>
|
||||
<NcActions v-if="canManage && !isArchived" :force-menu="true">
|
||||
<NcActionButton @click="modalArchivAllCardsShow=true">
|
||||
<NcActionButton v-if="!showArchived" icon="icon-archive" @click="modalArchivAllCardsShow=true">
|
||||
<template #icon>
|
||||
<ArchiveIcon decorative />
|
||||
</template>
|
||||
{{ t('deck', 'Archive all cards') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton v-if="showArchived" @click="modalArchivAllCardsShow=true">
|
||||
<template #icon>
|
||||
<ArchiveIcon decorative />
|
||||
</template>
|
||||
{{ t('deck', 'Unarchive all cards') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton icon="icon-delete" @click="deleteStack(stack)">
|
||||
{{ t('deck', 'Delete list') }}
|
||||
</NcActionButton>
|
||||
@@ -72,11 +78,20 @@
|
||||
|
||||
<NcModal v-if="modalArchivAllCardsShow" @close="modalArchivAllCardsShow=false">
|
||||
<div class="modal__content">
|
||||
<h3>{{ t('deck', 'Archive all cards in this list') }}</h3>
|
||||
<h3 v-if="!showArchived">
|
||||
{{ t('deck', 'Archive all cards in this list') }}
|
||||
</h3>
|
||||
<h3 v-else>
|
||||
{{ t('deck', 'Unarchive all cards in this list') }}
|
||||
</h3>
|
||||
|
||||
<progress :value="stackTransfer.current" :max="stackTransfer.total" />
|
||||
<button class="primary" @click="archiveAllCardsFromStack(stack)">
|
||||
<button v-if="!showArchived" class="primary" @click="setArchivedToAllCardsFromStack(stack, !showArchived)">
|
||||
{{ t('deck', 'Archive all cards') }}
|
||||
</button>
|
||||
<button v-else class="primary" @click="setArchivedToAllCardsFromStack(stack, !showArchived)">
|
||||
{{ t('deck', 'Unarchive all cards') }}
|
||||
</button>
|
||||
<button @click="modalArchivAllCardsShow=false">
|
||||
{{ t('deck', 'Cancel') }}
|
||||
</button>
|
||||
@@ -240,12 +255,12 @@ export default {
|
||||
this.$store.dispatch('deleteStack', stack)
|
||||
showUndo(t('deck', 'List deleted'), () => this.$store.dispatch('stackUndoDelete', stack))
|
||||
},
|
||||
archiveAllCardsFromStack(stack) {
|
||||
setArchivedToAllCardsFromStack(stack, isArchived) {
|
||||
|
||||
this.stackTransfer.total = this.cardsByStack.length
|
||||
this.cardsByStack.forEach((card, index) => {
|
||||
this.stackTransfer.current = index
|
||||
this.$store.dispatch('archiveUnarchiveCard', { ...card, archived: true })
|
||||
this.$store.dispatch('archiveUnarchiveCard', { ...card, archived: isArchived })
|
||||
})
|
||||
this.modalArchivAllCardsShow = false
|
||||
},
|
||||
|
||||
@@ -173,7 +173,7 @@ export default {
|
||||
}
|
||||
},
|
||||
attachmentPreview() {
|
||||
return (attachment) => (attachment.extendedData.fileid ? generateUrl(`/core/preview?fileId=${attachment.extendedData.fileid}&x=64&y=64`) : null)
|
||||
return (attachment) => (attachment.extendedData.fileid ? generateUrl(`/core/preview?fileId=${attachment.extendedData.fileid}&x=64&y=64&a=true`) : null)
|
||||
},
|
||||
attachmentUrl() {
|
||||
return (attachment) => generateUrl(`/apps/deck/cards/${attachment.cardId}/attachment/${attachment.id}`)
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
ref="markdownEditor"
|
||||
v-model="description"
|
||||
:configs="mdeConfig"
|
||||
@initialized="addKeyListeners"
|
||||
@update:modelValue="updateDescription"
|
||||
@blur="saveDescription" />
|
||||
|
||||
@@ -115,6 +116,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
keyExitState: 0,
|
||||
description: '',
|
||||
markdownIt: null,
|
||||
descriptionEditing: false,
|
||||
@@ -174,14 +176,37 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
addKeyListeners() {
|
||||
this.$refs.markdownEditor.easymde.codemirror.on('keydown', (a, b) => {
|
||||
|
||||
if (this.keyExitState === 0 && (b.key === 'Meta' || b.key === 'Alt')) {
|
||||
this.keyExitState = 1
|
||||
}
|
||||
if (this.keyExitState === 1 && b.key === 'Enter') {
|
||||
this.keyExitState = 0
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keydown', undefined)
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keyup', undefined)
|
||||
this.hideEditor()
|
||||
}
|
||||
})
|
||||
this.$refs.markdownEditor.easymde.codemirror.on('keyup', (a, b) => {
|
||||
if (b.key === 'Meta' || b.key === 'Control') {
|
||||
this.keyExitState = 0
|
||||
}
|
||||
|
||||
})
|
||||
},
|
||||
showEditor() {
|
||||
if (!this.canEdit) {
|
||||
return
|
||||
}
|
||||
this.descriptionEditing = true
|
||||
this.description = this.card.description
|
||||
|
||||
},
|
||||
hideEditor() {
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keydown', undefined)
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keyup', undefined)
|
||||
this.descriptionEditing = false
|
||||
},
|
||||
showAttachmentModal() {
|
||||
@@ -273,7 +298,7 @@ export default {
|
||||
}
|
||||
|
||||
&::v-deep input {
|
||||
height: auto;
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
&::v-deep a {
|
||||
|
||||
@@ -70,9 +70,9 @@ export default {
|
||||
startCreateBoard(e) {
|
||||
this.editing = true
|
||||
},
|
||||
async createBoard(e) {
|
||||
createBoard(e) {
|
||||
const title = e.currentTarget.childNodes[0].value
|
||||
await this.$store.dispatch('createBoard', {
|
||||
this.$store.dispatch('createBoard', {
|
||||
title,
|
||||
color: this.color.substring(1),
|
||||
})
|
||||
|
||||
@@ -384,13 +384,11 @@ export default new Vuex.Store({
|
||||
const storedBoard = await apiClient.updateBoard(board)
|
||||
commit('addBoard', storedBoard)
|
||||
},
|
||||
async createBoard({ commit }, boardData) {
|
||||
try {
|
||||
const board = await apiClient.createBoard(boardData)
|
||||
commit('addBoard', board)
|
||||
} catch (err) {
|
||||
return err
|
||||
}
|
||||
createBoard({ commit }, boardData) {
|
||||
apiClient.createBoard(boardData)
|
||||
.then((board) => {
|
||||
commit('addBoard', board)
|
||||
})
|
||||
},
|
||||
async cloneBoard({ commit }, boardData) {
|
||||
try {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~9",
|
||||
"behat/behat": "~3.11.0",
|
||||
"guzzlehttp/guzzle": "7.4.5",
|
||||
"guzzlehttp/guzzle": "7.5.0",
|
||||
"jarnaiz/behat-junit-formatter": "^1.3",
|
||||
"sabre/dav": "4.4.0",
|
||||
"symfony/event-dispatcher": "~5.4"
|
||||
|
||||
@@ -9,5 +9,4 @@ default:
|
||||
- RequestContext
|
||||
- BoardContext
|
||||
- CommentContext
|
||||
- AttachmentContext
|
||||
- SearchContext
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Behat\Behat\Context\Context;
|
||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||
use PHPUnit\Framework\Assert;
|
||||
|
||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||
|
||||
class AttachmentContext implements Context {
|
||||
use RequestTrait;
|
||||
|
||||
/** @var BoardContext */
|
||||
protected $boardContext;
|
||||
/** @var ServerContext */
|
||||
private $serverContext;
|
||||
|
||||
protected $lastAttachment = null;
|
||||
protected array $rememberedAttachments = [];
|
||||
|
||||
/** @BeforeScenario */
|
||||
public function gatherContexts(BeforeScenarioScope $scope) {
|
||||
$environment = $scope->getEnvironment();
|
||||
|
||||
$this->boardContext = $environment->getContext('BoardContext');
|
||||
$this->serverContext = $environment->getContext('ServerContext');
|
||||
}
|
||||
|
||||
public function delete(int $cardId, int $attachmentId) {
|
||||
$this->requestContext->sendPlainRequest('DELETE', '/index.php/apps/deck/cards/' . $cardId . '/attachment/file:' . $attachmentId);
|
||||
$response = $this->requestContext->getResponseBodyFromJson();
|
||||
}
|
||||
|
||||
/**
|
||||
* @When deleting the attachment :attachmentReference for the card :cardReference
|
||||
*/
|
||||
public function deletingTheAttachmentForTheCard($attachmentReference, $cardReference) {
|
||||
$cardId = $this->boardContext->getRememberedCard($cardReference)['id'] ?? null;
|
||||
$attachmentId = $this->getRememberedAttachment($attachmentReference)['id'] ?? null;
|
||||
Assert::assertNotNull($cardId, 'Card needs to be available');
|
||||
Assert::assertNotNull($attachmentId, 'Attachment needs to be available');
|
||||
$this->delete($cardId, $attachmentId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given /^uploads an attachment to the last used card$/
|
||||
*/
|
||||
public function uploadsAnAttachmentToTheLastUsedCard() {
|
||||
$cardId = $this->boardContext->getLastUsedCard()['id'] ?? null;
|
||||
Assert::assertNotNull($cardId, 'Card data is not set');
|
||||
|
||||
$this->requestContext->sendPlainRequest('POST', '/index.php/apps/deck/cards/' . $cardId . '/attachment', [
|
||||
'multipart' => [
|
||||
[
|
||||
'name' => 'file',
|
||||
'contents' => 'Example content',
|
||||
'filename' => 'test.txt',
|
||||
],
|
||||
[
|
||||
'name' => 'type',
|
||||
'contents' => 'file'
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given remember the last attachment as :arg1
|
||||
*/
|
||||
public function rememberTheLastAttachmentAs($arg1) {
|
||||
$this->requestContext->theResponseShouldHaveStatusCode(200);
|
||||
$this->lastAttachment = $this->requestContext->getResponseBodyFromJson();
|
||||
$this->rememberedAttachments[$arg1] = $this->lastAttachment;
|
||||
}
|
||||
|
||||
public function getRememberedAttachment($name) {
|
||||
return $this->rememberedAttachments[$name] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @When fetching the attachment :attachmentReference for the card :cardReference
|
||||
*/
|
||||
public function fetchingTheAttachmentForTheCard($attachmentReference, $cardReference) {
|
||||
$cardId = $this->boardContext->getRememberedCard($cardReference)['id'] ?? null;
|
||||
$attachmentId = $this->getRememberedAttachment($attachmentReference)['id'] ?? null;
|
||||
Assert::assertNotNull($cardId, 'Card needs to be available');
|
||||
Assert::assertNotNull($attachmentId, 'Attachment needs to be available');
|
||||
|
||||
$this->requestContext->sendPlainRequest('GET', '/index.php/apps/deck/cards/' . $cardId . '/attachment/file:' . $attachmentId);
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,6 @@ class BoardContext implements Context {
|
||||
private $stack = null;
|
||||
/** @var array last card response */
|
||||
private $card = null;
|
||||
private array $storedCards = [];
|
||||
|
||||
/** @var ServerContext */
|
||||
private $serverContext;
|
||||
@@ -32,15 +31,6 @@ class BoardContext implements Context {
|
||||
return $this->card;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given /^creates a board with example content$/
|
||||
*/
|
||||
public function createExampleContent() {
|
||||
$this->createsABoardNamedWithColor('Example board', 'ff0000');
|
||||
$this->createAStackNamed('ToDo');
|
||||
$this->createACardNamed('My example card');
|
||||
}
|
||||
|
||||
/**
|
||||
* @Given /^creates a board named "([^"]*)" with color "([^"]*)"$/
|
||||
*/
|
||||
@@ -242,15 +232,4 @@ class BoardContext implements Context {
|
||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/cards/' . $this->card['id'] .'/label/' . $label['id']);
|
||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @When remember the last card as :arg1
|
||||
*/
|
||||
public function rememberTheLastCardAs($arg1) {
|
||||
$this->storedCards[$arg1] = $this->getLastUsedCard();
|
||||
}
|
||||
|
||||
public function getRememberedCard($arg1) {
|
||||
return $this->storedCards[$arg1] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,36 +134,7 @@ class RequestContext implements Context {
|
||||
}
|
||||
}
|
||||
|
||||
public function sendPlainRequest(string $method, $uri = '', array $options = []) {
|
||||
$client = new Client;
|
||||
try {
|
||||
$this->response = $client->request(
|
||||
$method,
|
||||
rtrim($this->serverContext->getBaseUrl(), '/') . '/' . ltrim($uri, '/'),
|
||||
array_merge(
|
||||
[
|
||||
'cookies' => $this->serverContext->getCookieJar(),
|
||||
'headers' => [
|
||||
'requesttoken' => $this->serverContext->getReqestToken(),
|
||||
'OCS-APIREQUEST' => 'true',
|
||||
'Accept' => 'application/json'
|
||||
]
|
||||
],
|
||||
$options,
|
||||
)
|
||||
);
|
||||
} catch (ClientException $e) {
|
||||
$this->response = $e->getResponse();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getResponse(): ResponseInterface {
|
||||
return $this->response;
|
||||
}
|
||||
|
||||
public function getResponseBodyFromJson() {
|
||||
$this->getResponse()->getBody()->seek(0);
|
||||
return json_decode((string)$this->getResponse()->getBody(), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,6 @@ class ServerContext implements Context {
|
||||
}
|
||||
|
||||
public function getCookieJar(): CookieJar {
|
||||
echo $this->currentUser;
|
||||
return $this->cookieJar;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,22 +13,3 @@ Feature: decks
|
||||
|key|value|
|
||||
|title|MyBoard|
|
||||
|color|000000|
|
||||
|
||||
Scenario: Fail to create a board with invalid parameters
|
||||
Given acting as user "user0"
|
||||
When creates a board named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 100 characters" with color "ff0000"
|
||||
Then the response should have a status code 400
|
||||
When creates a board named "Example board" with color "invalid"
|
||||
Then the response should have a status code 400
|
||||
|
||||
Scenario: Fail to create a list with invalid parameters
|
||||
Given acting as user "user0"
|
||||
And creates a board named "MyBoard" with color "000000"
|
||||
When create a stack named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 100 characters"
|
||||
Then the response should have a status code 400
|
||||
|
||||
Scenario: Fail to create a card with invalid parameters
|
||||
Given acting as user "user0"
|
||||
And creates a board named "MyBoard" with color "000000"
|
||||
And create a stack named "ToDo"
|
||||
When create a card named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters"
|
||||
|
||||
@@ -135,31 +135,3 @@ Feature: File sharing
|
||||
When Deleting last share
|
||||
And as "user2" the file "/Deck/user0-file2.txt" does not exist
|
||||
And as "user3" the file "/Deck/user0-file2.txt" does not exist
|
||||
|
||||
Scenario: Remove a share through the deck API
|
||||
Given acting as user "user0"
|
||||
When creates a board with example content
|
||||
And remember the last card as "user0-card"
|
||||
And uploads an attachment to the last used card
|
||||
And remember the last attachment as "user0-attachment"
|
||||
|
||||
Given acting as user "user1"
|
||||
When creates a board with example content
|
||||
And remember the last card as "user1-card"
|
||||
And uploads an attachment to the last used card
|
||||
And remember the last attachment as "user1-attachment"
|
||||
|
||||
Given acting as user "user0"
|
||||
When fetching the attachment "user1-attachment" for the card "user0-card"
|
||||
Then the response should have a status code 403
|
||||
When deleting the attachment "user1-attachment" for the card "user0-card"
|
||||
Then the response should have a status code 403
|
||||
|
||||
When fetching the attachment "user0-attachment" for the card "user0-card"
|
||||
Then the response should have a status code 200
|
||||
When deleting the attachment "user0-attachment" for the card "user0-card"
|
||||
Then the response should have a status code 200
|
||||
|
||||
Given acting as user "user1"
|
||||
When deleting the attachment "user1-attachment" for the card "user1-card"
|
||||
Then the response should have a status code 200
|
||||
|
||||
@@ -20,7 +20,6 @@ else
|
||||
fi
|
||||
|
||||
composer install
|
||||
composer dump-autoload
|
||||
|
||||
# avoid port collision on jenkins - use $EXECUTOR_NUMBER
|
||||
if [ -z "$EXECUTOR_NUMBER" ]; then
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="4.27.0@faf106e717c37b8c81721845dba9de3d8deed8ff">
|
||||
<files psalm-version="4.29.0@7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3">
|
||||
<file src="lib/Activity/ActivityManager.php">
|
||||
<TypeDoesNotContainType occurrences="1">
|
||||
<code>$message !== null</code>
|
||||
|
||||
@@ -29,12 +29,12 @@ use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\AppFramework\Db\MapperTestUtility;
|
||||
use Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class AclMapperTest extends MapperTestUtility {
|
||||
class AclMapperTest extends TestCase {
|
||||
private $dbConnection;
|
||||
private $aclMapper;
|
||||
private $boardMapper;
|
||||
|
||||
@@ -27,12 +27,12 @@ use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Server;
|
||||
use Test\AppFramework\Db\MapperTestUtility;
|
||||
use Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class AttachmentMapperTest extends MapperTestUtility {
|
||||
class AttachmentMapperTest extends TestCase {
|
||||
|
||||
/** @var IDBConnection */
|
||||
private $dbConnection;
|
||||
|
||||
@@ -29,12 +29,12 @@ use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\AppFramework\Db\MapperTestUtility;
|
||||
use Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class BoardMapperTest extends MapperTestUtility {
|
||||
class BoardMapperTest extends TestCase {
|
||||
|
||||
/** @var IDBConnection */
|
||||
private $dbConnection;
|
||||
|
||||
@@ -32,7 +32,6 @@ use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Db\ChangeHelper;
|
||||
use OCA\Deck\NotFoundException;
|
||||
use OCA\Deck\Notification\NotificationHelper;
|
||||
use OCA\Deck\Validators\AssignmentServiceValidator;
|
||||
use OCP\Activity\IEvent;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
@@ -77,11 +76,6 @@ class AssignmentServiceTest extends TestCase {
|
||||
* @var AssignmentService
|
||||
*/
|
||||
private $assignmentService;
|
||||
/**
|
||||
* @var AssignmentServiceValidator
|
||||
*/
|
||||
private $assignmentServiceValidator;
|
||||
|
||||
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -93,7 +87,6 @@ class AssignmentServiceTest extends TestCase {
|
||||
$this->activityManager = $this->createMock(ActivityManager::class);
|
||||
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
|
||||
$this->changeHelper = $this->createMock(ChangeHelper::class);
|
||||
$this->assignmentServiceValidator = $this->createMock(AssignmentServiceValidator::class);
|
||||
$this->assignmentService = new AssignmentService(
|
||||
$this->permissionService,
|
||||
$this->cardMapper,
|
||||
@@ -103,7 +96,6 @@ class AssignmentServiceTest extends TestCase {
|
||||
$this->activityManager,
|
||||
$this->changeHelper,
|
||||
$this->eventDispatcher,
|
||||
$this->assignmentServiceValidator,
|
||||
'admin'
|
||||
);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ use OCA\Deck\Db\ChangeHelper;
|
||||
use OCA\Deck\InvalidAttachmentType;
|
||||
use OCA\Deck\NoPermissionException;
|
||||
use OCA\Deck\NotFoundException;
|
||||
use OCA\Deck\Validators\AttachmentServiceValidator;
|
||||
use OCP\AppFramework\Http\Response;
|
||||
use OCP\AppFramework\IAppContainer;
|
||||
use OCP\IL10N;
|
||||
@@ -90,10 +89,6 @@ class AttachmentServiceTest extends TestCase {
|
||||
* @var IAttachmentService|MockObject
|
||||
*/
|
||||
private $filesAppServiceImpl;
|
||||
/**
|
||||
* @var AttachmentServiceValidator
|
||||
*/
|
||||
private $attachmentServiceValidator;
|
||||
|
||||
/**
|
||||
* @throws \OCP\AppFramework\QueryException
|
||||
@@ -131,7 +126,6 @@ class AttachmentServiceTest extends TestCase {
|
||||
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
$this->changeHelper = $this->createMock(ChangeHelper::class);
|
||||
$this->attachmentServiceValidator = $this->createMock(AttachmentServiceValidator::class);
|
||||
|
||||
$this->attachmentService = new AttachmentService(
|
||||
$this->attachmentMapper,
|
||||
@@ -143,8 +137,7 @@ class AttachmentServiceTest extends TestCase {
|
||||
$this->attachmentCacheHelper,
|
||||
$this->userId,
|
||||
$this->l10n,
|
||||
$this->activityManager,
|
||||
$this->attachmentServiceValidator
|
||||
$this->activityManager
|
||||
);
|
||||
}
|
||||
|
||||
@@ -170,7 +163,7 @@ class AttachmentServiceTest extends TestCase {
|
||||
$application->expects($this->any())
|
||||
->method('getContainer')
|
||||
->willReturn($appContainer);
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->userManager, $this->changeHelper, $this->permissionService, $application, $this->attachmentCacheHelper, $this->userId, $this->l10n, $this->activityManager, $this->attachmentServiceValidator);
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->userManager, $this->changeHelper, $this->permissionService, $application, $this->attachmentCacheHelper, $this->userId, $this->l10n, $this->activityManager);
|
||||
$attachmentService->registerAttachmentService('custom', MyAttachmentService::class);
|
||||
$this->assertEquals($fileServiceMock, $attachmentService->getService('deck_file'));
|
||||
$this->assertEquals(MyAttachmentService::class, get_class($attachmentService->getService('custom')));
|
||||
@@ -200,7 +193,7 @@ class AttachmentServiceTest extends TestCase {
|
||||
->method('getContainer')
|
||||
->willReturn($appContainer);
|
||||
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->userManager, $this->changeHelper, $this->permissionService, $application, $this->attachmentCacheHelper, $this->userId, $this->l10n, $this->activityManager, $this->attachmentServiceValidator);
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->userManager, $this->changeHelper, $this->permissionService, $application, $this->attachmentCacheHelper, $this->userId, $this->l10n, $this->activityManager);
|
||||
$attachmentService->registerAttachmentService('custom', MyAttachmentService::class);
|
||||
$attachmentService->getService('deck_file_invalid');
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@ use OCP\IGroupManager;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use \Test\TestCase;
|
||||
use OCP\IURLGenerator;
|
||||
use OCA\Deck\Validators\BoardServiceValidator;
|
||||
|
||||
class BoardServiceTest extends TestCase {
|
||||
|
||||
@@ -85,8 +84,6 @@ class BoardServiceTest extends TestCase {
|
||||
private $urlGenerator;
|
||||
/** @var IDBConnection|MockObject */
|
||||
private $connection;
|
||||
/** @var BoardServiceValidator */
|
||||
private $boardServiceValidator;
|
||||
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -107,7 +104,6 @@ class BoardServiceTest extends TestCase {
|
||||
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
|
||||
$this->urlGenerator = $this->createMock(IURLGenerator::class);
|
||||
$this->connection = $this->createMock(IDBConnection::class);
|
||||
$this->boardServiceValidator = $this->createMock(BoardServiceValidator::class);
|
||||
|
||||
$this->service = new BoardService(
|
||||
$this->boardMapper,
|
||||
@@ -127,7 +123,6 @@ class BoardServiceTest extends TestCase {
|
||||
$this->changeHelper,
|
||||
$this->urlGenerator,
|
||||
$this->connection,
|
||||
$this->boardServiceValidator,
|
||||
$this->userId
|
||||
);
|
||||
|
||||
@@ -432,6 +427,6 @@ class BoardServiceTest extends TestCase {
|
||||
->method('delete')
|
||||
->with($acl)
|
||||
->willReturn($acl);
|
||||
$this->assertTrue($this->service->deleteAcl(123));
|
||||
$this->assertEquals($acl, $this->service->deleteAcl(123));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\LabelMapper;
|
||||
use OCA\Deck\Notification\NotificationHelper;
|
||||
use OCA\Deck\StatusException;
|
||||
use OCA\Deck\Validators\CardServiceValidator;
|
||||
use OCP\Activity\IEvent;
|
||||
use OCP\Comments\ICommentsManager;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
@@ -85,8 +84,6 @@ class CardServiceTest extends TestCase {
|
||||
private $request;
|
||||
/** @var LoggerInterface|MockObject */
|
||||
private $logger;
|
||||
/** @var CardServiceValidator|MockObject */
|
||||
private $cardServiceValidator;
|
||||
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -107,7 +104,6 @@ class CardServiceTest extends TestCase {
|
||||
$this->urlGenerator = $this->createMock(IURLGenerator::class);
|
||||
$this->logger = $this->createMock(LoggerInterface::class);
|
||||
$this->request = $this->createMock(IRequest::class);
|
||||
$this->cardServiceValidator = $this->createMock(CardServiceValidator::class);
|
||||
|
||||
$this->logger->expects($this->any())->method('error');
|
||||
|
||||
@@ -129,7 +125,6 @@ class CardServiceTest extends TestCase {
|
||||
$this->urlGenerator,
|
||||
$this->logger,
|
||||
$this->request,
|
||||
$this->cardServiceValidator,
|
||||
'user1'
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ namespace OCA\Deck\Service;
|
||||
use OCA\Deck\Db\ChangeHelper;
|
||||
use OCA\Deck\Db\Label;
|
||||
use OCA\Deck\Db\LabelMapper;
|
||||
use OCA\Deck\Validators\LabelServiceValidator;
|
||||
use Test\TestCase;
|
||||
|
||||
class LabelServiceTest extends TestCase {
|
||||
@@ -41,8 +40,6 @@ class LabelServiceTest extends TestCase {
|
||||
private $boardService;
|
||||
/** @var ChangeHelper|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $changeHelper;
|
||||
/** @var LabelServiceValidator\MockObject */
|
||||
private $labelServiceValidator;
|
||||
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -52,14 +49,11 @@ class LabelServiceTest extends TestCase {
|
||||
->disableOriginalConstructor()->getMock();
|
||||
$this->boardService = $this->createMock(BoardService::class);
|
||||
$this->changeHelper = $this->createMock(ChangeHelper::class);
|
||||
$this->labelServiceValidator = $this->createMock(LabelServiceValidator::class);
|
||||
|
||||
$this->labelService = new LabelService(
|
||||
$this->labelMapper,
|
||||
$this->permissionService,
|
||||
$this->boardService,
|
||||
$this->changeHelper,
|
||||
$this->labelServiceValidator,
|
||||
$this->changeHelper
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ use OCA\Deck\Db\Label;
|
||||
use OCA\Deck\Db\LabelMapper;
|
||||
use OCA\Deck\Db\Stack;
|
||||
use OCA\Deck\Db\StackMapper;
|
||||
use OCA\Deck\Validators\StackServiceValidator;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use \Test\TestCase;
|
||||
|
||||
@@ -71,8 +70,6 @@ class StackServiceTest extends TestCase {
|
||||
private $changeHelper;
|
||||
/** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $logger;
|
||||
/** @var StackServiceValidator|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $stackServiceValidator;
|
||||
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -88,7 +85,6 @@ class StackServiceTest extends TestCase {
|
||||
$this->activityManager = $this->createMock(ActivityManager::class);
|
||||
$this->changeHelper = $this->createMock(ChangeHelper::class);
|
||||
$this->logger = $this->createMock(LoggerInterface::class);
|
||||
$this->stackServiceValidator = $this->createMock(StackServiceValidator::class);
|
||||
|
||||
$this->stackService = new StackService(
|
||||
$this->stackMapper,
|
||||
@@ -102,8 +98,7 @@ class StackServiceTest extends TestCase {
|
||||
$this->attachmentService,
|
||||
$this->activityManager,
|
||||
$this->changeHelper,
|
||||
$this->logger,
|
||||
$this->stackServiceValidator
|
||||
$this->logger
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
namespace OCA\Deck\Validators;
|
||||
|
||||
use OCA\Deck\Tests\unit\Validators\ValidatorTestBase;
|
||||
|
||||
class StackServiceValidatorTest extends ValidatorTestBase {
|
||||
public function setUp(): void {
|
||||
parent::setUpValidatorTest(StackServiceValidator::class);
|
||||
}
|
||||
|
||||
public function testTitle() {
|
||||
$this->assertPass([
|
||||
'title' => 'Short title',
|
||||
]);
|
||||
$this->assertPass([
|
||||
'title' => str_repeat('A', 100)
|
||||
]);
|
||||
$this->assertFail([
|
||||
'title' => str_repeat('A', 101)
|
||||
]);
|
||||
$this->assertFail([
|
||||
'title' => '',
|
||||
]);
|
||||
$this->assertFail([
|
||||
'title' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testId() {
|
||||
$this->assertPass([ 'id' => 1234 ]);
|
||||
$this->assertPass([ 'id' => '1234' ]);
|
||||
$this->assertFail([ 'id' => 'a1234' ]);
|
||||
$this->assertFail([ 'id' => '' ]);
|
||||
$this->assertFail([ 'id' => null ]);
|
||||
}
|
||||
|
||||
public function testBoardId() {
|
||||
$this->assertPass([ 'boardId' => 1234 ]);
|
||||
$this->assertPass([ 'boardId' => '1234' ]);
|
||||
$this->assertFail([ 'boardId' => 'a1234' ]);
|
||||
$this->assertFail([ 'boardId' => '' ]);
|
||||
$this->assertFail([ 'boardId' => null ]);
|
||||
}
|
||||
|
||||
public function testOrder() {
|
||||
$this->assertPass([ 'order' => 1234 ]);
|
||||
$this->assertPass([ 'order' => '1234' ]);
|
||||
$this->assertFail([ 'order' => 'a1234' ]);
|
||||
$this->assertFail([ 'order' => '' ]);
|
||||
$this->assertFail([ 'order' => null ]);
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
namespace OCA\Deck\Tests\unit\Validators;
|
||||
|
||||
use OCA\Deck\BadRequestException;
|
||||
use OCA\Deck\Validators\BaseValidator;
|
||||
|
||||
abstract class ValidatorTestBase extends \PHPUnit\Framework\TestCase {
|
||||
protected BaseValidator $validator;
|
||||
|
||||
public function setUpValidatorTest($class = null): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->validator = new $class();
|
||||
}
|
||||
|
||||
protected function assertPass($values) {
|
||||
self::assertTrue($this->check($values));
|
||||
}
|
||||
|
||||
protected function assertFail($values) {
|
||||
self::assertFalse($this->check($values));
|
||||
}
|
||||
|
||||
private function check($values) {
|
||||
try {
|
||||
$this->validator->check($values);
|
||||
return true;
|
||||
} catch (BadRequestException $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -164,10 +164,14 @@ class BoardControllerTest extends \Test\TestCase {
|
||||
}
|
||||
|
||||
public function testDeleteAcl() {
|
||||
$acl = $this->getMockBuilder(Acl::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->boardService->expects($this->once())
|
||||
->method('deleteAcl')
|
||||
->with(1)
|
||||
->willReturn(true);
|
||||
$this->assertEquals(true, $this->controller->deleteAcl(1));
|
||||
->willReturn($acl);
|
||||
$this->assertEquals($acl, $this->controller->deleteAcl(1));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user