Compare commits

..

1 Commits

Author SHA1 Message Date
Gary Kim
2ae8fee6b3 In Progress Board Import
Signed-off-by: Gary Kim <gary@garykim.dev>
2020-01-07 12:21:59 +08:00
39 changed files with 2712 additions and 2224 deletions

View File

@@ -1,31 +0,0 @@
build/
.git
js/node_modules
js/tests
js/legacy
js/controller
js/directive
js/filters
js/service
js/bower.json
js/.bowerrc
js/.jshintrc
js/Gruntfile.js
js/package.json
js/package-lock.json
docs/
tests
.codecov.yml
composer.json
composer.lock
_config.yml
.drone.yml
.travis.yml
.eslintignore
.eslintrc.yml
.gitignore
issue_template.md
krankerl.toml
Makefile
mkdocs.yml
run-eslint.sh

View File

@@ -1,28 +1,6 @@
# Changelog
All notable changes to this project will be documented in this file.
## 0.8.1 - 2020-04-08
## Added
- Nextcloud 19 compatibility
## Fixed
- Let new shares only use the current users permissions
- Check for board membership on comments entity event
## 0.8.0 - 2020-01-16
## Added
- Case insensitive search (@matchish)
## Fixed
- Fix reversed permissions for reordering stacks (@JLueke)
- Fix reversed visibility of 'add stack' field (@JLueke)
- Fix occ export command
- Fix error causing cron execution to fail
- Fix activity entry on moving cards
- Proper wording in activity timeline (@a11exandru)
## 0.7.0 - 2019-08-20
## Added

View File

@@ -84,7 +84,7 @@ test-unit:
ifeq (, $(shell which phpunit 2> /dev/null))
@echo "No phpunit command available, downloading a copy from the web"
mkdir -p $(build_tools_directory)
curl -sSL https://phar.phpunit.de/phpunit-8.2.phar -o $(build_tools_directory)/phpunit.phar
curl -sSL https://phar.phpunit.de/phpunit-5.7.phar -o $(build_tools_directory)/phpunit.phar
php $(build_tools_directory)/phpunit.phar -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
php $(build_tools_directory)/phpunit.phar -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
else

View File

@@ -17,7 +17,7 @@
- 🚀 Get your project organized
</description>
<version>0.8.1</version>
<version>0.7.0</version>
<licence>agpl</licence>
<author>Julius Härtl</author>
<namespace>Deck</namespace>
@@ -36,7 +36,7 @@
<database min-version="9.4">pgsql</database>
<database>sqlite</database>
<database min-version="5.5">mysql</database>
<nextcloud min-version="17" max-version="19" />
<nextcloud min-version="17" max-version="18" />
</dependencies>
<background-jobs>
<job>OCA\Deck\Cron\DeleteCron</job>

View File

@@ -651,33 +651,6 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
##### 200 Success
```json
{
"id": 3,
"participant": {
"primaryKey": "admin",
"uid": "admin",
"displayname": "admin"
},
"cardId": 1
}
```
##### 400 Bad request
```json
{
"status": 400,
"message": "The user is already assigned to the card"
}
```
The request can fail with a bad request response for the following reasons:
- Missing or wrongly formatted request parameters
- The user is already assigned to the card
- The user is not part of the board
### PUT /boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser - Assign a user to a card
#### Request parameters

View File

