Compare commits
1 Commits
v1.5.0
...
tests/beha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b02e7fb25 |
4
.github/workflows/appbuild.yml
vendored
4
.github/workflows/appbuild.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [14.x]
|
node-version: [12.x]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
@@ -17,8 +17,6 @@ jobs:
|
|||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
- name: Set up npm7
|
|
||||||
run: npm i -g npm@7
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
2
.github/workflows/integration.yml
vendored
2
.github/workflows/integration.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.4']
|
php-versions: ['7.4']
|
||||||
databases: ['sqlite', 'mysql', 'pgsql']
|
databases: ['sqlite', 'mysql', 'pgsql']
|
||||||
server-versions: ['stable22']
|
server-versions: ['master']
|
||||||
|
|
||||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||||
|
|
||||||
|
|||||||
9
.github/workflows/lint.yml
vendored
9
.github/workflows/lint.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [14.x]
|
node-version: [12.x]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
@@ -55,8 +55,6 @@ jobs:
|
|||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
- name: Set up npm7
|
|
||||||
run: npm i -g npm@7
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
- name: ESLint
|
- name: ESLint
|
||||||
@@ -67,7 +65,7 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-versions: [14.x]
|
node-versions: [12.x]
|
||||||
|
|
||||||
name: stylelint node${{ matrix.node-versions }}
|
name: stylelint node${{ matrix.node-versions }}
|
||||||
steps:
|
steps:
|
||||||
@@ -78,9 +76,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-versions: ${{ matrix.node-versions }}
|
node-versions: ${{ matrix.node-versions }}
|
||||||
|
|
||||||
- name: Set up npm7
|
|
||||||
run: npm i -g npm@7
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/nightly.yml
vendored
4
.github/workflows/nightly.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [14.x]
|
node-version: [12.x]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
@@ -22,8 +22,6 @@ jobs:
|
|||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
- name: Set up npm7
|
|
||||||
run: npm i -g npm@7
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
4
.github/workflows/nodejs.yml
vendored
4
.github/workflows/nodejs.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [14.x]
|
node-version: [12.x]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
@@ -17,8 +17,6 @@ jobs:
|
|||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
- name: Set up npm7
|
|
||||||
run: npm i -g npm@7
|
|
||||||
- name: install dependencies
|
- name: install dependencies
|
||||||
run: |
|
run: |
|
||||||
npm ci
|
npm ci
|
||||||
|
|||||||
2
.github/workflows/phpunit.yml
vendored
2
.github/workflows/phpunit.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.3', '7.4']
|
php-versions: ['7.3', '7.4']
|
||||||
databases: ['sqlite', 'mysql', 'pgsql']
|
databases: ['sqlite', 'mysql', 'pgsql']
|
||||||
server-versions: ['stable22']
|
server-versions: ['master']
|
||||||
|
|
||||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/static-analysis.yml
vendored
2
.github/workflows/static-analysis.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
ocp-version: [ 'dev-stable22' ]
|
ocp-version: [ 'dev-master' ]
|
||||||
name: Nextcloud ${{ matrix.ocp-version }}
|
name: Nextcloud ${{ matrix.ocp-version }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
|||||||
66
CHANGELOG.md
66
CHANGELOG.md
@@ -1,40 +1,6 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## 1.5.0 - 2021-07-09
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
* Nextcloud 22 compatibility
|
|
||||||
* [#3105](https://github.com/nextcloud/deck/pull/3105) Compatibility with Cirlces changes in 22
|
|
||||||
* [#3147](https://github.com/nextcloud/deck/pull/3147) Add card button to the dashboard widget @jakobroehrl
|
|
||||||
* [#2854](https://github.com/nextcloud/deck/pull/2854) Add card button in card overview @jakobroehrl
|
|
||||||
* [#3078](https://github.com/nextcloud/deck/pull/3078) Show on shared boards unassigned cards to all users @jakobroehrl
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
* [#2935](https://github.com/nextcloud/deck/pull/2935) Rich object string parameters for notifications @nickvergessen
|
|
||||||
* [#2950](https://github.com/nextcloud/deck/pull/2950) Remove notification on unshare and add type hints
|
|
||||||
* [#2983](https://github.com/nextcloud/deck/pull/2983) Fix codemirror description width
|
|
||||||
* [#2989](https://github.com/nextcloud/deck/pull/2989) Fix unified comments search with postgres
|
|
||||||
* [#3005](https://github.com/nextcloud/deck/pull/3005) Do not query the lookupserver when looking for sharees
|
|
||||||
* [#3011](https://github.com/nextcloud/deck/pull/3011) L10n: Spelling unification @Valdnet
|
|
||||||
* [#3014](https://github.com/nextcloud/deck/pull/3014) Proper error handling when fetching comments fails
|
|
||||||
* [#3016](https://github.com/nextcloud/deck/pull/3016) Allow searching for filters without a query to match all that have a given filter set
|
|
||||||
* [#3021](https://github.com/nextcloud/deck/pull/3021) L10n: Add word "Card" @Valdnet
|
|
||||||
* [#3025](https://github.com/nextcloud/deck/pull/3025) Show comment counter and highlight if unread comments are available
|
|
||||||
* [#3036](https://github.com/nextcloud/deck/pull/3036) Add link to migration tool for Trello @maxammann
|
|
||||||
* [#3037](https://github.com/nextcloud/deck/pull/3037) Catch any error during circle detail fetching
|
|
||||||
* [#3038](https://github.com/nextcloud/deck/pull/3038) Get attachment from the user node instead of the share source
|
|
||||||
* [#3092](https://github.com/nextcloud/deck/pull/3092) Refactor update to have proper order of optional parameters
|
|
||||||
* [#3113](https://github.com/nextcloud/deck/pull/3113) Use new viewer syntax with destructuring object @azul
|
|
||||||
* [#3142](https://github.com/nextcloud/deck/pull/3142) Always pass user id in share provider
|
|
||||||
* [#3152](https://github.com/nextcloud/deck/pull/3152) Only offer stack creation in emptycontent with proper permissions
|
|
||||||
* [#3165](https://github.com/nextcloud/deck/pull/3165) Always log generic exceptions
|
|
||||||
* [#3168](https://github.com/nextcloud/deck/pull/3168) Reduce duplicate queries when fetching user boards an permissions
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 1.4.0 - 2021-04-13
|
## 1.4.0 - 2021-04-13
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
@@ -69,15 +35,15 @@ All notable changes to this project will be documented in this file.
|
|||||||
## 1.3.0-beta2
|
## 1.3.0-beta2
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* [#2700](https://github.com/nextcloud/deck/pull/2700) Attempt to copy file on dropping it to deck
|
* [#2700](https://github.com/nextcloud/deck/pull/2700) Attempt to copy file on dropping it to deck @juliushaertl
|
||||||
* [#2701](https://github.com/nextcloud/deck/pull/2701) Fix uploading files by drag and drop
|
* [#2701](https://github.com/nextcloud/deck/pull/2701) Fix uploading files by drag and drop @juliushaertl
|
||||||
* [#2707](https://github.com/nextcloud/deck/pull/2707) L10n: Change to a capital letter @Valdnet
|
* [#2707](https://github.com/nextcloud/deck/pull/2707) L10n: Change to a capital letter @Valdnet
|
||||||
* [#2712](https://github.com/nextcloud/deck/pull/2712) Docs: Fix table in section "GET /api/v1.0/config" @das-g
|
* [#2712](https://github.com/nextcloud/deck/pull/2712) Docs: Fix table in section "GET /api/v1.0/config" @das-g
|
||||||
* [#2716](https://github.com/nextcloud/deck/pull/2716) Remove repair step which is no longer needed as we cleanup properly
|
* [#2716](https://github.com/nextcloud/deck/pull/2716) Remove repair step which is no longer needed as we cleanup properly @juliushaertl
|
||||||
* [#2723](https://github.com/nextcloud/deck/pull/2723) Pad random color with leading zeroes @PVince81
|
* [#2723](https://github.com/nextcloud/deck/pull/2723) Pad random color with leading zeroes @PVince81
|
||||||
* [#2729](https://github.com/nextcloud/deck/pull/2729) Remove invalid activity parameters @nickvergessen
|
* [#2729](https://github.com/nextcloud/deck/pull/2729) Remove invalid activity parameters @nickvergessen
|
||||||
* [#2750](https://github.com/nextcloud/deck/pull/2750) Fix deck activity emails not being translated @nickvergessen
|
* [#2750](https://github.com/nextcloud/deck/pull/2750) Fix deck activity emails not being translated @nickvergessen
|
||||||
* [#2751](https://github.com/nextcloud/deck/pull/2751) Properly set author for activity events that are triggered by cron
|
* [#2751](https://github.com/nextcloud/deck/pull/2751) Properly set author for activity events that are triggered by cron @juliushaertl
|
||||||
|
|
||||||
|
|
||||||
## 1.2.2 - 2020-11-24
|
## 1.2.2 - 2020-11-24
|
||||||
@@ -186,31 +152,31 @@ All notable changes to this project will be documented in this file.
|
|||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
||||||
* [#2116](https://github.com/nextcloud/deck/pull/2116) Fix navigation layout issues
|
* [#2116](https://github.com/nextcloud/deck/pull/2116) Fix navigation layout issues @juliushaertl
|
||||||
* [#2118](https://github.com/nextcloud/deck/pull/2118) Use proper parameter when handling attachments
|
* [#2118](https://github.com/nextcloud/deck/pull/2118) Use proper parameter when handling attachments @juliushaertl
|
||||||
|
|
||||||
## 1.0.4 - 2020-06-26
|
## 1.0.4 - 2020-06-26
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
* [#2062](https://github.com/nextcloud/deck/pull/2062) Fix saving card description after toggling checkboxes
|
* [#2062](https://github.com/nextcloud/deck/pull/2062) Fix saving card description after toggling checkboxes @juliushaertl
|
||||||
* [#2065](https://github.com/nextcloud/deck/pull/2065) Adding CSS rule for Markdown Blockquotes @reox
|
* [#2065](https://github.com/nextcloud/deck/pull/2065) Adding CSS rule for Markdown Blockquotes @reox
|
||||||
* [#2059](https://github.com/nextcloud/deck/pull/2059) Fix fetching attachments on card change
|
* [#2059](https://github.com/nextcloud/deck/pull/2059) Fix fetching attachments on card change @juliushaertl
|
||||||
* [#2060](https://github.com/nextcloud/deck/pull/2060) Use mixing for relative date in card sidebar
|
* [#2060](https://github.com/nextcloud/deck/pull/2060) Use mixing for relative date in card sidebar @juliushaertl
|
||||||
|
|
||||||
|
|
||||||
## 1.0.3 - 2020-06-19
|
## 1.0.3 - 2020-06-19
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
* [#2019](https://github.com/nextcloud/deck/pull/2019) Remove old global css rule
|
* [#2019](https://github.com/nextcloud/deck/pull/2019) Remove old global css rule @juliushaertl
|
||||||
* [#2020](https://github.com/nextcloud/deck/pull/2020) Fix navigation issue with leftover nodes
|
* [#2020](https://github.com/nextcloud/deck/pull/2020) Fix navigation issue with leftover nodes @juliushaertl
|
||||||
* [#2021](https://github.com/nextcloud/deck/pull/2021) Fix description issues
|
* [#2021](https://github.com/nextcloud/deck/pull/2021) Fix description issues @juliushaertl
|
||||||
* [#2022](https://github.com/nextcloud/deck/pull/2022) Fix replyto issues with the comments API
|
* [#2022](https://github.com/nextcloud/deck/pull/2022) Fix replyto issues with the comments API @juliushaertl
|
||||||
* [#2027](https://github.com/nextcloud/deck/pull/2027) Allow to unassign current user from card
|
* [#2027](https://github.com/nextcloud/deck/pull/2027) Allow to unassign current user from card @juliushaertl
|
||||||
* [#2029](https://github.com/nextcloud/deck/pull/2029) Fix wording : stack -> list @cloud2018
|
* [#2029](https://github.com/nextcloud/deck/pull/2029) Fix wording : stack -> list @cloud2018
|
||||||
* [#2032](https://github.com/nextcloud/deck/pull/2032) Force order by id as second sorting key
|
* [#2032](https://github.com/nextcloud/deck/pull/2032) Force order by id as second sorting key @juliushaertl
|
||||||
* [#2045](https://github.com/nextcloud/deck/pull/2045) Improve label styling
|
* [#2045](https://github.com/nextcloud/deck/pull/2045) Improve label styling @juliushaertl
|
||||||
* [#2010](https://github.com/nextcloud/deck/pull/2010) User documentation fixes @Nyco
|
* [#2010](https://github.com/nextcloud/deck/pull/2010) User documentation fixes @Nyco
|
||||||
* [#1998](https://github.com/nextcloud/deck/pull/1998) Add Checklist explaination to the doc @4rnoP
|
* [#1998](https://github.com/nextcloud/deck/pull/1998) Add Checklist explaination to the doc @4rnoP
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
- 🚀 Get your project organized
|
- 🚀 Get your project organized
|
||||||
|
|
||||||
</description>
|
</description>
|
||||||
<version>1.5.0</version>
|
<version>2.0.0-alpha1</version>
|
||||||
<licence>agpl</licence>
|
<licence>agpl</licence>
|
||||||
<author>Julius Härtl</author>
|
<author>Julius Härtl</author>
|
||||||
<namespace>Deck</namespace>
|
<namespace>Deck</namespace>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"require-dev": {
|
"require-dev": {
|
||||||
"roave/security-advisories": "dev-master",
|
"roave/security-advisories": "dev-master",
|
||||||
"christophwurst/nextcloud": "^21@dev",
|
"christophwurst/nextcloud": "^21@dev",
|
||||||
"phpunit/phpunit": "^9",
|
"phpunit/phpunit": "^8",
|
||||||
"nextcloud/coding-standard": "^0.5.0",
|
"nextcloud/coding-standard": "^0.5.0",
|
||||||
"symfony/event-dispatcher": "^4.0",
|
"symfony/event-dispatcher": "^4.0",
|
||||||
"vimeo/psalm": "^4.3",
|
"vimeo/psalm": "^4.3",
|
||||||
|
|||||||
967
composer.lock
generated
967
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -102,7 +102,7 @@ OC.L10N.register(
|
|||||||
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
|
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
|
||||||
"Card not found" : "Karta nebyla nalezena",
|
"Card not found" : "Karta nebyla nalezena",
|
||||||
"Path is already shared with this card" : "Cesta je již s touto kartou sdílena",
|
"Path is already shared with this card" : "Cesta je již s touto kartou sdílena",
|
||||||
"Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum – je třeba, aby formát data byl RRRR-MM-DD",
|
"Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum, formát data musí být RRRR-MM-DD",
|
||||||
"Personal planning and team project organization" : "Osobní plánování a organizování týmového projektu",
|
"Personal planning and team project organization" : "Osobní plánování a organizování týmového projektu",
|
||||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu",
|
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu",
|
||||||
"Card details" : "Podrobnosti o kartě",
|
"Card details" : "Podrobnosti o kartě",
|
||||||
@@ -191,7 +191,7 @@ OC.L10N.register(
|
|||||||
"Delete Attachment" : "Smazat přílohu",
|
"Delete Attachment" : "Smazat přílohu",
|
||||||
"Restore Attachment" : "Obnovit přílohu",
|
"Restore Attachment" : "Obnovit přílohu",
|
||||||
"File to share" : "Soubor ke sdílení",
|
"File to share" : "Soubor ke sdílení",
|
||||||
"Invalid path selected" : "Je vybrán neplatný popis umístění",
|
"Invalid path selected" : "Je vybrána neplatná cesta",
|
||||||
"Open in sidebar view" : "Otevřít v zobrazení v postranním panelu",
|
"Open in sidebar view" : "Otevřít v zobrazení v postranním panelu",
|
||||||
"Open in bigger view" : "Otevřít ve větším zobrazení",
|
"Open in bigger view" : "Otevřít ve větším zobrazení",
|
||||||
"Attachments" : "Přílohy",
|
"Attachments" : "Přílohy",
|
||||||
@@ -213,7 +213,7 @@ OC.L10N.register(
|
|||||||
"The comment cannot be empty." : "Komentář je třeba vyplnit.",
|
"The comment cannot be empty." : "Komentář je třeba vyplnit.",
|
||||||
"The comment cannot be longer than 1000 characters." : "Délka komentáře může být nejvýše 1 000 znaků.",
|
"The comment cannot be longer than 1000 characters." : "Délka komentáře může být nejvýše 1 000 znaků.",
|
||||||
"In reply to" : "V odpověď na",
|
"In reply to" : "V odpověď na",
|
||||||
"Cancel reply" : "Zrušit odpověď",
|
"Cancel reply" : "Odebrat odpověď",
|
||||||
"Reply" : "Odpovědět",
|
"Reply" : "Odpovědět",
|
||||||
"Update" : "Aktualizovat",
|
"Update" : "Aktualizovat",
|
||||||
"Description" : "Popis",
|
"Description" : "Popis",
|
||||||
|
|||||||
@@ -100,7 +100,7 @@
|
|||||||
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
|
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
|
||||||
"Card not found" : "Karta nebyla nalezena",
|
"Card not found" : "Karta nebyla nalezena",
|
||||||
"Path is already shared with this card" : "Cesta je již s touto kartou sdílena",
|
"Path is already shared with this card" : "Cesta je již s touto kartou sdílena",
|
||||||
"Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum – je třeba, aby formát data byl RRRR-MM-DD",
|
"Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum, formát data musí být RRRR-MM-DD",
|
||||||
"Personal planning and team project organization" : "Osobní plánování a organizování týmového projektu",
|
"Personal planning and team project organization" : "Osobní plánování a organizování týmového projektu",
|
||||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu",
|
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck je nástroj cílený na osobní nebo projektové plánování týmů v Kanban stylu, vestavěný v Nextcloud.\n\n\n- 📥 Zadávejte a uspořádávejte své úkoly do karet\n- 📄 Zapisujte si dodatečné poznámky \n- 🔖 Přiřazujte štítky pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přáteli nebo rodinou\n- 🚀 Dostaňte svůj projekt pod kontrolu",
|
||||||
"Card details" : "Podrobnosti o kartě",
|
"Card details" : "Podrobnosti o kartě",
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
"Delete Attachment" : "Smazat přílohu",
|
"Delete Attachment" : "Smazat přílohu",
|
||||||
"Restore Attachment" : "Obnovit přílohu",
|
"Restore Attachment" : "Obnovit přílohu",
|
||||||
"File to share" : "Soubor ke sdílení",
|
"File to share" : "Soubor ke sdílení",
|
||||||
"Invalid path selected" : "Je vybrán neplatný popis umístění",
|
"Invalid path selected" : "Je vybrána neplatná cesta",
|
||||||
"Open in sidebar view" : "Otevřít v zobrazení v postranním panelu",
|
"Open in sidebar view" : "Otevřít v zobrazení v postranním panelu",
|
||||||
"Open in bigger view" : "Otevřít ve větším zobrazení",
|
"Open in bigger view" : "Otevřít ve větším zobrazení",
|
||||||
"Attachments" : "Přílohy",
|
"Attachments" : "Přílohy",
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
"The comment cannot be empty." : "Komentář je třeba vyplnit.",
|
"The comment cannot be empty." : "Komentář je třeba vyplnit.",
|
||||||
"The comment cannot be longer than 1000 characters." : "Délka komentáře může být nejvýše 1 000 znaků.",
|
"The comment cannot be longer than 1000 characters." : "Délka komentáře může být nejvýše 1 000 znaků.",
|
||||||
"In reply to" : "V odpověď na",
|
"In reply to" : "V odpověď na",
|
||||||
"Cancel reply" : "Zrušit odpověď",
|
"Cancel reply" : "Odebrat odpověď",
|
||||||
"Reply" : "Odpovědět",
|
"Reply" : "Odpovědět",
|
||||||
"Update" : "Aktualizovat",
|
"Update" : "Aktualizovat",
|
||||||
"Description" : "Popis",
|
"Description" : "Popis",
|
||||||
|
|||||||
58
l10n/hu.js
58
l10n/hu.js
@@ -17,42 +17,42 @@ OC.L10N.register(
|
|||||||
"{user} has archived the board {before}" : "{user} archiválta a(z) {before} táblát",
|
"{user} has archived the board {before}" : "{user} archiválta a(z) {before} táblát",
|
||||||
"You have unarchived the board {board}" : "Visszavonta a(z) {board} tábla archiválását",
|
"You have unarchived the board {board}" : "Visszavonta a(z) {board} tábla archiválását",
|
||||||
"{user} has unarchived the board {before}" : "{user} visszavonta a(z) {board} tábla archiválását",
|
"{user} has unarchived the board {before}" : "{user} visszavonta a(z) {board} tábla archiválását",
|
||||||
"You have created a new list {stack} on board {board}" : "Létrehozta az új {stack} listát a(z) {board} táblán",
|
"You have created a new list {stack} on board {board}" : "Létrehozta az új {stack} rakást a(z) {board} táblán",
|
||||||
"{user} has created a new list {stack} on board {board}" : "{user} létrehozta az új {stack} listát a(z) {board} táblán",
|
"{user} has created a new list {stack} on board {board}" : "{user} létrehozta az új {stack} rakást a(z) {board} táblán",
|
||||||
"You have renamed list {before} to {stack} on board {board}" : "Átnevezte a(z) {board} tábla {before} listát erre: {stack}",
|
"You have renamed list {before} to {stack} on board {board}" : "Átnevezte a(z) {board} tábla {before} rakását erre: {stack}",
|
||||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} átnevezte a(z) {board} tábla {before} listáját erre: {stack}",
|
"{user} has renamed list {before} to {stack} on board {board}" : "{user} átnevezte a(z) {board} táblá {before} rakását erre: {stack}",
|
||||||
"You have deleted list {stack} on board {board}" : "Törölte a(z) {stack} listát a(z) {board} tábláról",
|
"You have deleted list {stack} on board {board}" : "Törölte a(z) {stack} rakást a(z) {board} tábláról",
|
||||||
"{user} has deleted list {stack} on board {board}" : "{user} törölte a(z) {stack} listát a(z) {board} tábláról",
|
"{user} has deleted list {stack} on board {board}" : "{user} törölte a(z) {stack} rakást a(z) {board} tábláról",
|
||||||
"You have created card {card} in list {stack} on board {board}" : "Létrehozta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"You have created card {card} in list {stack} on board {board}" : "Létrehozta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has created card {card} in list {stack} on board {board}" : "{user} létrehozta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has created card {card} in list {stack} on board {board}" : "{user} létrehozta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have deleted card {card} in list {stack} on board {board}" : "Törölte a(z) {card} kártyát a(z) {stack} listából, a(z) {board} táblán",
|
"You have deleted card {card} in list {stack} on board {board}" : "Törölte a(z) {card} kártyát a(z) {stack} rakásból, a(z) {board} táblán",
|
||||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} törölte a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} törölte a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have renamed the card {before} to {card}" : "Átnevezte a(z) {before} kártyát erre: {card}",
|
"You have renamed the card {before} to {card}" : "Átnevezte a(z) {before} kártyát erre: {card}",
|
||||||
"{user} has renamed the card {before} to {card}" : "{user} átnevezte a(z) {before} kártyát erre: {card}",
|
"{user} has renamed the card {before} to {card}" : "{user} átnevezte a(z) {before} kártyát erre: {card}",
|
||||||
"You have added a description to card {card} in list {stack} on board {board}" : "Leírást adott hozzá a(z) {card} kártyához a(z) {stack} listában, a(z) {board} táblán",
|
"You have added a description to card {card} in list {stack} on board {board}" : "Leírást adott hozzá a(z) {card} kártyához a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} leírást adott hozzá a(z) {card} kártyához a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} leírást adott hozzá a(z) {card} kártyához a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have updated the description of card {card} in list {stack} on board {board}" : "Frissítette a(z) {card} kártya leírását a(z) {stack} listában, a(z) {board} táblán",
|
"You have updated the description of card {card} in list {stack} on board {board}" : "Frissítette a(z) {card} kártya leírását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} frissítette a(z) {card} kártya leírását a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} frissítette a(z) {card} kártya leírását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have archived card {card} in list {stack} on board {board}" : "Archiválta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"You have archived card {card} in list {stack} on board {board}" : "Archiválta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} archiválta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has archived card {card} in list {stack} on board {board}" : "{user} archiválta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have unarchived card {card} in list {stack} on board {board}" : "Visszavonta a(z) {card} kártya archiválását a(z) {stack} listában, a(z) {board} táblán",
|
"You have unarchived card {card} in list {stack} on board {board}" : "Visszavonta a(z) {card} kártya archiválását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} visszavonta a(z) {card} kártya archiválását a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} visszavonta a(z) {card} kártya archiválását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have removed the due date of card {card}" : "Eltávolította a(z) {card} kártya esedékességét",
|
"You have removed the due date of card {card}" : "Eltávolította a(z) {card} kártya esedékességét",
|
||||||
"{user} has removed the due date of card {card}" : "{user} eltávolította a(z) {card} kártya esedékességét",
|
"{user} has removed the due date of card {card}" : "{user} eltávolította a(z) {card} kártya esedékességét",
|
||||||
"You have set the due date of card {card} to {after}" : "Beállította a(z) {card} kártya esedékességét",
|
"You have set the due date of card {card} to {after}" : "Beállította a(z) {card} kártya esedékességét",
|
||||||
"{user} has set the due date of card {card} to {after}" : "{user} beállította a(z) {card} kártya esedékességét",
|
"{user} has set the due date of card {card} to {after}" : "{user} beállította a(z) {card} kártya esedékességét",
|
||||||
"You have updated the due date of card {card} to {after}" : "Frissítette a(z) {card} kártya esedékességét erre: {after}",
|
"You have updated the due date of card {card} to {after}" : "Frissítette a(z) {card} kártya esedékességét erre: {after}",
|
||||||
"{user} has updated the due date of card {card} to {after}" : "{user} frissítette a(z) {card} kártya esedékességét erre: {after}",
|
"{user} has updated the due date of card {card} to {after}" : "{user} frissítette a(z) {card} kártya esedékességét erre: {after}",
|
||||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} listában, a(z) {board} táblán",
|
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} listában, a(z) {board} táblán",
|
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have assigned {assigneduser} to card {card} on board {board}" : "Hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
"You have assigned {assigneduser} to card {card} on board {board}" : "Hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
||||||
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
||||||
"You have unassigned {assigneduser} from card {card} on board {board}" : "Eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
"You have unassigned {assigneduser} from card {card} on board {board}" : "Eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
||||||
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
||||||
"You have moved the card {card} from list {stackBefore} to {stack}" : "Áthelyezte a(z) {card} kártyát a(z) {stackBefore} listából a(z) {stack} listába",
|
"You have moved the card {card} from list {stackBefore} to {stack}" : "Áthelyezte a(z) {card} kártyát a(z) {stackBefore} rakásból a(z) {stack} rakásba",
|
||||||
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} áthelyezte a(z) {card} kártyát a(z) {stackBefore} listából a(z) {stack} listába",
|
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} áthelyezte a(z) {card} kártyát a(z) {stackBefore} rakásból a(z) {stack} rakásba",
|
||||||
"You have added the attachment {attachment} to card {card}" : "Hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
"You have added the attachment {attachment} to card {card}" : "Hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
||||||
"{user} has added the attachment {attachment} to card {card}" : "{user} hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
"{user} has added the attachment {attachment} to card {card}" : "{user} hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
||||||
"You have updated the attachment {attachment} on card {card}" : "Frissítette a(z) {attachment} mellékletet a(z) {card} kártyánál",
|
"You have updated the attachment {attachment} on card {card}" : "Frissítette a(z) {attachment} mellékletet a(z) {card} kártyánál",
|
||||||
@@ -73,7 +73,7 @@ OC.L10N.register(
|
|||||||
"The card \"%s\" on \"%s\" has reached its due date." : "A(z) „%s” kártya a(z) „%s” táblán elérte a határidejét.",
|
"The card \"%s\" on \"%s\" has reached its due date." : "A(z) „%s” kártya a(z) „%s” táblán elérte a határidejét.",
|
||||||
"%s has mentioned you in a comment on \"%s\"." : "%s megemlítette egy hozzászólásban ennél: „%s”.",
|
"%s has mentioned you in a comment on \"%s\"." : "%s megemlítette egy hozzászólásban ennél: „%s”.",
|
||||||
"The board \"%s\" has been shared with you by %s." : "A(z) „%s” táblát %s osztotta meg Önnel.",
|
"The board \"%s\" has been shared with you by %s." : "A(z) „%s” táblát %s osztotta meg Önnel.",
|
||||||
"Card comments" : "Kártya hozzászólásai",
|
"Card comments" : "Kártyák hozzászólások",
|
||||||
"%s on %s" : "%s ezen: %s",
|
"%s on %s" : "%s ezen: %s",
|
||||||
"No data was provided to create an attachment." : "Nincsenek megadva adatok a melléklet létrehozásához.",
|
"No data was provided to create an attachment." : "Nincsenek megadva adatok a melléklet létrehozásához.",
|
||||||
"Finished" : "Kész",
|
"Finished" : "Kész",
|
||||||
@@ -143,8 +143,8 @@ OC.L10N.register(
|
|||||||
"Toggle compact mode" : "Kompakt mód be/ki",
|
"Toggle compact mode" : "Kompakt mód be/ki",
|
||||||
"Details" : "Részletek",
|
"Details" : "Részletek",
|
||||||
"Loading board" : "Tábla betöltése",
|
"Loading board" : "Tábla betöltése",
|
||||||
"No lists available" : "Nincs elérhető lista",
|
"No lists available" : "Nincs elérhető rakás",
|
||||||
"Create a new list to add cards to this board" : "Hozzon létre egy új listát a kártyák ehhez a táblához való hozzáadásához",
|
"Create a new list to add cards to this board" : "Hozzon létre egy új rakást kártyák ehhez a táblához való hozzáadásához",
|
||||||
"Board not found" : "A tábla nem található",
|
"Board not found" : "A tábla nem található",
|
||||||
"Sharing" : "Megosztás",
|
"Sharing" : "Megosztás",
|
||||||
"Tags" : "Címkék",
|
"Tags" : "Címkék",
|
||||||
@@ -154,7 +154,7 @@ OC.L10N.register(
|
|||||||
"Undo" : "Visszavonás",
|
"Undo" : "Visszavonás",
|
||||||
"Deleted cards" : "Törölt kártyák",
|
"Deleted cards" : "Törölt kártyák",
|
||||||
"Share board with a user, group or circle …" : "Tábla megosztása felhasználóval, csoporttal vagy körrel…",
|
"Share board with a user, group or circle …" : "Tábla megosztása felhasználóval, csoporttal vagy körrel…",
|
||||||
"Searching for users, groups and circles …" : "Felhasználók, csoportok és körök keresése…",
|
"Searching for users, groups and circles …" : "Felhasználókkal, csoportok és körök keresése",
|
||||||
"No participants found" : "Nem találhatók résztvevők",
|
"No participants found" : "Nem találhatók résztvevők",
|
||||||
"Board owner" : "Tábla tulajdonosa",
|
"Board owner" : "Tábla tulajdonosa",
|
||||||
"(Group)" : "(Csoport)",
|
"(Group)" : "(Csoport)",
|
||||||
@@ -168,7 +168,7 @@ OC.L10N.register(
|
|||||||
"Archive all cards" : "Az összes kártya archiválása",
|
"Archive all cards" : "Az összes kártya archiválása",
|
||||||
"Delete list" : "Lista törlése",
|
"Delete list" : "Lista törlése",
|
||||||
"Add card" : "Kártya hozzáadása",
|
"Add card" : "Kártya hozzáadása",
|
||||||
"Archive all cards in this list" : "Az összes kártya archiválása ebben a listában",
|
"Archive all cards in this list" : "Archív kártyák ebben a listában",
|
||||||
"Add a new card" : "Új kártya hozzáadása",
|
"Add a new card" : "Új kártya hozzáadása",
|
||||||
"Card name" : "Kártya neve",
|
"Card name" : "Kártya neve",
|
||||||
"List deleted" : "Lista törölve",
|
"List deleted" : "Lista törölve",
|
||||||
|
|||||||
58
l10n/hu.json
58
l10n/hu.json
@@ -15,42 +15,42 @@
|
|||||||
"{user} has archived the board {before}" : "{user} archiválta a(z) {before} táblát",
|
"{user} has archived the board {before}" : "{user} archiválta a(z) {before} táblát",
|
||||||
"You have unarchived the board {board}" : "Visszavonta a(z) {board} tábla archiválását",
|
"You have unarchived the board {board}" : "Visszavonta a(z) {board} tábla archiválását",
|
||||||
"{user} has unarchived the board {before}" : "{user} visszavonta a(z) {board} tábla archiválását",
|
"{user} has unarchived the board {before}" : "{user} visszavonta a(z) {board} tábla archiválását",
|
||||||
"You have created a new list {stack} on board {board}" : "Létrehozta az új {stack} listát a(z) {board} táblán",
|
"You have created a new list {stack} on board {board}" : "Létrehozta az új {stack} rakást a(z) {board} táblán",
|
||||||
"{user} has created a new list {stack} on board {board}" : "{user} létrehozta az új {stack} listát a(z) {board} táblán",
|
"{user} has created a new list {stack} on board {board}" : "{user} létrehozta az új {stack} rakást a(z) {board} táblán",
|
||||||
"You have renamed list {before} to {stack} on board {board}" : "Átnevezte a(z) {board} tábla {before} listát erre: {stack}",
|
"You have renamed list {before} to {stack} on board {board}" : "Átnevezte a(z) {board} tábla {before} rakását erre: {stack}",
|
||||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} átnevezte a(z) {board} tábla {before} listáját erre: {stack}",
|
"{user} has renamed list {before} to {stack} on board {board}" : "{user} átnevezte a(z) {board} táblá {before} rakását erre: {stack}",
|
||||||
"You have deleted list {stack} on board {board}" : "Törölte a(z) {stack} listát a(z) {board} tábláról",
|
"You have deleted list {stack} on board {board}" : "Törölte a(z) {stack} rakást a(z) {board} tábláról",
|
||||||
"{user} has deleted list {stack} on board {board}" : "{user} törölte a(z) {stack} listát a(z) {board} tábláról",
|
"{user} has deleted list {stack} on board {board}" : "{user} törölte a(z) {stack} rakást a(z) {board} tábláról",
|
||||||
"You have created card {card} in list {stack} on board {board}" : "Létrehozta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"You have created card {card} in list {stack} on board {board}" : "Létrehozta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has created card {card} in list {stack} on board {board}" : "{user} létrehozta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has created card {card} in list {stack} on board {board}" : "{user} létrehozta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have deleted card {card} in list {stack} on board {board}" : "Törölte a(z) {card} kártyát a(z) {stack} listából, a(z) {board} táblán",
|
"You have deleted card {card} in list {stack} on board {board}" : "Törölte a(z) {card} kártyát a(z) {stack} rakásból, a(z) {board} táblán",
|
||||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} törölte a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} törölte a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have renamed the card {before} to {card}" : "Átnevezte a(z) {before} kártyát erre: {card}",
|
"You have renamed the card {before} to {card}" : "Átnevezte a(z) {before} kártyát erre: {card}",
|
||||||
"{user} has renamed the card {before} to {card}" : "{user} átnevezte a(z) {before} kártyát erre: {card}",
|
"{user} has renamed the card {before} to {card}" : "{user} átnevezte a(z) {before} kártyát erre: {card}",
|
||||||
"You have added a description to card {card} in list {stack} on board {board}" : "Leírást adott hozzá a(z) {card} kártyához a(z) {stack} listában, a(z) {board} táblán",
|
"You have added a description to card {card} in list {stack} on board {board}" : "Leírást adott hozzá a(z) {card} kártyához a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} leírást adott hozzá a(z) {card} kártyához a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} leírást adott hozzá a(z) {card} kártyához a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have updated the description of card {card} in list {stack} on board {board}" : "Frissítette a(z) {card} kártya leírását a(z) {stack} listában, a(z) {board} táblán",
|
"You have updated the description of card {card} in list {stack} on board {board}" : "Frissítette a(z) {card} kártya leírását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} frissítette a(z) {card} kártya leírását a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} frissítette a(z) {card} kártya leírását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have archived card {card} in list {stack} on board {board}" : "Archiválta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"You have archived card {card} in list {stack} on board {board}" : "Archiválta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} archiválta a(z) {card} kártyát a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has archived card {card} in list {stack} on board {board}" : "{user} archiválta a(z) {card} kártyát a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have unarchived card {card} in list {stack} on board {board}" : "Visszavonta a(z) {card} kártya archiválását a(z) {stack} listában, a(z) {board} táblán",
|
"You have unarchived card {card} in list {stack} on board {board}" : "Visszavonta a(z) {card} kártya archiválását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} visszavonta a(z) {card} kártya archiválását a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} visszavonta a(z) {card} kártya archiválását a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have removed the due date of card {card}" : "Eltávolította a(z) {card} kártya esedékességét",
|
"You have removed the due date of card {card}" : "Eltávolította a(z) {card} kártya esedékességét",
|
||||||
"{user} has removed the due date of card {card}" : "{user} eltávolította a(z) {card} kártya esedékességét",
|
"{user} has removed the due date of card {card}" : "{user} eltávolította a(z) {card} kártya esedékességét",
|
||||||
"You have set the due date of card {card} to {after}" : "Beállította a(z) {card} kártya esedékességét",
|
"You have set the due date of card {card} to {after}" : "Beállította a(z) {card} kártya esedékességét",
|
||||||
"{user} has set the due date of card {card} to {after}" : "{user} beállította a(z) {card} kártya esedékességét",
|
"{user} has set the due date of card {card} to {after}" : "{user} beállította a(z) {card} kártya esedékességét",
|
||||||
"You have updated the due date of card {card} to {after}" : "Frissítette a(z) {card} kártya esedékességét erre: {after}",
|
"You have updated the due date of card {card} to {after}" : "Frissítette a(z) {card} kártya esedékességét erre: {after}",
|
||||||
"{user} has updated the due date of card {card} to {after}" : "{user} frissítette a(z) {card} kártya esedékességét erre: {after}",
|
"{user} has updated the due date of card {card} to {after}" : "{user} frissítette a(z) {card} kártya esedékességét erre: {after}",
|
||||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} listában, a(z) {board} táblán",
|
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} hozzáadta a(z) {label} címkét a(z) {card} kártyához, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} listában, a(z) {board} táblán",
|
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} listában, a(z) {board} táblán",
|
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} eltávolította a(z) {label} címkét a(z) {card} kártyáról, a(z) {stack} rakásban, a(z) {board} táblán",
|
||||||
"You have assigned {assigneduser} to card {card} on board {board}" : "Hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
"You have assigned {assigneduser} to card {card} on board {board}" : "Hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
||||||
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} hozzárendelte a(z) {card} kártyát a(z) {board} táblán a következőhöz: {assigneduser}",
|
||||||
"You have unassigned {assigneduser} from card {card} on board {board}" : "Eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
"You have unassigned {assigneduser} from card {card} on board {board}" : "Eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
||||||
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} eltávolította a(z) {card} kártyát a(z) {board} táblán a következőtől: {assigneduser}",
|
||||||
"You have moved the card {card} from list {stackBefore} to {stack}" : "Áthelyezte a(z) {card} kártyát a(z) {stackBefore} listából a(z) {stack} listába",
|
"You have moved the card {card} from list {stackBefore} to {stack}" : "Áthelyezte a(z) {card} kártyát a(z) {stackBefore} rakásból a(z) {stack} rakásba",
|
||||||
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} áthelyezte a(z) {card} kártyát a(z) {stackBefore} listából a(z) {stack} listába",
|
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} áthelyezte a(z) {card} kártyát a(z) {stackBefore} rakásból a(z) {stack} rakásba",
|
||||||
"You have added the attachment {attachment} to card {card}" : "Hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
"You have added the attachment {attachment} to card {card}" : "Hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
||||||
"{user} has added the attachment {attachment} to card {card}" : "{user} hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
"{user} has added the attachment {attachment} to card {card}" : "{user} hozzáadta a(z) {attachment} mellékletet a(z) {card} kártyához",
|
||||||
"You have updated the attachment {attachment} on card {card}" : "Frissítette a(z) {attachment} mellékletet a(z) {card} kártyánál",
|
"You have updated the attachment {attachment} on card {card}" : "Frissítette a(z) {attachment} mellékletet a(z) {card} kártyánál",
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
"The card \"%s\" on \"%s\" has reached its due date." : "A(z) „%s” kártya a(z) „%s” táblán elérte a határidejét.",
|
"The card \"%s\" on \"%s\" has reached its due date." : "A(z) „%s” kártya a(z) „%s” táblán elérte a határidejét.",
|
||||||
"%s has mentioned you in a comment on \"%s\"." : "%s megemlítette egy hozzászólásban ennél: „%s”.",
|
"%s has mentioned you in a comment on \"%s\"." : "%s megemlítette egy hozzászólásban ennél: „%s”.",
|
||||||
"The board \"%s\" has been shared with you by %s." : "A(z) „%s” táblát %s osztotta meg Önnel.",
|
"The board \"%s\" has been shared with you by %s." : "A(z) „%s” táblát %s osztotta meg Önnel.",
|
||||||
"Card comments" : "Kártya hozzászólásai",
|
"Card comments" : "Kártyák hozzászólások",
|
||||||
"%s on %s" : "%s ezen: %s",
|
"%s on %s" : "%s ezen: %s",
|
||||||
"No data was provided to create an attachment." : "Nincsenek megadva adatok a melléklet létrehozásához.",
|
"No data was provided to create an attachment." : "Nincsenek megadva adatok a melléklet létrehozásához.",
|
||||||
"Finished" : "Kész",
|
"Finished" : "Kész",
|
||||||
@@ -141,8 +141,8 @@
|
|||||||
"Toggle compact mode" : "Kompakt mód be/ki",
|
"Toggle compact mode" : "Kompakt mód be/ki",
|
||||||
"Details" : "Részletek",
|
"Details" : "Részletek",
|
||||||
"Loading board" : "Tábla betöltése",
|
"Loading board" : "Tábla betöltése",
|
||||||
"No lists available" : "Nincs elérhető lista",
|
"No lists available" : "Nincs elérhető rakás",
|
||||||
"Create a new list to add cards to this board" : "Hozzon létre egy új listát a kártyák ehhez a táblához való hozzáadásához",
|
"Create a new list to add cards to this board" : "Hozzon létre egy új rakást kártyák ehhez a táblához való hozzáadásához",
|
||||||
"Board not found" : "A tábla nem található",
|
"Board not found" : "A tábla nem található",
|
||||||
"Sharing" : "Megosztás",
|
"Sharing" : "Megosztás",
|
||||||
"Tags" : "Címkék",
|
"Tags" : "Címkék",
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
"Undo" : "Visszavonás",
|
"Undo" : "Visszavonás",
|
||||||
"Deleted cards" : "Törölt kártyák",
|
"Deleted cards" : "Törölt kártyák",
|
||||||
"Share board with a user, group or circle …" : "Tábla megosztása felhasználóval, csoporttal vagy körrel…",
|
"Share board with a user, group or circle …" : "Tábla megosztása felhasználóval, csoporttal vagy körrel…",
|
||||||
"Searching for users, groups and circles …" : "Felhasználók, csoportok és körök keresése…",
|
"Searching for users, groups and circles …" : "Felhasználókkal, csoportok és körök keresése",
|
||||||
"No participants found" : "Nem találhatók résztvevők",
|
"No participants found" : "Nem találhatók résztvevők",
|
||||||
"Board owner" : "Tábla tulajdonosa",
|
"Board owner" : "Tábla tulajdonosa",
|
||||||
"(Group)" : "(Csoport)",
|
"(Group)" : "(Csoport)",
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
"Archive all cards" : "Az összes kártya archiválása",
|
"Archive all cards" : "Az összes kártya archiválása",
|
||||||
"Delete list" : "Lista törlése",
|
"Delete list" : "Lista törlése",
|
||||||
"Add card" : "Kártya hozzáadása",
|
"Add card" : "Kártya hozzáadása",
|
||||||
"Archive all cards in this list" : "Az összes kártya archiválása ebben a listában",
|
"Archive all cards in this list" : "Archív kártyák ebben a listában",
|
||||||
"Add a new card" : "Új kártya hozzáadása",
|
"Add a new card" : "Új kártya hozzáadása",
|
||||||
"Card name" : "Kártya neve",
|
"Card name" : "Kártya neve",
|
||||||
"List deleted" : "Lista törölve",
|
"List deleted" : "Lista törölve",
|
||||||
|
|||||||
@@ -63,9 +63,9 @@ OC.L10N.register(
|
|||||||
"{user} has restored the attachment {attachment} to card {card}" : "{user}が添付ファイル{attachment}をカード{card}に復元しました",
|
"{user} has restored the attachment {attachment} to card {card}" : "{user}が添付ファイル{attachment}をカード{card}に復元しました",
|
||||||
"You have commented on card {card}" : "カード{card}にコメントしました",
|
"You have commented on card {card}" : "カード{card}にコメントしました",
|
||||||
"{user} has commented on card {card}" : "{user}がカード{card}にコメントしました",
|
"{user} has commented on card {card}" : "{user}がカード{card}にコメントしました",
|
||||||
"A <strong>card description</strong> inside the Deck app has been changed" : "デッキアプリ内の<strong>カードの説明</strong>が変更されたとき",
|
"A <strong>card description</strong> inside the Deck app has been changed" : "デッキアプリ内の<strong>カードの説明</strong>が変更されました",
|
||||||
"Deck" : "デッキ",
|
"Deck" : "デッキ",
|
||||||
"Changes in the <strong>Deck app</strong>" : "<strong>デッキアプリ</strong>に変更があったとき",
|
"Changes in the <strong>Deck app</strong>" : "<strong>デッキアプリ</strong>の変更点",
|
||||||
"A <strong>comment</strong> was created on a card" : "カードに<strong>コメント</strong>が作成されたとき",
|
"A <strong>comment</strong> was created on a card" : "カードに<strong>コメント</strong>が作成されたとき",
|
||||||
"Upcoming cards" : "今後のカード",
|
"Upcoming cards" : "今後のカード",
|
||||||
"Personal" : "個人",
|
"Personal" : "個人",
|
||||||
@@ -197,7 +197,7 @@ OC.L10N.register(
|
|||||||
"Assign a tag to this card…" : "タグこのをカードに割り当てる…",
|
"Assign a tag to this card…" : "タグこのをカードに割り当てる…",
|
||||||
"Assign to users" : "ユーザーに割り当てる",
|
"Assign to users" : "ユーザーに割り当てる",
|
||||||
"Assign to users/groups/circles" : "ユーザー/グループ/サークルに割り当てる",
|
"Assign to users/groups/circles" : "ユーザー/グループ/サークルに割り当てる",
|
||||||
"Assign a user to this card…" : "このカードをユーザーに割り当てる…",
|
"Assign a user to this card…" : "このカードにユーザーに割り当てる…",
|
||||||
"Due date" : "期限",
|
"Due date" : "期限",
|
||||||
"Set a due date" : "期限を設定",
|
"Set a due date" : "期限を設定",
|
||||||
"Remove due date" : "期限を削除",
|
"Remove due date" : "期限を削除",
|
||||||
|
|||||||
@@ -61,9 +61,9 @@
|
|||||||
"{user} has restored the attachment {attachment} to card {card}" : "{user}が添付ファイル{attachment}をカード{card}に復元しました",
|
"{user} has restored the attachment {attachment} to card {card}" : "{user}が添付ファイル{attachment}をカード{card}に復元しました",
|
||||||
"You have commented on card {card}" : "カード{card}にコメントしました",
|
"You have commented on card {card}" : "カード{card}にコメントしました",
|
||||||
"{user} has commented on card {card}" : "{user}がカード{card}にコメントしました",
|
"{user} has commented on card {card}" : "{user}がカード{card}にコメントしました",
|
||||||
"A <strong>card description</strong> inside the Deck app has been changed" : "デッキアプリ内の<strong>カードの説明</strong>が変更されたとき",
|
"A <strong>card description</strong> inside the Deck app has been changed" : "デッキアプリ内の<strong>カードの説明</strong>が変更されました",
|
||||||
"Deck" : "デッキ",
|
"Deck" : "デッキ",
|
||||||
"Changes in the <strong>Deck app</strong>" : "<strong>デッキアプリ</strong>に変更があったとき",
|
"Changes in the <strong>Deck app</strong>" : "<strong>デッキアプリ</strong>の変更点",
|
||||||
"A <strong>comment</strong> was created on a card" : "カードに<strong>コメント</strong>が作成されたとき",
|
"A <strong>comment</strong> was created on a card" : "カードに<strong>コメント</strong>が作成されたとき",
|
||||||
"Upcoming cards" : "今後のカード",
|
"Upcoming cards" : "今後のカード",
|
||||||
"Personal" : "個人",
|
"Personal" : "個人",
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
"Assign a tag to this card…" : "タグこのをカードに割り当てる…",
|
"Assign a tag to this card…" : "タグこのをカードに割り当てる…",
|
||||||
"Assign to users" : "ユーザーに割り当てる",
|
"Assign to users" : "ユーザーに割り当てる",
|
||||||
"Assign to users/groups/circles" : "ユーザー/グループ/サークルに割り当てる",
|
"Assign to users/groups/circles" : "ユーザー/グループ/サークルに割り当てる",
|
||||||
"Assign a user to this card…" : "このカードをユーザーに割り当てる…",
|
"Assign a user to this card…" : "このカードにユーザーに割り当てる…",
|
||||||
"Due date" : "期限",
|
"Due date" : "期限",
|
||||||
"Set a due date" : "期限を設定",
|
"Set a due date" : "期限を設定",
|
||||||
"Remove due date" : "期限を削除",
|
"Remove due date" : "期限を削除",
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ OC.L10N.register(
|
|||||||
"Edit" : "Modificar",
|
"Edit" : "Modificar",
|
||||||
"Upload new files" : "Enviar fichièrs novèls",
|
"Upload new files" : "Enviar fichièrs novèls",
|
||||||
"Save" : "Salvar",
|
"Save" : "Salvar",
|
||||||
"Cancel reply" : "Anullar la responsa",
|
|
||||||
"Reply" : "Respondre",
|
"Reply" : "Respondre",
|
||||||
"Update" : "Metre a jorn",
|
"Update" : "Metre a jorn",
|
||||||
"Description" : "Descripcion",
|
"Description" : "Descripcion",
|
||||||
|
|||||||
@@ -14,7 +14,6 @@
|
|||||||
"Edit" : "Modificar",
|
"Edit" : "Modificar",
|
||||||
"Upload new files" : "Enviar fichièrs novèls",
|
"Upload new files" : "Enviar fichièrs novèls",
|
||||||
"Save" : "Salvar",
|
"Save" : "Salvar",
|
||||||
"Cancel reply" : "Anullar la responsa",
|
|
||||||
"Reply" : "Respondre",
|
"Reply" : "Respondre",
|
||||||
"Update" : "Metre a jorn",
|
"Update" : "Metre a jorn",
|
||||||
"Description" : "Descripcion",
|
"Description" : "Descripcion",
|
||||||
|
|||||||
14
l10n/sv.js
14
l10n/sv.js
@@ -63,9 +63,9 @@ OC.L10N.register(
|
|||||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} har återställt bilagan {attachment} till kortet {card}",
|
"{user} has restored the attachment {attachment} to card {card}" : "{user} har återställt bilagan {attachment} till kortet {card}",
|
||||||
"You have commented on card {card}" : "Du har kommenterat på kortet {card}",
|
"You have commented on card {card}" : "Du har kommenterat på kortet {card}",
|
||||||
"{user} has commented on card {card}" : "{user} har kommenterat på kortet {card}",
|
"{user} has commented on card {card}" : "{user} har kommenterat på kortet {card}",
|
||||||
"A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kortbeskrivning</strong> i Kortlek-appen har ändrats",
|
"A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kortbeskrivning</strong> i Kort-appen har ändrats",
|
||||||
"Deck" : "Kortlek",
|
"Deck" : "Kort",
|
||||||
"Changes in the <strong>Deck app</strong>" : "Ändringar i <strong>Kortlek-appen</strong>",
|
"Changes in the <strong>Deck app</strong>" : "Ändringar i <strong>Kort-appen</strong>",
|
||||||
"A <strong>comment</strong> was created on a card" : "En <strong>kommentar</strong> skapades på ett kort",
|
"A <strong>comment</strong> was created on a card" : "En <strong>kommentar</strong> skapades på ett kort",
|
||||||
"Upcoming cards" : "Kommande kort",
|
"Upcoming cards" : "Kommande kort",
|
||||||
"Personal" : "Personlig",
|
"Personal" : "Personlig",
|
||||||
@@ -104,7 +104,7 @@ OC.L10N.register(
|
|||||||
"Path is already shared with this card" : "Sökvägen är redan delad med detta kort",
|
"Path is already shared with this card" : "Sökvägen är redan delad med detta kort",
|
||||||
"Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
|
"Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
|
||||||
"Personal planning and team project organization" : "Personlig planering och projekthantering för teams",
|
"Personal planning and team project organization" : "Personlig planering och projekthantering för teams",
|
||||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Kortlek är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
|
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Kort ä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!",
|
||||||
"Card details" : "Kortdetaljer",
|
"Card details" : "Kortdetaljer",
|
||||||
"Add board" : "Lägg till tavla",
|
"Add board" : "Lägg till tavla",
|
||||||
"Select the board to link to a project" : "Välj tavla att länka till ett projekt",
|
"Select the board to link to a project" : "Välj tavla att länka till ett projekt",
|
||||||
@@ -242,7 +242,7 @@ OC.L10N.register(
|
|||||||
"Use bigger card view" : "Visa större kort",
|
"Use bigger card view" : "Visa större kort",
|
||||||
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",
|
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",
|
||||||
"Limit deck usage of groups" : "Begränsa användningen av grupper",
|
"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 Kortlek 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.",
|
"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änsade kort 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.",
|
||||||
"Board details" : "Taveldetaljer",
|
"Board details" : "Taveldetaljer",
|
||||||
"Edit board" : "Ändra tavla",
|
"Edit board" : "Ändra tavla",
|
||||||
"Clone board" : "Kopiera tavla",
|
"Clone board" : "Kopiera tavla",
|
||||||
@@ -278,8 +278,8 @@ OC.L10N.register(
|
|||||||
"Failed to upload {name}" : "Kunde inte ladda upp {name}",
|
"Failed to upload {name}" : "Kunde inte ladda upp {name}",
|
||||||
"Maximum file size of {size} exceeded" : "Maximal filstorlek på {size} överskriden",
|
"Maximum file size of {size} exceeded" : "Maximal filstorlek på {size} överskriden",
|
||||||
"Error creating the share" : "Kunde inte skapa delning",
|
"Error creating the share" : "Kunde inte skapa delning",
|
||||||
"Share with a Deck card" : "Dela med ett Kortlek-kort",
|
"Share with a Deck card" : "Dela med ett kort",
|
||||||
"Share {file} with a Deck card" : "Dela {file} med ett Kortlek-kort",
|
"Share {file} with a Deck card" : "Dela {file} med ett kort",
|
||||||
"Share" : "Dela"
|
"Share" : "Dela"
|
||||||
},
|
},
|
||||||
"nplurals=2; plural=(n != 1);");
|
"nplurals=2; plural=(n != 1);");
|
||||||
|
|||||||
14
l10n/sv.json
14
l10n/sv.json
@@ -61,9 +61,9 @@
|
|||||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} har återställt bilagan {attachment} till kortet {card}",
|
"{user} has restored the attachment {attachment} to card {card}" : "{user} har återställt bilagan {attachment} till kortet {card}",
|
||||||
"You have commented on card {card}" : "Du har kommenterat på kortet {card}",
|
"You have commented on card {card}" : "Du har kommenterat på kortet {card}",
|
||||||
"{user} has commented on card {card}" : "{user} har kommenterat på kortet {card}",
|
"{user} has commented on card {card}" : "{user} har kommenterat på kortet {card}",
|
||||||
"A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kortbeskrivning</strong> i Kortlek-appen har ändrats",
|
"A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kortbeskrivning</strong> i Kort-appen har ändrats",
|
||||||
"Deck" : "Kortlek",
|
"Deck" : "Kort",
|
||||||
"Changes in the <strong>Deck app</strong>" : "Ändringar i <strong>Kortlek-appen</strong>",
|
"Changes in the <strong>Deck app</strong>" : "Ändringar i <strong>Kort-appen</strong>",
|
||||||
"A <strong>comment</strong> was created on a card" : "En <strong>kommentar</strong> skapades på ett kort",
|
"A <strong>comment</strong> was created on a card" : "En <strong>kommentar</strong> skapades på ett kort",
|
||||||
"Upcoming cards" : "Kommande kort",
|
"Upcoming cards" : "Kommande kort",
|
||||||
"Personal" : "Personlig",
|
"Personal" : "Personlig",
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Path is already shared with this card" : "Sökvägen är redan delad med detta kort",
|
"Path is already shared with this card" : "Sökvägen är redan delad med detta kort",
|
||||||
"Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
|
"Invalid date, date format must be YYYY-MM-DD" : "Ogiltigt datum, måste anges: ÅÅÅÅ-MM-DD",
|
||||||
"Personal planning and team project organization" : "Personlig planering och projekthantering för teams",
|
"Personal planning and team project organization" : "Personlig planering och projekthantering för teams",
|
||||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Kortlek är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
|
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Kort ä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!",
|
||||||
"Card details" : "Kortdetaljer",
|
"Card details" : "Kortdetaljer",
|
||||||
"Add board" : "Lägg till tavla",
|
"Add board" : "Lägg till tavla",
|
||||||
"Select the board to link to a project" : "Välj tavla att länka till ett projekt",
|
"Select the board to link to a project" : "Välj tavla att länka till ett projekt",
|
||||||
@@ -240,7 +240,7 @@
|
|||||||
"Use bigger card view" : "Visa större kort",
|
"Use bigger card view" : "Visa större kort",
|
||||||
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",
|
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",
|
||||||
"Limit deck usage of groups" : "Begränsa användningen av grupper",
|
"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 Kortlek 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.",
|
"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änsade kort 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.",
|
||||||
"Board details" : "Taveldetaljer",
|
"Board details" : "Taveldetaljer",
|
||||||
"Edit board" : "Ändra tavla",
|
"Edit board" : "Ändra tavla",
|
||||||
"Clone board" : "Kopiera tavla",
|
"Clone board" : "Kopiera tavla",
|
||||||
@@ -276,8 +276,8 @@
|
|||||||
"Failed to upload {name}" : "Kunde inte ladda upp {name}",
|
"Failed to upload {name}" : "Kunde inte ladda upp {name}",
|
||||||
"Maximum file size of {size} exceeded" : "Maximal filstorlek på {size} överskriden",
|
"Maximum file size of {size} exceeded" : "Maximal filstorlek på {size} överskriden",
|
||||||
"Error creating the share" : "Kunde inte skapa delning",
|
"Error creating the share" : "Kunde inte skapa delning",
|
||||||
"Share with a Deck card" : "Dela med ett Kortlek-kort",
|
"Share with a Deck card" : "Dela med ett kort",
|
||||||
"Share {file} with a Deck card" : "Dela {file} med ett Kortlek-kort",
|
"Share {file} with a Deck card" : "Dela {file} med ett kort",
|
||||||
"Share" : "Dela"
|
"Share" : "Dela"
|
||||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||||
}
|
}
|
||||||
12
l10n/tr.js
12
l10n/tr.js
@@ -88,9 +88,9 @@ OC.L10N.register(
|
|||||||
"To do" : "Yapılacak işler",
|
"To do" : "Yapılacak işler",
|
||||||
"Doing" : "Yapılanlar",
|
"Doing" : "Yapılanlar",
|
||||||
"Done" : "Bitenler",
|
"Done" : "Bitenler",
|
||||||
"Example Task 3" : "3. örnek görev",
|
"Example Task 3" : "3. Örnek Görev",
|
||||||
"Example Task 2" : "2. örnek görev",
|
"Example Task 2" : "2. Örnek Görev",
|
||||||
"Example Task 1" : "1. örnek görev",
|
"Example Task 1" : "1. Örnek Görev",
|
||||||
"The file was uploaded" : "Dosya yüklendi",
|
"The file was uploaded" : "Dosya yüklendi",
|
||||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
|
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
|
||||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
|
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
|
||||||
@@ -188,8 +188,8 @@ OC.L10N.register(
|
|||||||
"Add this attachment" : "Bu dosyayı ekle",
|
"Add this attachment" : "Bu dosyayı ekle",
|
||||||
"Show in Files" : "Dosyalarda görüntüle",
|
"Show in Files" : "Dosyalarda görüntüle",
|
||||||
"Unshare file" : "Dosyayı paylaşımdan kaldır",
|
"Unshare file" : "Dosyayı paylaşımdan kaldır",
|
||||||
"Delete Attachment" : "Ek dosyasını sil",
|
"Delete Attachment" : "Ek Dosyasını Sil",
|
||||||
"Restore Attachment" : "Ek dosyasını geri yükle",
|
"Restore Attachment" : "Ek Dosyasını Geri Yükle",
|
||||||
"File to share" : "Paylaşılacak dosya",
|
"File to share" : "Paylaşılacak dosya",
|
||||||
"Invalid path selected" : "Seçilen yol geçersiz",
|
"Invalid path selected" : "Seçilen yol geçersiz",
|
||||||
"Open in sidebar view" : "Yan çubuk görünümünde aç",
|
"Open in sidebar view" : "Yan çubuk görünümünde aç",
|
||||||
@@ -222,7 +222,7 @@ OC.L10N.register(
|
|||||||
"Formatting help" : "Biçimlendirme yardımı",
|
"Formatting help" : "Biçimlendirme yardımı",
|
||||||
"Edit description" : "Açıklamayı düzenle",
|
"Edit description" : "Açıklamayı düzenle",
|
||||||
"View description" : "Açıklamayı görüntüle",
|
"View description" : "Açıklamayı görüntüle",
|
||||||
"Add Attachment" : "Dosya ekle",
|
"Add Attachment" : "Dosya Ekle",
|
||||||
"Write a description …" : "Bir açıklama yazın …",
|
"Write a description …" : "Bir açıklama yazın …",
|
||||||
"Choose attachment" : "Ek dosyayı seçin",
|
"Choose attachment" : "Ek dosyayı seçin",
|
||||||
"(group)" : "(grup)",
|
"(group)" : "(grup)",
|
||||||
|
|||||||
12
l10n/tr.json
12
l10n/tr.json
@@ -86,9 +86,9 @@
|
|||||||
"To do" : "Yapılacak işler",
|
"To do" : "Yapılacak işler",
|
||||||
"Doing" : "Yapılanlar",
|
"Doing" : "Yapılanlar",
|
||||||
"Done" : "Bitenler",
|
"Done" : "Bitenler",
|
||||||
"Example Task 3" : "3. örnek görev",
|
"Example Task 3" : "3. Örnek Görev",
|
||||||
"Example Task 2" : "2. örnek görev",
|
"Example Task 2" : "2. Örnek Görev",
|
||||||
"Example Task 1" : "1. örnek görev",
|
"Example Task 1" : "1. Örnek Görev",
|
||||||
"The file was uploaded" : "Dosya yüklendi",
|
"The file was uploaded" : "Dosya yüklendi",
|
||||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
|
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
|
||||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
|
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
|
||||||
@@ -186,8 +186,8 @@
|
|||||||
"Add this attachment" : "Bu dosyayı ekle",
|
"Add this attachment" : "Bu dosyayı ekle",
|
||||||
"Show in Files" : "Dosyalarda görüntüle",
|
"Show in Files" : "Dosyalarda görüntüle",
|
||||||
"Unshare file" : "Dosyayı paylaşımdan kaldır",
|
"Unshare file" : "Dosyayı paylaşımdan kaldır",
|
||||||
"Delete Attachment" : "Ek dosyasını sil",
|
"Delete Attachment" : "Ek Dosyasını Sil",
|
||||||
"Restore Attachment" : "Ek dosyasını geri yükle",
|
"Restore Attachment" : "Ek Dosyasını Geri Yükle",
|
||||||
"File to share" : "Paylaşılacak dosya",
|
"File to share" : "Paylaşılacak dosya",
|
||||||
"Invalid path selected" : "Seçilen yol geçersiz",
|
"Invalid path selected" : "Seçilen yol geçersiz",
|
||||||
"Open in sidebar view" : "Yan çubuk görünümünde aç",
|
"Open in sidebar view" : "Yan çubuk görünümünde aç",
|
||||||
@@ -220,7 +220,7 @@
|
|||||||
"Formatting help" : "Biçimlendirme yardımı",
|
"Formatting help" : "Biçimlendirme yardımı",
|
||||||
"Edit description" : "Açıklamayı düzenle",
|
"Edit description" : "Açıklamayı düzenle",
|
||||||
"View description" : "Açıklamayı görüntüle",
|
"View description" : "Açıklamayı görüntüle",
|
||||||
"Add Attachment" : "Dosya ekle",
|
"Add Attachment" : "Dosya Ekle",
|
||||||
"Write a description …" : "Bir açıklama yazın …",
|
"Write a description …" : "Bir açıklama yazın …",
|
||||||
"Choose attachment" : "Ek dosyayı seçin",
|
"Choose attachment" : "Ek dosyayı seçin",
|
||||||
"(group)" : "(grup)",
|
"(group)" : "(grup)",
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class CardApiController extends ApiController {
|
|||||||
* Update a card
|
* Update a card
|
||||||
*/
|
*/
|
||||||
public function update($title, $type, $order = 0, $description = '', $owner, $duedate = null, $archived = null) {
|
public function update($title, $type, $order = 0, $description = '', $owner, $duedate = null, $archived = null) {
|
||||||
$card = $this->cardService->update($this->request->getParam('cardId'), $title, $this->request->getParam('stackId'), $type, $owner, $description, $order, $duedate, 0, $archived);
|
$card = $this->cardService->update($this->request->getParam('cardId'), $title, $this->request->getParam('stackId'), $type, $order, $description, $owner, $duedate, 0, $archived);
|
||||||
return new DataResponse($card, HTTP::STATUS_OK);
|
return new DataResponse($card, HTTP::STATUS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class CardController extends Controller {
|
|||||||
* @return \OCP\AppFramework\Db\Entity
|
* @return \OCP\AppFramework\Db\Entity
|
||||||
*/
|
*/
|
||||||
public function update($id, $title, $stackId, $type, $order, $description, $duedate, $deletedAt) {
|
public function update($id, $title, $stackId, $type, $order, $description, $duedate, $deletedAt) {
|
||||||
return $this->cardService->update($id, $title, $stackId, $type, $this->userId, $description, $order, $duedate, $deletedAt);
|
return $this->cardService->update($id, $title, $stackId, $type, $order, $description, $this->userId, $duedate, $deletedAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ class AclMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
return ($row['owner'] === $userId);
|
return ($row['owner'] === $userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findBoardId($id): ?int {
|
public function findBoardId($aclId): ?int {
|
||||||
try {
|
try {
|
||||||
$entity = $this->find($id);
|
$entity = $this->find($aclId);
|
||||||
return $entity->getBoardId();
|
return $entity->getBoardId();
|
||||||
} catch (DoesNotExistException | MultipleObjectsReturnedException $e) {
|
} catch (DoesNotExistException | MultipleObjectsReturnedException $e) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,8 +83,8 @@ class AssignmentMapper extends QBMapper implements IPermissionMapper {
|
|||||||
return $this->cardMapper->isOwner($userId, $cardId);
|
return $this->cardMapper->isOwner($userId, $cardId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findBoardId($id): ?int {
|
public function findBoardId($cardId): ?int {
|
||||||
return $this->cardMapper->findBoardId($id);
|
return $this->cardMapper->findBoardId($cardId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
namespace OCA\Deck\Db;
|
namespace OCA\Deck\Db;
|
||||||
|
|
||||||
use OC\Cache\CappedMemoryCache;
|
|
||||||
use OCP\AppFramework\Db\DoesNotExistException;
|
use OCP\AppFramework\Db\DoesNotExistException;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
use OCP\IUserManager;
|
use OCP\IUserManager;
|
||||||
@@ -40,8 +39,6 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
|
|
||||||
private $circlesEnabled;
|
private $circlesEnabled;
|
||||||
|
|
||||||
private $userBoardCache;
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
IDBConnection $db,
|
IDBConnection $db,
|
||||||
LabelMapper $labelMapper,
|
LabelMapper $labelMapper,
|
||||||
@@ -59,9 +56,6 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
$this->groupManager = $groupManager;
|
$this->groupManager = $groupManager;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
|
|
||||||
$this->userBoardCache = new CappedMemoryCache();
|
|
||||||
|
|
||||||
|
|
||||||
$this->circlesEnabled = \OC::$server->getAppManager()->isEnabledForUser('circles');
|
$this->circlesEnabled = \OC::$server->getAppManager()->isEnabledForUser('circles');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,21 +89,13 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function findAllForUser(string $userId, int $since = -1, $includeArchived = true): array {
|
public function findAllForUser(string $userId, int $since = -1, $includeArchived = true): array {
|
||||||
$useCache = ($since === -1 && $includeArchived === true);
|
$groups = $this->groupManager->getUserGroupIds(
|
||||||
if (!isset($this->userBoardCache[$userId]) || !$useCache) {
|
$this->userManager->get($userId)
|
||||||
$groups = $this->groupManager->getUserGroupIds(
|
);
|
||||||
$this->userManager->get($userId)
|
$userBoards = $this->findAllByUser($userId, null, null, $since, $includeArchived);
|
||||||
);
|
$groupBoards = $this->findAllByGroups($userId, $groups,null, null, $since, $includeArchived);
|
||||||
$userBoards = $this->findAllByUser($userId, null, null, $since, $includeArchived);
|
$circleBoards = $this->findAllByCircles($userId, null, null, $since, $includeArchived);
|
||||||
$groupBoards = $this->findAllByGroups($userId, $groups, null, null, $since, $includeArchived);
|
return array_unique(array_merge($userBoards, $groupBoards, $circleBoards));
|
||||||
$circleBoards = $this->findAllByCircles($userId, null, null, $since, $includeArchived);
|
|
||||||
$allBoards = array_unique(array_merge($userBoards, $groupBoards, $circleBoards));
|
|
||||||
if ($useCache) {
|
|
||||||
$this->userBoardCache[$userId] = $allBoards;
|
|
||||||
}
|
|
||||||
return $allBoards;
|
|
||||||
}
|
|
||||||
return $this->userBoardCache[$userId];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -546,10 +546,10 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
|||||||
return ($row['owner'] === $userId);
|
return ($row['owner'] === $userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findBoardId($id): ?int {
|
public function findBoardId($cardId): ?int {
|
||||||
$sql = 'SELECT id FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_stacks` WHERE id IN (SELECT stack_id FROM `*PREFIX*deck_cards` WHERE id = ?))';
|
$sql = 'SELECT id FROM `*PREFIX*deck_boards` WHERE `id` IN (SELECT board_id FROM `*PREFIX*deck_stacks` WHERE id IN (SELECT stack_id FROM `*PREFIX*deck_cards` WHERE id = ?))';
|
||||||
$stmt = $this->db->prepare($sql);
|
$stmt = $this->db->prepare($sql);
|
||||||
$stmt->bindParam(1, $id, \PDO::PARAM_INT);
|
$stmt->bindParam(1, $cardId, \PDO::PARAM_INT);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
return $stmt->fetchColumn() ?? null;
|
return $stmt->fetchColumn() ?? null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ class Circle extends RelationalObject {
|
|||||||
public function getObjectSerialization() {
|
public function getObjectSerialization() {
|
||||||
return [
|
return [
|
||||||
'uid' => $this->object->getUniqueId(),
|
'uid' => $this->object->getUniqueId(),
|
||||||
'displayname' => $this->object->getDisplayName(),
|
'displayname' => $this->object->getName(),
|
||||||
'typeString' => '',
|
'typeString' => $this->object->getTypeString(),
|
||||||
'circleOwner' => $this->object->getOwner(),
|
'circleOwner' => $this->object->getOwner(),
|
||||||
'type' => 7
|
'type' => 7
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -101,9 +101,9 @@ class LabelMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
return ($row['owner'] === $userId);
|
return ($row['owner'] === $userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findBoardId($id): ?int {
|
public function findBoardId($labelId): ?int {
|
||||||
try {
|
try {
|
||||||
$entity = $this->find($id);
|
$entity = $this->find($labelId);
|
||||||
return $entity->getBoardId();
|
return $entity->getBoardId();
|
||||||
} catch (DoesNotExistException $e) {
|
} catch (DoesNotExistException $e) {
|
||||||
} catch (MultipleObjectsReturnedException $e) {
|
} catch (MultipleObjectsReturnedException $e) {
|
||||||
|
|||||||
@@ -75,9 +75,9 @@ class StackMapper extends DeckMapper implements IPermissionMapper {
|
|||||||
return ($row['owner'] === $userId);
|
return ($row['owner'] === $userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findBoardId($id): ?int {
|
public function findBoardId($stackId): ?int {
|
||||||
try {
|
try {
|
||||||
$entity = $this->find($id);
|
$entity = $this->find($stackId);
|
||||||
return $entity->getBoardId();
|
return $entity->getBoardId();
|
||||||
} catch (DoesNotExistException $e) {
|
} catch (DoesNotExistException $e) {
|
||||||
} catch (MultipleObjectsReturnedException $e) {
|
} catch (MultipleObjectsReturnedException $e) {
|
||||||
|
|||||||
@@ -98,7 +98,9 @@ class ExceptionMiddleware extends Middleware {
|
|||||||
'status' => 500,
|
'status' => 500,
|
||||||
'message' => $exception->getMessage()
|
'message' => $exception->getMessage()
|
||||||
];
|
];
|
||||||
$this->logger->logException($exception);
|
if ($this->config->getSystemValue('loglevel', Util::WARN) === Util::DEBUG) {
|
||||||
|
$this->logger->logException($exception);
|
||||||
|
}
|
||||||
if ($this->config->getSystemValue('debug', true) === true) {
|
if ($this->config->getSystemValue('debug', true) === true) {
|
||||||
$response['exception'] = (array) $exception;
|
$response['exception'] = (array) $exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ class DeckProvider implements IFullTextSearchProvider {
|
|||||||
*
|
*
|
||||||
* @param ISearchRequest $request
|
* @param ISearchRequest $request
|
||||||
*/
|
*/
|
||||||
public function improveSearchRequest(ISearchRequest $searchRequest) {
|
public function improveSearchRequest(ISearchRequest $request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -257,9 +257,9 @@ class CardService {
|
|||||||
* @param $title
|
* @param $title
|
||||||
* @param $stackId
|
* @param $stackId
|
||||||
* @param $type
|
* @param $type
|
||||||
* @param $owner
|
|
||||||
* @param $description
|
|
||||||
* @param $order
|
* @param $order
|
||||||
|
* @param $description
|
||||||
|
* @param $owner
|
||||||
* @param $duedate
|
* @param $duedate
|
||||||
* @return \OCP\AppFramework\Db\Entity
|
* @return \OCP\AppFramework\Db\Entity
|
||||||
* @throws StatusException
|
* @throws StatusException
|
||||||
@@ -268,7 +268,7 @@ class CardService {
|
|||||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||||
* @throws BadRequestException
|
* @throws BadRequestException
|
||||||
*/
|
*/
|
||||||
public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null) {
|
public function update($id, $title, $stackId, $type, $order = 0, $description = '', $owner, $duedate = null, $deletedAt = null, $archived = null) {
|
||||||
if (is_numeric($id) === false) {
|
if (is_numeric($id) === false) {
|
||||||
throw new BadRequestException('card id must be a number');
|
throw new BadRequestException('card id must be a number');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
namespace OCA\Deck\Service;
|
namespace OCA\Deck\Service;
|
||||||
|
|
||||||
use OC\Cache\CappedMemoryCache;
|
|
||||||
use OCA\Deck\Db\Acl;
|
use OCA\Deck\Db\Acl;
|
||||||
use OCA\Deck\Db\AclMapper;
|
use OCA\Deck\Db\AclMapper;
|
||||||
use OCA\Deck\Db\Board;
|
use OCA\Deck\Db\Board;
|
||||||
@@ -62,7 +61,6 @@ class PermissionService {
|
|||||||
private $users = [];
|
private $users = [];
|
||||||
|
|
||||||
private $circlesEnabled = false;
|
private $circlesEnabled = false;
|
||||||
private $boardCache;
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ILogger $logger,
|
ILogger $logger,
|
||||||
@@ -83,8 +81,6 @@ class PermissionService {
|
|||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->userId = $userId;
|
$this->userId = $userId;
|
||||||
|
|
||||||
$this->boardCache = new CappedMemoryCache();
|
|
||||||
|
|
||||||
$this->circlesEnabled = \OC::$server->getAppManager()->isEnabledForUser('circles') &&
|
$this->circlesEnabled = \OC::$server->getAppManager()->isEnabledForUser('circles') &&
|
||||||
(version_compare(\OC::$server->getAppManager()->getAppVersion('circles'), '0.17.1') >= 0);
|
(version_compare(\OC::$server->getAppManager()->getAppVersion('circles'), '0.17.1') >= 0);
|
||||||
}
|
}
|
||||||
@@ -153,13 +149,10 @@ class PermissionService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
$acls = $this->aclMapper->findAll($boardId);
|
||||||
$acls = $this->getBoard($boardId)->getAcl();
|
$result = $this->userCan($acls, $permission, $userId);
|
||||||
$result = $this->userCan($acls, $permission, $userId);
|
if ($result) {
|
||||||
if ($result) {
|
return true;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (DoesNotExistException | MultipleObjectsReturnedException $e) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Throw NoPermission to not leak information about existing entries
|
// Throw NoPermission to not leak information about existing entries
|
||||||
@@ -175,24 +168,13 @@ class PermissionService {
|
|||||||
$userId = $this->userId;
|
$userId = $this->userId;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$board = $this->getBoard($boardId);
|
$board = $this->boardMapper->find($boardId);
|
||||||
return $userId === $board->getOwner();
|
return $board && $userId === $board->getOwner();
|
||||||
} catch (DoesNotExistException | MultipleObjectsReturnedException $e) {
|
} catch (DoesNotExistException | MultipleObjectsReturnedException $e) {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws MultipleObjectsReturnedException
|
|
||||||
* @throws DoesNotExistException
|
|
||||||
*/
|
|
||||||
private function getBoard($boardId): Board {
|
|
||||||
if (!isset($this->boardCache[$boardId])) {
|
|
||||||
$this->boardCache[$boardId] = $this->boardMapper->find($boardId, false, true);
|
|
||||||
}
|
|
||||||
return $this->boardCache[$boardId];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if permission matches the acl rules for current user and groups
|
* Check if permission matches the acl rules for current user and groups
|
||||||
*
|
*
|
||||||
@@ -286,11 +268,7 @@ class PermissionService {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($circle->getInheritedMembers() as $member) {
|
foreach ($circle->getMembers() as $member) {
|
||||||
if ($member->getUserType() !== 1) {
|
|
||||||
// deck currently only supports user members in circles
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$user = $this->userManager->get($member->getUserId());
|
$user = $this->userManager->get($member->getUserId());
|
||||||
if ($user === null) {
|
if ($user === null) {
|
||||||
$this->logger->info('No user found for circle member ' . $member->getUserId());
|
$this->logger->info('No user found for circle member ' . $member->getUserId());
|
||||||
|
|||||||
@@ -271,9 +271,9 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
|||||||
return $share;
|
return $share;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function applyBoardPermission($share, $permissions, $userId) {
|
private function applyBoardPermission($share, $permissions) {
|
||||||
try {
|
try {
|
||||||
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_EDIT, $userId);
|
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_EDIT);
|
||||||
} catch (NoPermissionException $e) {
|
} catch (NoPermissionException $e) {
|
||||||
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE;
|
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE;
|
||||||
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE;
|
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE;
|
||||||
@@ -281,7 +281,7 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_SHARE, $userId);
|
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_SHARE);
|
||||||
} catch (NoPermissionException $e) {
|
} catch (NoPermissionException $e) {
|
||||||
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE;
|
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE;
|
||||||
}
|
}
|
||||||
@@ -646,7 +646,7 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
|||||||
$stmt = $query->execute();
|
$stmt = $query->execute();
|
||||||
|
|
||||||
while ($data = $stmt->fetch()) {
|
while ($data = $stmt->fetch()) {
|
||||||
$this->applyBoardPermission($shareMap[$data['parent']], (int)$data['permissions'], $userId);
|
$this->applyBoardPermission($shareMap[$data['parent']], (int)$data['permissions']);
|
||||||
$shareMap[$data['parent']]->setTarget($data['file_target']);
|
$shareMap[$data['parent']]->setTarget($data['file_target']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
39713
package-lock.json
generated
39713
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
59
package.json
59
package.json
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/polyfill": "^7.12.1",
|
"@babel/polyfill": "^7.12.1",
|
||||||
"@babel/runtime": "^7.14.6",
|
"@babel/runtime": "^7.14.0",
|
||||||
"@juliushaertl/vue-richtext": "^1.0.1",
|
"@juliushaertl/vue-richtext": "^1.0.1",
|
||||||
"@nextcloud/auth": "^1.3.0",
|
"@nextcloud/auth": "^1.3.0",
|
||||||
"@nextcloud/axios": "^1.6.0",
|
"@nextcloud/axios": "^1.6.0",
|
||||||
@@ -40,10 +40,10 @@
|
|||||||
"@nextcloud/l10n": "^1.4.1",
|
"@nextcloud/l10n": "^1.4.1",
|
||||||
"@nextcloud/moment": "^1.1.1",
|
"@nextcloud/moment": "^1.1.1",
|
||||||
"@nextcloud/router": "^2.0.0",
|
"@nextcloud/router": "^2.0.0",
|
||||||
"@nextcloud/vue": "^3.10.1",
|
"@nextcloud/vue": "^3.9.0",
|
||||||
"@nextcloud/vue-dashboard": "^2.0.1",
|
"@nextcloud/vue-dashboard": "^2.0.1",
|
||||||
"blueimp-md5": "^2.18.0",
|
"blueimp-md5": "^2.18.0",
|
||||||
"dompurify": "^2.2.9",
|
"dompurify": "^2.2.8",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"markdown-it": "^12.0.6",
|
"markdown-it": "^12.0.6",
|
||||||
"markdown-it-task-lists": "^2.1.1",
|
"markdown-it-task-lists": "^2.1.1",
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
"nextcloud-vue-collections": "^0.9.0",
|
"nextcloud-vue-collections": "^0.9.0",
|
||||||
"p-queue": "^6.6.2",
|
"p-queue": "^6.6.2",
|
||||||
"url-search-params-polyfill": "^8.1.1",
|
"url-search-params-polyfill": "^8.1.1",
|
||||||
"vue": "^2.6.14",
|
"vue": "^2.6.12",
|
||||||
"vue-at": "^2.5.0-beta.2",
|
"vue-at": "^2.5.0-beta.2",
|
||||||
"vue-click-outside": "^1.1.0",
|
"vue-click-outside": "^1.1.0",
|
||||||
"vue-easymde": "^1.4.0",
|
"vue-easymde": "^1.4.0",
|
||||||
@@ -65,20 +65,57 @@
|
|||||||
"extends @nextcloud/browserslist-config"
|
"extends @nextcloud/browserslist-config"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0",
|
"node": ">=10.0.0"
|
||||||
"npm": ">=7.0.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.14.2",
|
||||||
|
"@babel/eslint-parser": "^7.14.2",
|
||||||
|
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||||
|
"@babel/preset-env": "^7.14.2",
|
||||||
"@nextcloud/babel-config": "^1.0.0-beta.1",
|
"@nextcloud/babel-config": "^1.0.0-beta.1",
|
||||||
"@nextcloud/browserslist-config": "^2.1.0",
|
"@nextcloud/browserslist-config": "^2.1.0",
|
||||||
"@nextcloud/eslint-config": "^5.1.0",
|
"@nextcloud/eslint-config": "^5.1.0",
|
||||||
"@nextcloud/stylelint-config": "^1.0.0-beta.0",
|
"@nextcloud/eslint-plugin": "^2.0.0",
|
||||||
"@nextcloud/webpack-vue-config": "^4.0.3",
|
"@nextcloud/webpack-vue-config": "^4.0.3",
|
||||||
"@relative-ci/agent": "^2.0.0",
|
"@relative-ci/agent": "^1.6.1",
|
||||||
"@vue/test-utils": "^1.2.1",
|
"@vue/test-utils": "^1.2.0",
|
||||||
"jest": "^27.0.4",
|
"acorn": "^8.2.4",
|
||||||
|
"babel-eslint": "^10.1.0",
|
||||||
|
"babel-jest": "^26.6.3",
|
||||||
|
"babel-loader": "^8.2.2",
|
||||||
|
"css-loader": "^4.3.0",
|
||||||
|
"eslint": "^7.26.0",
|
||||||
|
"eslint-config-standard": "^16.0.2",
|
||||||
|
"eslint-friendly-formatter": "^4.0.1",
|
||||||
|
"eslint-loader": "^4.0.2",
|
||||||
|
"eslint-plugin-import": "^2.23.0",
|
||||||
|
"eslint-plugin-node": "^11.1.0",
|
||||||
|
"eslint-plugin-promise": "^4.3.1",
|
||||||
|
"eslint-plugin-standard": "^5.0.0",
|
||||||
|
"eslint-plugin-vue": "^7.9.0",
|
||||||
|
"eslint-webpack-plugin": "^2.5.4",
|
||||||
|
"file-loader": "^6.2.0",
|
||||||
|
"jest": "^26.6.3",
|
||||||
"jest-serializer-vue": "^2.0.2",
|
"jest-serializer-vue": "^2.0.2",
|
||||||
"vue-jest": "^3.0.7"
|
"minimist": "^1.2.5",
|
||||||
|
"node-polyfill-webpack-plugin": "^1.1.2",
|
||||||
|
"raw-loader": "^4.0.2",
|
||||||
|
"sass": "^1.32.13",
|
||||||
|
"sass-loader": "^10.1.1",
|
||||||
|
"style-loader": "^2.0.0",
|
||||||
|
"stylelint": "^13.13.1",
|
||||||
|
"stylelint-config-recommended": "^5.0.0",
|
||||||
|
"stylelint-config-recommended-scss": "^4.2.0",
|
||||||
|
"stylelint-scss": "^3.19.0",
|
||||||
|
"stylelint-webpack-plugin": "^2.1.1",
|
||||||
|
"url-loader": "^4.1.1",
|
||||||
|
"vue-jest": "^3.0.7",
|
||||||
|
"vue-loader": "^15.9.7",
|
||||||
|
"vue-template-compiler": "^2.6.12",
|
||||||
|
"webpack": "^5.37.0",
|
||||||
|
"webpack-cli": "^4.7.0",
|
||||||
|
"webpack-dev-server": "^3.11.2",
|
||||||
|
"webpack-merge": "^5.7.3"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"moduleFileExtensions": [
|
"moduleFileExtensions": [
|
||||||
|
|||||||
@@ -168,7 +168,6 @@ export default {
|
|||||||
|
|
||||||
},
|
},
|
||||||
close() {
|
close() {
|
||||||
this.$emit('close')
|
|
||||||
this.$root.$emit('close')
|
this.$root.$emit('close')
|
||||||
},
|
},
|
||||||
async select() {
|
async select() {
|
||||||
|
|||||||
@@ -25,12 +25,6 @@
|
|||||||
<div v-if="overviewName" class="board-title">
|
<div v-if="overviewName" class="board-title">
|
||||||
<div class="board-bullet icon-calendar-dark" />
|
<div class="board-bullet icon-calendar-dark" />
|
||||||
<h2>{{ overviewName }}</h2>
|
<h2>{{ overviewName }}</h2>
|
||||||
<Actions>
|
|
||||||
<ActionButton icon="icon-add" @click="clickShowAddCardModel">
|
|
||||||
{{ t('deck', 'Add card') }}
|
|
||||||
</ActionButton>
|
|
||||||
</Actions>
|
|
||||||
<CardCreateDialog v-if="showAddCardModal" @close="clickHideAddCardModel" />
|
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="board" class="board-title">
|
<div v-else-if="board" class="board-title">
|
||||||
<div :style="{backgroundColor: '#' + board.color}" class="board-bullet" />
|
<div :style="{backgroundColor: '#' + board.color}" class="board-bullet" />
|
||||||
@@ -212,12 +206,11 @@
|
|||||||
import { mapState, mapGetters } from 'vuex'
|
import { mapState, mapGetters } from 'vuex'
|
||||||
import { Actions, ActionButton, Popover, Avatar } from '@nextcloud/vue'
|
import { Actions, ActionButton, Popover, Avatar } from '@nextcloud/vue'
|
||||||
import labelStyle from '../mixins/labelStyle'
|
import labelStyle from '../mixins/labelStyle'
|
||||||
import CardCreateDialog from '../CardCreateDialog'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Controls',
|
name: 'Controls',
|
||||||
components: {
|
components: {
|
||||||
Actions, ActionButton, Popover, Avatar, CardCreateDialog,
|
Actions, ActionButton, Popover, Avatar,
|
||||||
},
|
},
|
||||||
mixins: [labelStyle],
|
mixins: [labelStyle],
|
||||||
props: {
|
props: {
|
||||||
@@ -240,7 +233,6 @@ export default {
|
|||||||
showArchived: false,
|
showArchived: false,
|
||||||
isAddStackVisible: false,
|
isAddStackVisible: false,
|
||||||
filter: { tags: [], users: [], due: '', unassigned: false },
|
filter: { tags: [], users: [], due: '', unassigned: false },
|
||||||
showAddCardModal: false,
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -326,12 +318,6 @@ export default {
|
|||||||
this.$store.dispatch('setFilter', { ...filterReset })
|
this.$store.dispatch('setFilter', { ...filterReset })
|
||||||
this.filter = filterReset
|
this.filter = filterReset
|
||||||
},
|
},
|
||||||
clickShowAddCardModel() {
|
|
||||||
this.showAddCardModal = true
|
|
||||||
},
|
|
||||||
clickHideAddCardModel() {
|
|
||||||
this.showAddCardModal = false
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<EmptyContent v-else-if="isEmpty" key="empty" icon="icon-deck">
|
<EmptyContent v-else-if="isEmpty" key="empty" icon="icon-deck">
|
||||||
{{ t('deck', 'No lists available') }}
|
{{ t('deck', 'No lists available') }}
|
||||||
<template v-if="canManage" #desc>
|
<template #desc>
|
||||||
{{ t('deck', 'Create a new list to add cards to this board') }}
|
{{ t('deck', 'Create a new list to add cards to this board') }}
|
||||||
<form @submit.prevent="addNewStack()">
|
<form @submit.prevent="addNewStack()">
|
||||||
<input id="new-stack-input-main"
|
<input id="new-stack-input-main"
|
||||||
@@ -110,7 +110,6 @@ export default {
|
|||||||
}),
|
}),
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
'canEdit',
|
'canEdit',
|
||||||
'canManage',
|
|
||||||
]),
|
]),
|
||||||
stacksByBoard() {
|
stacksByBoard() {
|
||||||
return this.$store.getters.stacksByBoard(this.board.id)
|
return this.$store.getters.stacksByBoard(this.board.id)
|
||||||
|
|||||||
@@ -264,14 +264,12 @@ export default {
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
@use 'sass:math';
|
|
||||||
|
|
||||||
@import './../../css/variables';
|
@import './../../css/variables';
|
||||||
|
|
||||||
.stack {
|
.stack {
|
||||||
width: $stack-width + $stack-spacing*3;
|
width: $stack-width + $stack-spacing*3;
|
||||||
margin-left: math.div($stack-spacing, 2);
|
margin-left: $stack-spacing/2;
|
||||||
margin-right: math.div($stack-spacing, 2);
|
margin-right: $stack-spacing/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stack__header {
|
.stack__header {
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ export default {
|
|||||||
},
|
},
|
||||||
showViewer(attachment) {
|
showViewer(attachment) {
|
||||||
if (attachment.extendedData.fileid && window.OCA.Viewer.availableHandlers.map(handler => handler.mimes).flat().includes(attachment.extendedData.mimetype)) {
|
if (attachment.extendedData.fileid && window.OCA.Viewer.availableHandlers.map(handler => handler.mimes).flat().includes(attachment.extendedData.mimetype)) {
|
||||||
window.OCA.Viewer.open({ path: attachment.extendedData.path })
|
window.OCA.Viewer.open(attachment.extendedData.path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,39 +21,32 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<DashboardWidget :items="cards"
|
||||||
<DashboardWidget :items="cards"
|
empty-content-icon="icon-deck"
|
||||||
empty-content-icon="icon-deck"
|
:empty-content-message="t('deck', 'No upcoming cards')"
|
||||||
:empty-content-message="t('deck', 'No upcoming cards')"
|
:show-more-text="t('deck', 'upcoming cards')"
|
||||||
:show-more-text="t('deck', 'upcoming cards')"
|
:show-more-url="showMoreUrl"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
@hide="() => {}"
|
@hide="() => {}"
|
||||||
@markDone="() => {}">
|
@markDone="() => {}">
|
||||||
<template #default="{ item }">
|
<template #default="{ item }">
|
||||||
<a :key="item.id"
|
<a :key="item.id"
|
||||||
:href="cardLink(item)"
|
:href="cardLink(item)"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
class="card">
|
class="card">
|
||||||
<div class="card--header">
|
<div class="card--header">
|
||||||
<DueDate class="right" :card="item" />
|
<DueDate class="right" :card="item" />
|
||||||
<span class="title">{{ item.title }}</span>
|
<span class="title">{{ item.title }}</span>
|
||||||
</div>
|
</div>
|
||||||
<ul v-if="item.labels && item.labels.length"
|
<ul v-if="item.labels && item.labels.length"
|
||||||
class="labels">
|
class="labels">
|
||||||
<li v-for="label in item.labels" :key="label.id" :style="labelStyle(label)">
|
<li v-for="label in item.labels" :key="label.id" :style="labelStyle(label)">
|
||||||
<span>{{ label.title }}</span>
|
<span>{{ label.title }}</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</a>
|
</a>
|
||||||
</template>
|
</template>
|
||||||
</DashboardWidget>
|
</DashboardWidget>
|
||||||
<div class="center-button">
|
|
||||||
<button @click="toggleAddCardModel">
|
|
||||||
{{ t('deck', 'Add card') }}
|
|
||||||
</button>
|
|
||||||
<CardCreateDialog v-if="showAddCardModal" @close="toggleAddCardModel" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -62,20 +55,17 @@ import { mapGetters } from 'vuex'
|
|||||||
import labelStyle from './../mixins/labelStyle'
|
import labelStyle from './../mixins/labelStyle'
|
||||||
import DueDate from '../components/cards/badges/DueDate'
|
import DueDate from '../components/cards/badges/DueDate'
|
||||||
import { generateUrl } from '@nextcloud/router'
|
import { generateUrl } from '@nextcloud/router'
|
||||||
import CardCreateDialog from '../CardCreateDialog'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Dashboard',
|
name: 'Dashboard',
|
||||||
components: {
|
components: {
|
||||||
DueDate,
|
DueDate,
|
||||||
DashboardWidget,
|
DashboardWidget,
|
||||||
CardCreateDialog,
|
|
||||||
},
|
},
|
||||||
mixins: [labelStyle],
|
mixins: [labelStyle],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
loading: false,
|
||||||
showAddCardModal: false,
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -91,7 +81,7 @@ export default {
|
|||||||
list.sort((a, b) => {
|
list.sort((a, b) => {
|
||||||
return (new Date(a.duedate)).getTime() - (new Date(b.duedate)).getTime()
|
return (new Date(a.duedate)).getTime() - (new Date(b.duedate)).getTime()
|
||||||
})
|
})
|
||||||
return list.slice(0, 6)
|
return list
|
||||||
},
|
},
|
||||||
cardLink() {
|
cardLink() {
|
||||||
return (card) => {
|
return (card) => {
|
||||||
@@ -108,21 +98,12 @@ export default {
|
|||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
methods: {
|
|
||||||
toggleAddCardModel() {
|
|
||||||
this.showAddCardModal = !this.showAddCardModal
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import './../css/labels';
|
@import './../css/labels';
|
||||||
|
|
||||||
.center-button {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
#deck-widget-empty-content {
|
#deck-widget-empty-content {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 5vh;
|
margin-top: 5vh;
|
||||||
|
|||||||
@@ -1,3 +1,32 @@
|
|||||||
const stylelintConfig = require('@nextcloud/stylelint-config')
|
module.exports = {
|
||||||
|
extends: 'stylelint-config-recommended-scss',
|
||||||
module.exports = stylelintConfig
|
rules: {
|
||||||
|
indentation: 'tab',
|
||||||
|
'selector-type-no-unknown': null,
|
||||||
|
'number-leading-zero': null,
|
||||||
|
'rule-empty-line-before': [
|
||||||
|
'always',
|
||||||
|
{
|
||||||
|
ignore: ['after-comment', 'inside-block']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'declaration-empty-line-before': [
|
||||||
|
'never',
|
||||||
|
{
|
||||||
|
ignore: ['after-declaration']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'comment-empty-line-before': null,
|
||||||
|
'selector-type-case': null,
|
||||||
|
'selector-list-comma-newline-after': null,
|
||||||
|
'no-descending-specificity': null,
|
||||||
|
'string-quotes': 'single',
|
||||||
|
'selector-pseudo-element-no-unknown': [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
ignorePseudoElements: ['v-deep']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
plugins: ['stylelint-scss']
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,18 +1,29 @@
|
|||||||
{
|
{
|
||||||
"require-dev": {
|
"name": "nextcloud/deck-integration",
|
||||||
"phpunit/phpunit": "~6.5",
|
"description": "Integration tests for the deck app",
|
||||||
"behat/behat": "~3.8.0",
|
"require-dev": {
|
||||||
"guzzlehttp/guzzle": "6.5.2",
|
"phpunit/phpunit": "^9",
|
||||||
"jarnaiz/behat-junit-formatter": "^1.3",
|
"behat/behat": "^3",
|
||||||
"sabre/dav": "3.2.3",
|
"guzzlehttp/guzzle": "^7",
|
||||||
"symfony/event-dispatcher": "~4.4"
|
"jarnaiz/behat-junit-formatter": "^1.3",
|
||||||
},
|
"sabre/dav": "^4",
|
||||||
"autoload": {
|
"symfony/event-dispatcher": "~4.4",
|
||||||
"psr-0": {
|
"juliushaertl/nextcloud-behat": "*"
|
||||||
"": [
|
},
|
||||||
"features/bootstrap/",
|
"minimum-stability": "dev",
|
||||||
"../../../../build/integration/features/bootstrap/"
|
"prefer-stable": true,
|
||||||
]
|
"repositories": [
|
||||||
}
|
{
|
||||||
}
|
"type": "path",
|
||||||
|
"url": "/home/jus/repos/nextcloud/nextcloud-behat"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"": [
|
||||||
|
"features/bootstrap/",
|
||||||
|
"../../../../build/integration/features/bootstrap/"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
default:
|
default:
|
||||||
|
autoload:
|
||||||
|
'': '%paths.base%/../features/bootstrap'
|
||||||
suites:
|
suites:
|
||||||
test:
|
test:
|
||||||
paths:
|
paths:
|
||||||
- '%paths.base%/../features/'
|
- '%paths.base%/../features/'
|
||||||
contexts:
|
contexts:
|
||||||
- ServerContext:
|
- \JuliusHaertl\NextcloudBehat\Context\ServerContext:
|
||||||
baseUrl: http://localhost:8080/
|
servers:
|
||||||
- RequestContext
|
default: http://localhost:8080
|
||||||
|
- \JuliusHaertl\NextcloudBehat\Context\SharingContext
|
||||||
|
- \JuliusHaertl\NextcloudBehat\Context\FilesContext
|
||||||
- BoardContext
|
- BoardContext
|
||||||
- CommentContext
|
- CommentContext
|
||||||
- SearchContext
|
- SearchContext
|
||||||
|
- PendingContext
|
||||||
|
|||||||
@@ -8,83 +8,83 @@ Feature: acl
|
|||||||
And user "user2" exists
|
And user "user2" exists
|
||||||
Given group "group0" exists
|
Given group "group0" exists
|
||||||
And group "group1" exists
|
And group "group1" exists
|
||||||
Given user "user1" belongs to group "group1"
|
Given user "user1" is member of group "group1"
|
||||||
|
|
||||||
Scenario: Fetch the board list
|
Scenario: Fetch the board list
|
||||||
Given Logging in using web as "user0"
|
Given Using web as user "user0"
|
||||||
When fetching the board list
|
When fetching the board list
|
||||||
Then the response should have a status code "200"
|
Then the HTTP status code should be "200"
|
||||||
And the response Content-Type should be "application/json; charset=utf-8"
|
And the response Content-Type should be "application/json; charset=utf-8"
|
||||||
|
|
||||||
Scenario: Fetch board details of owned board
|
Scenario: Fetch board details of owned board
|
||||||
Given Logging in using web as "admin"
|
Given Using web as user "admin"
|
||||||
And creates a board named "MyPrivateAdminBoard" with color "fafafa"
|
And creates a board named "MyPrivateAdminBoard" with color "fafafa"
|
||||||
When fetches the board named "MyPrivateAdminBoard"
|
When fetches the board named "MyPrivateAdminBoard"
|
||||||
Then the response should have a status code "200"
|
Then the HTTP status code should be "200"
|
||||||
And the response Content-Type should be "application/json; charset=utf-8"
|
And the response Content-Type should be "application/json; charset=utf-8"
|
||||||
|
|
||||||
Scenario: Fetch board details of an other users board
|
Scenario: Fetch board details of an other users board
|
||||||
Given Logging in using web as "admin"
|
Given Using web as user "admin"
|
||||||
And creates a board named "MyPrivateAdminBoard" with color "ff0000"
|
And creates a board named "MyPrivateAdminBoard" with color "ff0000"
|
||||||
Given Logging in using web as "user0"
|
Given Using web as user "user0"
|
||||||
When fetches the board named "MyPrivateAdminBoard"
|
When fetches the board named "MyPrivateAdminBoard"
|
||||||
Then the response should have a status code "403"
|
Then the HTTP status code should be "403"
|
||||||
And the response Content-Type should be "application/json; charset=utf-8"
|
And the response Content-Type should be "application/json; charset=utf-8"
|
||||||
|
|
||||||
Scenario: Share a board
|
Scenario: Share a board
|
||||||
Given Logging in using web as "user0"
|
Given Using web as user "user0"
|
||||||
And creates a board named "Shared board" with color "ff0000"
|
And creates a board named "Shared board" with color "ff0000"
|
||||||
And shares the board with user "user1"
|
And shares the board with user "user1"
|
||||||
| permissionEdit | 0 |
|
| permissionEdit | 0 |
|
||||||
| permissionShare | 0 |
|
| permissionShare | 0 |
|
||||||
| permissionManage | 0 |
|
| permissionManage | 0 |
|
||||||
And the response should have a status code 200
|
And the HTTP status code should be 200
|
||||||
And shares the board with user "user2"
|
And shares the board with user "user2"
|
||||||
| permissionEdit | 1 |
|
| permissionEdit | 1 |
|
||||||
| permissionShare | 1 |
|
| permissionShare | 1 |
|
||||||
| permissionManage | 1 |
|
| permissionManage | 1 |
|
||||||
And the response should have a status code 200
|
And the HTTP status code should be 200
|
||||||
|
|
||||||
Given Logging in using web as "user2"
|
Given Using web as user "user2"
|
||||||
When fetches the board named "Shared board"
|
When fetches the board named "Shared board"
|
||||||
Then the current user should have "read" permissions on the board
|
Then the current user should have "read" permissions on the board
|
||||||
And the current user should have "edit" permissions on the board
|
And the current user should have "edit" permissions on the board
|
||||||
And the current user should have "share" permissions on the board
|
And the current user should have "share" permissions on the board
|
||||||
And the current user should have "manage" permissions on the board
|
And the current user should have "manage" permissions on the board
|
||||||
And create a stack named "Stack"
|
And create a stack named "Stack"
|
||||||
And the response should have a status code 200
|
And the HTTP status code should be 200
|
||||||
And create a card named "Test"
|
And create a card named "Test"
|
||||||
And the response should have a status code 200
|
And the HTTP status code should be 200
|
||||||
|
|
||||||
|
|
||||||
Given Logging in using web as "user1"
|
Given Using web as user "user1"
|
||||||
When fetches the board named "Shared board"
|
When fetches the board named "Shared board"
|
||||||
And create a card named "Test"
|
And create a card named "Test"
|
||||||
And the response should have a status code 403
|
And the HTTP status code should be 403
|
||||||
Then the current user should have "read" permissions on the board
|
Then the current user should have "read" permissions on the board
|
||||||
And the current user should not have "edit" permissions on the board
|
And the current user should not have "edit" permissions on the board
|
||||||
And the current user should not have "share" permissions on the board
|
And the current user should not have "share" permissions on the board
|
||||||
And the current user should not have "manage" permissions on the board
|
And the current user should not have "manage" permissions on the board
|
||||||
And create a stack named "Stack"
|
And create a stack named "Stack"
|
||||||
And the response should have a status code 403
|
And the HTTP status code should be 403
|
||||||
|
|
||||||
|
|
||||||
Scenario: Reshare a board
|
Scenario: Reshare a board
|
||||||
Given Logging in using web as "user0"
|
Given Using web as user "user0"
|
||||||
And creates a board named "Reshared board" with color "ff0000"
|
And creates a board named "Reshared board" with color "ff0000"
|
||||||
And shares the board with user "user1"
|
And shares the board with user "user1"
|
||||||
| permissionEdit | 0 |
|
| permissionEdit | 0 |
|
||||||
| permissionShare | 1 |
|
| permissionShare | 1 |
|
||||||
| permissionManage | 0 |
|
| permissionManage | 0 |
|
||||||
And the response should have a status code 200
|
And the HTTP status code should be 200
|
||||||
Given Logging in using web as "user1"
|
Given Using web as user "user1"
|
||||||
When fetches the board named "Shared board"
|
When fetches the board named "Shared board"
|
||||||
And shares the board with user "user2"
|
And shares the board with user "user2"
|
||||||
| permissionEdit | 1 |
|
| permissionEdit | 1 |
|
||||||
| permissionShare | 1 |
|
| permissionShare | 1 |
|
||||||
| permissionManage | 1 |
|
| permissionManage | 1 |
|
||||||
And the response should have a status code 200
|
And the HTTP status code should be 200
|
||||||
Given Logging in using web as "user2"
|
Given Using web as user "user2"
|
||||||
When fetches the board named "Shared board"
|
When fetches the board named "Shared board"
|
||||||
Then the current user should have "read" permissions on the board
|
Then the current user should have "read" permissions on the board
|
||||||
And the current user should not have "edit" permissions on the board
|
And the current user should not have "edit" permissions on the board
|
||||||
|
|||||||
@@ -3,12 +3,13 @@
|
|||||||
use Behat\Behat\Context\Context;
|
use Behat\Behat\Context\Context;
|
||||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||||
use Behat\Gherkin\Node\TableNode;
|
use Behat\Gherkin\Node\TableNode;
|
||||||
|
use JuliusHaertl\NextcloudBehat\Context\ServerContext;
|
||||||
|
use JuliusHaertl\NextcloudBehat\Context\SharingContext;
|
||||||
use PHPUnit\Framework\Assert;
|
use PHPUnit\Framework\Assert;
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||||
|
|
||||||
class BoardContext implements Context {
|
class BoardContext implements Context {
|
||||||
use RequestTrait;
|
|
||||||
|
|
||||||
/** @var array Last board response */
|
/** @var array Last board response */
|
||||||
private $board = null;
|
private $board = null;
|
||||||
@@ -19,12 +20,16 @@ class BoardContext implements Context {
|
|||||||
|
|
||||||
/** @var ServerContext */
|
/** @var ServerContext */
|
||||||
private $serverContext;
|
private $serverContext;
|
||||||
|
/** @var SharingContext */
|
||||||
|
private $sharingContext;
|
||||||
|
|
||||||
/** @BeforeScenario */
|
/** @BeforeScenario */
|
||||||
public function gatherContexts(BeforeScenarioScope $scope) {
|
public function gatherContexts(BeforeScenarioScope $scope) {
|
||||||
$environment = $scope->getEnvironment();
|
$environment = $scope->getEnvironment();
|
||||||
|
|
||||||
$this->serverContext = $environment->getContext('ServerContext');
|
$this->serverContext = $environment->getContext(ServerContext::class);
|
||||||
|
$this->sharingContext = $environment->getContext(SharingContext::class);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLastUsedCard() {
|
public function getLastUsedCard() {
|
||||||
@@ -35,21 +40,21 @@ class BoardContext implements Context {
|
|||||||
* @Given /^creates a board named "([^"]*)" with color "([^"]*)"$/
|
* @Given /^creates a board named "([^"]*)" with color "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function createsABoardNamedWithColor($title, $color) {
|
public function createsABoardNamedWithColor($title, $color) {
|
||||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/boards', [
|
$this->serverContext->sendJSONrequest('POST', '/index.php/apps/deck/boards', [
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'color' => $color
|
'color' => $color
|
||||||
]);
|
]);
|
||||||
$this->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$this->board = json_decode((string)$this->getResponse()->getBody(), true);
|
$this->board = json_decode((string)$this->serverContext->getResponse()->getBody(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @When /^fetches the board named "([^"]*)"$/
|
* @When /^fetches the board named "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function fetchesTheBoardNamed($boardName) {
|
public function fetchesTheBoardNamed($boardName) {
|
||||||
$this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/boards/' . $this->board['id'], []);
|
$this->serverContext->sendJSONrequest('GET', '/index.php/apps/deck/boards/' . $this->board['id'], []);
|
||||||
$this->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$this->board = json_decode((string)$this->getResponse()->getBody(), true);
|
$this->board = json_decode((string)$this->serverContext->getResponse()->getBody(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,7 +68,7 @@ class BoardContext implements Context {
|
|||||||
];
|
];
|
||||||
$tableRows = isset($permissions) ? $permissions->getRowsHash() : [];
|
$tableRows = isset($permissions) ? $permissions->getRowsHash() : [];
|
||||||
$result = array_merge($defaults, $tableRows);
|
$result = array_merge($defaults, $tableRows);
|
||||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/boards/' . $this->board['id'] . '/acl', [
|
$this->serverContext->sendJSONrequest('POST', '/index.php/apps/deck/boards/' . $this->board['id'] . '/acl', [
|
||||||
'type' => 0,
|
'type' => 0,
|
||||||
'participant' => $user,
|
'participant' => $user,
|
||||||
'permissionEdit' => $result['permissionEdit'] === '1',
|
'permissionEdit' => $result['permissionEdit'] === '1',
|
||||||
@@ -83,7 +88,7 @@ class BoardContext implements Context {
|
|||||||
];
|
];
|
||||||
$tableRows = isset($permissions) ? $permissions->getRowsHash() : [];
|
$tableRows = isset($permissions) ? $permissions->getRowsHash() : [];
|
||||||
$result = array_merge($defaults, $tableRows);
|
$result = array_merge($defaults, $tableRows);
|
||||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/boards/' . $this->board['id'] . '/acl', [
|
$this->serverContext->sendJSONrequest('POST', '/index.php/apps/deck/boards/' . $this->board['id'] . '/acl', [
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
'participant' => $group,
|
'participant' => $group,
|
||||||
'permissionEdit' => $result['permissionEdit'] === '1',
|
'permissionEdit' => $result['permissionEdit'] === '1',
|
||||||
@@ -97,38 +102,38 @@ class BoardContext implements Context {
|
|||||||
* @When /^fetching the board list$/
|
* @When /^fetching the board list$/
|
||||||
*/
|
*/
|
||||||
public function fetchingTheBoardList() {
|
public function fetchingTheBoardList() {
|
||||||
$this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/boards');
|
$this->serverContext->sendJSONrequest('GET', '/index.php/apps/deck/boards');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @When /^fetching the board with id "([^"]*)"$/
|
* @When /^fetching the board with id "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function fetchingTheBoardWithId($id) {
|
public function fetchingTheBoardWithId($id) {
|
||||||
$this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/boards/' . $id);
|
$this->serverContext->sendJSONrequest('GET', '/index.php/apps/deck/boards/' . $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^create a stack named "([^"]*)"$/
|
* @Given /^create a stack named "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function createAStackNamed($name) {
|
public function createAStackNamed($name) {
|
||||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/stacks', [
|
$this->serverContext->sendJSONrequest('POST', '/index.php/apps/deck/stacks', [
|
||||||
'title' => $name,
|
'title' => $name,
|
||||||
'boardId' => $this->board['id']
|
'boardId' => $this->board['id']
|
||||||
]);
|
]);
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$this->stack = json_decode((string)$this->getResponse()->getBody(), true);
|
$this->stack = json_decode((string)$this->serverContext->getResponse()->getBody(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^create a card named "([^"]*)"$/
|
* @Given /^create a card named "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function createACardNamed($name) {
|
public function createACardNamed($name) {
|
||||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/cards', [
|
$this->serverContext->sendJSONrequest('POST', '/index.php/apps/deck/cards', [
|
||||||
'title' => $name,
|
'title' => $name,
|
||||||
'stackId' => $this->stack['id']
|
'stackId' => $this->stack['id']
|
||||||
]);
|
]);
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
|
$this->card = json_decode((string)$this->serverContext->getResponse()->getBody(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -164,31 +169,31 @@ class BoardContext implements Context {
|
|||||||
['shareType', 12],
|
['shareType', 12],
|
||||||
['shareWith', (string)$this->card['id']],
|
['shareWith', (string)$this->card['id']],
|
||||||
]);
|
]);
|
||||||
$this->serverContext->creatingShare($table);
|
$this->sharingContext->createAShareWith($table);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^set the description to "([^"]*)"$/
|
* @Given /^set the description to "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function setTheDescriptionTo($description) {
|
public function setTheDescriptionTo($description) {
|
||||||
$this->requestContext->sendJSONrequest('PUT', '/index.php/apps/deck/cards/' . $this->card['id'], array_merge(
|
$this->serverContext->sendJSONrequest('PUT', '/index.php/apps/deck/cards/' . $this->card['id'], array_merge(
|
||||||
$this->card,
|
$this->card,
|
||||||
['description' => $description]
|
['description' => $description]
|
||||||
));
|
));
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
|
$this->card = json_decode((string)$this->serverContext->getResponse()->getBody(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^set the card attribute "([^"]*)" to "([^"]*)"$/
|
* @Given /^set the card attribute "([^"]*)" to "([^"]*)"$/
|
||||||
*/
|
*/
|
||||||
public function setCardAttribute($attribute, $value) {
|
public function setCardAttribute($attribute, $value) {
|
||||||
$this->requestContext->sendJSONrequest('PUT', '/index.php/apps/deck/cards/' . $this->card['id'], array_merge(
|
$this->serverContext->sendJSONrequest('PUT', '/index.php/apps/deck/cards/' . $this->card['id'], array_merge(
|
||||||
$this->card,
|
$this->card,
|
||||||
[$attribute => $value]
|
[$attribute => $value]
|
||||||
));
|
));
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$this->card = json_decode((string)$this->getResponse()->getBody(), true);
|
$this->card = json_decode((string)$this->serverContext->getResponse()->getBody(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -214,11 +219,11 @@ class BoardContext implements Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function assignToCard($participant, $type) {
|
private function assignToCard($participant, $type) {
|
||||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/cards/' . $this->card['id'] .'/assign', [
|
$this->serverContext->sendJSONrequest('POST', '/index.php/apps/deck/cards/' . $this->card['id'] .'/assign', [
|
||||||
'userId' => $participant,
|
'userId' => $participant,
|
||||||
'type' => $type
|
'type' => $type
|
||||||
]);
|
]);
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -229,7 +234,7 @@ class BoardContext implements Context {
|
|||||||
return $label['title'] === $tag;
|
return $label['title'] === $tag;
|
||||||
});
|
});
|
||||||
$label = array_shift($filteredLabels);
|
$label = array_shift($filteredLabels);
|
||||||
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/cards/' . $this->card['id'] .'/label/' . $label['id']);
|
$this->serverContext->sendJSONrequest('POST', '/index.php/apps/deck/cards/' . $this->card['id'] .'/label/' . $label['id']);
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,14 @@
|
|||||||
|
|
||||||
use Behat\Behat\Context\Context;
|
use Behat\Behat\Context\Context;
|
||||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||||
|
use JuliusHaertl\NextcloudBehat\Context\ServerContext;
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||||
|
|
||||||
class CommentContext implements Context {
|
class CommentContext implements Context {
|
||||||
use RequestTrait;
|
|
||||||
|
|
||||||
|
/** @var ServerContext */
|
||||||
|
protected $serverContext;
|
||||||
/** @var BoardContext */
|
/** @var BoardContext */
|
||||||
protected $boardContext;
|
protected $boardContext;
|
||||||
|
|
||||||
@@ -15,6 +17,7 @@ class CommentContext implements Context {
|
|||||||
public function gatherContexts(BeforeScenarioScope $scope) {
|
public function gatherContexts(BeforeScenarioScope $scope) {
|
||||||
$environment = $scope->getEnvironment();
|
$environment = $scope->getEnvironment();
|
||||||
|
|
||||||
|
$this->serverContext = $environment->getContext(ServerContext::class);
|
||||||
$this->boardContext = $environment->getContext('BoardContext');
|
$this->boardContext = $environment->getContext('BoardContext');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,7 +26,7 @@ class CommentContext implements Context {
|
|||||||
*/
|
*/
|
||||||
public function postACommentWithContentOnTheCard($content) {
|
public function postACommentWithContentOnTheCard($content) {
|
||||||
$card = $this->boardContext->getLastUsedCard();
|
$card = $this->boardContext->getLastUsedCard();
|
||||||
$this->requestContext->sendOCSRequest('POST', '/apps/deck/api/v1.0/cards/' . $card['id'] . '/comments', [
|
$this->serverContext->sendOCSRequest('POST', '/apps/deck/api/v1.0/cards/' . $card['id'] . '/comments', [
|
||||||
'message' => $content,
|
'message' => $content,
|
||||||
'parentId' => null
|
'parentId' => null
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -21,26 +21,21 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
|
|
||||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||||
|
use Behat\Behat\Context\Context;
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||||
|
|
||||||
|
class PendingContext implements Context {
|
||||||
|
|
||||||
trait RequestTrait {
|
/** @var \JuliusHaertl\NextcloudBehat\Context\ServerContext */
|
||||||
|
private $serverContext;
|
||||||
/** @var RequestContext */
|
|
||||||
protected $requestContext;
|
|
||||||
|
|
||||||
/** @BeforeScenario */
|
/** @BeforeScenario */
|
||||||
public function gatherRequestTraitContext(BeforeScenarioScope $scope) {
|
public function gatherContexts(BeforeScenarioScope $scope) {
|
||||||
$environment = $scope->getEnvironment();
|
$environment = $scope->getEnvironment();
|
||||||
$this->requestContext = $environment->getContext('RequestContext');
|
|
||||||
|
$this->serverContext = $environment->getContext(\JuliusHaertl\NextcloudBehat\Context\ServerContext::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getResponse() {
|
|
||||||
return $this->requestContext->getResponse();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
|
||||||
use Behat\Gherkin\Node\TableNode;
|
|
||||||
use GuzzleHttp\Client;
|
|
||||||
use GuzzleHttp\Exception\ClientException;
|
|
||||||
use PHPUnit\Framework\Assert;
|
|
||||||
use Behat\Behat\Context\Context;
|
|
||||||
use Psr\Http\Message\ResponseInterface;
|
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
|
||||||
|
|
||||||
class RequestContext implements Context {
|
|
||||||
private $response;
|
|
||||||
|
|
||||||
/** @var ServerContext */
|
|
||||||
private $serverContext;
|
|
||||||
|
|
||||||
/** @BeforeScenario */
|
|
||||||
public function gatherContexts(BeforeScenarioScope $scope) {
|
|
||||||
$environment = $scope->getEnvironment();
|
|
||||||
|
|
||||||
$this->serverContext = $environment->getContext('ServerContext');
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getBaseUrl() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Then the response should have a status code :code
|
|
||||||
* @param string $code
|
|
||||||
* @throws InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function theResponseShouldHaveStatusCode($code) {
|
|
||||||
$currentCode = $this->response->getStatusCode();
|
|
||||||
if ($currentCode !== (int)$code) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
sprintf(
|
|
||||||
'Expected %s as code got %s',
|
|
||||||
$code,
|
|
||||||
$currentCode
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Then /^the response Content-Type should be "([^"]*)"$/
|
|
||||||
* @param string $contentType
|
|
||||||
*/
|
|
||||||
public function theResponseContentTypeShouldbe($contentType) {
|
|
||||||
Assert::assertEquals($contentType, $this->response->getHeader('Content-Type')[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Then the response should be a JSON array with the following mandatory values
|
|
||||||
* @param TableNode $table
|
|
||||||
* @throws InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function theResponseShouldBeAJsonArrayWithTheFollowingMandatoryValues(TableNode $table) {
|
|
||||||
$this->response->getBody()->seek(0);
|
|
||||||
$expectedValues = $table->getColumnsHash();
|
|
||||||
$realResponseArray = json_decode($this->response->getBody()->getContents(), true);
|
|
||||||
foreach ($expectedValues as $value) {
|
|
||||||
if ((string)$realResponseArray[$value['key']] !== (string)$value['value']) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
sprintf(
|
|
||||||
'Expected %s for key %s got %s',
|
|
||||||
(string)$value['value'],
|
|
||||||
$value['key'],
|
|
||||||
(string)$realResponseArray[$value['key']]
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Then the response should be a JSON array with a length of :length
|
|
||||||
* @param int $length
|
|
||||||
* @throws InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function theResponseShouldBeAJsonArrayWithALengthOf($length) {
|
|
||||||
$this->response->getBody()->seek(0);
|
|
||||||
$realResponseArray = json_decode($this->response->getBody()->getContents(), true);
|
|
||||||
if ((int)count($realResponseArray) !== (int)$length) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
sprintf(
|
|
||||||
'Expected %d as length got %d',
|
|
||||||
$length,
|
|
||||||
count($realResponseArray)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sendJSONrequest($method, $url, $data = []) {
|
|
||||||
$client = new Client;
|
|
||||||
try {
|
|
||||||
$this->response = $client->request(
|
|
||||||
$method,
|
|
||||||
rtrim($this->serverContext->getBaseUrl(), '/') . '/' . ltrim($url, '/'),
|
|
||||||
[
|
|
||||||
'cookies' => $this->serverContext->getCookieJar(),
|
|
||||||
'json' => $data,
|
|
||||||
'headers' => [
|
|
||||||
'requesttoken' => $this->serverContext->getReqestToken(),
|
|
||||||
]
|
|
||||||
]
|
|
||||||
);
|
|
||||||
} catch (ClientException $e) {
|
|
||||||
$this->response = $e->getResponse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sendOCSRequest($method, $url, $data = []) {
|
|
||||||
$client = new Client;
|
|
||||||
try {
|
|
||||||
$this->response = $client->request(
|
|
||||||
$method,
|
|
||||||
rtrim($this->serverContext->getBaseUrl(), '/') . '/ocs/v2.php/' . ltrim($url, '/'),
|
|
||||||
[
|
|
||||||
'cookies' => $this->serverContext->getCookieJar(),
|
|
||||||
'json' => $data,
|
|
||||||
'headers' => [
|
|
||||||
'requesttoken' => $this->serverContext->getReqestToken(),
|
|
||||||
'OCS-APIREQUEST' => 'true',
|
|
||||||
'Accept' => 'application/json'
|
|
||||||
]
|
|
||||||
]
|
|
||||||
);
|
|
||||||
} catch (ClientException $e) {
|
|
||||||
$this->response = $e->getResponse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getResponse(): ResponseInterface {
|
|
||||||
return $this->response;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,12 +3,14 @@
|
|||||||
use Behat\Behat\Context\Context;
|
use Behat\Behat\Context\Context;
|
||||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||||
use PHPUnit\Framework\Assert;
|
use PHPUnit\Framework\Assert;
|
||||||
|
use JuliusHaertl\NextcloudBehat\Context\ServerContext;
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
require_once __DIR__ . '/../../vendor/autoload.php';
|
||||||
|
|
||||||
class SearchContext implements Context {
|
class SearchContext implements Context {
|
||||||
use RequestTrait;
|
|
||||||
|
|
||||||
|
/** @var ServerContext */
|
||||||
|
protected $serverContext;
|
||||||
/** @var BoardContext */
|
/** @var BoardContext */
|
||||||
protected $boardContext;
|
protected $boardContext;
|
||||||
|
|
||||||
@@ -19,6 +21,7 @@ class SearchContext implements Context {
|
|||||||
public function gatherContexts(BeforeScenarioScope $scope) {
|
public function gatherContexts(BeforeScenarioScope $scope) {
|
||||||
$environment = $scope->getEnvironment();
|
$environment = $scope->getEnvironment();
|
||||||
|
|
||||||
|
$this->serverContext = $environment->getContext(ServerContext::class);
|
||||||
$this->boardContext = $environment->getContext('BoardContext');
|
$this->boardContext = $environment->getContext('BoardContext');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,10 +30,10 @@ class SearchContext implements Context {
|
|||||||
* @param string $term
|
* @param string $term
|
||||||
*/
|
*/
|
||||||
public function searchingFor(string $term) {
|
public function searchingFor(string $term) {
|
||||||
$this->requestContext->sendOCSRequest('GET', '/apps/deck/api/v1.0/search?term=' . urlencode($term), []);
|
$this->serverContext->sendOCSRequest('GET', '/apps/deck/api/v1.0/search?term=' . urlencode($term), []);
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$data = (string)$this->getResponse()->getBody();
|
$data = (string)$this->serverContext->getResponse()->getBody();
|
||||||
$this->searchResults = json_decode($data, true);
|
$this->searchResults = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -39,9 +42,9 @@ class SearchContext implements Context {
|
|||||||
* https://cloud.nextcloud.com/ocs/v2.php/search/providers/talk-conversations/search?term=an&from=%2Fapps%2Fdashboard%2F
|
* https://cloud.nextcloud.com/ocs/v2.php/search/providers/talk-conversations/search?term=an&from=%2Fapps%2Fdashboard%2F
|
||||||
*/
|
*/
|
||||||
public function searchingForComments(string $term) {
|
public function searchingForComments(string $term) {
|
||||||
$this->requestContext->sendOCSRequest('GET', '/search/providers/deck-comment/search?term=' . urlencode($term), []);
|
$this->serverContext->sendOCSRequest('GET', '/search/providers/deck-comment/search?term=' . urlencode($term), []);
|
||||||
$this->requestContext->getResponse()->getBody()->seek(0);
|
$this->serverContext->getResponse()->getBody()->seek(0);
|
||||||
$data = (string)$this->getResponse()->getBody();
|
$data = (string)$this->serverContext->getResponse()->getBody();
|
||||||
$this->unifiedSearchResult = json_decode($data, true);
|
$this->unifiedSearchResult = json_decode($data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Behat\Behat\Context\Context;
|
|
||||||
use GuzzleHttp\Cookie\CookieJar;
|
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/autoload.php';
|
|
||||||
|
|
||||||
class ServerContext implements Context {
|
|
||||||
use WebDav {
|
|
||||||
WebDav::__construct as private __tConstruct;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __construct($baseUrl) {
|
|
||||||
$this->rawBaseUrl = $baseUrl;
|
|
||||||
$this->__tConstruct($baseUrl . '/index.php/ocs/', ['admin', 'admin'], '123456');
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @var string */
|
|
||||||
private $mappedUserId;
|
|
||||||
|
|
||||||
private $lastInsertIds = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @BeforeSuite
|
|
||||||
*/
|
|
||||||
public static function addFilesToSkeleton() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Given /^acting as user "([^"]*)"$/
|
|
||||||
*/
|
|
||||||
public function actingAsUser($user) {
|
|
||||||
$this->cookieJar = new CookieJar();
|
|
||||||
$this->loggingInUsingWebAs($user);
|
|
||||||
$this->asAn($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getBaseUrl(): string {
|
|
||||||
return $this->rawBaseUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCookieJar(): CookieJar {
|
|
||||||
return $this->cookieJar;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getReqestToken(): string {
|
|
||||||
return $this->requestToken;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,10 +5,10 @@ Feature: decks
|
|||||||
Given user "user0" exists
|
Given user "user0" exists
|
||||||
|
|
||||||
Scenario: Create a new board
|
Scenario: Create a new board
|
||||||
Given Logging in using web as "admin"
|
Given Using web as user "admin"
|
||||||
When creates a board named "MyBoard" with color "000000"
|
When creates a board named "MyBoard" with color "000000"
|
||||||
Then the response should have a status code "200"
|
Then the HTTP status code should be "200"
|
||||||
And the response Content-Type should be "application/json; charset=utf-8"
|
And the Content-Type should be "application/json; charset=utf-8"
|
||||||
And the response should be a JSON array with the following mandatory values
|
And the response should be a JSON array with the following mandatory values
|
||||||
|key|value|
|
|key|value|
|
||||||
|title|MyBoard|
|
|title|MyBoard|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ Feature: Searching for cards
|
|||||||
Background:
|
Background:
|
||||||
Given user "admin" exists
|
Given user "admin" exists
|
||||||
Given user "user0" exists
|
Given user "user0" exists
|
||||||
Given Logging in using web as "admin"
|
Given Using web as user "admin"
|
||||||
When creates a board named "MyBoard" with color "000000"
|
When creates a board named "MyBoard" with color "000000"
|
||||||
When create a stack named "ToDo"
|
When create a stack named "ToDo"
|
||||||
And create a card named "Example task 1"
|
And create a card named "Example task 1"
|
||||||
@@ -83,7 +83,7 @@ Feature: Searching for cards
|
|||||||
Then the card "Done task 2" is not found
|
Then the card "Done task 2" is not found
|
||||||
|
|
||||||
Scenario: Search on shared boards
|
Scenario: Search on shared boards
|
||||||
Given Logging in using web as "user0"
|
Given Using web as user "user0"
|
||||||
When searching for "task"
|
When searching for "task"
|
||||||
Then the card "Example task 1" is found
|
Then the card "Example task 1" is found
|
||||||
Then the card "Example task 2" is found
|
Then the card "Example task 2" is found
|
||||||
|
|||||||
@@ -19,12 +19,11 @@ Feature: File sharing
|
|||||||
And shares the board with user "user1"
|
And shares the board with user "user1"
|
||||||
Then the HTTP status code should be "200"
|
Then the HTTP status code should be "200"
|
||||||
|
|
||||||
Given using new dav path
|
|
||||||
When User "user0" uploads file "../data/test.txt" to "/user0-file.txt"
|
When User "user0" uploads file "../data/test.txt" to "/user0-file.txt"
|
||||||
Then the HTTP status code should be "201"
|
Then the HTTP status code should be "201"
|
||||||
Given acting as user "user0"
|
Given acting as user "user0"
|
||||||
When share the file "/user0-file.txt" with the card
|
When share the file "/user0-file.txt" with the card
|
||||||
Then the OCS status code should be "100"
|
Then the OCS status code should be "200"
|
||||||
And the HTTP status code should be "200"
|
And the HTTP status code should be "200"
|
||||||
|
|
||||||
And as "user1" the file "/Deck/user0-file.txt" exists
|
And as "user1" the file "/Deck/user0-file.txt" exists
|
||||||
@@ -40,12 +39,11 @@ Feature: File sharing
|
|||||||
| permissionManage | 1 |
|
| permissionManage | 1 |
|
||||||
Then the HTTP status code should be "200"
|
Then the HTTP status code should be "200"
|
||||||
|
|
||||||
Given using new dav path
|
|
||||||
When User "user1" uploads file "../data/test.txt" to "/user1-file.txt"
|
When User "user1" uploads file "../data/test.txt" to "/user1-file.txt"
|
||||||
Then the HTTP status code should be "201"
|
Then the HTTP status code should be "201"
|
||||||
Given acting as user "user1"
|
Given acting as user "user1"
|
||||||
And share the file "/user1-file.txt" with the card
|
And share the file "/user1-file.txt" with the card
|
||||||
Then the OCS status code should be "100"
|
Then the OCS status code should be "200"
|
||||||
And the HTTP status code should be "200"
|
And the HTTP status code should be "200"
|
||||||
|
|
||||||
And as "user0" the file "/Deck/user1-file.txt" exists
|
And as "user0" the file "/Deck/user1-file.txt" exists
|
||||||
@@ -59,13 +57,11 @@ Feature: File sharing
|
|||||||
And shares the board with user "user1"
|
And shares the board with user "user1"
|
||||||
Then the HTTP status code should be "200"
|
Then the HTTP status code should be "200"
|
||||||
|
|
||||||
Given using new dav path
|
Given acting as user "user1"
|
||||||
When User "user1" uploads file "../data/test.txt" to "/user1-file.txt"
|
When User "user1" uploads file "../data/test.txt" to "/user1-file.txt"
|
||||||
Then the HTTP status code should be "201"
|
Then the HTTP status code should be "201"
|
||||||
Given acting as user "user1"
|
When share the file "/user1-file.txt" with the card
|
||||||
And share the file "/user1-file.txt" with the card
|
|
||||||
Then the OCS status code should be "404"
|
Then the OCS status code should be "404"
|
||||||
And the HTTP status code should be "200"
|
|
||||||
And as "user0" the file "/Deck/user1-file.txt" does not exist
|
And as "user0" the file "/Deck/user1-file.txt" does not exist
|
||||||
|
|
||||||
Scenario: Share a file with a card by another user through a group
|
Scenario: Share a file with a card by another user through a group
|
||||||
@@ -76,12 +72,11 @@ Feature: File sharing
|
|||||||
And shares the board with group "group1"
|
And shares the board with group "group1"
|
||||||
Then the HTTP status code should be "200"
|
Then the HTTP status code should be "200"
|
||||||
|
|
||||||
Given using new dav path
|
|
||||||
When User "user0" uploads file "../data/test.txt" to "/user0-file2.txt"
|
When User "user0" uploads file "../data/test.txt" to "/user0-file2.txt"
|
||||||
Then the HTTP status code should be "201"
|
Then the HTTP status code should be "201"
|
||||||
Given acting as user "user0"
|
Given acting as user "user0"
|
||||||
When share the file "/user0-file2.txt" with the card
|
When share the file "/user0-file2.txt" with the card
|
||||||
Then the OCS status code should be "100"
|
Then the OCS status code should be "200"
|
||||||
And the HTTP status code should be "200"
|
And the HTTP status code should be "200"
|
||||||
|
|
||||||
And as "user2" the file "/Deck/user0-file2.txt" exists
|
And as "user2" the file "/Deck/user0-file2.txt" exists
|
||||||
@@ -95,12 +90,11 @@ Feature: File sharing
|
|||||||
And shares the board with group "group1"
|
And shares the board with group "group1"
|
||||||
Then the HTTP status code should be "200"
|
Then the HTTP status code should be "200"
|
||||||
|
|
||||||
Given using new dav path
|
|
||||||
When User "user0" uploads file "../data/test.txt" to "/user0-file2.txt"
|
When User "user0" uploads file "../data/test.txt" to "/user0-file2.txt"
|
||||||
Then the HTTP status code should be "201"
|
Then the HTTP status code should be "201"
|
||||||
Given acting as user "user0"
|
Given acting as user "user0"
|
||||||
When share the file "/user0-file2.txt" with the card
|
When share the file "/user0-file2.txt" with the card
|
||||||
Then the OCS status code should be "100"
|
Then the OCS status code should be "200"
|
||||||
And the HTTP status code should be "200"
|
And the HTTP status code should be "200"
|
||||||
|
|
||||||
And as "user2" the file "/Deck/user0-file2.txt" exists
|
And as "user2" the file "/Deck/user0-file2.txt" exists
|
||||||
@@ -119,12 +113,11 @@ Feature: File sharing
|
|||||||
And shares the board with group "group1"
|
And shares the board with group "group1"
|
||||||
Then the HTTP status code should be "200"
|
Then the HTTP status code should be "200"
|
||||||
|
|
||||||
Given using new dav path
|
|
||||||
When User "user0" uploads file "../data/test.txt" to "/user0-file2.txt"
|
When User "user0" uploads file "../data/test.txt" to "/user0-file2.txt"
|
||||||
Then the HTTP status code should be "201"
|
Then the HTTP status code should be "201"
|
||||||
Given acting as user "user0"
|
Given acting as user "user0"
|
||||||
When share the file "/user0-file2.txt" with the card
|
When share the file "/user0-file2.txt" with the card
|
||||||
Then the OCS status code should be "100"
|
Then the OCS status code should be "200"
|
||||||
And the HTTP status code should be "200"
|
And the HTTP status code should be "200"
|
||||||
|
|
||||||
And as "user2" the file "/Deck/user0-file2.txt" exists
|
And as "user2" the file "/Deck/user0-file2.txt" exists
|
||||||
|
|||||||
@@ -5,11 +5,6 @@ OCC=${OC_PATH}occ
|
|||||||
SCENARIO_TO_RUN=$1
|
SCENARIO_TO_RUN=$1
|
||||||
HIDE_OC_LOGS=$2
|
HIDE_OC_LOGS=$2
|
||||||
|
|
||||||
# Nextcloud integration tests composer
|
|
||||||
(
|
|
||||||
cd ${OC_PATH}build/integration
|
|
||||||
composer install
|
|
||||||
)
|
|
||||||
INSTALLED=$($OCC status | grep installed: | cut -d " " -f 5)
|
INSTALLED=$($OCC status | grep installed: | cut -d " " -f 5)
|
||||||
|
|
||||||
if [ "$INSTALLED" == "true" ]; then
|
if [ "$INSTALLED" == "true" ]; then
|
||||||
@@ -24,11 +19,11 @@ composer dump-autoload
|
|||||||
|
|
||||||
# avoid port collision on jenkins - use $EXECUTOR_NUMBER
|
# avoid port collision on jenkins - use $EXECUTOR_NUMBER
|
||||||
if [ -z "$EXECUTOR_NUMBER" ]; then
|
if [ -z "$EXECUTOR_NUMBER" ]; then
|
||||||
EXECUTOR_NUMBER=0
|
EXECUTOR_NUMBER=1
|
||||||
fi
|
fi
|
||||||
PORT=$((8080 + $EXECUTOR_NUMBER))
|
PORT=$((8080 + $EXECUTOR_NUMBER))
|
||||||
echo $PORT
|
echo $PORT
|
||||||
php -S localhost:$PORT -t $OC_PATH &
|
PHP_CLI_SERVER_WORKERS=10 php -S localhost:$PORT -t $OC_PATH &
|
||||||
PHPPID=$!
|
PHPPID=$!
|
||||||
echo $PHPPID
|
echo $PHPPID
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<files psalm-version="4.7.3@38c452ae584467e939d55377aaf83b5a26f19dd1">
|
<files psalm-version="4.7.0@d4377c0baf3ffbf0b1ec6998e8d1be2a40971005">
|
||||||
<file src="lib/Activity/ActivityManager.php">
|
<file src="lib/Activity/ActivityManager.php">
|
||||||
<TypeDoesNotContainType occurrences="1">
|
<TypeDoesNotContainType occurrences="1">
|
||||||
<code>$message !== null</code>
|
<code>$message !== null</code>
|
||||||
@@ -197,6 +197,9 @@
|
|||||||
</TooManyArguments>
|
</TooManyArguments>
|
||||||
</file>
|
</file>
|
||||||
<file src="lib/Service/CardService.php">
|
<file src="lib/Service/CardService.php">
|
||||||
|
<TooFewArguments occurrences="1">
|
||||||
|
<code>findAssignedCards</code>
|
||||||
|
</TooFewArguments>
|
||||||
<UndefinedDocblockClass occurrences="1">
|
<UndefinedDocblockClass occurrences="1">
|
||||||
<code>\OCP\AppFramework\Db\</code>
|
<code>\OCP\AppFramework\Db\</code>
|
||||||
</UndefinedDocblockClass>
|
</UndefinedDocblockClass>
|
||||||
@@ -274,9 +277,6 @@
|
|||||||
<InvalidReturnType occurrences="1">
|
<InvalidReturnType occurrences="1">
|
||||||
<code>getSharesInFolder</code>
|
<code>getSharesInFolder</code>
|
||||||
</InvalidReturnType>
|
</InvalidReturnType>
|
||||||
<InvalidThrow occurrences="1">
|
|
||||||
<code>throw new GenericShareException('Already shared', $this->l->t('Path is already shared with this card'), 403);</code>
|
|
||||||
</InvalidThrow>
|
|
||||||
<MissingDependency occurrences="8">
|
<MissingDependency occurrences="8">
|
||||||
<code>GenericShareException</code>
|
<code>GenericShareException</code>
|
||||||
<code>GenericShareException</code>
|
<code>GenericShareException</code>
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ class CardServiceTest extends TestCase {
|
|||||||
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function ($c) {
|
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function ($c) {
|
||||||
return $c;
|
return $c;
|
||||||
});
|
});
|
||||||
$actual = $this->cardService->update(123, 'newtitle', 234, 'text', 'admin', 'foo', 999, '2017-01-01 00:00:00', null);
|
$actual = $this->cardService->update(123, 'newtitle', 234, 'text', 999, 'foo', 'admin', '2017-01-01 00:00:00', null);
|
||||||
$this->assertEquals('newtitle', $actual->getTitle());
|
$this->assertEquals('newtitle', $actual->getTitle());
|
||||||
$this->assertEquals(234, $actual->getStackId());
|
$this->assertEquals(234, $actual->getStackId());
|
||||||
$this->assertEquals('text', $actual->getType());
|
$this->assertEquals('text', $actual->getType());
|
||||||
@@ -212,7 +212,7 @@ class CardServiceTest extends TestCase {
|
|||||||
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
|
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
|
||||||
$this->cardMapper->expects($this->never())->method('update');
|
$this->cardMapper->expects($this->never())->method('update');
|
||||||
$this->expectException(StatusException::class);
|
$this->expectException(StatusException::class);
|
||||||
$this->cardService->update(123, 'newtitle', 234, 'text', 'admin', 'foo', 999, '2017-01-01 00:00:00', null, true);
|
$this->cardService->update(123, 'newtitle', 234, 'text', 999, 'foo', 'admin', '2017-01-01 00:00:00', null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRename() {
|
public function testRename() {
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ class PermissionServiceTest extends \Test\TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testUserIsBoardOwnerNull() {
|
public function testUserIsBoardOwnerNull() {
|
||||||
$this->boardMapper->expects($this->once())->method('find')->willThrowException(new DoesNotExistException('board does not exist'));
|
$this->boardMapper->expects($this->once())->method('find')->willReturn(null);
|
||||||
$this->assertEquals(false, $this->service->userIsBoardOwner(123));
|
$this->assertEquals(false, $this->service->userIsBoardOwner(123));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,9 +225,12 @@ class PermissionServiceTest extends \Test\TestCase {
|
|||||||
$board = new Board();
|
$board = new Board();
|
||||||
$board->setId($boardId);
|
$board->setId($boardId);
|
||||||
$board->setOwner($owner);
|
$board->setOwner($owner);
|
||||||
$board->setAcl($this->getAcls($boardId));
|
|
||||||
$this->boardMapper->expects($this->any())->method('find')->willReturn($board);
|
$this->boardMapper->expects($this->any())->method('find')->willReturn($board);
|
||||||
|
|
||||||
|
// acl check
|
||||||
|
$acls = $this->getAcls($boardId);
|
||||||
|
$this->aclMapper->expects($this->any())->method('findAll')->willReturn($acls);
|
||||||
|
|
||||||
$this->shareManager->expects($this->any())
|
$this->shareManager->expects($this->any())
|
||||||
->method('sharingDisabledForUser')
|
->method('sharingDisabledForUser')
|
||||||
->willReturn(false);
|
->willReturn(false);
|
||||||
@@ -247,12 +250,14 @@ class PermissionServiceTest extends \Test\TestCase {
|
|||||||
$board = new Board();
|
$board = new Board();
|
||||||
$board->setId($boardId);
|
$board->setId($boardId);
|
||||||
$board->setOwner($owner);
|
$board->setOwner($owner);
|
||||||
$board->setAcl($this->getAcls($boardId));
|
|
||||||
if ($boardId === null) {
|
if ($boardId === null) {
|
||||||
$this->boardMapper->expects($this->any())->method('find')->willThrowException(new DoesNotExistException('not found'));
|
$this->boardMapper->expects($this->any())->method('find')->willThrowException(new DoesNotExistException('not found'));
|
||||||
} else {
|
} else {
|
||||||
$this->boardMapper->expects($this->any())->method('find')->willReturn($board);
|
$this->boardMapper->expects($this->any())->method('find')->willReturn($board);
|
||||||
}
|
}
|
||||||
|
$acls = $this->getAcls($boardId);
|
||||||
|
$this->aclMapper->expects($this->any())->method('findAll')->willReturn($acls);
|
||||||
|
|
||||||
|
|
||||||
if ($result) {
|
if ($result) {
|
||||||
$actual = $this->service->checkPermission($mapper, 1234, $permission);
|
$actual = $this->service->checkPermission($mapper, 1234, $permission);
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class CardControllerTest extends TestCase {
|
|||||||
public function testUpdate() {
|
public function testUpdate() {
|
||||||
$this->cardService->expects($this->once())
|
$this->cardService->expects($this->once())
|
||||||
->method('update')
|
->method('update')
|
||||||
->with(1, 'title', 3, 'text', $this->userId, 'foo', 5, '2017-01-01 00:00:00')
|
->with(1, 'title', 3, 'text', 5, 'foo', $this->userId, '2017-01-01 00:00:00')
|
||||||
->willReturn(1);
|
->willReturn(1);
|
||||||
$this->assertEquals(1, $this->controller->update(1, 'title', 3, 'text', 5, 'foo', '2017-01-01 00:00:00', null));
|
$this->assertEquals(1, $this->controller->update(1, 'title', 3, 'text', 5, 'foo', '2017-01-01 00:00:00', null));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user