Compare commits

...

21 Commits

Author SHA1 Message Date
Jakob Röhrl
6d6faf65e6 shared board option show_only_assigned_cards or all due dates
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
2021-03-17 09:15:11 +01:00
Nextcloud bot
26f68475f7 [tx-robot] updated from transifex 2021-03-11 02:34:42 +00:00
Julius Härtl
3e88e8c251 Merge pull request #2864 from nextcloud/dependabot/npm_and_yarn/master/nextcloud/vue-dashboard-1.1.0
Bump @nextcloud/vue-dashboard from 1.0.1 to 1.1.0
2021-03-09 19:30:18 +01:00
Julius Härtl
e93c3c0f9b Merge pull request #2802 from nextcloud/dependabot/npm_and_yarn/master/eslint-plugin-promise-4.3.1
Bump eslint-plugin-promise from 4.2.1 to 4.3.1
2021-03-09 17:37:12 +01:00
dependabot[bot]
cd78abef5f Bump @nextcloud/vue-dashboard from 1.0.1 to 1.1.0
Bumps [@nextcloud/vue-dashboard](https://github.com/nextcloud/nextcloud-vue-dashboard) from 1.0.1 to 1.1.0.
- [Release notes](https://github.com/nextcloud/nextcloud-vue-dashboard/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-vue-dashboard/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-vue-dashboard/compare/v1.0.1...v1.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-09 16:24:07 +00:00
Julius Härtl
3811959b91 Merge pull request #2875 from nextcloud/dependabot/npm_and_yarn/master/babel/preset-env-7.13.10
Bump @babel/preset-env from 7.13.8 to 7.13.10
2021-03-09 17:17:33 +01:00
dependabot[bot]
8abfac7f93 Bump @babel/preset-env from 7.13.8 to 7.13.10
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.13.8 to 7.13.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.13.10/packages/babel-preset-env)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-09 16:09:40 +00:00
Julius Härtl
87a308c10f Merge pull request #2863 from nextcloud/dependabot/npm_and_yarn/master/babel/runtime-7.13.9
Bump @babel/runtime from 7.13.8 to 7.13.9
2021-03-09 17:02:38 +01:00
Nextcloud bot
e8cc17ffdf [tx-robot] updated from transifex 2021-03-09 02:35:50 +00:00
Julius Härtl
3738d1e02b Merge pull request #2857 from nextcloud/bugfix/noid/fclose-node
Don't close tempfile as it is already done
2021-03-08 10:25:41 +01:00
Nextcloud bot
626a8bea7d [tx-robot] updated from transifex 2021-03-08 02:35:04 +00:00
Nextcloud bot
c0831a852e [tx-robot] updated from transifex 2021-03-07 02:33:06 +00:00
Nextcloud bot
2085a23b08 [tx-robot] updated from transifex 2021-03-06 02:33:44 +00:00
dependabot[bot]
a9971963b2 Bump @babel/runtime from 7.13.8 to 7.13.9
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.13.8 to 7.13.9.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.13.9/packages/babel-runtime)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-06 02:04:28 +00:00
Julius Härtl
20821680d9 Merge pull request #2823 from nextcloud/bugfix/noid/circles-export
Properly pass the user to fetch circles when calling through occ
2021-03-05 15:40:09 +01:00
Julius Härtl
214fb3417d No need to close the temp file as the View is already taking care of it
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-03-05 15:28:29 +01:00
Nextcloud bot
327d579521 [tx-robot] updated from transifex 2021-03-05 02:33:47 +00:00
Julius Härtl
225a22c93e Merge pull request #2847 from nextcloud/bugfix/noid/content-disposition
Switch to Content-Disposition attachment and check for sane mimetypes
2021-03-04 08:25:46 +01:00
Julius Härtl
9f7901519b Switch to Content-Disposition attachment and check for sane mimetypes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-03-04 08:17:28 +01:00
Julius Härtl
6d8a03840e Properly pass the user to fetch circles when calling through occ
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2021-02-23 14:31:00 +01:00
dependabot[bot]
6ea6303c81 Bump eslint-plugin-promise from 4.2.1 to 4.3.1
Bumps [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise) from 4.2.1 to 4.3.1.
- [Release notes](https://github.com/xjamundx/eslint-plugin-promise/releases)
- [Changelog](https://github.com/xjamundx/eslint-plugin-promise/blob/development/CHANGELOG.md)
- [Commits](https://github.com/xjamundx/eslint-plugin-promise/compare/v4.2.1...v4.3.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-13 02:09:32 +00:00
23 changed files with 627 additions and 955 deletions

View File

@@ -17,7 +17,7 @@
- 🚀 Get your project organized
</description>
<version>1.4.0-alpha1</version>
<version>1.4.0</version>
<licence>agpl</licence>
<author>Julius Härtl</author>
<namespace>Deck</namespace>

View File

@@ -112,12 +112,12 @@ OC.L10N.register(
"Select a list" : "Vyberte sloupec",
"Card title" : "Název karty",
"Cancel" : "Storno",
"Creating the new card…" : "Vytváření nové karty...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" bylo přidáno do \"{board}\"",
"Creating the new card…" : "Vytváření nové karty",
"\"{card}\" was added to \"{board}\"" : "{card} bylo přidáno do {board}",
"Open card" : "Otevřít kartu",
"Close" : "Zavřít",
"Create card" : "Vytvořit kartu",
"Select a card" : "Vybrat tabuli",
"Select a card" : "Vybrat kartu",
"Select the card to link to a project" : "Vyberte kartu kterou propojit s projektem",
"Link to card" : "Propojit s kartou",
"File already exists" : "Soubor už existuje",
@@ -206,7 +206,7 @@ OC.L10N.register(
"Remove due date" : "Odstranit termín",
"Select Date" : "Vybrat datum",
"Save" : "Uložit",
"The comment cannot be empty." : "Komentář je třeba vyplnit",
"The comment cannot be empty." : "Komentář je třeba vyplnit.",
"The comment cannot be longer than 1000 characters." : "Délka komentáře může být nejvýše 1 000 znaků.",
"In reply to" : "V odpověď na",
"Reply" : "Odpovědět",

View File

@@ -110,12 +110,12 @@
"Select a list" : "Vyberte sloupec",
"Card title" : "Název karty",
"Cancel" : "Storno",
"Creating the new card…" : "Vytváření nové karty...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" bylo přidáno do \"{board}\"",
"Creating the new card…" : "Vytváření nové karty",
"\"{card}\" was added to \"{board}\"" : "{card} bylo přidáno do {board}",
"Open card" : "Otevřít kartu",
"Close" : "Zavřít",
"Create card" : "Vytvořit kartu",
"Select a card" : "Vybrat tabuli",
"Select a card" : "Vybrat kartu",
"Select the card to link to a project" : "Vyberte kartu kterou propojit s projektem",
"Link to card" : "Propojit s kartou",
"File already exists" : "Soubor už existuje",
@@ -204,7 +204,7 @@
"Remove due date" : "Odstranit termín",
"Select Date" : "Vybrat datum",
"Save" : "Uložit",
"The comment cannot be empty." : "Komentář je třeba vyplnit",
"The comment cannot be empty." : "Komentář je třeba vyplnit.",
"The comment cannot be longer than 1000 characters." : "Délka komentáře může být nejvýše 1 000 znaků.",
"In reply to" : "V odpověď na",
"Reply" : "Odpovědět",

View File

@@ -107,9 +107,16 @@ OC.L10N.register(
"Select the board to link to a project" : "Избери табла за поврзување со проект",
"Search by board title" : "Барај по име на табла",
"Select board" : "Избери табла",
"Create a new card" : "Креирајте нова картица",
"Select a board" : "Избери табла",
"Select a list" : "Избери листа",
"Card title" : "Наслов на картицата",
"Cancel" : "Откажи",
"Creating the new card…" : "Креирање нова картица...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" е додадена на \"{board}\"",
"Open card" : "Отвори картица",
"Close" : "Затвори",
"Create card" : "Креирајте картица",
"Select a card" : "Избери картица",
"Select the card to link to a project" : "Избери картица за поврзување со проект",
"Link to card" : "Линк до картица",
@@ -258,6 +265,8 @@ OC.L10N.register(
"upcoming cards" : "престојни картици",
"Link to a board" : "Линк до табла",
"Link to a card" : "Линк до картица",
"Create a card" : "Креирајте картица",
"Message from {author} in {conversationName}" : "Порака од {author} во {conversationName}",
"Something went wrong" : "Нешто не е во ред",
"Failed to upload {name}" : "Неуспешно прикачување {name}",
"Maximum file size of {size} exceeded" : "Максималната големина на датотека од {size} е достигната",

View File

@@ -105,9 +105,16 @@
"Select the board to link to a project" : "Избери табла за поврзување со проект",
"Search by board title" : "Барај по име на табла",
"Select board" : "Избери табла",
"Create a new card" : "Креирајте нова картица",
"Select a board" : "Избери табла",
"Select a list" : "Избери листа",
"Card title" : "Наслов на картицата",
"Cancel" : "Откажи",
"Creating the new card…" : "Креирање нова картица...",
"\"{card}\" was added to \"{board}\"" : "\"{card}\" е додадена на \"{board}\"",
"Open card" : "Отвори картица",
"Close" : "Затвори",
"Create card" : "Креирајте картица",
"Select a card" : "Избери картица",
"Select the card to link to a project" : "Избери картица за поврзување со проект",
"Link to card" : "Линк до картица",
@@ -256,6 +263,8 @@
"upcoming cards" : "престојни картици",
"Link to a board" : "Линк до табла",
"Link to a card" : "Линк до картица",
"Create a card" : "Креирајте картица",
"Message from {author} in {conversationName}" : "Порака од {author} во {conversationName}",
"Something went wrong" : "Нешто не е во ред",
"Failed to upload {name}" : "Неуспешно прикачување {name}",
"Maximum file size of {size} exceeded" : "Максималната големина на датотека од {size} е достигната",

View File

@@ -167,11 +167,112 @@ OC.L10N.register(
"Can manage" : "Faghet a gestire",
"Delete" : "Cantzella",
"Failed to create share with {displayName}" : "No at fatu a creare cumpartzidura cun {displayName}",
"Add a new list" : "Agiunghe un'elencu nou",
"Archive all cards" : "Archìvia totu is ischedas",
"Delete list" : "Cantzella elencu",
"Add card" : "Agiunghe ischeda",
"Archive all cards in this list" : "Archìvia totu is ischedas in cust'elencu",
"Add a new card" : "Agiùnghe un'ischeda noa",
"Card name" : "Nùmene de s'ischeda",
"List deleted" : "Elencu cantzelladu",
"Edit" : "Modìfica ",
"Add a new tag" : "Agiunghe un'eticheta noa",
"title and color value must be provided" : "tocat de frunire su tìtulu e su balore de su colore",
"Board name" : "Nùmene de sa lavagna",
"Members" : "Membros",
"Upload new files" : "Carriga archìvios noos",
"Share from Files" : "Cumpartzi dae Archìvios",
"Add this attachment" : "Agiunghe custu alligongiadu",
"Show in Files" : "Mustra in Archìvios",
"Unshare file" : "Annulla cumpartzidura de s'archìviu",
"Delete Attachment" : "Cantzella alligongiadu",
"Restore Attachment" : "Riprìstina alligongiadu",
"File to share" : "Archìviu de cumpartzire",
"Invalid path selected" : "Caminu seletzionadu non bàlidu",
"Open in sidebar view" : "Aberi in s'istanca laterale",
"Open in bigger view" : "Aberi in una bista prus ampra",
"Attachments" : "Alligongiados",
"Comments" : "Cummentos",
"Modified" : "Modificadu",
"Created" : "Creadu",
"The title cannot be empty." : "Su tìtulu non podet èssere bòidu",
"No comments yet. Begin the discussion!" : "Perunu cummentu ancora. Cumintzat sa chistionada!",
"Assign a tag to this card…" : "Assigna un'eticheta a cust'ischeda...",
"Assign to users" : "Assigna a utentes",
"Assign to users/groups/circles" : "Assigna a utentes/grupos/tropas",
"Assign a user to this card…" : "Assigna utente a cust'ischeda...",
"Due date" : "Iscadèntzia",
"Set a due date" : "Imposta iscadèntzia",
"Remove due date" : "Boga s'iscadèntzia",
"Select Date" : "Seletziona data",
"Save" : "Sarva",
"Description" : "Descritzione"
"The comment cannot be empty." : "Su cummentu non podet èssere bòidu",
"The comment cannot be longer than 1000 characters." : "Su cummentu non podet èssere prus longu de 1000 caràteres.",
"In reply to" : "Rispondende a ",
"Reply" : "Risponde",
"Update" : "Agiorna",
"Description" : "Descritzione",
"(Unsaved)" : "(Non sarbada)",
"(Saving…)" : "(Sarbende…)",
"Formatting help" : "Ghia pro sa formatatzione",
"Edit description" : "Modìfica descritzione",
"View description" : "Visualiza descritzione",
"Add Attachment" : "Agiunghe alligongiadu",
"Write a description …" : "Iscrie una descritzione ...",
"Choose attachment" : "Sèbera un'alligongiadu",
"(group)" : "(grupu)",
"(circle)" : "(tropa)",
"Assign to me" : "Assigna a mie",
"Unassign myself" : "Annulla s'assignatzione a mie",
"Move card" : "Tràmuda ischeda",
"Unarchive card" : "Ischeda no archiviada",
"Archive card" : "Archìviu no archiviadu",
"Delete card" : "Cantzella ischeda",
"Move card to another board" : "Tràmuda s'ischeda a un'àtera lavagna",
"Card deleted" : "Ischeda cantzellada",
"seconds ago" : "segundos a immoe",
"All boards" : "Totu is lavagnas",
"Archived boards" : "Lavagnas archiviadas",
"Shared with you" : "Cumpartzidu cun tegus",
"Use bigger card view" : "Imprea bista cun ischedas prus mannas",
"Show boards in calendar/tasks" : "Mustra lavagnas in calendàriu/fainas",
"Limit deck usage of groups" : "Mìnima s'impreu de deck de is grupos",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Su de minimare su deck at a impedire a is utentes chi non faghent parte de cuddos grupos de si creare lavagnas pròpias. Is utentes ant a èssere ancora capassos de traballare in is lavagnas chi fiant istadas cumpartzidas cun issos etotu,",
"Board details" : "Detàllios lavagna",
"Edit board" : "Modìfica lavagna",
"Clone board" : "Clona lavagna",
"Unarchive board" : "Annulla s'archiviatzione de sa lavagna",
"Archive board" : "Archìvia lavagna",
"Turn on due date reminders" : "Allughe is notìficas pro ammentare is iscadèntzias",
"Turn off due date reminders" : "Istuda is notìficas pro ammentare is iscadèntzias",
"Due date reminders" : "Notìficas pro ammentare is iscadèntzias",
"All cards" : "Totu is ischedas",
"Assigned cards" : "Ischedas assignadas",
"No notifications" : "Peruna notìfica",
"Delete board" : "Cantzella lavagna",
"Board {0} deleted" : "Lavagna {0} cantzellada",
"Only assigned cards" : "Isceti ischedas assignadas",
"No reminder" : "Perunu apuntu",
"An error occurred" : "Ddoe at àpidu un'errore",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Ses seguru chi cheres cantzellare sa lavagna {title}? Custa operatzione at a cantzellare totu is datos de custa lavagna.",
"Delete the board?" : "Cheres cantzellare sa lavagna?",
"Loading filtered view" : "Carrigamentu de sa bista cun su filtru",
"Today" : "Oe",
"Tomorrow" : "Cras",
"This week" : "Custa chida",
"No due" : "Peruna iscadèntzia",
"No upcoming cards" : "Peruna ischeda abarrada",
"upcoming cards" : "ischedas abarradas",
"Link to a board" : "Collega a una tabella",
"Link to a card" : "Collega a un'ischeda",
"Create a card" : "Crea un'ischeda",
"Message from {author} in {conversationName}" : "Messàgiu de {author} in {conversationName}",
"Something went wrong" : "Ddoe at àpidu un'errore",
"Failed to upload {name}" : "No at fatu a agiornare {name}",
"Maximum file size of {size} exceeded" : "Mannària màssima de s'archìviu de {size} superada",
"Error creating the share" : "Errore in sa creatzione de sa cumpatzidura",
"Share with a Deck card" : "Cumpartzi cun un'ischeda deck",
"Share {file} with a Deck card" : "Cumpartzi {file} cun un'ischeda de deck",
"Share" : "Cumpartzi"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -165,11 +165,112 @@
"Can manage" : "Faghet a gestire",
"Delete" : "Cantzella",
"Failed to create share with {displayName}" : "No at fatu a creare cumpartzidura cun {displayName}",
"Add a new list" : "Agiunghe un'elencu nou",
"Archive all cards" : "Archìvia totu is ischedas",
"Delete list" : "Cantzella elencu",
"Add card" : "Agiunghe ischeda",
"Archive all cards in this list" : "Archìvia totu is ischedas in cust'elencu",
"Add a new card" : "Agiùnghe un'ischeda noa",
"Card name" : "Nùmene de s'ischeda",
"List deleted" : "Elencu cantzelladu",
"Edit" : "Modìfica ",
"Add a new tag" : "Agiunghe un'eticheta noa",
"title and color value must be provided" : "tocat de frunire su tìtulu e su balore de su colore",
"Board name" : "Nùmene de sa lavagna",
"Members" : "Membros",
"Upload new files" : "Carriga archìvios noos",
"Share from Files" : "Cumpartzi dae Archìvios",
"Add this attachment" : "Agiunghe custu alligongiadu",
"Show in Files" : "Mustra in Archìvios",
"Unshare file" : "Annulla cumpartzidura de s'archìviu",
"Delete Attachment" : "Cantzella alligongiadu",
"Restore Attachment" : "Riprìstina alligongiadu",
"File to share" : "Archìviu de cumpartzire",
"Invalid path selected" : "Caminu seletzionadu non bàlidu",
"Open in sidebar view" : "Aberi in s'istanca laterale",
"Open in bigger view" : "Aberi in una bista prus ampra",
"Attachments" : "Alligongiados",
"Comments" : "Cummentos",
"Modified" : "Modificadu",
"Created" : "Creadu",
"The title cannot be empty." : "Su tìtulu non podet èssere bòidu",
"No comments yet. Begin the discussion!" : "Perunu cummentu ancora. Cumintzat sa chistionada!",
"Assign a tag to this card…" : "Assigna un'eticheta a cust'ischeda...",
"Assign to users" : "Assigna a utentes",
"Assign to users/groups/circles" : "Assigna a utentes/grupos/tropas",
"Assign a user to this card…" : "Assigna utente a cust'ischeda...",
"Due date" : "Iscadèntzia",
"Set a due date" : "Imposta iscadèntzia",
"Remove due date" : "Boga s'iscadèntzia",
"Select Date" : "Seletziona data",
"Save" : "Sarva",
"Description" : "Descritzione"
"The comment cannot be empty." : "Su cummentu non podet èssere bòidu",
"The comment cannot be longer than 1000 characters." : "Su cummentu non podet èssere prus longu de 1000 caràteres.",
"In reply to" : "Rispondende a ",
"Reply" : "Risponde",
"Update" : "Agiorna",
"Description" : "Descritzione",
"(Unsaved)" : "(Non sarbada)",
"(Saving…)" : "(Sarbende…)",
"Formatting help" : "Ghia pro sa formatatzione",
"Edit description" : "Modìfica descritzione",
"View description" : "Visualiza descritzione",
"Add Attachment" : "Agiunghe alligongiadu",
"Write a description …" : "Iscrie una descritzione ...",
"Choose attachment" : "Sèbera un'alligongiadu",
"(group)" : "(grupu)",
"(circle)" : "(tropa)",
"Assign to me" : "Assigna a mie",
"Unassign myself" : "Annulla s'assignatzione a mie",
"Move card" : "Tràmuda ischeda",
"Unarchive card" : "Ischeda no archiviada",
"Archive card" : "Archìviu no archiviadu",
"Delete card" : "Cantzella ischeda",
"Move card to another board" : "Tràmuda s'ischeda a un'àtera lavagna",
"Card deleted" : "Ischeda cantzellada",
"seconds ago" : "segundos a immoe",
"All boards" : "Totu is lavagnas",
"Archived boards" : "Lavagnas archiviadas",
"Shared with you" : "Cumpartzidu cun tegus",
"Use bigger card view" : "Imprea bista cun ischedas prus mannas",
"Show boards in calendar/tasks" : "Mustra lavagnas in calendàriu/fainas",
"Limit deck usage of groups" : "Mìnima s'impreu de deck de is grupos",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Su de minimare su deck at a impedire a is utentes chi non faghent parte de cuddos grupos de si creare lavagnas pròpias. Is utentes ant a èssere ancora capassos de traballare in is lavagnas chi fiant istadas cumpartzidas cun issos etotu,",
"Board details" : "Detàllios lavagna",
"Edit board" : "Modìfica lavagna",
"Clone board" : "Clona lavagna",
"Unarchive board" : "Annulla s'archiviatzione de sa lavagna",
"Archive board" : "Archìvia lavagna",
"Turn on due date reminders" : "Allughe is notìficas pro ammentare is iscadèntzias",
"Turn off due date reminders" : "Istuda is notìficas pro ammentare is iscadèntzias",
"Due date reminders" : "Notìficas pro ammentare is iscadèntzias",
"All cards" : "Totu is ischedas",
"Assigned cards" : "Ischedas assignadas",
"No notifications" : "Peruna notìfica",
"Delete board" : "Cantzella lavagna",
"Board {0} deleted" : "Lavagna {0} cantzellada",
"Only assigned cards" : "Isceti ischedas assignadas",
"No reminder" : "Perunu apuntu",
"An error occurred" : "Ddoe at àpidu un'errore",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Ses seguru chi cheres cantzellare sa lavagna {title}? Custa operatzione at a cantzellare totu is datos de custa lavagna.",
"Delete the board?" : "Cheres cantzellare sa lavagna?",
"Loading filtered view" : "Carrigamentu de sa bista cun su filtru",
"Today" : "Oe",
"Tomorrow" : "Cras",
"This week" : "Custa chida",
"No due" : "Peruna iscadèntzia",
"No upcoming cards" : "Peruna ischeda abarrada",
"upcoming cards" : "ischedas abarradas",
"Link to a board" : "Collega a una tabella",
"Link to a card" : "Collega a un'ischeda",
"Create a card" : "Crea un'ischeda",
"Message from {author} in {conversationName}" : "Messàgiu de {author} in {conversationName}",
"Something went wrong" : "Ddoe at àpidu un'errore",
"Failed to upload {name}" : "No at fatu a agiornare {name}",
"Maximum file size of {size} exceeded" : "Mannària màssima de s'archìviu de {size} superada",
"Error creating the share" : "Errore in sa creatzione de sa cumpatzidura",
"Share with a Deck card" : "Cumpartzi cun un'ischeda deck",
"Share {file} with a Deck card" : "Cumpartzi {file} cun un'ischeda de deck",
"Share" : "Cumpartzi"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -107,9 +107,16 @@ OC.L10N.register(
"Select the board to link to a project" : "Izberite zbirko za povezavo s projektom",
"Search by board title" : "Išči po imenu zbirke",
"Select board" : "Izbor zbirke",
"Create a new card" : "Ustvari novo nalogo",
"Select a board" : "Izbor zbirke",
"Select a list" : "Izbor seznama",
"Card title" : "Naslov naloge",
"Cancel" : "Prekliči",
"Creating the new card…" : "Poteka ustvarjanje nove naloge ...",
"\"{card}\" was added to \"{board}\"" : "Naloga »{card}« je dodana v zbirko »{board}«.",
"Open card" : "Odpri nalogo",
"Close" : "Zapri",
"Create card" : "Ustvari nalogo",
"Select a card" : "Izbor naloge",
"Select the card to link to a project" : "Izbor naloge za povezavo do projekta",
"Link to card" : "Poveži nalogo",
@@ -258,6 +265,7 @@ OC.L10N.register(
"upcoming cards" : "prihajajoče naloge",
"Link to a board" : "Povezava do zbirke",
"Link to a card" : "Povezava do naloge",
"Create a card" : "Ustvari nalogo",
"Something went wrong" : "Prišlo je do napake ...",
"Failed to upload {name}" : "Pošiljanje {name} je spodletelo",
"Maximum file size of {size} exceeded" : "Omejitev velikosti datoteke {size} je prekoračena.",

View File

@@ -105,9 +105,16 @@
"Select the board to link to a project" : "Izberite zbirko za povezavo s projektom",
"Search by board title" : "Išči po imenu zbirke",
"Select board" : "Izbor zbirke",
"Create a new card" : "Ustvari novo nalogo",
"Select a board" : "Izbor zbirke",
"Select a list" : "Izbor seznama",
"Card title" : "Naslov naloge",
"Cancel" : "Prekliči",
"Creating the new card…" : "Poteka ustvarjanje nove naloge ...",
"\"{card}\" was added to \"{board}\"" : "Naloga »{card}« je dodana v zbirko »{board}«.",
"Open card" : "Odpri nalogo",
"Close" : "Zapri",
"Create card" : "Ustvari nalogo",
"Select a card" : "Izbor naloge",
"Select the card to link to a project" : "Izbor naloge za povezavo do projekta",
"Link to card" : "Poveži nalogo",
@@ -256,6 +263,7 @@
"upcoming cards" : "prihajajoče naloge",
"Link to a board" : "Povezava do zbirke",
"Link to a card" : "Povezava do naloge",
"Create a card" : "Ustvari nalogo",
"Something went wrong" : "Prišlo je do napake ...",
"Failed to upload {name}" : "Pošiljanje {name} je spodletelo",
"Maximum file size of {size} exceeded" : "Omejitev velikosti datoteke {size} je prekoračena.",

View File

@@ -61,29 +61,29 @@ OC.L10N.register(
"{user} has deleted the attachment {attachment} from card {card}" : "{user} 已從卡 {card} 中刪除附件 {attachment}",
"You have restored the attachment {attachment} to card {card}" : "您恢復了卡片 {card} 中的附件 {attachment}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} 恢復了卡片 {card} 中的附件 {attachment}",
"You have commented on card {card}" : "您評論了卡片 {card}",
"{user} has commented on card {card}" : "{user} 評論了卡片 {card}",
"You have commented on card {card}" : "您意見了卡片 {card}",
"{user} has commented on card {card}" : "{user} 意見了卡片 {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "Deck 應用程式中的 <strong>卡片描述</strong> 已改變",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "<strong>Deck 應用程式</strong>中的改變",
"A <strong>comment</strong> was created on a card" : "卡片上創建了一個 <strong>評論</strong>",
"Upcoming cards" : "將到期的卡片",
"A <strong>comment</strong> was created on a card" : "卡片上創建了一個 <strong>意見</strong>",
"Upcoming cards" : "將到期的卡片",
"Personal" : "個人",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "%s 已將 “%s” 中的卡片 “%s” 指派給您。",
"{user} has assigned the card \"%s\" on \"%s\" to you." : "{user} 已將 “%s” 中的卡片 “%s” 指派給您。",
"The card \"%s\" on \"%s\" has reached its due date." : "\"%s\"中的卡片 \"%s\" 已到期。",
"%s has mentioned you in a comment on \"%s\"." : "%s 在 “%s” 的評論中提到了您。",
"{user} has mentioned you in a comment on \"%s\"." : "{user} 在 “%s” 的評論中提到了您。",
"%s has mentioned you in a comment on \"%s\"." : "%s 在 “%s” 的意見中提到了您。",
"{user} has mentioned you in a comment on \"%s\"." : "{user} 在 “%s” 的意見中提到了您。",
"The board \"%s\" has been shared with you by %s." : "面板 \"%s\" 已由 %s 分享給您。",
"{user} has shared the board %s with you." : "{user} 分享面板 %s 給您。",
"No data was provided to create an attachment." : "未能提供數據以創建附件",
"Finished" : "完成",
"To review" : "回顧",
"Action needed" : "需要操作",
"Later" : "稍後",
"To review" : "待審閱",
"Action needed" : "需要採取行動",
"Later" : "稍後處理",
"copy" : "複製",
"To do" : "待辦",
"Doing" : "行中",
"Doing" : "行中",
"Done" : "完成",
"Example Task 3" : "示例任務 3",
"Example Task 2" : "示例任務 2",
@@ -95,16 +95,16 @@ OC.L10N.register(
"No file was uploaded" : "沒有檔案被上傳",
"Missing a temporary folder" : "找不到暫存資料夾",
"Could not write file to disk" : "寫入硬碟失敗",
"A PHP extension stopped the file upload" : "個 PHP 擴充功能終止檔案的上傳",
"A PHP extension stopped the file upload" : "個 PHP 擴充功能終止檔案的上傳",
"No file uploaded or file size exceeds maximum of %s" : "沒有上傳檔案或檔案大小超過 %s 的最大值",
"Card not found" : "未找到卡片",
"Path is already shared with this card" : "已和這張卡片分享了路徑",
"Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式",
"Personal planning and team project organization" : "個人規劃和團隊項目組織",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用評論與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條",
"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是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條",
"Card details" : "卡片詳情",
"Add board" : "添加面板",
"Select the board to link to a project" : "選擇要鏈接到一個項目的面板",
"Select the board to link to a project" : "選擇要連結到一個項目的面板",
"Search by board title" : "通過標題搜索面板",
"Select board" : "選擇面板",
"Create a new card" : "建立新卡片",
@@ -117,24 +117,24 @@ OC.L10N.register(
"Open card" : "打開卡片",
"Close" : "關閉",
"Create card" : "建立卡片",
"Select a card" : "選擇一張卡片",
"Select the card to link to a project" : "選擇要鏈接到一個項目的卡片",
"Link to card" : "鏈接到卡片",
"File already exists" : "文件已存在",
"A file with the name {filename} already exists." : "使用文件名 {filename} 的文件已存在。",
"Select a card" : "選擇卡片",
"Select the card to link to a project" : "選擇要連結到一個項目的卡片",
"Link to card" : "連結到卡片",
"File already exists" : "檔案已存在",
"A file with the name {filename} already exists." : "名稱為 {filename} 的檔案已存在。",
"Do you want to overwrite it?" : "您確定要覆蓋嗎?",
"Overwrite file" : "覆蓋文件",
"Keep existing file" : "保持已存在的文件",
"This board is read only" : "此面板是讀的",
"Drop your files to upload" : "拖放您的文件以上傳",
"Overwrite file" : "覆蓋檔案",
"Keep existing file" : "保持已存在的檔案",
"This board is read only" : "此面板是讀的",
"Drop your files to upload" : "拖放您的檔案以上傳",
"Archived cards" : "已存檔卡片",
"Add list" : "添加列表",
"List name" : "列表名稱",
"Add list" : "添加清單",
"List name" : "清單名稱",
"Apply filter" : "應用過濾器",
"Filter by tag" : "標籤篩選",
"Filter by assigned user" : "根據指定用戶過濾",
"Unassigned" : "未分配",
"Filter by due date" : "根據到期日過濾",
"Filter by tag" : "標籤過濾",
"Filter by assigned user" : "以指派用戶過濾",
"Unassigned" : "未指派",
"Filter by due date" : "到期日過濾",
"Overdue" : "逾期",
"Next 24 hours" : "未來24小時",
"Next 7 days" : "未來7曰",
@@ -146,41 +146,41 @@ OC.L10N.register(
"Toggle compact mode" : "切換簡潔模式",
"Details" : "詳情",
"Loading board" : "正在加載面板",
"No lists available" : "無列表可用",
"Create a new list to add cards to this board" : "創建一個新列表來添加卡片到這個看板",
"No lists available" : "無清單可用",
"Create a new list to add cards to this board" : "創建一張新清單來添加卡片到這個看板",
"Board not found" : "未找到面板",
"Sharing" : "正在分享",
"Tags" : "標籤",
"Deleted items" : "已刪除項",
"Deleted items" : "已刪除項",
"Timeline" : "時間線",
"Deleted lists" : "已刪除的列表",
"Deleted lists" : "已刪除的清單",
"Undo" : "撤消",
"Deleted cards" : "已刪除卡片",
"Share board with a user, group or circle …" : "與一個用戶群組或圈子分享面板...",
"Searching for users, groups and circles …" : "正在搜用戶、群組和圈子 ......",
"Share board with a user, group or circle …" : "與一個用戶群組或圈子分享面板...",
"Searching for users, groups and circles …" : "正在搜用戶、群組和圈子 ......",
"No participants found" : "未找到參與者",
"Board owner" : "面板擁有者",
"Board owner" : "面板板主",
"(Group)" : "(群組)",
"(Circle)" : "(圈子)",
"Can edit" : "可以編輯",
"Can share" : "可以分享",
"Can manage" : "可以管理",
"Delete" : "刪除",
"Failed to create share with {displayName}" : " {displayName} 創建分享失敗",
"Add a new list" : "添加一個新列表",
"Failed to create share with {displayName}" : "無法為 {displayName} 創建分享",
"Add a new list" : "添加一張新清單",
"Archive all cards" : "封存所有卡片",
"Delete list" : "刪除列表",
"Delete list" : "刪除清單",
"Add card" : "添加卡片",
"Archive all cards in this list" : "存檔該列表的所有卡片",
"Archive all cards in this list" : "封存此清單內的所有卡片",
"Add a new card" : "添加一張新卡片",
"Card name" : "卡片名",
"List deleted" : "列表被刪除",
"Card name" : "卡片名",
"List deleted" : "清單已被刪除",
"Edit" : "編輯",
"Add a new tag" : "新增一個標籤",
"Add a new tag" : "添加新標籤",
"title and color value must be provided" : "必須提供標題和顏色值",
"Board name" : "板名",
"Members" : "員",
"Upload new files" : "上傳新文件",
"Board name" : "板名",
"Members" : "員",
"Upload new files" : "上傳新檔案",
"Share from Files" : "從檔案進行分享",
"Add this attachment" : "添加此附件",
"Show in Files" : "顯示在檔案中",
@@ -192,40 +192,40 @@ OC.L10N.register(
"Open in sidebar view" : "在側邊欄視圖中打開",
"Open in bigger view" : "在較大視圖中打開",
"Attachments" : "附件",
"Comments" : "評論",
"Modified" : "修改",
"Created" : "已創建",
"The title cannot be empty." : "標題不能為空",
"No comments yet. Begin the discussion!" : "還沒有評論。 開始討論吧!",
"Comments" : "意見",
"Modified" : "修改",
"Created" : "建立於",
"The title cannot be empty." : "標題不能為空",
"No comments yet. Begin the discussion!" : "尚無意見,開始討論吧!",
"Assign a tag to this card…" : "為該卡片分配標籤…",
"Assign to users" : "指派給用戶",
"Assign to users/groups/circles" : "分配給用戶/群組/圈子",
"Assign a user to this card…" : "為該卡片指派用戶",
"Due date" : "截至日期",
"Set a due date" : "設置一個到期日",
"Remove due date" : "移除截至日期",
"Assign to users/groups/circles" : "指派給用戶/群組/圈子",
"Assign a user to this card…" : "將此卡片指派用戶...",
"Due date" : "到期日",
"Set a due date" : "設置到期日",
"Remove due date" : "移除到期日",
"Select Date" : "選擇日期",
"Save" : "保存",
"The comment cannot be empty." : "註釋不能為空。",
"The comment cannot be longer than 1000 characters." : "註釋不能超過 1000 個字符。",
"In reply to" : "回",
"Reply" : "回",
"The comment cannot be empty." : "意見不能為空。",
"The comment cannot be longer than 1000 characters." : "意見不能超過 1000 個字符。",
"In reply to" : "回",
"Reply" : "回",
"Update" : "更新",
"Description" : "描述",
"(Unsaved)" : "(未保存的)",
"(Saving…)" : "正在保存...",
"(Saving…)" : "(保存...",
"Formatting help" : "格式化幫助",
"Edit description" : "編輯描述",
"View description" : "查看描述",
"Add Attachment" : "添加附件",
"Write a description …" : "寫一段描述",
"Choose attachment" : "選擇附件",
"(group)" : "(組)",
"(group)" : "組)",
"(circle)" : "(圈子)",
"Assign to me" : "指派給我",
"Unassign myself" : "自己解除分配",
"Unassign myself" : "自己解除指派",
"Move card" : "移動卡片",
"Unarchive card" : "恢復卡片存檔",
"Unarchive card" : "取消對卡片的封存",
"Archive card" : "封存卡片",
"Delete card" : "刪除卡片",
"Move card to another board" : "將卡片移到其他面板",
@@ -250,15 +250,15 @@ OC.L10N.register(
"Assigned cards" : "分配的卡片",
"No notifications" : "無通知",
"Delete board" : "刪除面板",
"Board {0} deleted" : "面板 {0} 被刪除",
"Only assigned cards" : "僅分配的卡片",
"Board {0} deleted" : "面板 {0} 被刪除",
"Only assigned cards" : "僅指派了的卡片",
"No reminder" : "無提醒",
"An error occurred" : "發生錯誤",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "你確定你要刪除 {title} 面板嗎?面板內所有數據都將因此被刪除。",
"Delete the board?" : "是否刪除面板?",
"Loading filtered view" : "正在加載已過濾視圖",
"Today" : "今",
"Tomorrow" : "明",
"Today" : "今",
"Tomorrow" : "明",
"This week" : "本星期",
"No due" : "沒有到期的",
"No upcoming cards" : "沒有快將到期的卡片",

View File

@@ -59,29 +59,29 @@
"{user} has deleted the attachment {attachment} from card {card}" : "{user} 已從卡 {card} 中刪除附件 {attachment}",
"You have restored the attachment {attachment} to card {card}" : "您恢復了卡片 {card} 中的附件 {attachment}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} 恢復了卡片 {card} 中的附件 {attachment}",
"You have commented on card {card}" : "您評論了卡片 {card}",
"{user} has commented on card {card}" : "{user} 評論了卡片 {card}",
"You have commented on card {card}" : "您意見了卡片 {card}",
"{user} has commented on card {card}" : "{user} 意見了卡片 {card}",
"A <strong>card description</strong> inside the Deck app has been changed" : "Deck 應用程式中的 <strong>卡片描述</strong> 已改變",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "<strong>Deck 應用程式</strong>中的改變",
"A <strong>comment</strong> was created on a card" : "卡片上創建了一個 <strong>評論</strong>",
"Upcoming cards" : "將到期的卡片",
"A <strong>comment</strong> was created on a card" : "卡片上創建了一個 <strong>意見</strong>",
"Upcoming cards" : "將到期的卡片",
"Personal" : "個人",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "%s 已將 “%s” 中的卡片 “%s” 指派給您。",
"{user} has assigned the card \"%s\" on \"%s\" to you." : "{user} 已將 “%s” 中的卡片 “%s” 指派給您。",
"The card \"%s\" on \"%s\" has reached its due date." : "\"%s\"中的卡片 \"%s\" 已到期。",
"%s has mentioned you in a comment on \"%s\"." : "%s 在 “%s” 的評論中提到了您。",
"{user} has mentioned you in a comment on \"%s\"." : "{user} 在 “%s” 的評論中提到了您。",
"%s has mentioned you in a comment on \"%s\"." : "%s 在 “%s” 的意見中提到了您。",
"{user} has mentioned you in a comment on \"%s\"." : "{user} 在 “%s” 的意見中提到了您。",
"The board \"%s\" has been shared with you by %s." : "面板 \"%s\" 已由 %s 分享給您。",
"{user} has shared the board %s with you." : "{user} 分享面板 %s 給您。",
"No data was provided to create an attachment." : "未能提供數據以創建附件",
"Finished" : "完成",
"To review" : "回顧",
"Action needed" : "需要操作",
"Later" : "稍後",
"To review" : "待審閱",
"Action needed" : "需要採取行動",
"Later" : "稍後處理",
"copy" : "複製",
"To do" : "待辦",
"Doing" : "行中",
"Doing" : "行中",
"Done" : "完成",
"Example Task 3" : "示例任務 3",
"Example Task 2" : "示例任務 2",
@@ -93,16 +93,16 @@
"No file was uploaded" : "沒有檔案被上傳",
"Missing a temporary folder" : "找不到暫存資料夾",
"Could not write file to disk" : "寫入硬碟失敗",
"A PHP extension stopped the file upload" : "個 PHP 擴充功能終止檔案的上傳",
"A PHP extension stopped the file upload" : "個 PHP 擴充功能終止檔案的上傳",
"No file uploaded or file size exceeds maximum of %s" : "沒有上傳檔案或檔案大小超過 %s 的最大值",
"Card not found" : "未找到卡片",
"Path is already shared with this card" : "已和這張卡片分享了路徑",
"Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式",
"Personal planning and team project organization" : "個人規劃和團隊項目組織",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用評論與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條",
"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是一種看板式組織工具旨在針對與Nextcloud集成的團隊進行個人計劃和項目組織。\n\n\n- 📥 增加您的任務到card和把它們整理好\n- 📄 寫下額外的筆記在markdown\n- 🔖 分配標籤以更好地組織您的工作\n- 👥 與您的團隊,朋友或家人分享\n- 📎 附加檔案並將其嵌入到您的 markdown 描述\n- 💬 使用意見與您的團隊討論\n- ⚡ 在活動流中跟踪更改\n- 🚀 讓您的項目井井有條",
"Card details" : "卡片詳情",
"Add board" : "添加面板",
"Select the board to link to a project" : "選擇要鏈接到一個項目的面板",
"Select the board to link to a project" : "選擇要連結到一個項目的面板",
"Search by board title" : "通過標題搜索面板",
"Select board" : "選擇面板",
"Create a new card" : "建立新卡片",
@@ -115,24 +115,24 @@
"Open card" : "打開卡片",
"Close" : "關閉",
"Create card" : "建立卡片",
"Select a card" : "選擇一張卡片",
"Select the card to link to a project" : "選擇要鏈接到一個項目的卡片",
"Link to card" : "鏈接到卡片",
"File already exists" : "文件已存在",
"A file with the name {filename} already exists." : "使用文件名 {filename} 的文件已存在。",
"Select a card" : "選擇卡片",
"Select the card to link to a project" : "選擇要連結到一個項目的卡片",
"Link to card" : "連結到卡片",
"File already exists" : "檔案已存在",
"A file with the name {filename} already exists." : "名稱為 {filename} 的檔案已存在。",
"Do you want to overwrite it?" : "您確定要覆蓋嗎?",
"Overwrite file" : "覆蓋文件",
"Keep existing file" : "保持已存在的文件",
"This board is read only" : "此面板是讀的",
"Drop your files to upload" : "拖放您的文件以上傳",
"Overwrite file" : "覆蓋檔案",
"Keep existing file" : "保持已存在的檔案",
"This board is read only" : "此面板是讀的",
"Drop your files to upload" : "拖放您的檔案以上傳",
"Archived cards" : "已存檔卡片",
"Add list" : "添加列表",
"List name" : "列表名稱",
"Add list" : "添加清單",
"List name" : "清單名稱",
"Apply filter" : "應用過濾器",
"Filter by tag" : "標籤篩選",
"Filter by assigned user" : "根據指定用戶過濾",
"Unassigned" : "未分配",
"Filter by due date" : "根據到期日過濾",
"Filter by tag" : "標籤過濾",
"Filter by assigned user" : "以指派用戶過濾",
"Unassigned" : "未指派",
"Filter by due date" : "到期日過濾",
"Overdue" : "逾期",
"Next 24 hours" : "未來24小時",
"Next 7 days" : "未來7曰",
@@ -144,41 +144,41 @@
"Toggle compact mode" : "切換簡潔模式",
"Details" : "詳情",
"Loading board" : "正在加載面板",
"No lists available" : "無列表可用",
"Create a new list to add cards to this board" : "創建一個新列表來添加卡片到這個看板",
"No lists available" : "無清單可用",
"Create a new list to add cards to this board" : "創建一張新清單來添加卡片到這個看板",
"Board not found" : "未找到面板",
"Sharing" : "正在分享",
"Tags" : "標籤",
"Deleted items" : "已刪除項",
"Deleted items" : "已刪除項",
"Timeline" : "時間線",
"Deleted lists" : "已刪除的列表",
"Deleted lists" : "已刪除的清單",
"Undo" : "撤消",
"Deleted cards" : "已刪除卡片",
"Share board with a user, group or circle …" : "與一個用戶群組或圈子分享面板...",
"Searching for users, groups and circles …" : "正在搜用戶、群組和圈子 ......",
"Share board with a user, group or circle …" : "與一個用戶群組或圈子分享面板...",
"Searching for users, groups and circles …" : "正在搜用戶、群組和圈子 ......",
"No participants found" : "未找到參與者",
"Board owner" : "面板擁有者",
"Board owner" : "面板板主",
"(Group)" : "(群組)",
"(Circle)" : "(圈子)",
"Can edit" : "可以編輯",
"Can share" : "可以分享",
"Can manage" : "可以管理",
"Delete" : "刪除",
"Failed to create share with {displayName}" : " {displayName} 創建分享失敗",
"Add a new list" : "添加一個新列表",
"Failed to create share with {displayName}" : "無法為 {displayName} 創建分享",
"Add a new list" : "添加一張新清單",
"Archive all cards" : "封存所有卡片",
"Delete list" : "刪除列表",
"Delete list" : "刪除清單",
"Add card" : "添加卡片",
"Archive all cards in this list" : "存檔該列表的所有卡片",
"Archive all cards in this list" : "封存此清單內的所有卡片",
"Add a new card" : "添加一張新卡片",
"Card name" : "卡片名",
"List deleted" : "列表被刪除",
"Card name" : "卡片名",
"List deleted" : "清單已被刪除",
"Edit" : "編輯",
"Add a new tag" : "新增一個標籤",
"Add a new tag" : "添加新標籤",
"title and color value must be provided" : "必須提供標題和顏色值",
"Board name" : "板名",
"Members" : "員",
"Upload new files" : "上傳新文件",
"Board name" : "板名",
"Members" : "員",
"Upload new files" : "上傳新檔案",
"Share from Files" : "從檔案進行分享",
"Add this attachment" : "添加此附件",
"Show in Files" : "顯示在檔案中",
@@ -190,40 +190,40 @@
"Open in sidebar view" : "在側邊欄視圖中打開",
"Open in bigger view" : "在較大視圖中打開",
"Attachments" : "附件",
"Comments" : "評論",
"Modified" : "修改",
"Created" : "已創建",
"The title cannot be empty." : "標題不能為空",
"No comments yet. Begin the discussion!" : "還沒有評論。 開始討論吧!",
"Comments" : "意見",
"Modified" : "修改",
"Created" : "建立於",
"The title cannot be empty." : "標題不能為空",
"No comments yet. Begin the discussion!" : "尚無意見,開始討論吧!",
"Assign a tag to this card…" : "為該卡片分配標籤…",
"Assign to users" : "指派給用戶",
"Assign to users/groups/circles" : "分配給用戶/群組/圈子",
"Assign a user to this card…" : "為該卡片指派用戶",
"Due date" : "截至日期",
"Set a due date" : "設置一個到期日",
"Remove due date" : "移除截至日期",
"Assign to users/groups/circles" : "指派給用戶/群組/圈子",
"Assign a user to this card…" : "將此卡片指派用戶...",
"Due date" : "到期日",
"Set a due date" : "設置到期日",
"Remove due date" : "移除到期日",
"Select Date" : "選擇日期",
"Save" : "保存",
"The comment cannot be empty." : "註釋不能為空。",
"The comment cannot be longer than 1000 characters." : "註釋不能超過 1000 個字符。",
"In reply to" : "回",
"Reply" : "回",
"The comment cannot be empty." : "意見不能為空。",
"The comment cannot be longer than 1000 characters." : "意見不能超過 1000 個字符。",
"In reply to" : "回",
"Reply" : "回",
"Update" : "更新",
"Description" : "描述",
"(Unsaved)" : "(未保存的)",
"(Saving…)" : "正在保存...",
"(Saving…)" : "(保存...",
"Formatting help" : "格式化幫助",
"Edit description" : "編輯描述",
"View description" : "查看描述",
"Add Attachment" : "添加附件",
"Write a description …" : "寫一段描述",
"Choose attachment" : "選擇附件",
"(group)" : "(組)",
"(group)" : "組)",
"(circle)" : "(圈子)",
"Assign to me" : "指派給我",
"Unassign myself" : "自己解除分配",
"Unassign myself" : "自己解除指派",
"Move card" : "移動卡片",
"Unarchive card" : "恢復卡片存檔",
"Unarchive card" : "取消對卡片的封存",
"Archive card" : "封存卡片",
"Delete card" : "刪除卡片",
"Move card to another board" : "將卡片移到其他面板",
@@ -248,15 +248,15 @@
"Assigned cards" : "分配的卡片",
"No notifications" : "無通知",
"Delete board" : "刪除面板",
"Board {0} deleted" : "面板 {0} 被刪除",
"Only assigned cards" : "僅分配的卡片",
"Board {0} deleted" : "面板 {0} 被刪除",
"Only assigned cards" : "僅指派了的卡片",
"No reminder" : "無提醒",
"An error occurred" : "發生錯誤",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "你確定你要刪除 {title} 面板嗎?面板內所有數據都將因此被刪除。",
"Delete the board?" : "是否刪除面板?",
"Loading filtered view" : "正在加載已過濾視圖",
"Today" : "今",
"Tomorrow" : "明",
"Today" : "今",
"Tomorrow" : "明",
"This week" : "本星期",
"No due" : "沒有到期的",
"No upcoming cards" : "沒有快將到期的卡片",

View File

@@ -73,10 +73,11 @@ class BoardController extends ApiController {
* @param $title
* @param $color
* @param $archived
* @param $upcoming_show_only_assigned_cards
* @return \OCP\AppFramework\Db\Entity
*/
public function update($id, $title, $color, $archived) {
return $this->boardService->update($id, $title, $color, $archived);
public function update($id, $title, $color, $archived, $upcoming_show_only_assigned_cards) {
return $this->boardService->update($id, $title, $color, $archived, $upcoming_show_only_assigned_cards);
}
/**

View File

@@ -36,6 +36,7 @@ class Board extends RelationalEntity {
protected $stacks = [];
protected $deletedAt = 0;
protected $lastModified = 0;
protected $upcoming_show_only_assigned_cards = true;
protected $settings = [];
@@ -45,6 +46,7 @@ class Board extends RelationalEntity {
$this->addType('archived', 'boolean');
$this->addType('deletedAt', 'integer');
$this->addType('lastModified', 'integer');
$this->addType('upcoming_show_only_assigned_cards', 'boolean');
$this->addRelation('labels');
$this->addRelation('acl');
$this->addRelation('shared');

View File

@@ -66,7 +66,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @throws DoesNotExistException
*/
public function find($id, $withLabels = false, $withAcl = false) {
$sql = 'SELECT id, title, owner, color, archived, deleted_at, last_modified FROM `*PREFIX*deck_boards` ' .
$sql = 'SELECT id, title, owner, color, archived, deleted_at, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` ' .
'WHERE `id` = ?';
$board = $this->findEntity($sql, [$id]);
@@ -105,12 +105,12 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
*/
public function findAllByUser($userId, $limit = null, $offset = null, $since = -1, $includeArchived = true) {
// FIXME: One moving to QBMapper we should allow filtering the boards probably by method chaining for additional where clauses
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?';
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?';
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
}
$sql .= ' UNION ' .
'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` as boards ' .
'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?';
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
@@ -142,7 +142,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
if (count($groups) <= 0) {
return [];
}
$sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
$sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` as boards ' .
'INNER JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE owner != ? AND type=? AND (';
for ($i = 0, $iMax = count($groups); $i < $iMax; $i++) {
$sql .= 'acl.participant = ? ';
@@ -169,12 +169,12 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
}
$circles = array_map(function ($circle) {
return $circle->getUniqueId();
}, \OCA\Circles\Api\v1\Circles::joinedCircles('', true));
}, \OCA\Circles\Api\v1\Circles::joinedCircles($userId, true));
if (count($circles) === 0) {
return [];
}
$sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
$sql = 'SELECT boards.id, title, owner, color, archived, deleted_at, 2 as shared, last_modified, upcoming_show_only_assigned_cards FROM `*PREFIX*deck_boards` as boards ' .
'INNER JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE owner != ? AND type=? AND (';
for ($i = 0, $iMax = count($circles); $i < $iMax; $i++) {
$sql .= 'acl.participant = ? ';

View File

@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace OCA\Deck\Migration;
use Closure;
use OCP\DB\ISchemaWrapper;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;
class Version010404Date20210305 extends SimpleMigrationStep {
public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();
$table = $schema->getTable('deck_boards');
if (!$table->hasColumn('upcoming_show_only_assigned_cards')) {
$table->addColumn('upcoming_show_only_assigned_cards', 'boolean', [
'notnull' => false,
'default' => true
]);
}
return $schema;
}
}

View File

@@ -422,13 +422,14 @@ class BoardService {
* @param $title
* @param $color
* @param $archived
* @param $upcoming_show_only_assigned_cards
* @return \OCP\AppFramework\Db\Entity
* @throws DoesNotExistException
* @throws \OCA\Deck\NoPermissionException
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
* @throws BadRequestException
*/
public function update($id, $title, $color, $archived) {
public function update($id, $title, $color, $archived, $upcoming_show_only_assigned_cards) {
if (is_numeric($id) === false) {
throw new BadRequestException('board id must be a number');
}
@@ -445,12 +446,17 @@ class BoardService {
throw new BadRequestException('archived must be a boolean');
}
if (is_bool($upcoming_show_only_assigned_cards) === false) {
throw new BadRequestException('upcoming_show_only_assigned_cards must be a boolean');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id);
$changes = new ChangeSet($board);
$board->setTitle($title);
$board->setColor($color);
$board->setArchived($archived);
$board->setUpcoming_show_only_assigned_cards($upcoming_show_only_assigned_cards);
$changes->setAfter($board);
$this->boardMapper->update($board); // operate on clone so we can check for updated fields
$this->boardMapper->mapOwner($board);

View File

@@ -27,10 +27,9 @@ use OCA\Deck\Db\Attachment;
use OCA\Deck\Db\AttachmentMapper;
use OCA\Deck\StatusException;
use OCA\Deck\Exceptions\ConflictException;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\StreamResponse;
use OCP\Files\IAppData;
use OCP\Files\IMimeTypeDetector;
use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
@@ -49,6 +48,7 @@ class FileService implements IAttachmentService {
private $rootFolder;
private $config;
private $attachmentMapper;
private $mimeTypeDetector;
public function __construct(
IL10N $l10n,
@@ -57,7 +57,8 @@ class FileService implements IAttachmentService {
ILogger $logger,
IRootFolder $rootFolder,
IConfig $config,
AttachmentMapper $attachmentMapper
AttachmentMapper $attachmentMapper,
IMimeTypeDetector $mimeTypeDetector
) {
$this->l10n = $l10n;
$this->appData = $appData;
@@ -66,6 +67,7 @@ class FileService implements IAttachmentService {
$this->rootFolder = $rootFolder;
$this->config = $config;
$this->attachmentMapper = $attachmentMapper;
$this->mimeTypeDetector = $mimeTypeDetector;
}
/**
@@ -225,27 +227,14 @@ class FileService implements IAttachmentService {
/**
* @param Attachment $attachment
* @return FileDisplayResponse|\OCP\AppFramework\Http\Response|StreamResponse
* @return StreamResponse
* @throws \Exception
*/
public function display(Attachment $attachment) {
$file = $this->getFileFromRootFolder($attachment);
if (method_exists($file, 'fopen')) {
$response = new StreamResponse($file->fopen('r'));
$response->addHeader('Content-Disposition', 'inline; filename="' . rawurldecode($file->getName()) . '"');
} else {
$response = new FileDisplayResponse($file);
}
// We need those since otherwise chrome won't show the PDF file with CSP rule object-src 'none'
// https://bugs.chromium.org/p/chromium/issues/detail?id=271452
$policy = new ContentSecurityPolicy();
$policy->addAllowedObjectDomain('\'self\'');
$policy->addAllowedObjectDomain('blob:');
$policy->addAllowedMediaDomain('\'self\'');
$policy->addAllowedMediaDomain('blob:');
$response->setContentSecurityPolicy($policy);
$response->addHeader('Content-Type', $file->getMimeType());
$response = new StreamResponse($file->fopen('rb'));
$response->addHeader('Content-Disposition', 'attachment; filename="' . rawurldecode($file->getName()) . '"');
$response->addHeader('Content-Type', $this->mimeTypeDetector->getSecureMimeType($file->getMimeType()));
return $response;
}

View File

@@ -26,10 +26,9 @@ namespace OCA\Deck\Service;
use OCA\Deck\Db\Attachment;
use OCA\Deck\Sharing\DeckShareProvider;
use OCA\Deck\StatusException;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\StreamResponse;
use OCP\Constants;
use OCP\Files\IMimeTypeDetector;
use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException;
use OCP\IDBConnection;
@@ -50,6 +49,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
private $l10n;
private $preview;
private $permissionService;
private $mimeTypeDetector;
public function __construct(
IRequest $request,
@@ -60,6 +60,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
DeckShareProvider $shareProvider,
IPreview $preview,
PermissionService $permissionService,
IMimeTypeDetector $mimeTypeDetector,
string $userId = null
) {
$this->request = $request;
@@ -70,6 +71,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
$this->shareManager = $shareManager;
$this->userId = $userId;
$this->preview = $preview;
$this->mimeTypeDetector = $mimeTypeDetector;
}
public function listAttachments(int $cardId): array {
@@ -147,22 +149,10 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
if ($file === null || $share->getSharedWith() !== (string)$attachment->getCardId()) {
throw new NotFoundException('File not found');
}
if (method_exists($file, 'fopen')) {
$response = new StreamResponse($file->fopen('r'));
$response->addHeader('Content-Disposition', 'inline; filename="' . rawurldecode($file->getName()) . '"');
} else {
$response = new FileDisplayResponse($file);
}
// We need those since otherwise chrome won't show the PDF file with CSP rule object-src 'none'
// https://bugs.chromium.org/p/chromium/issues/detail?id=271452
$policy = new ContentSecurityPolicy();
$policy->addAllowedObjectDomain('\'self\'');
$policy->addAllowedObjectDomain('blob:');
$policy->addAllowedMediaDomain('\'self\'');
$policy->addAllowedMediaDomain('blob:');
$response->setContentSecurityPolicy($policy);
$response->addHeader('Content-Type', $file->getMimeType());
$response = new StreamResponse($file->fopen('rb'));
$response->addHeader('Content-Disposition', 'attachment; filename="' . rawurldecode($file->getName()) . '"');
$response->addHeader('Content-Type', $this->mimeTypeDetector->getSecureMimeType($file->getMimeType()));
return $response;
}
@@ -184,7 +174,6 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
throw new StatusException('Could not read file');
}
$target->putContent($content);
fclose($content);
$share = $this->shareManager->newShare();
$share->setNode($target);

861
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -29,7 +29,7 @@
},
"dependencies": {
"@babel/polyfill": "^7.12.1",
"@babel/runtime": "^7.13.8",
"@babel/runtime": "^7.13.9",
"@juliushaertl/vue-richtext": "^1.0.1",
"@nextcloud/auth": "^1.3.0",
"@nextcloud/axios": "^1.6.0",
@@ -41,7 +41,7 @@
"@nextcloud/moment": "^1.1.1",
"@nextcloud/router": "^1.2.0",
"@nextcloud/vue": "^3.6.0",
"@nextcloud/vue-dashboard": "^1.0.1",
"@nextcloud/vue-dashboard": "^1.1.0",
"blueimp-md5": "^2.18.0",
"dompurify": "^2.2.6",
"lodash": "^4.17.21",
@@ -70,7 +70,7 @@
"devDependencies": {
"@babel/core": "^7.13.8",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/preset-env": "^7.13.8",
"@babel/preset-env": "^7.13.10",
"@nextcloud/browserslist-config": "^1.0.0",
"@nextcloud/eslint-config": "^2.2.0",
"@nextcloud/eslint-plugin": "^1.5.0",
@@ -88,7 +88,7 @@
"eslint-loader": "^4.0.2",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-promise": "^4.3.1",
"eslint-plugin-standard": "^4.1.0",
"eslint-plugin-vue": "^6.2.2",
"file-loader": "^6.2.0",

View File

@@ -112,6 +112,12 @@
{{ dueDateReminderText }}
</ActionButton>
<ActionCheckbox v-if="canManage"
:checked="board.upcoming_show_only_assigned_cards"
@change="actionToggleUpcoming_show_only_assigned_cards">
{{ t('deck', 'Show only cards assigned to me in upcoming view') }}
</ActionCheckbox>
<ActionButton v-if="canManage && !isDueSubmenuActive"
icon="icon-delete"
:close-after-click="true"
@@ -133,7 +139,7 @@
</template>
<script>
import { AppNavigationIconBullet, AppNavigationCounter, AppNavigationItem, ColorPicker, Actions, ActionButton } from '@nextcloud/vue'
import { AppNavigationIconBullet, AppNavigationCounter, AppNavigationItem, ColorPicker, Actions, ActionButton, ActionCheckbox } from '@nextcloud/vue'
import ClickOutside from 'vue-click-outside'
export default {
@@ -145,6 +151,7 @@ export default {
ColorPicker,
Actions,
ActionButton,
ActionCheckbox,
},
directives: {
ClickOutside,
@@ -311,6 +318,9 @@ export default {
this.isDueSubmenuActive = false
this.updateDueSetting = null
},
actionToggleUpcoming_show_only_assigned_cards() {
this.$store.dispatch('toggleUpcoming_show_only_assigned_cards', this.board)
},
},
inject: [
'boardApi',

View File

@@ -308,6 +308,13 @@ export default new Vuex.Store({
Vue.delete(state.currentBoard.acl, removeIndex)
}
},
toggleUpcoming_show_only_assigned_cards(state, board) {
let currentBoard = state.boards.filter((b) => {
return board.id === b.id
})
currentBoard = currentBoard[0]
Vue.set(currentBoard, 'upcoming_show_only_assigned_cards', board.upcoming_show_only_assigned_cards)
},
},
actions: {
@@ -490,5 +497,13 @@ export default new Vuex.Store({
dispatch('loadBoardById', acl.boardId)
})
},
toggleUpcoming_show_only_assigned_cards({ commit }, board) {
const boardCopy = JSON.parse(JSON.stringify(board))
boardCopy.upcoming_show_only_assigned_cards = !boardCopy.upcoming_show_only_assigned_cards
apiClient.updateBoard(boardCopy)
.then((board) => {
commit('toggleUpcoming_show_only_assigned_cards', board)
})
},
},
})

View File

@@ -25,10 +25,10 @@ namespace OCA\Deck\Service;
use OCA\Deck\Db\Attachment;
use OCA\Deck\Db\AttachmentMapper;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\StreamResponse;
use OCP\Files\Folder;
use OCP\Files\IAppData;
use OCP\Files\IMimeTypeDetector;
use OCP\Files\IRootFolder;
use OCP\Files\SimpleFS\ISimpleFile;
use OCP\Files\SimpleFS\ISimpleFolder;
@@ -57,6 +57,8 @@ class FileServiceTest extends TestCase {
private $config;
/** @var AttachmentMapper|MockObject */
private $attachmentMapper;
/** @var IMimeTypeDetector|MockObject */
private $mimeTypeDetector;
public function setUp(): void {
parent::setUp();
@@ -67,7 +69,8 @@ class FileServiceTest extends TestCase {
$this->rootFolder = $this->createMock(IRootFolder::class);
$this->config = $this->createMock(IConfig::class);
$this->attachmentMapper = $this->createMock(AttachmentMapper::class);
$this->fileService = new FileService($this->l10n, $this->appData, $this->request, $this->logger, $this->rootFolder, $this->config, $this->attachmentMapper);
$this->mimeTypeDetector = $this->createMock(IMimeTypeDetector::class);
$this->fileService = new FileService($this->l10n, $this->appData, $this->request, $this->logger, $this->rootFolder, $this->config, $this->attachmentMapper, $this->mimeTypeDetector);
}
public function mockGetFolder($cardId) {
@@ -268,51 +271,13 @@ class FileServiceTest extends TestCase {
$file->expects($this->any())
->method('fopen')
->willReturn('fileresource');
$this->mimeTypeDetector->expects($this->once())
->method('getSecureMimeType')
->willReturn('image/jpeg');
$actual = $this->fileService->display($attachment);
$expected = new StreamResponse('fileresource');
$expected->addHeader('Content-Type', 'image/jpeg');
$expected->addHeader('Content-Disposition', 'inline; filename="' . rawurldecode($file->getName()) . '"');
$policy = new ContentSecurityPolicy();
$policy->addAllowedObjectDomain('\'self\'');
$policy->addAllowedObjectDomain('blob:');
$policy->addAllowedMediaDomain('\'self\'');
$policy->addAllowedMediaDomain('blob:');
$expected->setContentSecurityPolicy($policy);
$this->assertEquals($expected, $actual);
}
public function testDisplayPdf() {
$this->config->expects($this->once())
->method('getSystemValue')
->willReturn('123');
$appDataFolder = $this->createMock(Folder::class);
$deckAppDataFolder = $this->createMock(Folder::class);
$cardFolder = $this->createMock(Folder::class);
$this->rootFolder->expects($this->once())->method('get')->willReturn($appDataFolder);
$appDataFolder->expects($this->once())->method('get')->willReturn($deckAppDataFolder);
$deckAppDataFolder->expects($this->once())->method('get')->willReturn($cardFolder);
$attachment = $this->getAttachment();
$file = $this->createMock(\OCP\Files\File::class);
$cardFolder->expects($this->once())->method('get')->willReturn($file);
$file->expects($this->any())
->method('getMimeType')
->willReturn('application/pdf');
$file->expects($this->any())
->method('getName')
->willReturn('file1');
$file->expects($this->any())
->method('fopen')
->willReturn('fileresource');
$actual = $this->fileService->display($attachment);
$expected = new StreamResponse('fileresource');
$expected->addHeader('Content-Disposition', 'inline; filename="' . rawurldecode($file->getName()) . '"');
$expected->addHeader('Content-Type', 'application/pdf');
$policy = new ContentSecurityPolicy();
$policy->addAllowedObjectDomain('\'self\'');
$policy->addAllowedObjectDomain('blob:');
$policy->addAllowedMediaDomain('\'self\'');
$policy->addAllowedMediaDomain('blob:');
$expected->setContentSecurityPolicy($policy);
$expected->addHeader('Content-Disposition', 'attachment; filename="' . rawurldecode($file->getName()) . '"');
$this->assertEquals($expected, $actual);
}