@@ -4,20 +4,20 @@
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*
*/
import app from '../app/App.js';
@@ -31,9 +31,7 @@ app.filter('cardSearchFilter', function() {
angular.forEach(cards, function(card){
var _card = card;
Object.keys(rules).some(function(rule) {
var pattern = rules[rule];
// eslint-disable-next-line detect-non-literal-regexp
if(_card[rule].search(new RegExp(pattern, 'i'))>=0) {
if(_card[rule].search(rules[rule])>=0) {
_result[_card.id] = _card;
}
});

3599
js/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@
"test": "tests"
},
"dependencies": {
"@uirouter/angularjs": "^1.0.25",
"@uirouter/angularjs": "^1.0.24",
"angular": "^1.7.9",
"angular-animate": "^1.7.9",
"angular-file-upload": "^2.5.0",
@@ -23,24 +23,24 @@
"ng-sortable": "^1.3.8",
"ui-select": "^0.19.8",
"vue": "^2.6.11",
"vuex": "^3.1.3"
"vuex": "^3.1.2"
},
"devDependencies": {
"@babel/core": "^7.9.0",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/polyfill": "^7.8.7",
"@babel/preset-env": "^7.9.0",
"babel-loader": "^8.1.0",
"css-loader": "^3.4.2",
"@babel/core": "^7.7.7",
"@babel/plugin-syntax-dynamic-import": "^7.7.4",
"@babel/polyfill": "^7.7.0",
"@babel/preset-env": "^7.7.7",
"babel-loader": "^8.0.6",
"css-loader": "^3.4.1",
"karma": "^4.4.1",
"mini-css-extract-plugin": "^0.9.0",
"style-loader": "^1.1.3",
"url-loader": "^4.0.0",
"vue-loader": "^15.9.1",
"style-loader": "^1.1.2",
"url-loader": "^3.0.0",
"vue-loader": "^15.8.3",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.11",
"webpack": "^4.42.1",
"webpack-cli": "^3.3.11",
"webpack": "^4.41.5",
"webpack-cli": "^3.3.10",
"webpack-merge": "^4.2.2"
},
"scripts": {

View File

@@ -1,4 +1,38 @@
[package]
exclude = [
"build/",
".git",
"js/node_modules",
"js/tests",
"js/legacy",
"js/controller",
"js/directive",
"js/filters",
"js/service",
"js/bower.json",
"js/.bowerrc",
"js/.jshintrc",
"js/Gruntfile.js",
"js/package.json",
"js/package-lock.json",
"docs/",
"tests",
".codecov.yml",
"composer.json",
"composer.lock",
"_config.yml",
".drone.yml",
".travis.yml",
".eslintignore",
".eslintrc.yml",
".gitignore",
"issue_template.md",
"krankerl.toml",
"Makefile",
"mkdocs.yml",
"run-eslint.sh"
]
before_cmds = [
'make clean-build',
'make build'

View File

@@ -4,13 +4,13 @@ OC.L10N.register(
"Please provide a content for your comment." : "Zadejte obsah svého komentáře.",
"Posting the comment failed." : "Odeslání komentáře se nezdařilo.",
"The comment has been deleted" : "Komentář byl smazán",
"The associated stack is deleted as well, it will be restored as well." : "Související sloupec je také smazaný a bude také obnoven.",
"Restore associated stack" : "Obnovit související sloupec",
"The associated stack is deleted as well, it will be restored as well." : "Související stack je také smazaný a bude také obnoven.",
"Restore associated stack" : "Obnovit související stack",
"Remove user from card" : "Odebrat uživatele z karty",
"Hours" : "Hodiny",
"Minutes" : "Minuty",
"Link to a board" : "Propojit s tabulí",
"Maximum file size of {size} exceeded" : "Překročena nejvyšší umožněná velikost souboru {size}",
"Maximum file size of {size} exceeded" : "U souboru {size} překročena nejvyšší umožněná velikost",
"File already exists" : "Soubor už existuje",
"You have created a new board {board}" : "Vytvořili jste tabuli {board}",
"{user} has created a new board {board}" : "{user} vytvořil(a) novou tabuli {board}",
@@ -28,55 +28,55 @@ OC.L10N.register(
"{user} has archived the board {before}" : "{user} zaarchivoval(a) tabuli {before}",
"You have unarchived the board {board}" : "Vrátili jste zpět z archivace tabuli {board}",
"{user} has unarchived the board {before}" : "{user} vrátil(a) tabuli {before} zpět z archivace",
"You have created a new stack {stack} on board {board}" : "Vytvořili jste nový sloupec {stack} na tabuli {board}",
"{user} has created a new stack {stack} on board {board}" : "{user} vytvořil(a) nový sloupec {stack} na tabuli {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Přejmenovali jste sloupec {before} na {stack} na tabuli {board}",
"{user} has renamed stack {before} to {stack} on board {board}" : "{user} přejmenoval(a) sloupec {before} na {stack} na tabuli {board}",
"You have deleted stack {stack} on board {board}" : "Smazali jste sloupec {stack} na tabuli {board}",
"{user} has deleted stack {stack} on board {board}" : "{user} smazal(a) sloupec {stack} na tabuli {board}",
"You have created card {card} in stack {stack} on board {board}" : "Vytvořili jste kartu {card} ve sloupci {stack} na tabuli {board}",
"You have created a new stack {stack} on board {board}" : "Vytvořili jste novou hromádku {stack} na tabuli {board}",
"{user} has created a new stack {stack} on board {board}" : "{user} vytvořil(a) nový balíček {stack} na tabuli {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Přejmenovali jste hromádku {before} na {stack} na desce {board}",
"{user} has renamed stack {before} to {stack} on board {board}" : "{user} přejmenoval(a) hromádku {before} na {stack} na desce {board}",
"You have deleted stack {stack} on board {board}" : "Smazali jste balíček {stack} na desce {board}",
"{user} has deleted stack {stack} on board {board}" : "{user} smazal(a) balíček {stack} na desce {board}",
"You have created card {card} in stack {stack} on board {board}" : "Vytvořili jste kartu {card} v balíčku {stack} na kartě {board}",
"{user} has created card {card} in stack {stack} on board {board}" : "{user} vytvořil(a) kartu {card} ve sloupci {stack} na tabuli {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Smazali jste kartu {card} ve sloupci {stack} na tabuli {board}",
"{user} has deleted card {card} in stack {stack} on board {board}" : "{user} smazal(a) kartu {card} ve sloupci {board} na tabuli {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Smazali jste kartu {card} na hromádce {stack} na desce {board}",
"{user} has deleted card {card} in stack {stack} on board {board}" : "{user} smazal(a) kartu {card} v balíčku {board} na desce {board}",
"You have renamed the card {before} to {card}" : "Přejmenovali jste kartu {before} na {card}",
"{user} has renamed the card {before} to {card}" : "{user} přejmenoval(a) {before} na {card}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Přidali jste popis ke kartě {card} ve sloupci {stack} na tabuli {board}",
"{user} has added a description to card {card} in stack {stack} on board {board}" : "{user} přidal(a) popis ke kartě {card} ve sloupci {stack} na tabuli {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Aktualizovali jste popis karty {card} ve sloupci {stack} na tabuli {board}",
"{user} has updated the description of the card {card} in stack {stack} on board {board}" : "{user} aktualizoval(a) popis karty {card} ve sloupci {stack} na tabuli {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zaarchivovali kartu {card} ve sloupci {stack} na tabuli {board}",
"{user} has archived card {card} in stack {stack} on board {board}" : "{user} zaarchivoval(a) kartu {card} ve sloupci {stack} na tabuli {board}",
"You have unarchived card {card} in stack {stack} on board {board}" : "Zrušili jste archivaci karty {card} ve sloupci {stack} na tabuli {board}",
"{user} has unarchived card {card} in stack {stack} on board {board}" : "{user} zrušil(a) archivaci karty {card} ve sloupci {stack} na tabuli {board}",
"You have removed the due date of card {card}" : "Odebrali jste termín u karty {card}",
"{user} has removed the due date of card {card}" : "{user} odebral(a) termín u karty {card}",
"You have set the due date of card {card} to {after}" : "Nastavili jste termín u karty {card} na {after}",
"{user} has set the due date of card {card} to {after}" : "{user} nastavil(a) termín u karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Změnili jste termín u karty {card} na {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} aktualizoval(a) termín u karty {card} na {after}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Přidali jste štítek {label} kartě {card} ve sloupci {stack} na tabuli {board}",
"{user} has added the tag {label} to card {card} in stack {stack} on board {board}" : "{user} přidal(a) štítek {label} ke kartě {card} ve sloupci {stack} na tabuli {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Odebrali jste štítek {label} z karty {card} ve sloupci {stack} na tabuli {board}",
"{user} has removed the tag {label} from card {card} in stack {stack} on board {board}" : "{user} odebral(a) štítek {label} z karty {card} ve sloupci {stack} na tabuli {board}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Přidali jste popis ke kartě {card} v hromádce {stack} na tabuli {board}",
"{user} has added a description to card {card} in stack {stack} on board {board}" : "{user} přidal(a) popis ke kartě {card} v hromádce {stack} na tabuli {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Aktualizovali jste popis karty {card} v hromádce {stack} na desce {board}",
"{user} has updated the description of the card {card} in stack {stack} on board {board}" : "{user} aktualizoval(a) popis karty {card} na hromádce {stack} na nástěnce {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zaarchivovali kartu {card} v balíčku {stack} na tabuli {board}",
"{user} has archived card {card} in stack {stack} on board {board}" : "{user} zaarchivoval(a) kartu {card} v balíčku {stack} na desce {board}",
"You have unarchived card {card} in stack {stack} on board {board}" : "Zrušili jste archivaci karty {card} na hromádce {stack} na desce {board}",
"{user} has unarchived card {card} in stack {stack} on board {board}" : "{user} zrušil(a) archivaci karty {card} na hromádce {stack} na tabuli {board}",
"You have removed the due date of card {card}" : "Odebrali jste termín karty {card}",
"{user} has removed the due date of card {card}" : "{user} odebral(a) termín karty {card}",
"You have set the due date of card {card} to {after}" : "Nastavili jste termín na kartě {card} na {after}",
"{user} has set the due date of card {card} to {after}" : "{user} nastavil(a) termín karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Změnili jste termín na kartě {card} na {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} aktualizoval termín karty {card} na {after}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Přidali jste štítek {label} kartě {card} v hromádce {stack} na nástěnce {board}",
"{user} has added the tag {label} to card {card} in stack {stack} on board {board}" : "{user} přidal(a) štítek {label} ke kartě {card} v hromádce {stack} na nástěnce {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Odebrali jste štítek {label} z karty {card} v hromádce {stack} na desce {board}",
"{user} has removed the tag {label} from card {card} in stack {stack} on board {board}" : "{user} odebral(a) štítek {label} z karty {card} na hromádce {stack} na tabuli {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Přiřadili jste {assigneduser} ke kartě {card} na tabuli {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} přiřadil(a) {assigneduser} ke kartě {card} na tabuli {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Zrušili jste přiřazení {assigneduser} u karty {card} na tabuli {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} zrušil(a) přiřazení {assigneduser} z karty {card} na tabuli {board}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Přesunuli jste kartu {card} ze sloupce {stackBefore} do {stack}",
"{user} has moved the card {card} from stack {stackBefore} to {stack}" : "{user} přesunul(a) kartu {card} ze sloupce {stackBefore} do {stack}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} přiřadil(a) {assigneduser} ke kartě {card} na desce {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Zrušili jste přiřazení {assigneduser} u karty {card} na nástěnce {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} zrušil(a) přiřazení {assigneduser} z karty {card} na desce {board}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Přesunuli jste kartu {card} z balíčku {stackBefore} do {stack}",
"{user} has moved the card {card} from stack {stackBefore} to {stack}" : "{user} přesunul(a) kartu {card} z balíčku {stackBefore} do {stack}",
"You have added the attachment {attachment} to card {card}" : "Přidali jste přílohu {attachment} ke kartě {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} přidal(a) přílohu {attachment} ke kartě {card}",
"You have updated the attachment {attachment} on card {card}" : "Aktualizovali jste přílohu {attachment} u karty {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} aktualizoval(a) přílohu {attachment} u karty {card}",
"You have updated the attachment {attachment} on card {card}" : "Aktualizovali jste přílohu {attachment} na kartě {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} aktualizoval(a) přílohu {attachment} na kartě {card}",
"You have deleted the attachment {attachment} from card {card}" : "Smazali jste přílohu {attachment} u karty {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} smazal(a) přílohu {attachment} u karty {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} smazal(a) přílohu {attachment} na kartě {card}",
"You have restored the attachment {attachment} to card {card}" : "Obnovili jste přílohu {attachment} ke kartě {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} obnovil(a) přílohu {attachment} ke kartě {card}",
"You have commented on card {card}" : "Přidali jste komentář na kartě {card}",
"{user} has commented on card {card}" : "{user} přidal(a) komentář na kartě {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>Popis karty</strong> v aplikaci Deck byl změněn",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "Změny v <strong>aplikaci Deck</strong>",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>Popis karty</strong> v Deck-aplikace byl změněn",
"Deck" : "Balík",
"Changes in the <strong>Deck app</strong>" : "Změny v <strong>Deck aplikace</strong>",
"A <strong>comment</strong> was created on a card" : "Na kartě byl vytvořen <strong>komentář</strong>",
"Personal" : "Osobní",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kartu „%s“ na „%s“ vám přiřadil(a) %s.",
@@ -107,10 +107,10 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "PHP rozšíření zastavilo nahrávání souboru.",
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
"A kanban style project and personal management tool for Nextcloud" : "Nástroj pro projektový a osobní řízení ve stylu Kanban.",
"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",
"Select the board to link to a project" : "Vyberte tabuli kterou propojit s projektem",
"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" : "Karty jsou nástroj zací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",
"Select the board to link to a project" : "Vyberte nástěnku kterou propojit s projektem",
"Select board" : "Vybrat tabuli",
"Add a new stack" : "Přidat nový sloupec",
"Add a new stack" : "Přidat nový zásobník",
"Submit" : "Odeslat",
"Show archived cards" : "Zobrazit archivované karty",
"Hide archived cards" : "Skrýt archivované karty",
@@ -131,7 +131,7 @@ OC.L10N.register(
"Add card" : "Přidat kartu",
"Close" : "Zavřít",
"Sharing" : "Sdílení",
"Tags" : "Štítky",
"Tags" : "Značky",
"Deleted items" : "Smazané položky",
"Timeline" : "Časová osa",
"Select users or groups to share with" : "Vyberte uživatele nebo skupiny pro sdílení",
@@ -149,20 +149,20 @@ OC.L10N.register(
"Delete tag" : "Smazat štítek",
"Create" : "Vytvořit",
"Create a new tag" : "Vytvořit nový štítek",
"Deleted stacks" : "Smazané sloupce",
"Deleted stacks" : "Smazané zásobníky",
"Deleted cards" : "Smazané karty",
"Status" : "Stav",
"No archived boards to display" : "Žádné archivované tabule k zobrazení",
"No shared boards to display" : "Žádné sdílené tabule k zobrazení",
"No archived boards to display" : "Žádné archivované nástěnky k zobrazení",
"No shared boards to display" : "Žádné sdílené nástěnky k zobrazení",
"Title" : "Název",
"Members" : "Členové",
"More actions" : "Více akcí",
"Edit board" : "Upravit tabuli",
"Archive board" : "Archivovat tabuli",
"Archive board" : "Archivova tabule",
"Unarchive board" : "Vrátit tabuli zpět z archivu",
"Delete board" : "Smazat tabuli",
"Update board" : "Aktualizovat tabuli",
"Reset board" : "Vrátit tabuli do předchozího stavu",
"Reset board" : "Vrátit tabuli do chozího stavu",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule jinak bude nadobro odstraněna během příštího spuštění naplánovaných úloh.",
"Create new board" : "Vytvořit novou tabuli",
"New board title" : "Název nové tabule",
@@ -176,14 +176,14 @@ OC.L10N.register(
"Delete attachment" : "Smazat přílohu",
"Modified:" : "Změněno:",
"Created:" : "Vytvořeno:",
"Choose a tag" : "Zvolte štítek",
"Choose a tag" : "Vyberte štítek",
"Add a tag" : "Přidat štítek",
"Select tags" : "Výběr štítků",
"Assign users" : "Přiřadit uživatele",
"Choose a user to assign" : "Zvolte uživatele kterého přiřadit",
"Assign this card to a user" : "Přiřadit tuto kartu uživateli",
"Assign this card to a user" : "Přiřadit kartu uživateli",
"Due date" : "Termín",
"Click to set" : "Klikn. vyberte",
"Click to set" : "Klikněte pro výběr",
"Remove due date" : "Odstranit termín",
"Description" : "Popis",
"Attachments" : "Přílohy",
@@ -192,12 +192,12 @@ OC.L10N.register(
"Insert attachment" : "Vložit přílohu",
"Formatting help" : "Nápověda k formátování",
"Upload attachment" : "Nahrát přílohu",
"Add a card description…" : "Přidejte popis karty…",
"Add a card description…" : "Přidat popis karty…",
"Shared boards" : "Sdílené tabule",
"Move board to archive" : "Přesunout tabuli do archivu",
"Create a new board" : "Vytvořit novou tabuli",
"Settings" : "Nastavení",
"Limit deck to groups" : "Omezit Deck na skupiny",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny."
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení Decků brání uživatelům, kteří nejsou součástí těchto skupin, při vytváření vlastních tabulí. Uživatelé mohou stále pracovat na tabulích, které jsou s nimi sdíleny."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");

View File

@@ -2,13 +2,13 @@
"Please provide a content for your comment." : "Zadejte obsah svého komentáře.",
"Posting the comment failed." : "Odeslání komentáře se nezdařilo.",
"The comment has been deleted" : "Komentář byl smazán",
"The associated stack is deleted as well, it will be restored as well." : "Související sloupec je také smazaný a bude také obnoven.",
"Restore associated stack" : "Obnovit související sloupec",
"The associated stack is deleted as well, it will be restored as well." : "Související stack je také smazaný a bude také obnoven.",
"Restore associated stack" : "Obnovit související stack",
"Remove user from card" : "Odebrat uživatele z karty",
"Hours" : "Hodiny",
"Minutes" : "Minuty",
"Link to a board" : "Propojit s tabulí",
"Maximum file size of {size} exceeded" : "Překročena nejvyšší umožněná velikost souboru {size}",
"Maximum file size of {size} exceeded" : "U souboru {size} překročena nejvyšší umožněná velikost",
"File already exists" : "Soubor už existuje",
"You have created a new board {board}" : "Vytvořili jste tabuli {board}",
"{user} has created a new board {board}" : "{user} vytvořil(a) novou tabuli {board}",
@@ -26,55 +26,55 @@
"{user} has archived the board {before}" : "{user} zaarchivoval(a) tabuli {before}",
"You have unarchived the board {board}" : "Vrátili jste zpět z archivace tabuli {board}",
"{user} has unarchived the board {before}" : "{user} vrátil(a) tabuli {before} zpět z archivace",
"You have created a new stack {stack} on board {board}" : "Vytvořili jste nový sloupec {stack} na tabuli {board}",
"{user} has created a new stack {stack} on board {board}" : "{user} vytvořil(a) nový sloupec {stack} na tabuli {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Přejmenovali jste sloupec {before} na {stack} na tabuli {board}",
"{user} has renamed stack {before} to {stack} on board {board}" : "{user} přejmenoval(a) sloupec {before} na {stack} na tabuli {board}",
"You have deleted stack {stack} on board {board}" : "Smazali jste sloupec {stack} na tabuli {board}",
"{user} has deleted stack {stack} on board {board}" : "{user} smazal(a) sloupec {stack} na tabuli {board}",
"You have created card {card} in stack {stack} on board {board}" : "Vytvořili jste kartu {card} ve sloupci {stack} na tabuli {board}",
"You have created a new stack {stack} on board {board}" : "Vytvořili jste novou hromádku {stack} na tabuli {board}",
"{user} has created a new stack {stack} on board {board}" : "{user} vytvořil(a) nový balíček {stack} na tabuli {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Přejmenovali jste hromádku {before} na {stack} na desce {board}",
"{user} has renamed stack {before} to {stack} on board {board}" : "{user} přejmenoval(a) hromádku {before} na {stack} na desce {board}",
"You have deleted stack {stack} on board {board}" : "Smazali jste balíček {stack} na desce {board}",
"{user} has deleted stack {stack} on board {board}" : "{user} smazal(a) balíček {stack} na desce {board}",
"You have created card {card} in stack {stack} on board {board}" : "Vytvořili jste kartu {card} v balíčku {stack} na kartě {board}",
"{user} has created card {card} in stack {stack} on board {board}" : "{user} vytvořil(a) kartu {card} ve sloupci {stack} na tabuli {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Smazali jste kartu {card} ve sloupci {stack} na tabuli {board}",
"{user} has deleted card {card} in stack {stack} on board {board}" : "{user} smazal(a) kartu {card} ve sloupci {board} na tabuli {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Smazali jste kartu {card} na hromádce {stack} na desce {board}",
"{user} has deleted card {card} in stack {stack} on board {board}" : "{user} smazal(a) kartu {card} v balíčku {board} na desce {board}",
"You have renamed the card {before} to {card}" : "Přejmenovali jste kartu {before} na {card}",
"{user} has renamed the card {before} to {card}" : "{user} přejmenoval(a) {before} na {card}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Přidali jste popis ke kartě {card} ve sloupci {stack} na tabuli {board}",
"{user} has added a description to card {card} in stack {stack} on board {board}" : "{user} přidal(a) popis ke kartě {card} ve sloupci {stack} na tabuli {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Aktualizovali jste popis karty {card} ve sloupci {stack} na tabuli {board}",
"{user} has updated the description of the card {card} in stack {stack} on board {board}" : "{user} aktualizoval(a) popis karty {card} ve sloupci {stack} na tabuli {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zaarchivovali kartu {card} ve sloupci {stack} na tabuli {board}",
"{user} has archived card {card} in stack {stack} on board {board}" : "{user} zaarchivoval(a) kartu {card} ve sloupci {stack} na tabuli {board}",
"You have unarchived card {card} in stack {stack} on board {board}" : "Zrušili jste archivaci karty {card} ve sloupci {stack} na tabuli {board}",
"{user} has unarchived card {card} in stack {stack} on board {board}" : "{user} zrušil(a) archivaci karty {card} ve sloupci {stack} na tabuli {board}",
"You have removed the due date of card {card}" : "Odebrali jste termín u karty {card}",
"{user} has removed the due date of card {card}" : "{user} odebral(a) termín u karty {card}",
"You have set the due date of card {card} to {after}" : "Nastavili jste termín u karty {card} na {after}",
"{user} has set the due date of card {card} to {after}" : "{user} nastavil(a) termín u karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Změnili jste termín u karty {card} na {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} aktualizoval(a) termín u karty {card} na {after}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Přidali jste štítek {label} kartě {card} ve sloupci {stack} na tabuli {board}",
"{user} has added the tag {label} to card {card} in stack {stack} on board {board}" : "{user} přidal(a) štítek {label} ke kartě {card} ve sloupci {stack} na tabuli {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Odebrali jste štítek {label} z karty {card} ve sloupci {stack} na tabuli {board}",
"{user} has removed the tag {label} from card {card} in stack {stack} on board {board}" : "{user} odebral(a) štítek {label} z karty {card} ve sloupci {stack} na tabuli {board}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Přidali jste popis ke kartě {card} v hromádce {stack} na tabuli {board}",
"{user} has added a description to card {card} in stack {stack} on board {board}" : "{user} přidal(a) popis ke kartě {card} v hromádce {stack} na tabuli {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Aktualizovali jste popis karty {card} v hromádce {stack} na desce {board}",
"{user} has updated the description of the card {card} in stack {stack} on board {board}" : "{user} aktualizoval(a) popis karty {card} na hromádce {stack} na nástěnce {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zaarchivovali kartu {card} v balíčku {stack} na tabuli {board}",
"{user} has archived card {card} in stack {stack} on board {board}" : "{user} zaarchivoval(a) kartu {card} v balíčku {stack} na desce {board}",
"You have unarchived card {card} in stack {stack} on board {board}" : "Zrušili jste archivaci karty {card} na hromádce {stack} na desce {board}",
"{user} has unarchived card {card} in stack {stack} on board {board}" : "{user} zrušil(a) archivaci karty {card} na hromádce {stack} na tabuli {board}",
"You have removed the due date of card {card}" : "Odebrali jste termín karty {card}",
"{user} has removed the due date of card {card}" : "{user} odebral(a) termín karty {card}",
"You have set the due date of card {card} to {after}" : "Nastavili jste termín na kartě {card} na {after}",
"{user} has set the due date of card {card} to {after}" : "{user} nastavil(a) termín karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Změnili jste termín na kartě {card} na {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} aktualizoval termín karty {card} na {after}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Přidali jste štítek {label} kartě {card} v hromádce {stack} na nástěnce {board}",
"{user} has added the tag {label} to card {card} in stack {stack} on board {board}" : "{user} přidal(a) štítek {label} ke kartě {card} v hromádce {stack} na nástěnce {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Odebrali jste štítek {label} z karty {card} v hromádce {stack} na desce {board}",
"{user} has removed the tag {label} from card {card} in stack {stack} on board {board}" : "{user} odebral(a) štítek {label} z karty {card} na hromádce {stack} na tabuli {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Přiřadili jste {assigneduser} ke kartě {card} na tabuli {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} přiřadil(a) {assigneduser} ke kartě {card} na tabuli {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Zrušili jste přiřazení {assigneduser} u karty {card} na tabuli {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} zrušil(a) přiřazení {assigneduser} z karty {card} na tabuli {board}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Přesunuli jste kartu {card} ze sloupce {stackBefore} do {stack}",
"{user} has moved the card {card} from stack {stackBefore} to {stack}" : "{user} přesunul(a) kartu {card} ze sloupce {stackBefore} do {stack}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} přiřadil(a) {assigneduser} ke kartě {card} na desce {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Zrušili jste přiřazení {assigneduser} u karty {card} na nástěnce {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} zrušil(a) přiřazení {assigneduser} z karty {card} na desce {board}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Přesunuli jste kartu {card} z balíčku {stackBefore} do {stack}",
"{user} has moved the card {card} from stack {stackBefore} to {stack}" : "{user} přesunul(a) kartu {card} z balíčku {stackBefore} do {stack}",
"You have added the attachment {attachment} to card {card}" : "Přidali jste přílohu {attachment} ke kartě {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} přidal(a) přílohu {attachment} ke kartě {card}",
"You have updated the attachment {attachment} on card {card}" : "Aktualizovali jste přílohu {attachment} u karty {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} aktualizoval(a) přílohu {attachment} u karty {card}",
"You have updated the attachment {attachment} on card {card}" : "Aktualizovali jste přílohu {attachment} na kartě {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} aktualizoval(a) přílohu {attachment} na kartě {card}",
"You have deleted the attachment {attachment} from card {card}" : "Smazali jste přílohu {attachment} u karty {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} smazal(a) přílohu {attachment} u karty {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} smazal(a) přílohu {attachment} na kartě {card}",
"You have restored the attachment {attachment} to card {card}" : "Obnovili jste přílohu {attachment} ke kartě {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} obnovil(a) přílohu {attachment} ke kartě {card}",
"You have commented on card {card}" : "Přidali jste komentář na kartě {card}",
"{user} has commented on card {card}" : "{user} přidal(a) komentář na kartě {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>Popis karty</strong> v aplikaci Deck byl změněn",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "Změny v <strong>aplikaci Deck</strong>",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>Popis karty</strong> v Deck-aplikace byl změněn",
"Deck" : "Balík",
"Changes in the <strong>Deck app</strong>" : "Změny v <strong>Deck aplikace</strong>",
"A <strong>comment</strong> was created on a card" : "Na kartě byl vytvořen <strong>komentář</strong>",
"Personal" : "Osobní",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kartu „%s“ na „%s“ vám přiřadil(a) %s.",
@@ -105,10 +105,10 @@
"A PHP extension stopped the file upload" : "PHP rozšíření zastavilo nahrávání souboru.",
"No file uploaded or file size exceeds maximum of %s" : "Nebyl nahrán žádný soubor nebo jeho velikost přesáhla %s",
"A kanban style project and personal management tool for Nextcloud" : "Nástroj pro projektový a osobní řízení ve stylu Kanban.",
"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",
"Select the board to link to a project" : "Vyberte tabuli kterou propojit s projektem",
"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" : "Karty jsou nástroj zací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",
"Select the board to link to a project" : "Vyberte nástěnku kterou propojit s projektem",
"Select board" : "Vybrat tabuli",
"Add a new stack" : "Přidat nový sloupec",
"Add a new stack" : "Přidat nový zásobník",
"Submit" : "Odeslat",
"Show archived cards" : "Zobrazit archivované karty",
"Hide archived cards" : "Skrýt archivované karty",
@@ -129,7 +129,7 @@
"Add card" : "Přidat kartu",
"Close" : "Zavřít",
"Sharing" : "Sdílení",
"Tags" : "Štítky",
"Tags" : "Značky",
"Deleted items" : "Smazané položky",
"Timeline" : "Časová osa",
"Select users or groups to share with" : "Vyberte uživatele nebo skupiny pro sdílení",
@@ -147,20 +147,20 @@
"Delete tag" : "Smazat štítek",
"Create" : "Vytvořit",
"Create a new tag" : "Vytvořit nový štítek",
"Deleted stacks" : "Smazané sloupce",
"Deleted stacks" : "Smazané zásobníky",
"Deleted cards" : "Smazané karty",
"Status" : "Stav",
"No archived boards to display" : "Žádné archivované tabule k zobrazení",
"No shared boards to display" : "Žádné sdílené tabule k zobrazení",
"No archived boards to display" : "Žádné archivované nástěnky k zobrazení",
"No shared boards to display" : "Žádné sdílené nástěnky k zobrazení",
"Title" : "Název",
"Members" : "Členové",
"More actions" : "Více akcí",
"Edit board" : "Upravit tabuli",
"Archive board" : "Archivovat tabuli",
"Archive board" : "Archivova tabule",
"Unarchive board" : "Vrátit tabuli zpět z archivu",
"Delete board" : "Smazat tabuli",
"Update board" : "Aktualizovat tabuli",
"Reset board" : "Vrátit tabuli do předchozího stavu",
"Reset board" : "Vrátit tabuli do chozího stavu",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule jinak bude nadobro odstraněna během příštího spuštění naplánovaných úloh.",
"Create new board" : "Vytvořit novou tabuli",
"New board title" : "Název nové tabule",
@@ -174,14 +174,14 @@
"Delete attachment" : "Smazat přílohu",
"Modified:" : "Změněno:",
"Created:" : "Vytvořeno:",
"Choose a tag" : "Zvolte štítek",
"Choose a tag" : "Vyberte štítek",
"Add a tag" : "Přidat štítek",
"Select tags" : "Výběr štítků",
"Assign users" : "Přiřadit uživatele",
"Choose a user to assign" : "Zvolte uživatele kterého přiřadit",
"Assign this card to a user" : "Přiřadit tuto kartu uživateli",
"Assign this card to a user" : "Přiřadit kartu uživateli",
"Due date" : "Termín",
"Click to set" : "Klikn. vyberte",
"Click to set" : "Klikněte pro výběr",
"Remove due date" : "Odstranit termín",
"Description" : "Popis",
"Attachments" : "Přílohy",
@@ -190,12 +190,12 @@
"Insert attachment" : "Vložit přílohu",
"Formatting help" : "Nápověda k formátování",
"Upload attachment" : "Nahrát přílohu",
"Add a card description…" : "Přidejte popis karty…",
"Add a card description…" : "Přidat popis karty…",
"Shared boards" : "Sdílené tabule",
"Move board to archive" : "Přesunout tabuli do archivu",
"Create a new board" : "Vytvořit novou tabuli",
"Settings" : "Nastavení",
"Limit deck to groups" : "Omezit Deck na skupiny",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny."
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení Decků brání uživatelům, kteří nejsou součástí těchto skupin, při vytváření vlastních tabulí. Uživatelé mohou stále pracovat na tabulích, které jsou s nimi sdíleny."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}

View File

@@ -197,7 +197,6 @@ OC.L10N.register(
"Move board to archive" : "Artxibatu txartela",
"Create a new board" : "Sortu taula berri bat",
"Settings" : "Ezarpenak",
"Limit deck to groups" : "Mugatu deck-a taldeei",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Deck mugatzeak taldeetako kide ez diren erabiltzaileei bere arbel propioak sortzea eragotziko die. Erabiltzaileek beraiekin partekatu diren arbeletan lan egin ahalko dute."
"Limit deck to groups" : "Mugatu deck-a taldeei"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -195,7 +195,6 @@
"Move board to archive" : "Artxibatu txartela",
"Create a new board" : "Sortu taula berri bat",
"Settings" : "Ezarpenak",
"Limit deck to groups" : "Mugatu deck-a taldeei",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Deck mugatzeak taldeetako kide ez diren erabiltzaileei bere arbel propioak sortzea eragotziko die. Erabiltzaileek beraiekin partekatu diren arbeletan lan egin ahalko dute."
"Limit deck to groups" : "Mugatu deck-a taldeei"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -4,40 +4,25 @@ OC.L10N.register(
"Hours" : "ساعت ها",
"Minutes" : "دقایق",
"Personal" : "شخصی",
"Finished" : "تمام شده",
"Done" : "انجام شد",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "حداکثر حجم قابل بار گذاری از طریق HTML MAX_FILE_SIZE است",
"No file was uploaded" : "هیچ پروندهای بارگذاری نشده",
"Missing a temporary folder" : "یک پوشه موقت گم شده",
"Share board" : "صفحه مشترک",
"Actions" : "فعالیت ها",
"Assign card to me" : "کارت را به من اختصاص دهید",
"Unassign card from me" : "جدا کردن کارت از من",
"Archive card" : "کارت بایگانی",
"Delete card" : "حذف کارت",
"Add card" : "کارت اضافه کنید",
"Close" : "بستن",
"Sharing" : "اشتراک گذاری",
"Tags" : "برچسب‌ها",
"Group" : "گروه",
"Circle" : "حلقه",
"Loading" : "در حال بار گزاری",
"Edit" : "ویرایش",
"Share" : "هم‌رسانی",
"Create" : "ایجاد کردن",
"Title" : "عنوان",
"More actions" : "اقدامات بیشتر",
"Edit board" : "ویرایش تخته ها",
"Archive board" : " بایگانی تابلو",
"Delete board" : "حذف تابلو",
"Cancel upload" : "متوقف کردن بار گذاری",
"by" : "با",
"Modified:" : "تغییر یافته توسط:",
"Created:" : "ایجاد شده توسط:",
"Assign users" : "اختصاص کاربران",
"Due date" : "موعد مقرر",
"Description" : "توضیحات",
"Attachments" : "پیوست ها",
"Saved" : "ذخیره شد",
"Settings" : "تنظیمات"
},

View File

@@ -2,40 +2,25 @@
"Hours" : "ساعت ها",
"Minutes" : "دقایق",
"Personal" : "شخصی",
"Finished" : "تمام شده",
"Done" : "انجام شد",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "حداکثر حجم قابل بار گذاری از طریق HTML MAX_FILE_SIZE است",
"No file was uploaded" : "هیچ پروندهای بارگذاری نشده",
"Missing a temporary folder" : "یک پوشه موقت گم شده",
"Share board" : "صفحه مشترک",
"Actions" : "فعالیت ها",
"Assign card to me" : "کارت را به من اختصاص دهید",
"Unassign card from me" : "جدا کردن کارت از من",
"Archive card" : "کارت بایگانی",
"Delete card" : "حذف کارت",
"Add card" : "کارت اضافه کنید",
"Close" : "بستن",
"Sharing" : "اشتراک گذاری",
"Tags" : "برچسب‌ها",
"Group" : "گروه",
"Circle" : "حلقه",
"Loading" : "در حال بار گزاری",
"Edit" : "ویرایش",
"Share" : "هم‌رسانی",
"Create" : "ایجاد کردن",
"Title" : "عنوان",
"More actions" : "اقدامات بیشتر",
"Edit board" : "ویرایش تخته ها",
"Archive board" : " بایگانی تابلو",
"Delete board" : "حذف تابلو",
"Cancel upload" : "متوقف کردن بار گذاری",
"by" : "با",
"Modified:" : "تغییر یافته توسط:",
"Created:" : "ایجاد شده توسط:",
"Assign users" : "اختصاص کاربران",
"Due date" : "موعد مقرر",
"Description" : "توضیحات",
"Attachments" : "پیوست ها",
"Saved" : "ذخیره شد",
"Settings" : "تنظیمات"
},"pluralForm" :"nplurals=2; plural=(n > 1);"

View File

@@ -69,7 +69,6 @@ OC.L10N.register(
"You have updated the attachment {attachment} on card {card}" : "Vous avez mis à jour la pièce jointe {attachment} de la carte {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} a mis à jour la pièce jointe {attachment} de la carte {card}",
"You have deleted the attachment {attachment} from card {card}" : "Vous avez supprimé la pièce jointe {attachment} de la carte {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} a supprimé la pièce jointe {attachment} de la carte {card}",
"You have restored the attachment {attachment} to card {card}" : "Vous avez restauré la pièce jointe {attachment} de la carte {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} a restauré la pièce jointe {attachment} de la carte {card}",
"You have commented on card {card}" : "Vous avez commenté la carte {card}",

View File

@@ -67,7 +67,6 @@
"You have updated the attachment {attachment} on card {card}" : "Vous avez mis à jour la pièce jointe {attachment} de la carte {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} a mis à jour la pièce jointe {attachment} de la carte {card}",
"You have deleted the attachment {attachment} from card {card}" : "Vous avez supprimé la pièce jointe {attachment} de la carte {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} a supprimé la pièce jointe {attachment} de la carte {card}",
"You have restored the attachment {attachment} to card {card}" : "Vous avez restauré la pièce jointe {attachment} de la carte {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} a restauré la pièce jointe {attachment} de la carte {card}",
"You have commented on card {card}" : "Vous avez commenté la carte {card}",

View File

@@ -67,9 +67,7 @@ OC.L10N.register(
"You have added the attachment {attachment} to card {card}" : "Dodali ste privitak {attachment} kartici {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} je dodao privitak {attachment} kartici {card}",
"You have updated the attachment {attachment} on card {card}" : "Ažurirali ste privitak {attachment} na kartici {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} je ažurirao privitak {attachment} na kartici {card}",
"You have deleted the attachment {attachment} from card {card}" : "Izbrisali ste privitak {attachment} s kartice {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} je izbrisao privitak {attachment} s kartice {card}",
"You have restored the attachment {attachment} to card {card}" : "Vratili ste privitak {attachment} na karticu {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} je vratio privitak {attachment} na karticu {card}",
"You have commented on card {card}" : "Komentirali ste karticu {card}",

View File

@@ -65,9 +65,7 @@
"You have added the attachment {attachment} to card {card}" : "Dodali ste privitak {attachment} kartici {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} je dodao privitak {attachment} kartici {card}",
"You have updated the attachment {attachment} on card {card}" : "Ažurirali ste privitak {attachment} na kartici {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} je ažurirao privitak {attachment} na kartici {card}",
"You have deleted the attachment {attachment} from card {card}" : "Izbrisali ste privitak {attachment} s kartice {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} je izbrisao privitak {attachment} s kartice {card}",
"You have restored the attachment {attachment} to card {card}" : "Vratili ste privitak {attachment} na karticu {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} je vratio privitak {attachment} na karticu {card}",
"You have commented on card {card}" : "Komentirali ste karticu {card}",

View File

@@ -67,9 +67,7 @@ OC.L10N.register(
"You have added the attachment {attachment} to card {card}" : "Je voegde bijlage {attachment} toe aan kaart {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} voegde bijlage {attachment} toe aan kaart {card}",
"You have updated the attachment {attachment} on card {card}" : "Je werkte bijlage {attachment} bij op kaart {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} werkte bijlage {attachment} bij op kaart {card}",
"You have deleted the attachment {attachment} from card {card}" : "Je verwijderde bijlage {attachment} van kaart {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} verwijderde bijlage {attachment} van kaart {card}",
"You have restored the attachment {attachment} to card {card}" : "Je herstelde bijlage {attachment} bij kaart {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} herstelde bijlage {attachment} bij kaart {card}",
"You have commented on card {card}" : "Je hebt gereageerd op kaart {card}",

View File

@@ -65,9 +65,7 @@
"You have added the attachment {attachment} to card {card}" : "Je voegde bijlage {attachment} toe aan kaart {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} voegde bijlage {attachment} toe aan kaart {card}",
"You have updated the attachment {attachment} on card {card}" : "Je werkte bijlage {attachment} bij op kaart {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} werkte bijlage {attachment} bij op kaart {card}",
"You have deleted the attachment {attachment} from card {card}" : "Je verwijderde bijlage {attachment} van kaart {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} verwijderde bijlage {attachment} van kaart {card}",
"You have restored the attachment {attachment} to card {card}" : "Je herstelde bijlage {attachment} bij kaart {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} herstelde bijlage {attachment} bij kaart {card}",
"You have commented on card {card}" : "Je hebt gereageerd op kaart {card}",

View File

@@ -28,51 +28,51 @@ OC.L10N.register(
"{user} has archived the board {before}" : "Użytkownik {user} zarchiwizował(-a) tablicę {board}",
"You have unarchived the board {board}" : "Przywróciłeś(-aś) tablicę {board} z archiwum",
"{user} has unarchived the board {before}" : "{user} przywrócił(-a) tablicę {board} z archiwum",
"You have created a new stack {stack} on board {board}" : "Utworzyłeś nowy stos {stack} na tablicy {board}",
"You have created a new stack {stack} on board {board}" : "Utworzyłeś/-aś nowy stos {stack} na tablicy {board}",
"{user} has created a new stack {stack} on board {board}" : "{user} utworzył nowy stos {stack} na tablicy {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Zmieniłeś nazwę stosu {before} dla {stack} na tablicy {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Zmieniłeś/-aś nazwę stosu {before} dla {stack} na tablicy {board}",
"{user} has renamed stack {before} to {stack} on board {board}" : "{user} zmienił nazwę stosu {before} dla {stack} na tablicy {board}",
"You have deleted stack {stack} on board {board}" : "Usunąłeś stos {stack} na tablicy {board}",
"You have deleted stack {stack} on board {board}" : "Usunąłeś/-aś stos {stack} na tablicy {board}",
"{user} has deleted stack {stack} on board {board}" : "{user} usunął stos {stack} na tablicy {board}",
"You have created card {card} in stack {stack} on board {board}" : "Utworzyłeś kartę {card} w stosie {stack} na tablicy {board}",
"You have created card {card} in stack {stack} on board {board}" : "Utworzyłeś/-aś kartę {card} w stosie {stack} na tablicy {board}",
"{user} has created card {card} in stack {stack} on board {board}" : "{user} utworzył kartę {card} w stosie {stack} na tablicy {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Usunąłeś kartę {card} w stosie {stack} na tablicy {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Usunąłeś/-aś kartę {card} w stosie {stack} na tablicy {board}",
"{user} has deleted card {card} in stack {stack} on board {board}" : "{user} usunął kartę {card} w stosie {stack} na tablicy {board}",
"You have renamed the card {before} to {card}" : "Zmieniłeś(-aś) nazwę karty {before} na {card}",
"{user} has renamed the card {before} to {card}" : "Użytkownik {user} zmienił(-a) nazwę karty {before} na {card}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Dodałeś opis karty {card} w stosie {stack} na tablicy {board}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Dodałeś/-aś opis karty {card} w stosie {stack} na tablicy {board}",
"{user} has added a description to card {card} in stack {stack} on board {board}" : "{user} dodał opis karty {card} w stosie {stack} na tablicy {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Zaktualizowałeś opis karty {card} w stosie {stack} na tablicy {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Zaktualizowałeś/-aś opis karty {card} w stosie {stack} na tablicy {board}",
"{user} has updated the description of the card {card} in stack {stack} on board {board}" : "{user} zaktualizował opis karty {card} w stosie {stack} na tablicy {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zarchiwizowałeś kartę {card} w stosie {stack} na tablicy {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zarchiwizowałeś/-aś kartę {card} w stosie {stack} na tablicy {board}",
"{user} has archived card {card} in stack {stack} on board {board}" : "{user} zarchiwizował kartę {card} w stosie {stack} na tablicy {board}",
"You have unarchived card {card} in stack {stack} on board {board}" : "Masz niezarchiwizowaną kartę {card} w stosie {stack} na tablicy {board}",
"{user} has unarchived card {card} in stack {stack} on board {board}" : "{user} ma niezarchiwizowaną kartę {card} w stosie {stack} na tablicy {board}",
"You have removed the due date of card {card}" : "Usunąłeś datę ważności karty {card}",
"You have removed the due date of card {card}" : "Usunąłeś/-aś datę ważności karty {card}",
"{user} has removed the due date of card {card}" : "{user} usunął datę ważności karty {card}",
"You have set the due date of card {card} to {after}" : "Ustawiłeś datę ważności karty {card} na {after}",
"You have set the due date of card {card} to {after}" : "Ustawiłeś/-aś datę ważności karty {card} na {after}",
"{user} has set the due date of card {card} to {after}" : "{user} ustawił datę ważności karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Zaktualizowałeś datę ważności karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Zaktualizowałeś/-aś datę ważności karty {card} na {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} zaktualizował datę ważności karty {card} na {after}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Dodałeś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Dodałeś/-aś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"{user} has added the tag {label} to card {card} in stack {stack} on board {board}" : "{user} dodał etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Usunąłeś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Usunąłeś/-aś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"{user} has removed the tag {label} from card {card} in stack {stack} on board {board}" : "{user} usunął etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Przydzieliłeś {assigneduser} do karty {card} na tablicy {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Przydzieliłeś/-aś {assigneduser} do karty {card} na tablicy {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} przydzielił {assigneduser} do karty {card} na tablicy {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Usunąłeś przydzielenie {assigneduser} do karty {card} na tablicy {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Usunąłeś/-aś przydzielenie {assigneduser} do karty {card} na tablicy {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} usunął przydzielenie {assigneduser} do karty {card} na tablicy {board}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Przeniosłeś kartę {card} ze stosu {stackBefore} do {stack}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Przeniosłeś/-aś kartę {card} ze stosu {stackBefore} do {stack}",
"{user} has moved the card {card} from stack {stackBefore} to {stack}" : "{user} przeniósł kartę {card} ze stosu {stackBefore} do {stack}",
"You have added the attachment {attachment} to card {card}" : "Dodałeś załącznik {attachment} do karty {card}",
"You have added the attachment {attachment} to card {card}" : "Dodałeś/-aś załącznik {attachment} do karty {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} dodał załącznik {attachment} do karty {card}",
"You have updated the attachment {attachment} on card {card}" : "Zaktualizowałeś załącznik {attachment} na karcie {card}",
"You have updated the attachment {attachment} on card {card}" : "Zaktualizowałeś/-aś załącznik {attachment} na karcie {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} zaktualizował załącznik {attachment} na karcie {card}",
"You have deleted the attachment {attachment} from card {card}" : "Usunąłeś załącznik {attachment} z karty {card}",
"You have deleted the attachment {attachment} from card {card}" : "Usunąłeś/-aś załącznik {attachment} z karty {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} usunął załącznik {attachment} z karty {card}",
"You have restored the attachment {attachment} to card {card}" : "Przywróciłeś załącznik {attachment} na kartę {card}",
"You have restored the attachment {attachment} to card {card}" : "Przywróciłeś/-aś załącznik {attachment} na kartę {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} przywrócił załącznik {attachment} na kartę {card}",
"You have commented on card {card}" : "Skomentowałeś kartę {card}",
"You have commented on card {card}" : "Skomentowałeś/-aś kartę {card}",
"{user} has commented on card {card}" : "{user} skomentował kartę {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>Opis karty</strong> w aplikacji Deck został zmieniony",
"Deck" : "Tablica",

View File

@@ -26,51 +26,51 @@
"{user} has archived the board {before}" : "Użytkownik {user} zarchiwizował(-a) tablicę {board}",
"You have unarchived the board {board}" : "Przywróciłeś(-aś) tablicę {board} z archiwum",
"{user} has unarchived the board {before}" : "{user} przywrócił(-a) tablicę {board} z archiwum",
"You have created a new stack {stack} on board {board}" : "Utworzyłeś nowy stos {stack} na tablicy {board}",
"You have created a new stack {stack} on board {board}" : "Utworzyłeś/-aś nowy stos {stack} na tablicy {board}",
"{user} has created a new stack {stack} on board {board}" : "{user} utworzył nowy stos {stack} na tablicy {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Zmieniłeś nazwę stosu {before} dla {stack} na tablicy {board}",
"You have renamed stack {before} to {stack} on board {board}" : "Zmieniłeś/-aś nazwę stosu {before} dla {stack} na tablicy {board}",
"{user} has renamed stack {before} to {stack} on board {board}" : "{user} zmienił nazwę stosu {before} dla {stack} na tablicy {board}",
"You have deleted stack {stack} on board {board}" : "Usunąłeś stos {stack} na tablicy {board}",
"You have deleted stack {stack} on board {board}" : "Usunąłeś/-aś stos {stack} na tablicy {board}",
"{user} has deleted stack {stack} on board {board}" : "{user} usunął stos {stack} na tablicy {board}",
"You have created card {card} in stack {stack} on board {board}" : "Utworzyłeś kartę {card} w stosie {stack} na tablicy {board}",
"You have created card {card} in stack {stack} on board {board}" : "Utworzyłeś/-aś kartę {card} w stosie {stack} na tablicy {board}",
"{user} has created card {card} in stack {stack} on board {board}" : "{user} utworzył kartę {card} w stosie {stack} na tablicy {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Usunąłeś kartę {card} w stosie {stack} na tablicy {board}",
"You have deleted card {card} in stack {stack} on board {board}" : "Usunąłeś/-aś kartę {card} w stosie {stack} na tablicy {board}",
"{user} has deleted card {card} in stack {stack} on board {board}" : "{user} usunął kartę {card} w stosie {stack} na tablicy {board}",
"You have renamed the card {before} to {card}" : "Zmieniłeś(-aś) nazwę karty {before} na {card}",
"{user} has renamed the card {before} to {card}" : "Użytkownik {user} zmienił(-a) nazwę karty {before} na {card}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Dodałeś opis karty {card} w stosie {stack} na tablicy {board}",
"You have added a description to card {card} in stack {stack} on board {board}" : "Dodałeś/-aś opis karty {card} w stosie {stack} na tablicy {board}",
"{user} has added a description to card {card} in stack {stack} on board {board}" : "{user} dodał opis karty {card} w stosie {stack} na tablicy {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Zaktualizowałeś opis karty {card} w stosie {stack} na tablicy {board}",
"You have updated the description of card {card} in stack {stack} on board {board}" : "Zaktualizowałeś/-aś opis karty {card} w stosie {stack} na tablicy {board}",
"{user} has updated the description of the card {card} in stack {stack} on board {board}" : "{user} zaktualizował opis karty {card} w stosie {stack} na tablicy {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zarchiwizowałeś kartę {card} w stosie {stack} na tablicy {board}",
"You have archived card {card} in stack {stack} on board {board}" : "Zarchiwizowałeś/-aś kartę {card} w stosie {stack} na tablicy {board}",
"{user} has archived card {card} in stack {stack} on board {board}" : "{user} zarchiwizował kartę {card} w stosie {stack} na tablicy {board}",
"You have unarchived card {card} in stack {stack} on board {board}" : "Masz niezarchiwizowaną kartę {card} w stosie {stack} na tablicy {board}",
"{user} has unarchived card {card} in stack {stack} on board {board}" : "{user} ma niezarchiwizowaną kartę {card} w stosie {stack} na tablicy {board}",
"You have removed the due date of card {card}" : "Usunąłeś datę ważności karty {card}",
"You have removed the due date of card {card}" : "Usunąłeś/-aś datę ważności karty {card}",
"{user} has removed the due date of card {card}" : "{user} usunął datę ważności karty {card}",
"You have set the due date of card {card} to {after}" : "Ustawiłeś datę ważności karty {card} na {after}",
"You have set the due date of card {card} to {after}" : "Ustawiłeś/-aś datę ważności karty {card} na {after}",
"{user} has set the due date of card {card} to {after}" : "{user} ustawił datę ważności karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Zaktualizowałeś datę ważności karty {card} na {after}",
"You have updated the due date of card {card} to {after}" : "Zaktualizowałeś/-aś datę ważności karty {card} na {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} zaktualizował datę ważności karty {card} na {after}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Dodałeś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have added the tag {label} to card {card} in stack {stack} on board {board}" : "Dodałeś/-aś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"{user} has added the tag {label} to card {card} in stack {stack} on board {board}" : "{user} dodał etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Usunąłeś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have removed the tag {label} from card {card} in stack {stack} on board {board}" : "Usunąłeś/-aś etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"{user} has removed the tag {label} from card {card} in stack {stack} on board {board}" : "{user} usunął etykietę {label} do karty {card} w stosie {stack} na tablicy {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Przydzieliłeś {assigneduser} do karty {card} na tablicy {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Przydzieliłeś/-aś {assigneduser} do karty {card} na tablicy {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} przydzielił {assigneduser} do karty {card} na tablicy {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Usunąłeś przydzielenie {assigneduser} do karty {card} na tablicy {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Usunąłeś/-aś przydzielenie {assigneduser} do karty {card} na tablicy {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} usunął przydzielenie {assigneduser} do karty {card} na tablicy {board}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Przeniosłeś kartę {card} ze stosu {stackBefore} do {stack}",
"You have moved the card {card} from stack {stackBefore} to {stack}" : "Przeniosłeś/-aś kartę {card} ze stosu {stackBefore} do {stack}",
"{user} has moved the card {card} from stack {stackBefore} to {stack}" : "{user} przeniósł kartę {card} ze stosu {stackBefore} do {stack}",
"You have added the attachment {attachment} to card {card}" : "Dodałeś załącznik {attachment} do karty {card}",
"You have added the attachment {attachment} to card {card}" : "Dodałeś/-aś załącznik {attachment} do karty {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} dodał załącznik {attachment} do karty {card}",
"You have updated the attachment {attachment} on card {card}" : "Zaktualizowałeś załącznik {attachment} na karcie {card}",
"You have updated the attachment {attachment} on card {card}" : "Zaktualizowałeś/-aś załącznik {attachment} na karcie {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} zaktualizował załącznik {attachment} na karcie {card}",
"You have deleted the attachment {attachment} from card {card}" : "Usunąłeś załącznik {attachment} z karty {card}",
"You have deleted the attachment {attachment} from card {card}" : "Usunąłeś/-aś załącznik {attachment} z karty {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} usunął załącznik {attachment} z karty {card}",
"You have restored the attachment {attachment} to card {card}" : "Przywróciłeś załącznik {attachment} na kartę {card}",
"You have restored the attachment {attachment} to card {card}" : "Przywróciłeś/-aś załącznik {attachment} na kartę {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} przywrócił załącznik {attachment} na kartę {card}",
"You have commented on card {card}" : "Skomentowałeś kartę {card}",
"You have commented on card {card}" : "Skomentowałeś/-aś kartę {card}",
"{user} has commented on card {card}" : "{user} skomentował kartę {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>Opis karty</strong> w aplikacji Deck został zmieniony",
"Deck" : "Tablica",

View File

@@ -67,9 +67,7 @@ OC.L10N.register(
"You have added the attachment {attachment} to card {card}" : "Вы добавили вложение «{attachment}» в карточку «{card}»",
"{user} has added the attachment {attachment} to card {card}" : "{user} добавил(а) вложение «{attachment}» в карточку «{card}»",
"You have updated the attachment {attachment} on card {card}" : "Вы изменили вложение «{attachment}» в карточке «{card}»",
"{user} has updated the attachment {attachment} on card {card}" : "{user} изменил(а) вложение «{attachment}» в карточке «{card}»",
"You have deleted the attachment {attachment} from card {card}" : "Вы удалили вложение «{attachment}» из карточки «{card}»",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} удалил(а) вложение «{attachment}» из карточки «{card}»",
"You have restored the attachment {attachment} to card {card}" : "Вы восстановили вложение «{attachment}» в карточке «{card}»",
"{user} has restored the attachment {attachment} to card {card}" : "{user} восстановил(а) из корзины файл «{attachment}» в карточке «{card}»",
"You have commented on card {card}" : "Вы добавили комментарий к карточке «{card}»",

View File

@@ -65,9 +65,7 @@
"You have added the attachment {attachment} to card {card}" : "Вы добавили вложение «{attachment}» в карточку «{card}»",
"{user} has added the attachment {attachment} to card {card}" : "{user} добавил(а) вложение «{attachment}» в карточку «{card}»",
"You have updated the attachment {attachment} on card {card}" : "Вы изменили вложение «{attachment}» в карточке «{card}»",
"{user} has updated the attachment {attachment} on card {card}" : "{user} изменил(а) вложение «{attachment}» в карточке «{card}»",
"You have deleted the attachment {attachment} from card {card}" : "Вы удалили вложение «{attachment}» из карточки «{card}»",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} удалил(а) вложение «{attachment}» из карточки «{card}»",
"You have restored the attachment {attachment} to card {card}" : "Вы восстановили вложение «{attachment}» в карточке «{card}»",
"{user} has restored the attachment {attachment} to card {card}" : "{user} восстановил(а) из корзины файл «{attachment}» в карточке «{card}»",
"You have commented on card {card}" : "Вы добавили комментарий к карточке «{card}»",

View File

@@ -1,30 +0,0 @@
OC.L10N.register(
"deck",
{
"Finished" : "Završeno",
"Done" : "Done",
"Share board" : "Podeli tablu",
"Assign card to me" : "Dodeli karticu meni",
"Unassign card from me" : "Skloni karticu sa mene",
"Archive card" : "Arhiviraj karticu",
"Delete card" : "Obriši karticu",
"Add card" : "Dodaj karticu",
"Close" : "Zatvori",
"Sharing" : "Deljenje",
"Tags" : "Oznake",
"Group" : "Group",
"Loading" : "Loading",
"Edit" : "Uredi",
"Share" : "Deljenje",
"Create" : "Napravi",
"Title" : "Naslov",
"Edit board" : "Izmeni tablu",
"Archive board" : "Arhiviraj tablu",
"Delete board" : "Izbriši tablu",
"Assign users" : "Dodelite korisnike",
"Due date" : "Rok",
"Description" : "Opis",
"Attachments" : "Prilozi",
"Settings" : "Postavke"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");

View File

@@ -1,28 +0,0 @@
{ "translations": {
"Finished" : "Završeno",
"Done" : "Done",
"Share board" : "Podeli tablu",
"Assign card to me" : "Dodeli karticu meni",
"Unassign card from me" : "Skloni karticu sa mene",
"Archive card" : "Arhiviraj karticu",
"Delete card" : "Obriši karticu",
"Add card" : "Dodaj karticu",
"Close" : "Zatvori",
"Sharing" : "Deljenje",
"Tags" : "Oznake",
"Group" : "Group",
"Loading" : "Loading",
"Edit" : "Uredi",
"Share" : "Deljenje",
"Create" : "Napravi",
"Title" : "Naslov",
"Edit board" : "Izmeni tablu",
"Archive board" : "Arhiviraj tablu",
"Delete board" : "Izbriši tablu",
"Assign users" : "Dodelite korisnike",
"Due date" : "Rok",
"Description" : "Opis",
"Attachments" : "Prilozi",
"Settings" : "Postavke"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}

View File

@@ -19,7 +19,6 @@ OC.L10N.register(
"Hide archived cards" : "Приховати архівні картки",
"All Boards" : "Всі дошки",
"Archived boards" : "Архівовані дошки",
"Share board" : "Поширити дошку",
"Actions" : "Дії",
"Assign card to me" : "Прив'язати картку до мене",
"Unassign card from me" : "Відв'язати картку від мене",

View File

@@ -17,7 +17,6 @@
"Hide archived cards" : "Приховати архівні картки",
"All Boards" : "Всі дошки",
"Archived boards" : "Архівовані дошки",
"Share board" : "Поширити дошку",
"Actions" : "Дії",
"Assign card to me" : "Прив'язати картку до мене",
"Unassign card from me" : "Відв'язати картку від мене",

View File

@@ -138,7 +138,7 @@ OC.L10N.register(
"Group" : "分组",
"Circle" : "圈子",
"No matching user or group found." : "未找到匹配的用户或组。",
"Loading" : "正在加载",
"Loading" : "加载",
"Edit" : "编辑",
"Share" : "共享",
"Manage" : "管理",

View File

@@ -136,7 +136,7 @@
"Group" : "分组",
"Circle" : "圈子",
"No matching user or group found." : "未找到匹配的用户或组。",
"Loading" : "正在加载",
"Loading" : "加载",
"Edit" : "编辑",
"Share" : "共享",
"Manage" : "管理",

View File

@@ -33,7 +33,6 @@ use OCA\Deck\Db\CardMapper;
use OCA\Deck\Middleware\ExceptionMiddleware;
use OCA\Deck\Notification\Notifier;
use OCA\Deck\Service\FullTextSearchService;
use OCA\Deck\Service\PermissionService;
use OCP\AppFramework\App;
use OCP\Collaboration\Resources\IManager;
use OCP\Comments\CommentsEntityEvent;
@@ -152,14 +151,13 @@ class Application extends App {
$this->getContainer()->getServer()->getEventDispatcher()->addListener(CommentsEntityEvent::EVENT_ENTITY, function(CommentsEntityEvent $event) {
$event->addEntityCollection('deckCard', function($name) {
/** @var CardMapper */
$cardMapper = $this->getContainer()->query(CardMapper::class);
$permissionService = $this->getContainer()->query(PermissionService::class);
$service = $this->getContainer()->query(CardMapper::class);
try {
return $permissionService->checkPermission($cardMapper, (int) $name, Acl::PERMISSION_READ);
} catch (\Exception $e) {
$service->find((int) $name);
} catch (\InvalidArgumentException $e) {
return false;
}
return true;
});
});
$this->registerCommentsEventHandler();

166
lib/Command/UserImport.php Normal file
View File

@@ -0,0 +1,166 @@
<?php
/**
* @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>
*
* @author Gary Kim <gary@garykim.dev>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Deck\Command;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\Card;
use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\Label;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\Db\Stack;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\Service\BoardService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\IGroupManager;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class UserImport extends Command {
/** @var BoardMapper */
protected $boardMapper;
/** @var BoardService */
protected $boardService;
/** @var CardMapper */
protected $cardMapper;
/** @var LabelMapper */
protected $labelMapper;
/** @var StackMapper */
protected $stackMapper;
/** @var IUserManager */
private $userManager;
/** @var IGroupManager */
private $groupManager;
/** @var AssignedUsersMapper */
private $assignedUsersMapper;
public function __construct(BoardMapper $boardMapper,
BoardService $boardService,
StackMapper $stackMapper,
CardMapper $cardMapper,
LabelMapper $labelMapper,
AssignedUsersMapper $assignedUsersMapper,
IUserManager $userManager,
IGroupManager $groupManager) {
parent::__construct();
$this->cardMapper = $cardMapper;
$this->boardService = $boardService;
$this->stackMapper = $stackMapper;
$this->labelMapper = $labelMapper;
$this->assignedUsersMapper = $assignedUsersMapper;
$this->boardMapper = $boardMapper;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
}
protected function configure() {
$this
->setName('deck:import')
->setDescription('Import a JSON dump of user data')
->addArgument(
'user-id',
InputArgument::REQUIRED,
'User ID of the user to get ownership'
)
->addArgument(
'input-file',
InputArgument::REQUIRED,
'JSON file to import'
)
;
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return void
*/
protected function execute(InputInterface $input, OutputInterface $output) {
$userId = $input->getArgument('user-id');
$this->boardService->setUserId($userId);
$file = fopen($input->getArgument('input-file'));
$data = json_decode(fread($file, filesize($input->getArgument('input-file'))));
foreach ($data as $board) {
// New Board
$newBoard = new Board();
$newBoard->setTitle($board['title']);
$newBoard->setOwner($userId);
$newBoard->setColor($board['color']);
$this->boardMapper->insert($newBoard);
// Import labels for board
foreach ($board['labels'] as $label) {
$newLabel = new Label();
$newLabel->setTitle($label['title']);
$newLabel->setColor($label['color']);
$newLabel->setBoardId($label['boardId']);
$this->labelMapper->insert($newLabel);
}
// Import stacks for board
foreach ($board['stacks'] as $stack) {
$newStack = new Stack();
$newStack->setTitle($stack['title']);
$newStack->setBoardId($stack['boardId']);
$newStack->setId($stack['id']);
$this->stackMapper->insert($newStack);
// Import cards for stack
foreach ($stack['cards'] as $card) {
$newCard = new Card();
$newCard->setTitle($label['title']);
$newCard->setDescription($label['description']);
$newCard->setStackId($card['stackId']);
$newCard->setLastModified($card[''])
$newCard->setId($card['id']);
}
}
}
$output->writeln(json_encode($data, JSON_PRETTY_PRINT));
}
}

View File

@@ -454,17 +454,6 @@ class BoardService {
return $board;
}
private function applyPermissions($boardId, $edit, $share, $manage) {
try {
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_MANAGE);
} catch (NoPermissionException $e) {
$acls = $this->aclMapper->findAll($boardId);
$edit = $this->permissionService->userCan($acls, Acl::PERMISSION_EDIT, $this->userId) && $edit;
$share = $this->permissionService->userCan($acls, Acl::PERMISSION_SHARE, $this->userId) && $share;
$manage = $this->permissionService->userCan($acls, Acl::PERMISSION_MANAGE, $this->userId) && $manage;
}
return [$edit, $share, $manage];
}
/**
* @param $boardId
@@ -504,8 +493,6 @@ class BoardService {
}
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_SHARE);
[$edit, $share, $manage] = $this->applyPermissions($boardId, $edit, $share, $manage);
$acl = new Acl();
$acl->setBoardId($boardId);
$acl->setType($type);
@@ -568,10 +555,8 @@ class BoardService {
}
$this->permissionService->checkPermission($this->aclMapper, $id, Acl::PERMISSION_SHARE);
/** @var Acl $acl */
$acl = $this->aclMapper->find($id);
[$edit, $share, $manage] = $this->applyPermissions($acl->getBoardId(), $edit, $share, $manage);
$acl->setPermissionEdit($edit);
$acl->setPermissionShare($share);
$acl->setPermissionManage($manage);

View File

@@ -588,17 +588,10 @@ class CardService {
$assignments = $this->assignedUsersMapper->find($cardId);
foreach ($assignments as $assignment) {
if ($assignment->getParticipant() === $userId) {
throw new BadRequestException('The user is already assigned to the card');
return false;
}
}
$card = $this->cardMapper->find($cardId);
$boardId = $this->cardMapper->findBoardId($cardId);
$boardUsers = array_keys($this->permissionService->findUsers($boardId, true));
if (!in_array($userId, $boardUsers)) {
throw new BadRequestException('The user is not part of the board');
}
if ($userId !== $this->currentUser) {
/* Notifyuser about the card assignment */

View File

@@ -221,9 +221,9 @@ class PermissionService {
* @param $boardId
* @return array
*/
public function findUsers($boardId, $refresh = false) {
public function findUsers($boardId) {
// cache users of a board so we don't query them for every cards
if (array_key_exists((string) $boardId, $this->users) && !$refresh) {
if (array_key_exists((string) $boardId, $this->users)) {
return $this->users[(string) $boardId];
}
try {

View File

@@ -102,25 +102,34 @@ class AssignedUsersMapperTest extends \Test\TestCase {
$this->stacks = $stacks;
}
/**
* @covers ::__construct
*/
public function testConstructor() {
//$this->assertAttributeInstanceOf(IDBConnection::class, 'db', $this->assignedUsersMapper);
//$this->assertAttributeEquals(AssignedUsers::class, 'entityClass', $this->assignedUsersMapper);
//$this->assertAttributeEquals('*PREFIX*deck_assigned_users', 'tableName', $this->assignedUsersMapper);
}
/**
* @covers ::find
*/
public function testFind() {
$uids = [];
$this->cardService->assignUser($this->cards[0]->getId(), self::TEST_USER1);
$this->cardService->assignUser($this->cards[0]->getId(), self::TEST_USER2);
$this->cardService->assignUser($this->cards[0]->getId(), self::TEST_USER4);
$assignedUsers = $this->assignedUsersMapper->find($this->cards[0]->getId());
foreach ($assignedUsers as $user) {
$uids[$user->getParticipant()] = $user;
}
$this->assertArrayHasKey(self::TEST_USER1, $uids);
$this->assertArrayHasKey(self::TEST_USER2, $uids);
$this->assertArrayNotHasKey(self::TEST_USER2, $uids);
$this->assertArrayNotHasKey(self::TEST_USER3, $uids);
$this->assertArrayNotHasKey(self::TEST_USER4, $uids);
$this->assertArrayHasKey(self::TEST_USER4, $uids);
$this->cardService->unassignUser($this->cards[0]->getId(), self::TEST_USER1);
$this->cardService->unassignUser($this->cards[0]->getId(), self::TEST_USER2);
$this->cardService->unassignUser($this->cards[0]->getId(), self::TEST_USER4);
}
/**

View File

@@ -34,7 +34,6 @@ use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\NoPermissionException;
use OCA\Deck\Notification\NotificationHelper;
use OCP\IUser;
use OCP\IUserManager;
@@ -261,93 +260,6 @@ class BoardServiceTest extends TestCase {
));
}
public function dataAddAclExtendPermission() {
return [
[[false, false, false], [false, false, false], [false, false, false]],
[[false, false, false], [true, true, true], [false, false, false]],
// user has share permissions -> can only reshare with those
[[false, true, false], [false, false, false], [false, false, false]],
[[false, true, false], [false, true, false], [false, true, false]],
[[false, true, false], [true, true, true], [false, true, false]],
// user has write permissions -> can only reshare with those
[[true, true, false], [false, false, false], [false, false, false]],
[[true, true, false], [false, true, false], [false, true, false]],
[[true, true, false], [true, true, true], [true, true, false]],
// user has manage permissions -> can upgrade acl permissions
[[false, false, true], [true, true, true], [true, true, true]],
[[true, true, true], [false, false, true], [false, false, true]],
];
}
/**
* @dataProvider dataAddAclExtendPermission
* @param $currentUserAcl
* @param $providedAcl
* @param $resultingAcl
* @throws NoPermissionException
* @throws \OCA\Deck\BadRequestException
*/
public function testAddAclExtendPermission($currentUserAcl, $providedAcl, $resultingAcl) {
$existingAcl = new Acl();
$existingAcl->setBoardId(123);
$existingAcl->setType('user');
$existingAcl->setParticipant('admin');
$existingAcl->setPermissionEdit($currentUserAcl[0]);
$existingAcl->setPermissionShare($currentUserAcl[1]);
$existingAcl->setPermissionManage($currentUserAcl[2]);
$this->permissionService->expects($this->at(0))
->method('checkPermission')
->with($this->boardMapper, 123, Acl::PERMISSION_SHARE, null);
if ($currentUserAcl[2]) {
$this->permissionService->expects($this->at(1))
->method('checkPermission')
->with($this->boardMapper, 123, Acl::PERMISSION_MANAGE, null);
} else {
$this->aclMapper->expects($this->once())
->method('findAll')
->willReturn([$existingAcl]);
$this->permissionService->expects($this->at(1))
->method('checkPermission')
->with($this->boardMapper, 123, Acl::PERMISSION_MANAGE, null)
->willThrowException(new NoPermissionException('No permission'));
$this->permissionService->expects($this->at(2))
->method('userCan')
->willReturn($currentUserAcl[0]);
$this->permissionService->expects($this->at(3))
->method('userCan')
->willReturn($currentUserAcl[1]);
$this->permissionService->expects($this->at(4))
->method('userCan')
->willReturn($currentUserAcl[2]);
}
$user = $this->createMock(IUser::class);
$user->method('getUID')->willReturn('admin');
$acl = new Acl();
$acl->setBoardId(123);
$acl->setType('user');
$acl->setParticipant('admin');
$acl->setPermissionEdit($resultingAcl[0]);
$acl->setPermissionShare($resultingAcl[1]);
$acl->setPermissionManage($resultingAcl[2]);
$acl->resolveRelation('participant', function($participant) use (&$user) {
return null;
});
$this->notificationHelper->expects($this->once())
->method('sendBoardShared');
$expected = clone $acl;
$this->aclMapper->expects($this->once())
->method('insert')
->with($acl)
->willReturn($acl);
$this->assertEquals($expected, $this->service->addAcl(
123, 'user', 'admin', $providedAcl[0], $providedAcl[1], $providedAcl[2]
));
}
public function testUpdateAcl() {
$acl = new Acl();
$acl->setBoardId(123);

View File

@@ -25,7 +25,6 @@ namespace OCA\Deck\Service;
use OCA\Deck\Activity\ActivityManager;
use OCA\Deck\BadRequestException;
use OCA\Deck\Db\AssignedUsers;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\Card;
@@ -47,22 +46,22 @@ use Test\TestCase;
class CardServiceTest extends TestCase {
/** @var CardService|MockObject */
private $cardService;
/** @var CardMapper|MockObject */
private $cardMapper;
/** @var StackMapper|MockObject */
private $stackMapper;
/** @var PermissionService|MockObject */
private $permissionService;
/** @var NotificationHelper */
private $notificationHelper;
/** @var AssignedUsersMapper|MockObject */
private $assignedUsersMapper;
/** @var BoardService|MockObject */
private $boardService;
/** @var LabelMapper|MockObject */
private $labelMapper;
/** @var CardService|MockObject */
private $cardService;
/** @var CardMapper|MockObject */
private $cardMapper;
/** @var StackMapper|MockObject */
private $stackMapper;
/** @var PermissionService|MockObject */
private $permissionService;
/** @var NotificationHelper */
private $notificationHelper;
/** @var AssignedUsersMapper|MockObject */
private $assignedUsersMapper;
/** @var BoardService|MockObject */
private $boardService;
/** @var LabelMapper|MockObject */
private $labelMapper;
private $boardMapper;
/** @var AttachmentService|MockObject */
private $attachmentService;
@@ -78,15 +77,15 @@ class CardServiceTest extends TestCase {
private $changeHelper;
public function setUp(): void {
parent::setUp();
$this->cardMapper = $this->createMock(CardMapper::class);
$this->stackMapper = $this->createMock(StackMapper::class);
$this->boardMapper = $this->createMock(BoardMapper::class);
$this->labelMapper = $this->createMock(LabelMapper::class);
$this->permissionService = $this->createMock(PermissionService::class);
$this->boardService = $this->createMock(BoardService::class);
$this->notificationHelper = $this->createMock(NotificationHelper::class);
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
parent::setUp();
$this->cardMapper = $this->createMock(CardMapper::class);
$this->stackMapper = $this->createMock(StackMapper::class);
$this->boardMapper = $this->createMock(BoardMapper::class);
$this->labelMapper = $this->createMock(LabelMapper::class);
$this->permissionService = $this->createMock(PermissionService::class);
$this->boardService = $this->createMock(BoardService::class);
$this->notificationHelper = $this->createMock(NotificationHelper::class);
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
$this->attachmentService = $this->createMock(AttachmentService::class);
$this->activityManager = $this->createMock(ActivityManager::class);
$this->commentsManager = $this->createMock(ICommentsManager::class);
@@ -109,10 +108,10 @@ class CardServiceTest extends TestCase {
$this->changeHelper,
$this->eventDispatcher,
'user1'
);
}
);
}
public function mockActivity($type, $object, $subject) {
public function mockActivity($type, $object, $subject) {
// ActivityManager::DECK_OBJECT_BOARD, $newAcl, ActivityManager::SUBJECT_BOARD_SHARE
$event = $this->createMock(IEvent::class);
$this->activityManager->expects($this->once())
@@ -124,244 +123,214 @@ class CardServiceTest extends TestCase {
->with($event);
}
public function testFind() {
public function testFind() {
$user = $this->createMock(IUser::class);
$this->userManager->expects($this->once())
->method('get')
->willReturn($user);
$card = new Card();
$card->setId(1337);
$this->cardMapper->expects($this->any())
->method('find')
->with(123)
->willReturn($card);
$this->assignedUsersMapper->expects($this->any())
$card = new Card();
$card->setId(1337);
$this->cardMapper->expects($this->any())
->method('find')
->with(123)
->willReturn($card);
$this->assignedUsersMapper->expects($this->any())
->method('find')
->with(1337)
->willReturn(['user1', 'user2']);
$cardExpected = new Card();
$cardExpected->setId(1337);
$cardExpected->setAssignedUsers(['user1', 'user2']);
$this->assertEquals($cardExpected, $this->cardService->find(123));
}
$this->assertEquals($cardExpected, $this->cardService->find(123));
}
public function testCreate() {
$card = new Card();
$card->setTitle('Card title');
$card->setOwner('admin');
$card->setStackId(123);
$card->setOrder(999);
$card->setType('text');
$this->cardMapper->expects($this->once())
->method('insert')
->willReturn($card);
$b = $this->cardService->create('Card title', 123, 'text', 999, 'admin');
public function testCreate() {
$card = new Card();
$card->setTitle('Card title');
$card->setOwner('admin');
$card->setStackId(123);
$card->setOrder(999);
$card->setType('text');
$this->cardMapper->expects($this->once())
->method('insert')
->willReturn($card);
$b = $this->cardService->create('Card title', 123, 'text', 999, 'admin');
$this->assertEquals($b->getTitle(), 'Card title');
$this->assertEquals($b->getOwner(), 'admin');
$this->assertEquals($b->getType(), 'text');
$this->assertEquals($b->getOrder(), 999);
$this->assertEquals($b->getStackId(), 123);
}
$this->assertEquals($b->getTitle(), 'Card title');
$this->assertEquals($b->getOwner(), 'admin');
$this->assertEquals($b->getType(), 'text');
$this->assertEquals($b->getOrder(), 999);
$this->assertEquals($b->getStackId(), 123);
}
public function testDelete() {
$cardToBeDeleted = new Card();
$this->cardMapper->expects($this->once())
->method('find')
->willReturn($cardToBeDeleted);
$this->cardMapper->expects($this->once())
->method('update')
->willReturn($cardToBeDeleted);
$this->cardService->delete(123);
$this->assertTrue($cardToBeDeleted->getDeletedAt() <= time(), 'deletedAt is in the past');
}
public function testDelete() {
$cardToBeDeleted = new Card();
$this->cardMapper->expects($this->once())
->method('find')
->willReturn($cardToBeDeleted);
$this->cardMapper->expects($this->once())
->method('update')
->willReturn($cardToBeDeleted);
$this->cardService->delete(123);
$this->assertTrue($cardToBeDeleted->getDeletedAt() <= time(), 'deletedAt is in the past');
}
public function testUpdate() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) { return $c; });
$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(234, $actual->getStackId());
$this->assertEquals('text', $actual->getType());
$this->assertEquals(999, $actual->getOrder());
$this->assertEquals('foo', $actual->getDescription());
$this->assertEquals('2017-01-01T00:00:00+00:00', $actual->getDuedate());
}
public function testUpdate() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) { return $c; });
$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(234, $actual->getStackId());
$this->assertEquals('text', $actual->getType());
$this->assertEquals(999, $actual->getOrder());
$this->assertEquals('foo', $actual->getDescription());
$this->assertEquals('2017-01-01T00:00:00+00:00', $actual->getDuedate());
}
public function testUpdateArchived() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('update');
public function testUpdateArchived() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('update');
$this->expectException(StatusException::class);
$this->cardService->update(123, 'newtitle', 234, 'text', 999, 'foo', 'admin', '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() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) { return $c; });
$actual = $this->cardService->rename(123, 'newtitle');
$this->assertEquals('newtitle', $actual->getTitle());
}
public function testRename() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) { return $c; });
$actual = $this->cardService->rename(123, 'newtitle');
$this->assertEquals('newtitle', $actual->getTitle());
}
public function testRenameArchived() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('update');
public function testRenameArchived() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('update');
$this->expectException(StatusException::class);
$this->cardService->rename(123, 'newtitle');
}
public function dataReorder() {
return [
[0, 0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]],
[0, 9, [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]],
[1, 3, [0, 2, 3, 1, 4, 5, 6, 7, 8, 9]]
];
}
/** @dataProvider dataReorder */
public function testReorder($cardId, $newPosition, $order) {
$cards = $this->getCards();
$cardsTmp = [];
$this->cardMapper->expects($this->at(0))->method('findAll')->willReturn($cards);
$result = $this->cardService->reorder($cardId, 123, $newPosition);
foreach ($result as $card) {
$actual[$card->getOrder()] = $card->getId();
}
$this->assertEquals($order, $actual);
}
private function getCards() {
$cards = [];
for($i=0; $i<10; $i++) {
$cards[$i] = new Card();
$cards[$i]->setTitle($i);
$cards[$i]->setOrder($i);
$cards[$i]->setId($i);
}
return $cards;
}
public function testReorderArchived() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('findAll')->willReturn([$card]);
$this->cardMapper->expects($this->never())->method('update')->willReturnCallback(function($c) { return $c; });
$this->expectException(StatusException::class);
$actual = $this->cardService->reorder(123, 234, 1);
}
public function testArchive() {
$card = new Card();
$this->assertFalse($card->getArchived());
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) {
return $c;
});
$this->assertTrue($this->cardService->archive(123)->getArchived());
}
public function testUnarchive() {
$card = new Card();
$card->setArchived(true);
$this->assertTrue($card->getArchived());
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) {
return $c;
});
$this->assertFalse($this->cardService->unarchive(123)->getArchived());
}
public function testAssignLabel() {
$card = new Card();
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('assignLabel');
$this->cardService->assignLabel(123, 999);
}
public function testAssignLabelArchived() {
$card = new Card();
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('assignLabel');
$this->expectException(StatusException::class);
$this->cardService->assignLabel(123, 999);
}
public function testRemoveLabel() {
$card = new Card();
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('removeLabel');
$this->cardService->removeLabel(123, 999);
}
public function testRemoveLabelArchived() {
$card = new Card();
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('removeLabel');
$this->expectException(StatusException::class);
$this->cardService->rename(123, 'newtitle');
}
$this->cardService->removeLabel(123, 999);
}
public function dataReorder() {
return [
[0, 0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]],
[0, 9, [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]],
[1, 3, [0, 2, 3, 1, 4, 5, 6, 7, 8, 9]]
];
}
/** @dataProvider dataReorder */
public function testReorder($cardId, $newPosition, $order) {
$cards = $this->getCards();
$cardsTmp = [];
$this->cardMapper->expects($this->at(0))->method('findAll')->willReturn($cards);
$result = $this->cardService->reorder($cardId, 123, $newPosition);
foreach ($result as $card) {
$actual[$card->getOrder()] = $card->getId();
}
$this->assertEquals($order, $actual);
}
private function getCards() {
$cards = [];
for($i=0; $i<10; $i++) {
$cards[$i] = new Card();
$cards[$i]->setTitle($i);
$cards[$i]->setOrder($i);
$cards[$i]->setId($i);
}
return $cards;
}
public function testReorderArchived() {
$card = new Card();
$card->setTitle('title');
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('findAll')->willReturn([$card]);
$this->cardMapper->expects($this->never())->method('update')->willReturnCallback(function($c) { return $c; });
$this->expectException(StatusException::class);
$actual = $this->cardService->reorder(123, 234, 1);
}
public function testArchive() {
$card = new Card();
$this->assertFalse($card->getArchived());
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) {
return $c;
});
$this->assertTrue($this->cardService->archive(123)->getArchived());
}
public function testUnarchive() {
$card = new Card();
$card->setArchived(true);
$this->assertTrue($card->getArchived());
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function($c) {
return $c;
});
$this->assertFalse($this->cardService->unarchive(123)->getArchived());
}
public function testAssignLabel() {
$card = new Card();
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('assignLabel');
$this->cardService->assignLabel(123, 999);
}
public function testAssignLabelArchived() {
$card = new Card();
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('assignLabel');
$this->expectException(StatusException::class);
$this->cardService->assignLabel(123, 999);
}
public function testRemoveLabel() {
$card = new Card();
$card->setArchived(false);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('removeLabel');
$this->cardService->removeLabel(123, 999);
}
public function testRemoveLabelArchived() {
$card = new Card();
$card->setArchived(true);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->never())->method('removeLabel');
$this->expectException(StatusException::class);
$this->cardService->removeLabel(123, 999);
}
public function testAssignUser() {
$assignments = [];
$this->assignedUsersMapper->expects($this->once())
public function testAssignUser() {
$assignments = [];
$this->assignedUsersMapper->expects($this->once())
->method('find')
->with(123)
->willReturn($assignments);
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$this->cardMapper->expects($this->once())
->method('findBoardId')
->willReturn(1);
$this->permissionService->expects($this->once())
->method('findUsers')
->with(1)
->willReturn(['admin' => 'admin', 'user1' => 'user1']);
$this->assignedUsersMapper->expects($this->once())
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$this->assignedUsersMapper->expects($this->once())
->method('insert')
->with($assignment)
->willReturn($assignment);
$actual = $this->cardService->assignUser(123, 'admin');
$this->assertEquals($assignment, $actual);
}
public function testAssignUserNoParticipant() {
$this->expectException(BadRequestException::class);
$this->expectExceptionMessage('The user is not part of the board');
$assignments = [];
$this->assignedUsersMapper->expects($this->once())
->method('find')
->with(123)
->willReturn($assignments);
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
$this->cardMapper->expects($this->once())
->method('findBoardId')
->willReturn(1);
$this->permissionService->expects($this->once())
->method('findUsers')
->with(1)
->willReturn(['user2' => 'user2', 'user1' => 'user1']);
$actual = $this->cardService->assignUser(123, 'admin');
$actual = $this->cardService->assignUser(123, 'admin');
$this->assertEquals($assignment, $actual);
}
public function testAssignUserExisting() {
$this->expectException(BadRequestException::class);
$this->expectExceptionMessage('The user is already assigned to the card');
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');
@@ -395,8 +364,13 @@ class CardServiceTest extends TestCase {
$this->assertEquals($assignment, $actual);
}
/**
* @expectException \OCA\Deck\NotFoundException
*
*
*
*/
public function testUnassignUserNotExisting() {
$this->expectException(NotFoundException::class);
$assignment = new AssignedUsers();
$assignment->setCardId(123);
$assignment->setParticipant('admin');