Compare commits
42 Commits
StCyr-patc
...
chore/noid
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f9507b4ad | ||
|
|
89da0d2f47 | ||
|
|
42589fe001 | ||
|
|
aaad943e27 | ||
|
|
5abee105fa | ||
|
|
a01d17843f | ||
|
|
e1ad1ae138 | ||
|
|
0a51aaedd6 | ||
|
|
9842b0dba3 | ||
|
|
f0be9749b7 | ||
|
|
a2676bce7a | ||
|
|
93b405d84a | ||
|
|
aa345fe8d0 | ||
|
|
1c89cf8284 | ||
|
|
b4111b00ef | ||
|
|
fa915f7dbe | ||
|
|
19e35fdee4 | ||
|
|
6dfb01fa02 | ||
|
|
df5b5690a0 | ||
|
|
2a4ea73023 | ||
|
|
9c5498a050 | ||
|
|
24a1666c36 | ||
|
|
de5c625e86 | ||
|
|
544581bbdc | ||
|
|
3852119f4f | ||
|
|
fd540be9c2 | ||
|
|
cfcfaad6c6 | ||
|
|
040df707b2 | ||
|
|
4a00ce2e45 | ||
|
|
80a51d64b6 | ||
|
|
c741c1190b | ||
|
|
2f5d39fc5b | ||
|
|
a6b31d6a5f | ||
|
|
261e6d0362 | ||
|
|
8ceed06aca | ||
|
|
02f63d9967 | ||
|
|
206a735c55 | ||
|
|
ab94a5cc32 | ||
|
|
4b2c191e21 | ||
|
|
d4ea088cd2 | ||
|
|
979c1be7f3 | ||
|
|
3c5ca27eb8 |
2
.github/workflows/appbuild.yml
vendored
2
.github/workflows/appbuild.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.30.5
|
||||
uses: shivammathur/setup-php@2.31.0
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
|
||||
2
.github/workflows/appstore-build-publish.yml
vendored
2
.github/workflows/appstore-build-publish.yml
vendored
@@ -72,7 +72,7 @@ jobs:
|
||||
filename: ${{ env.APP_NAME }}/appinfo/info.xml
|
||||
|
||||
- name: Set up php ${{ steps.php-versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: ${{ steps.php-versions.outputs.php-min }}
|
||||
coverage: none
|
||||
|
||||
2
.github/workflows/cypress.yml
vendored
2
.github/workflows/cypress.yml
vendored
@@ -91,7 +91,7 @@ jobs:
|
||||
restore-keys: ${{ steps.extcache.outputs.key }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.30.5
|
||||
uses: shivammathur/setup-php@2.31.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: ${{ env.extensions }}
|
||||
|
||||
2
.github/workflows/integration.yml
vendored
2
.github/workflows/integration.yml
vendored
@@ -78,7 +78,7 @@ jobs:
|
||||
path: apps/activity
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.30.5
|
||||
uses: shivammathur/setup-php@2.31.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, apcu
|
||||
|
||||
2
.github/workflows/lint-php-cs.yml
vendored
2
.github/workflows/lint-php-cs.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up php8.2
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
coverage: none
|
||||
|
||||
2
.github/workflows/lint-php.yml
vendored
2
.github/workflows/lint-php.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
|
||||
2
.github/workflows/phpunit-mysql.yml
vendored
2
.github/workflows/phpunit-mysql.yml
vendored
@@ -92,7 +92,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
2
.github/workflows/phpunit-pgsql.yml
vendored
2
.github/workflows/phpunit-pgsql.yml
vendored
@@ -80,7 +80,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
2
.github/workflows/phpunit-sqlite.yml
vendored
2
.github/workflows/phpunit-sqlite.yml
vendored
@@ -69,7 +69,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
2
.github/workflows/psalm.yml
vendored
2
.github/workflows/psalm.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up php8.2
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
coverage: none
|
||||
|
||||
8
.github/workflows/reuse.yml
vendored
8
.github/workflows/reuse.yml
vendored
@@ -9,12 +9,14 @@
|
||||
|
||||
name: REUSE Compliance Check
|
||||
|
||||
on: pull_request
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
reuse-compliance-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
- name: Checkout
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@a46482ca367aef4454a87620aa37c2be4b2f8106 # v3.0.0
|
||||
uses: fsfe/reuse-action@3ae3c6bdf1257ab19397fab11fd3312144692083 # v4.0.0
|
||||
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
|
||||
# Enable GitHub auto merge
|
||||
- name: Auto merge
|
||||
uses: alexwilson/enable-github-automerge-action@835faa041540d2234ea4530506a7abd42c847dfc # main
|
||||
uses: alexwilson/enable-github-automerge-action@772cbfd2817d6418fff7dfcfff0962d0af42d813 # main
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
2
.github/workflows/update-nextcloud-ocp.yml
vendored
2
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -31,7 +31,7 @@ jobs:
|
||||
|
||||
- name: Set up php8.2
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: shivammathur/setup-php@fc14643b0a99ee9db10a3c025a33d76544fa3761 # v2
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b # v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
16
.reuse/dep5
16
.reuse/dep5
@@ -1,16 +0,0 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: deck
|
||||
Upstream-Contact: Nextcloud <info@nextcloud.com>
|
||||
Source: https://github.com/nextcloud/deck
|
||||
|
||||
Files: .gitattributes .github/* .editorconfig babel.config.js .php-cs-fixer.dist.php package-lock.json package.json composer.json composer.lock webpack.js stylelint.config.js .eslintrc.js .gitignore .jshintrc .l10nignore action/.gitignore action/package.json action/package-lock.json action/dist/index.js tests/* psalm.xml cypress/.env cypress/.eslintrc.js cypress/docker-compose.yml cypress/plugins/index.js cypress/tsconfig.json cypress.config.ts vendor-bin/*/composer.json stylelint.config.cjs vendor-bin/*/composer.lock .tx/config webpack.config.js tsconfig.json vite.config.ts js/vendor.LICENSE.txt krankerl.toml .npmignore cypress/fixtures/* postcss.config.js cypress/dockerNode.ts jest.config.js cypress.config.js relativeci.config.js .nextcloudignore .devcontainer/devcontainer.json
|
||||
Copyright: none
|
||||
License: CC0-1.0
|
||||
|
||||
Files: l10n/*.js l10n/*.json js/*.js.map js/*.js js/*.mjs js/*.mjs.map js/templates/*.handlebars lib/Service/Importer/fixtures/config-deckJson-schema.json lib/Service/Importer/fixtures/config-trelloApi-schema.json lib/Service/Importer/fixtures/config-trelloJson-schema.json screenshots/screenshot1.png src/assets/file-placeholder.svg img/favicon.ico img/favicon.png img/favicon.svg img/activity.svg img/activity-dark.svg img/deck.svg img/deck-current.svg img/deck-dark.svg img/details-white.svg img/card.svg
|
||||
Copyright: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-or-later
|
||||
|
||||
Files: img/attach.svg img/description.svg img/details.svg img/toggle-view-expand.svg img/toggle-view-collapse.svg img/filter.svg img/filter_set.svg img/circles-dark.svg img/circles.svg img/color_picker.svg img/color_picker-dark.svg img/notifications-dark.svg img/archive.svg img/add-white.svg img/calendar-dark.svg img/calendar-white.svg
|
||||
Copyright: 2018-2024 Google LLC
|
||||
License: Apache-2.0
|
||||
24
REUSE.toml
Normal file
24
REUSE.toml
Normal file
@@ -0,0 +1,24 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
version = 1
|
||||
SPDX-PackageName = "deck"
|
||||
SPDX-PackageSupplier = "Nextcloud <info@nextcloud.com>"
|
||||
SPDX-PackageDownloadLocation = "https://github.com/nextcloud/deck"
|
||||
|
||||
[[annotations]]
|
||||
path = [".gitattributes", ".github/**", ".editorconfig", "babel.config.js", ".php-cs-fixer.dist.php", "package-lock.json", "package.json", "composer.json", "composer.lock", "webpack.js", "stylelint.config.js", ".eslintrc.js", ".gitignore", ".jshintrc", ".l10nignore", "action/.gitignore", "action/package.json", "action/package-lock.json", "action/dist/index.js", "tests/**", "psalm.xml", "cypress/.env", "cypress/.eslintrc.js", "cypress/docker-compose.yml", "cypress/plugins/index.js", "cypress/tsconfig.json", "cypress.config.ts", "vendor-bin/**/composer.json", "stylelint.config.cjs", "vendor-bin/**/composer.lock", ".tx/config", "webpack.config.js", "tsconfig.json", "vite.config.ts", "js/vendor.LICENSE.txt", "krankerl.toml", ".npmignore", "cypress/fixtures/**", "postcss.config.js", "cypress/dockerNode.ts", "jest.config.js", "cypress.config.js", "relativeci.config.js", ".nextcloudignore", ".devcontainer/devcontainer.json"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "none"
|
||||
SPDX-License-Identifier = "CC0-1.0"
|
||||
|
||||
[[annotations]]
|
||||
path = ["l10n/**.js", "l10n/**.json", "js/**.js.map", "js/**.js", "js/**.mjs", "js/**.mjs.map", "js/templates/**.handlebars", "lib/Service/Importer/fixtures/config-deckJson-schema.json", "lib/Service/Importer/fixtures/config-trelloApi-schema.json", "lib/Service/Importer/fixtures/config-trelloJson-schema.json", "screenshots/screenshot1.png", "src/assets/file-placeholder.svg", "img/favicon.ico", "img/favicon.png", "img/favicon.svg", "img/activity.svg", "img/activity-dark.svg", "img/deck.svg", "img/deck-current.svg", "img/deck-dark.svg", "img/details-white.svg", "img/card.svg"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2019 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
||||
[[annotations]]
|
||||
path = ["img/attach.svg", "img/description.svg", "img/details.svg", "img/toggle-view-expand.svg", "img/toggle-view-collapse.svg", "img/filter.svg", "img/filter_set.svg", "img/circles-dark.svg", "img/circles.svg", "img/color_picker.svg", "img/color_picker-dark.svg", "img/notifications-dark.svg", "img/archive.svg", "img/add-white.svg", "img/calendar-dark.svg", "img/calendar-white.svg"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2018-2024 Google LLC"
|
||||
SPDX-License-Identifier = "Apache-2.0"
|
||||
8
composer.lock
generated
8
composer.lock
generated
@@ -254,12 +254,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nextcloud-deps/ocp.git",
|
||||
"reference": "bdeabb2fbb4691ac3d72dc27f56dd52aa6c61725"
|
||||
"reference": "0988e496b6f9c5086e4cf6b9364cba9360b4c808"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/bdeabb2fbb4691ac3d72dc27f56dd52aa6c61725",
|
||||
"reference": "bdeabb2fbb4691ac3d72dc27f56dd52aa6c61725",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/0988e496b6f9c5086e4cf6b9364cba9360b4c808",
|
||||
"reference": "0988e496b6f9c5086e4cf6b9364cba9360b4c808",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -291,7 +291,7 @@
|
||||
"issues": "https://github.com/nextcloud-deps/ocp/issues",
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
|
||||
},
|
||||
"time": "2024-06-18T00:36:38+00:00"
|
||||
"time": "2024-07-06T00:35:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
|
||||
@@ -20,9 +20,11 @@ Overall, Deck is easy to use. You can create boards, add users, share the Deck,
|
||||
4. [Mark task as done](#4-mark-as-done)
|
||||
5. [Archive old tasks](#5-archive-old-tasks)
|
||||
6. [Manage your board](#6-manage-your-board)
|
||||
7. [Import boards](#7-import-boards)
|
||||
8. [Search](#8-search)
|
||||
9. [New owner for the deck entities](#9-new-owner-for-the-deck-entities)
|
||||
7. [Sharing boards](#7-sharing-boards)
|
||||
8. [Import boards](#8-import-boards)
|
||||
9. [Trello interoperability](#9-trello-interoperability)
|
||||
10. [Search](#10-search)
|
||||
11. [New owner for the deck entities](#11-new-owner-for-the-deck-entities)
|
||||
|
||||
### 1. Create my first board
|
||||
In this example, we're going to create a board and share it with an other nextcloud user.
|
||||
@@ -84,7 +86,14 @@ The **sharing tab** allows you to add users or even groups to your boards.
|
||||
**Deleted objects** allows you to return previously deleted stacks or cards.
|
||||
The **Timeline** allows you to see everything that happened in your boards. Everything!
|
||||
|
||||
### 7. Import boards
|
||||
### 7. Sharing boards
|
||||
You can share boards with a user, a group, or, if you are using the [Circles](https://apps.nextcloud.com/apps/circles) app, with a circle.
|
||||
|
||||
If a user is member of one or several group(s) or circle(s) a board is shared with, the following rules apply:
|
||||
1. If a user is namely specified in a board's acl, (s)he gets the permission assigned to her/him;
|
||||
2. Else, if a user is member of one or several circle(s) or group(s), (s)he gets the permission when at least one circle/group (s)he is member of has the permission.
|
||||
|
||||
### 8. Import boards
|
||||
|
||||
Importing can be done using the API or the `occ` `deck:import` command.
|
||||
|
||||
@@ -92,6 +101,8 @@ Comments with more than 1000 characters are placed as attached files to the card
|
||||
|
||||
It is possible to import from the following sources:
|
||||
|
||||
### 9. Trello interoperability
|
||||
|
||||
#### Trello JSON
|
||||
|
||||
Steps:
|
||||
@@ -150,7 +161,7 @@ Example configuration file:
|
||||
}
|
||||
```
|
||||
|
||||
### 8. Search
|
||||
### 10. Search
|
||||
|
||||
Deck provides a global search either through the unified search in the Nextcloud header or with the inline search next to the board controls.
|
||||
This search allows advanced filtering of cards across all board of the logged in user.
|
||||
@@ -173,7 +184,7 @@ Other text tokens will be used to perform a case-insensitive search on the card
|
||||
|
||||
In addition, quotes can be used to pass a query with spaces, e.g. `"Exact match with spaces"` or `title:"My card"`.
|
||||
|
||||
### 9. New owner for the deck entities
|
||||
### 11. New owner for the deck entities
|
||||
You can transfer ownership of boards, cards, etc to a new user, using `occ` command `deck:transfer-ownership`
|
||||
|
||||
```bash
|
||||
|
||||
@@ -1,5 +1 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
../README.md
|
||||
2
docs/index.md.license
Normal file
2
docs/index.md.license
Normal file
@@ -0,0 +1,2 @@
|
||||
SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -149,6 +149,7 @@ OC.L10N.register(
|
||||
"Filter by tag" : "Filtrer på knagg",
|
||||
"Filter by assigned user" : "Filtrer på tildelt bruker",
|
||||
"Unassigned" : "Ikke tildelt",
|
||||
"Filter by status" : "Filtrer etter status",
|
||||
"Open and completed" : "Åpen og fullført",
|
||||
"Open" : "Åpne",
|
||||
"Completed" : "Ferdig",
|
||||
@@ -257,6 +258,7 @@ OC.L10N.register(
|
||||
"Remove due date" : "Fjern forfallsdato",
|
||||
"Mark as done" : "Marker som fullført",
|
||||
"Due at:" : "Forfaller den:",
|
||||
"Not done" : "Ikke fullført",
|
||||
"Unarchive card" : "Hent kort fra arkiv",
|
||||
"Archive card" : "Arkiver kort",
|
||||
"Select Date" : "Velg dato",
|
||||
|
||||
@@ -147,6 +147,7 @@
|
||||
"Filter by tag" : "Filtrer på knagg",
|
||||
"Filter by assigned user" : "Filtrer på tildelt bruker",
|
||||
"Unassigned" : "Ikke tildelt",
|
||||
"Filter by status" : "Filtrer etter status",
|
||||
"Open and completed" : "Åpen og fullført",
|
||||
"Open" : "Åpne",
|
||||
"Completed" : "Ferdig",
|
||||
@@ -255,6 +256,7 @@
|
||||
"Remove due date" : "Fjern forfallsdato",
|
||||
"Mark as done" : "Marker som fullført",
|
||||
"Due at:" : "Forfaller den:",
|
||||
"Not done" : "Ikke fullført",
|
||||
"Unarchive card" : "Hent kort fra arkiv",
|
||||
"Archive card" : "Arkiver kort",
|
||||
"Select Date" : "Velg dato",
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace OCA\Deck\AppInfo;
|
||||
use Closure;
|
||||
use Exception;
|
||||
use OCA\Circles\Events\CircleDestroyedEvent;
|
||||
use OCA\Deck\Activity\CommentEventHandler;
|
||||
use OCA\Deck\Capabilities;
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProvider;
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProviderCard;
|
||||
@@ -28,6 +27,7 @@ use OCA\Deck\Event\CardUpdatedEvent;
|
||||
use OCA\Deck\Event\SessionClosedEvent;
|
||||
use OCA\Deck\Event\SessionCreatedEvent;
|
||||
use OCA\Deck\Listeners\BeforeTemplateRenderedListener;
|
||||
use OCA\Deck\Listeners\CommentEventListener;
|
||||
use OCA\Deck\Listeners\FullTextSearchEventListener;
|
||||
use OCA\Deck\Listeners\LiveUpdateListener;
|
||||
use OCA\Deck\Listeners\ParticipantCleanupListener;
|
||||
@@ -56,7 +56,7 @@ use OCP\Collaboration\Reference\RenderReferenceEvent;
|
||||
use OCP\Collaboration\Resources\IProviderManager;
|
||||
use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent;
|
||||
use OCP\Comments\CommentsEntityEvent;
|
||||
use OCP\Comments\ICommentsManager;
|
||||
use OCP\Comments\CommentsEvent;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Group\Events\GroupDeletedEvent;
|
||||
use OCP\IConfig;
|
||||
@@ -91,7 +91,6 @@ class Application extends App implements IBootstrap {
|
||||
|
||||
public function boot(IBootContext $context): void {
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerCommentsEntity']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerCommentsEventHandler']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerCollaborationResources']));
|
||||
|
||||
$context->injectFn(function (IManager $shareManager) {
|
||||
@@ -141,6 +140,7 @@ class Application extends App implements IBootstrap {
|
||||
$context->registerEventListener(AclCreatedEvent::class, FullTextSearchEventListener::class);
|
||||
$context->registerEventListener(AclUpdatedEvent::class, FullTextSearchEventListener::class);
|
||||
$context->registerEventListener(AclDeletedEvent::class, FullTextSearchEventListener::class);
|
||||
$context->registerEventListener(CommentsEvent::class, CommentEventListener::class);
|
||||
|
||||
// Handling cache invalidation for collections
|
||||
$context->registerEventListener(AclCreatedEvent::class, ResourceListener::class);
|
||||
@@ -184,12 +184,6 @@ class Application extends App implements IBootstrap {
|
||||
});
|
||||
}
|
||||
|
||||
protected function registerCommentsEventHandler(ICommentsManager $commentsManager): void {
|
||||
$commentsManager->registerEventHandler(function () {
|
||||
return $this->getContainer()->query(CommentEventHandler::class);
|
||||
});
|
||||
}
|
||||
|
||||
protected function registerCollaborationResources(IProviderManager $resourceManager): void {
|
||||
$resourceManager->registerResourceProvider(ResourceProvider::class);
|
||||
$resourceManager->registerResourceProvider(ResourceProviderCard::class);
|
||||
|
||||
@@ -113,7 +113,7 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
||||
return parent::update($cardUpdate);
|
||||
}
|
||||
|
||||
public function find($id): Card {
|
||||
public function find($id, bool $enhance = true): Card {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('deck_cards')
|
||||
@@ -122,9 +122,11 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
||||
->addOrderBy('id');
|
||||
/** @var Card $card */
|
||||
$card = $this->findEntity($qb);
|
||||
$labels = $this->labelMapper->findAssignedLabelsForCard($card->getId());
|
||||
$card->setLabels($labels);
|
||||
$this->mapOwner($card);
|
||||
if ($enhance) {
|
||||
$labels = $this->labelMapper->findAssignedLabelsForCard($card->getId());
|
||||
$card->setLabels($labels);
|
||||
$this->mapOwner($card);
|
||||
}
|
||||
return $card;
|
||||
}
|
||||
|
||||
@@ -560,12 +562,15 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
||||
}
|
||||
|
||||
public function isOwner($userId, $id): bool {
|
||||
$sql = 'SELECT owner FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_stacks` WHERE id IN (SELECT stack_id FROM `*PREFIX*deck_cards` WHERE id = ?))';
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->bindParam(1, $id, \PDO::PARAM_INT, 0);
|
||||
$stmt->execute();
|
||||
$row = $stmt->fetch();
|
||||
return ($row['owner'] === $userId);
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('c.id')
|
||||
->from($this->getTableName(), 'c')
|
||||
->innerJoin('c', 'deck_stacks', 's', 'c.stack_id = s.id')
|
||||
->innerJoin('s', 'deck_boards', 'b', 'b.id = s.board_id')
|
||||
->where($qb->expr()->eq('c.id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
|
||||
->andWhere($qb->expr()->eq('b.owner', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
|
||||
|
||||
return count($qb->executeQuery()->fetchAll()) > 0;
|
||||
}
|
||||
|
||||
public function findBoardId($id): ?int {
|
||||
|
||||
@@ -1,43 +1,37 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\Deck\Activity;
|
||||
namespace OCA\Deck\Listeners;
|
||||
|
||||
use OCA\Deck\Activity\ActivityManager;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Db\ChangeHelper;
|
||||
use OCA\Deck\Notification\NotificationHelper;
|
||||
use OCP\Comments\CommentsEvent;
|
||||
use OCP\Comments\IComment;
|
||||
use OCP\Comments\ICommentsEventHandler;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
|
||||
class CommentEventHandler implements ICommentsEventHandler {
|
||||
/** @template-implements IEventListener<CommentsEvent|Event> */
|
||||
class CommentEventListener implements IEventListener {
|
||||
|
||||
/** @var ActivityManager */
|
||||
private $activityManager;
|
||||
|
||||
/** @var NotificationHelper */
|
||||
private $notificationHelper;
|
||||
|
||||
/** @var CardMapper */
|
||||
private $cardMapper;
|
||||
|
||||
/** @var ChangeHelper */
|
||||
private $changeHelper;
|
||||
|
||||
public function __construct(ActivityManager $activityManager, NotificationHelper $notificationHelper, CardMapper $cardMapper, ChangeHelper $changeHelper) {
|
||||
$this->notificationHelper = $notificationHelper;
|
||||
$this->activityManager = $activityManager;
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->changeHelper = $changeHelper;
|
||||
public function __construct(
|
||||
private ActivityManager $activityManager,
|
||||
private NotificationHelper $notificationHelper,
|
||||
private CardMapper $cardMapper,
|
||||
private ChangeHelper $changeHelper,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CommentsEvent $event
|
||||
*/
|
||||
public function handle(CommentsEvent $event) {
|
||||
public function handle(Event $event): void {
|
||||
if (!$event instanceof CommentsEvent) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($event->getComment()->getObjectType() !== 'deckCard') {
|
||||
return;
|
||||
}
|
||||
@@ -61,20 +55,13 @@ class CommentEventHandler implements ICommentsEventHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CommentsEvent $event
|
||||
*/
|
||||
private function activityHandler(CommentsEvent $event) {
|
||||
/** @var IComment $comment */
|
||||
private function activityHandler(CommentsEvent $event): void {
|
||||
$comment = $event->getComment();
|
||||
$card = $this->cardMapper->find($comment->getObjectId());
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $card, ActivityManager::SUBJECT_CARD_COMMENT_CREATE, ['comment' => $comment]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CommentsEvent $event
|
||||
*/
|
||||
private function notificationHandler(CommentsEvent $event) {
|
||||
private function notificationHandler(CommentsEvent $event): void {
|
||||
$this->notificationHelper->sendMention($event->getComment());
|
||||
}
|
||||
}
|
||||
@@ -119,7 +119,7 @@ class PermissionService {
|
||||
if ($permissions[$permission] === true) {
|
||||
|
||||
if (!$allowDeletedCard && $mapper instanceof CardMapper) {
|
||||
$card = $mapper->find((int)$id);
|
||||
$card = $mapper->find((int)$id, false);
|
||||
if ($card->getDeletedAt() > 0) {
|
||||
throw new NoPermissionException('Card is deleted');
|
||||
}
|
||||
|
||||
@@ -831,7 +831,7 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
||||
$pathSections = explode('/', $data['path'], 2);
|
||||
// FIXME: would not detect rare md5'd home storage case properly
|
||||
if ($pathSections[0] !== 'files'
|
||||
&& in_array(explode(':', $data['storage_string_id'], 2)[0], ['home', 'object'])) {
|
||||
&& (strpos($data['storage_string_id'], 'home::') === 0 || strpos($data['storage_string_id'], 'object::user') === 0)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
144
package-lock.json
generated
144
package-lock.json
generated
@@ -14,7 +14,7 @@
|
||||
"@nextcloud/auth": "^2.3.0",
|
||||
"@nextcloud/axios": "^2.5.0",
|
||||
"@nextcloud/capabilities": "^1.2.0",
|
||||
"@nextcloud/dialogs": "^5.3.3",
|
||||
"@nextcloud/dialogs": "^5.3.5",
|
||||
"@nextcloud/event-bus": "^3.3.1",
|
||||
"@nextcloud/files": "^3.5.1",
|
||||
"@nextcloud/initial-state": "^2.2.0",
|
||||
@@ -22,10 +22,10 @@
|
||||
"@nextcloud/moment": "^1.3.1",
|
||||
"@nextcloud/notify_push": "^1.3.0",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/vue": "^8.12.0",
|
||||
"@nextcloud/vue": "^8.14.0",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"chroma-js": "^2.4.2",
|
||||
"dompurify": "^3.1.5",
|
||||
"dompurify": "^3.1.6",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
@@ -52,10 +52,10 @@
|
||||
"@nextcloud/eslint-config": "^8.4.1",
|
||||
"@nextcloud/stylelint-config": "^3.0.1",
|
||||
"@nextcloud/webpack-vue-config": "^6.0.0",
|
||||
"@relative-ci/agent": "^4.2.8",
|
||||
"@relative-ci/agent": "^4.2.9",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"@vue/vue2-jest": "^29.2.6",
|
||||
"cypress": "^13.12.0",
|
||||
"cypress": "^13.13.0",
|
||||
"eslint-plugin-cypress": "^3.3.0",
|
||||
"eslint-webpack-plugin": "^4.2.0",
|
||||
"jest": "^29.7.0",
|
||||
@@ -1994,9 +1994,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@bundle-stats/plugin-webpack-validate": {
|
||||
"version": "4.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@bundle-stats/plugin-webpack-validate/-/plugin-webpack-validate-4.13.2.tgz",
|
||||
"integrity": "sha512-Rfdipz+uBsAIIDUo1D+ylD0RxXLCcznaxpodz9QCcd0/P5tkD8gnWh1MZcfZmLFaCnxvTyJMdKJHyjIJ7xyCbA==",
|
||||
"version": "4.13.3",
|
||||
"resolved": "https://registry.npmjs.org/@bundle-stats/plugin-webpack-validate/-/plugin-webpack-validate-4.13.3.tgz",
|
||||
"integrity": "sha512-R7qGmWsWq5rhv/Zu6pS+d1S29gV1rxogl/udmbH/L4LysX+TxcotFENsCKn9J7nNBlmLyqDVZpynfGm14ywXjg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"lodash": "4.17.21",
|
||||
@@ -3525,9 +3525,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/dialogs": {
|
||||
"version": "5.3.3",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-5.3.3.tgz",
|
||||
"integrity": "sha512-K5ZdwRch3vrt7ZQXp04rUHGid4GcSeRnG0SkvccwfhiVg85wut9YZd+i2YiMPw+VYURKEjr2ZOK7R5afnViWag==",
|
||||
"version": "5.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-5.3.5.tgz",
|
||||
"integrity": "sha512-v2+M2zN90IqkZby7QZ575Ej/VsSQXcI6EurMVp51mRGLTeO2bJw8IVdfumDJhSA+3rn/nSHmkz3zWcHUInqzTg==",
|
||||
"dependencies": {
|
||||
"@mdi/js": "^7.4.47",
|
||||
"@nextcloud/auth": "^2.3.0",
|
||||
@@ -3538,7 +3538,7 @@
|
||||
"@nextcloud/l10n": "^3.1.0",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/sharing": "^0.2.2",
|
||||
"@nextcloud/typings": "^1.8.0",
|
||||
"@nextcloud/typings": "^1.9.0",
|
||||
"@types/toastify-js": "^1.12.3",
|
||||
"@vueuse/core": "^10.11.0",
|
||||
"cancelable-promise": "^4.3.1",
|
||||
@@ -3876,14 +3876,24 @@
|
||||
"stylelint-config-recommended-vue": "^1.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/typings": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.8.0.tgz",
|
||||
"integrity": "sha512-q9goE0wc+1BCI9Ku0MebCHmqOMwz2K7ESKQrcHDs6O+HqbKA8zGiEtXL5XGrMS7Ovtl1YOIwxlP9kEvgvXt52Q==",
|
||||
"node_modules/@nextcloud/timezones": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/timezones/-/timezones-0.1.1.tgz",
|
||||
"integrity": "sha512-ldLuLyz605sszetnp6jy6mtlThu4ICKsZThxHIZwn6t4QzjQH3xr+k8mRU7GIvKq9egUFDqBp4gBjxm3/ROZig==",
|
||||
"dependencies": {
|
||||
"@types/jquery": "3.5.16",
|
||||
"vue": "^2.7.15",
|
||||
"vue-router": "<4"
|
||||
"ical.js": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.0.0",
|
||||
"npm": "^10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/typings": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.9.1.tgz",
|
||||
"integrity": "sha512-i0l/L5gKW8EACbXHVxXM6wn3sUhY2qmnL2OijppzU4dENC7/hqySMQDer7/+cJbNSNG7uHF/Z+9JmHtDfRfuGg==",
|
||||
"dependencies": {
|
||||
"@types/jquery": "3.5.16"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.0.0",
|
||||
@@ -3891,27 +3901,27 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/vue": {
|
||||
"version": "8.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.12.0.tgz",
|
||||
"integrity": "sha512-MHL12+XGIDvpsSdrJn79pYKYrTVUouEymc4No91lKTNZTWDN6bciDSprmMs553hECXrqj7sfwxu6sepj0zcR3Q==",
|
||||
"version": "8.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.14.0.tgz",
|
||||
"integrity": "sha512-hB3dG7tZWpItC74PfbTLW02754qYXFDH+h7Ksq6b7e8WlhnKLWrhNGKhSpNDt9/g+vb5bSIOxbiDZIJZ63hAuQ==",
|
||||
"dependencies": {
|
||||
"@floating-ui/dom": "^1.1.0",
|
||||
"@linusborg/vue-simple-portal": "^0.1.5",
|
||||
"@nextcloud/auth": "^2.2.1",
|
||||
"@nextcloud/axios": "^2.4.0",
|
||||
"@nextcloud/browser-storage": "^0.4.0",
|
||||
"@nextcloud/calendar-js": "^7.0.0",
|
||||
"@nextcloud/capabilities": "^1.1.0",
|
||||
"@nextcloud/event-bus": "^3.1.0",
|
||||
"@nextcloud/initial-state": "^2.1.0",
|
||||
"@nextcloud/l10n": "^3.0.1",
|
||||
"@nextcloud/logger": "^3.0.1",
|
||||
"@nextcloud/router": "^3.0.0",
|
||||
"@nextcloud/timezones": "^0.1.1",
|
||||
"@nextcloud/vue-select": "^3.25.0",
|
||||
"@vueuse/components": "^10.9.0",
|
||||
"@vueuse/core": "^10.9.0",
|
||||
"clone": "^2.1.2",
|
||||
"debounce": "2.0.0",
|
||||
"debounce": "2.1.0",
|
||||
"dompurify": "^3.0.5",
|
||||
"emoji-mart-vue-fast": "^15.0.1",
|
||||
"escape-html": "^1.0.3",
|
||||
@@ -3935,6 +3945,7 @@
|
||||
"vue": "^2.7.16",
|
||||
"vue-color": "^2.8.1",
|
||||
"vue-frag": "^1.4.3",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue2-datepicker": "^3.11.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -3966,19 +3977,6 @@
|
||||
"@floating-ui/core": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/vue/node_modules/@nextcloud/calendar-js": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@nextcloud/calendar-js/-/calendar-js-7.0.0.tgz",
|
||||
"integrity": "sha512-CvCcO4hFPjMfIB2AKW0QLNYukGoHFS7QQVvIC8khJjzNfVGS6qMJd2oaZtD9Q9w1fLpvwp1X7orcYGYmosDkAA==",
|
||||
"engines": {
|
||||
"node": "^20.0.0",
|
||||
"npm": "^10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"ical.js": "^2.0.1",
|
||||
"uuid": "^9.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/vue/node_modules/@types/unist": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
|
||||
@@ -4062,19 +4060,6 @@
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/vue/node_modules/uuid": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
||||
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
|
||||
"funding": [
|
||||
"https://github.com/sponsors/broofa",
|
||||
"https://github.com/sponsors/ctavan"
|
||||
],
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/@nextcloud/vue/node_modules/vfile": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
|
||||
@@ -4200,16 +4185,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@relative-ci/agent": {
|
||||
"version": "4.2.8",
|
||||
"resolved": "https://registry.npmjs.org/@relative-ci/agent/-/agent-4.2.8.tgz",
|
||||
"integrity": "sha512-GbmBZ1LlMkLGkypOakINfSfsrI5l0USom7EFqv9EPHmcKhxWu0TIrnTBhIGPO29A8m9yLKIz9ZTzHCA1ROKF1Q==",
|
||||
"version": "4.2.9",
|
||||
"resolved": "https://registry.npmjs.org/@relative-ci/agent/-/agent-4.2.9.tgz",
|
||||
"integrity": "sha512-VrpE0eHi6DMVnfS5epTzo6Z9aGC3l7QuwqP/h2NQrpKMyXfLjqBrYNVzttHueIqxvLP9FzBXmpYm7OxjcTYJuQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@bundle-stats/plugin-webpack-filter": "4.13.2",
|
||||
"@bundle-stats/plugin-webpack-validate": "4.13.2",
|
||||
"@bundle-stats/plugin-webpack-filter": "4.13.3",
|
||||
"@bundle-stats/plugin-webpack-validate": "4.13.3",
|
||||
"core-js": "3.37.1",
|
||||
"cosmiconfig": "9.0.0",
|
||||
"debug": "4.3.4",
|
||||
"debug": "4.3.5",
|
||||
"dotenv": "16.4.5",
|
||||
"env-ci": "7.3.0",
|
||||
"fs-extra": "11.2.0",
|
||||
@@ -4233,9 +4218,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@relative-ci/agent/node_modules/@bundle-stats/plugin-webpack-filter": {
|
||||
"version": "4.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@bundle-stats/plugin-webpack-filter/-/plugin-webpack-filter-4.13.2.tgz",
|
||||
"integrity": "sha512-FU1i0DYBhIzY2hElvKSSEdazka4lpc9zP2zAYGmOmYkF6g4Omz+1DWH6a7MZv0cZhee8yIxaRNGkGy1R/llmtQ==",
|
||||
"version": "4.13.3",
|
||||
"resolved": "https://registry.npmjs.org/@bundle-stats/plugin-webpack-filter/-/plugin-webpack-filter-4.13.3.tgz",
|
||||
"integrity": "sha512-jMMt2Hz5FgHMBT+52L2zsB14RJBLVjV9UxnFhpd8iH1JWgxTvQFmUG/FpubMdzhIXZx6QAHFslrtCSExgMYgtQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 14.0"
|
||||
@@ -7732,9 +7717,9 @@
|
||||
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
|
||||
},
|
||||
"node_modules/cypress": {
|
||||
"version": "13.12.0",
|
||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.12.0.tgz",
|
||||
"integrity": "sha512-udzS2JilmI9ApO/UuqurEwOvThclin5ntz7K0BtnHBs+tg2Bl9QShLISXpSEMDv/u8b6mqdoAdyKeZiSqKWL8g==",
|
||||
"version": "13.13.0",
|
||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.0.tgz",
|
||||
"integrity": "sha512-ou/MQUDq4tcDJI2FsPaod2FZpex4kpIK43JJlcBgWrX8WX7R/05ZxGTuxedOuZBfxjZxja+fbijZGyxiLP6CFA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
@@ -7777,7 +7762,7 @@
|
||||
"request-progress": "^3.0.0",
|
||||
"semver": "^7.5.3",
|
||||
"supports-color": "^8.1.1",
|
||||
"tmp": "~0.2.1",
|
||||
"tmp": "~0.2.3",
|
||||
"untildify": "^4.0.0",
|
||||
"yauzl": "^2.10.0"
|
||||
},
|
||||
@@ -7996,9 +7981,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/debounce": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/debounce/-/debounce-2.0.0.tgz",
|
||||
"integrity": "sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debounce/-/debounce-2.1.0.tgz",
|
||||
"integrity": "sha512-OkL3+0pPWCqoBc/nhO9u6TIQNTK44fnBnzuVtJAbp13Naxw9R6u21x+8tVTka87AhDZ3htqZ2pSSsZl9fqL2Wg==",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
@@ -8007,9 +7992,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
|
||||
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
|
||||
"dependencies": {
|
||||
"ms": "2.1.2"
|
||||
},
|
||||
@@ -8357,9 +8342,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/dompurify": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.5.tgz",
|
||||
"integrity": "sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA=="
|
||||
"version": "3.1.6",
|
||||
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
|
||||
"integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ=="
|
||||
},
|
||||
"node_modules/domutils": {
|
||||
"version": "3.1.0",
|
||||
@@ -11239,8 +11224,7 @@
|
||||
"node_modules/ical.js": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ical.js/-/ical.js-2.0.1.tgz",
|
||||
"integrity": "sha512-uYYb1CwTXbd9NP/xTtgQZ5ivv6bpUjQu9VM98s3X78L3XRu00uJW5ZtmnLwyxhztpf5fSiRyDpFW7ZNCePlaPw==",
|
||||
"peer": true
|
||||
"integrity": "sha512-uYYb1CwTXbd9NP/xTtgQZ5ivv6bpUjQu9VM98s3X78L3XRu00uJW5ZtmnLwyxhztpf5fSiRyDpFW7ZNCePlaPw=="
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
@@ -17673,6 +17657,7 @@
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"glob": "^7.1.3"
|
||||
},
|
||||
@@ -19284,15 +19269,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tmp": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
|
||||
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
|
||||
"integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"rimraf": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.17.0"
|
||||
"node": ">=14.14"
|
||||
}
|
||||
},
|
||||
"node_modules/tmpl": {
|
||||
|
||||
10
package.json
10
package.json
@@ -35,7 +35,7 @@
|
||||
"@nextcloud/auth": "^2.3.0",
|
||||
"@nextcloud/axios": "^2.5.0",
|
||||
"@nextcloud/capabilities": "^1.2.0",
|
||||
"@nextcloud/dialogs": "^5.3.3",
|
||||
"@nextcloud/dialogs": "^5.3.5",
|
||||
"@nextcloud/event-bus": "^3.3.1",
|
||||
"@nextcloud/files": "^3.5.1",
|
||||
"@nextcloud/initial-state": "^2.2.0",
|
||||
@@ -43,10 +43,10 @@
|
||||
"@nextcloud/moment": "^1.3.1",
|
||||
"@nextcloud/notify_push": "^1.3.0",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/vue": "^8.12.0",
|
||||
"@nextcloud/vue": "^8.14.0",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"chroma-js": "^2.4.2",
|
||||
"dompurify": "^3.1.5",
|
||||
"dompurify": "^3.1.6",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
@@ -80,10 +80,10 @@
|
||||
"@nextcloud/eslint-config": "^8.4.1",
|
||||
"@nextcloud/stylelint-config": "^3.0.1",
|
||||
"@nextcloud/webpack-vue-config": "^6.0.0",
|
||||
"@relative-ci/agent": "^4.2.8",
|
||||
"@relative-ci/agent": "^4.2.9",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"@vue/vue2-jest": "^29.2.6",
|
||||
"cypress": "^13.12.0",
|
||||
"cypress": "^13.13.0",
|
||||
"eslint-plugin-cypress": "^3.3.0",
|
||||
"eslint-webpack-plugin": "^4.2.0",
|
||||
"jest": "^29.7.0",
|
||||
|
||||
@@ -187,7 +187,6 @@ export default {
|
||||
},
|
||||
onUpdate: ({ markdown }) => {
|
||||
if (this.description === markdown) {
|
||||
this.descriptionLastEdit = 0
|
||||
return
|
||||
}
|
||||
this.description = markdown
|
||||
@@ -283,7 +282,9 @@ export default {
|
||||
return
|
||||
}
|
||||
this.descriptionSaving = true
|
||||
await this.$store.dispatch('updateCardDesc', { ...this.card, description: this.description })
|
||||
if (this.card.id !== undefined) {
|
||||
await this.$store.dispatch('updateCardDesc', { ...this.card, description: this.description })
|
||||
}
|
||||
this.$emit('change', this.description)
|
||||
this.descriptionLastEdit = 0
|
||||
this.descriptionSaving = false
|
||||
|
||||
@@ -21,8 +21,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Deck\Activity;
|
||||
namespace OCA\Deck\Listeners;
|
||||
|
||||
use OCA\Deck\Activity\ActivityManager;
|
||||
use OCA\Deck\Db\Card;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Db\ChangeHelper;
|
||||
@@ -31,9 +32,9 @@ use OCP\Comments\CommentsEvent;
|
||||
use OCP\Comments\IComment;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class CommentEventHandlerTest extends TestCase {
|
||||
class CommentEventListenerTest extends TestCase {
|
||||
|
||||
/** @var CommentEventHandler */
|
||||
/** @var CommentEventListener */
|
||||
private $commentEventHandler;
|
||||
/** @var ActivityManager */
|
||||
private $activityManager;
|
||||
@@ -49,7 +50,7 @@ class CommentEventHandlerTest extends TestCase {
|
||||
$this->notificationHelper = $this->createMock(NotificationHelper::class);
|
||||
$this->cardMapper = $this->createMock(CardMapper::class);
|
||||
$this->changeHelper = $this->createMock(ChangeHelper::class);
|
||||
$this->commentEventHandler = new CommentEventHandler(
|
||||
$this->commentEventHandler = new CommentEventListener(
|
||||
$this->activityManager,
|
||||
$this->notificationHelper,
|
||||
$this->cardMapper,
|
||||
Reference in New Issue
Block a user