Compare commits
9 Commits
backport/6
...
backport/6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aab8c17953 | ||
|
|
490fd4b042 | ||
|
|
65a714353e | ||
|
|
37f1155c9a | ||
|
|
b2acf2d967 | ||
|
|
c7b4699241 | ||
|
|
48ee12decd | ||
|
|
c066f7b148 | ||
|
|
1761e961c3 |
@@ -34,9 +34,14 @@ OC.L10N.register(
|
||||
"Later" : "Después",
|
||||
"copy" : "copiar",
|
||||
"Done" : "Hecho",
|
||||
"The file was uploaded" : "El archivo ha sido subido",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido sobrepasa el valor MAX_FILE_SIZE especificada en el formulario HTML",
|
||||
"The file was only partially uploaded" : "El archivo sólo fue cargado parcialmente",
|
||||
"No file was uploaded" : "No se subió ningún archivo ",
|
||||
"Missing a temporary folder" : "Falta un directorio temporal",
|
||||
"Could not write file to disk" : "No se pudo escribir el archivo en el disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP detuvo la carga del archivo",
|
||||
"Card not found" : "Tarjeta no encontrada",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, favor de seguir el formato AAAA-MM-DD",
|
||||
"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 es una herramienta de organización de estilo kanban dirigida a la planificación personal y la organización de proyectos para equipos integrados con Nextcloud.\n\n\n- 📥 Agrega tus tareas a las tarjetas y ordénalas.\n- 📄 Escriba notas adicionales\n- 🔖 Asignar etiquetas para una organización mejor\n- 👥 Comparte con tu equipo, amigos o familia.\n- 📎 Adjuntar archivos e incrustarlos en su descripción\n- 💬 Discuta con su equipo usando comentarios.\n- ⚡ Mantenga un registro de los cambios en el flujo de actividad\n- 🚀 Organiza tu proyecto",
|
||||
|
||||
@@ -32,9 +32,14 @@
|
||||
"Later" : "Después",
|
||||
"copy" : "copiar",
|
||||
"Done" : "Hecho",
|
||||
"The file was uploaded" : "El archivo ha sido subido",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido sobrepasa el valor MAX_FILE_SIZE especificada en el formulario HTML",
|
||||
"The file was only partially uploaded" : "El archivo sólo fue cargado parcialmente",
|
||||
"No file was uploaded" : "No se subió ningún archivo ",
|
||||
"Missing a temporary folder" : "Falta un directorio temporal",
|
||||
"Could not write file to disk" : "No se pudo escribir el archivo en el disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP detuvo la carga del archivo",
|
||||
"Card not found" : "Tarjeta no encontrada",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, favor de seguir el formato AAAA-MM-DD",
|
||||
"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 es una herramienta de organización de estilo kanban dirigida a la planificación personal y la organización de proyectos para equipos integrados con Nextcloud.\n\n\n- 📥 Agrega tus tareas a las tarjetas y ordénalas.\n- 📄 Escriba notas adicionales\n- 🔖 Asignar etiquetas para una organización mejor\n- 👥 Comparte con tu equipo, amigos o familia.\n- 📎 Adjuntar archivos e incrustarlos en su descripción\n- 💬 Discuta con su equipo usando comentarios.\n- ⚡ Mantenga un registro de los cambios en el flujo de actividad\n- 🚀 Organiza tu proyecto",
|
||||
|
||||
@@ -257,6 +257,7 @@ OC.L10N.register(
|
||||
"Shift" : "تغییر مکان",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "جستجو",
|
||||
"Show help dialog" : "نمایش پنجرهٔ راهنما",
|
||||
"Enter" : "Enter",
|
||||
"Space" : "Space",
|
||||
"All boards" : "همه تختهها",
|
||||
|
||||
@@ -255,6 +255,7 @@
|
||||
"Shift" : "تغییر مکان",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "جستجو",
|
||||
"Show help dialog" : "نمایش پنجرهٔ راهنما",
|
||||
"Enter" : "Enter",
|
||||
"Space" : "Space",
|
||||
"All boards" : "همه تختهها",
|
||||
|
||||
@@ -247,6 +247,7 @@ OC.L10N.register(
|
||||
"Choose a date" : "Válasszon dátumot",
|
||||
"Remove due date" : "Határidő eltávolítása",
|
||||
"Mark as done" : "Megjelölés készként",
|
||||
"Not done" : "Nincs kész",
|
||||
"Unarchive card" : "Kártya archiválásának visszavonása",
|
||||
"Archive card" : "Kártya archiválása",
|
||||
"Select Date" : "Dátum kiválasztása",
|
||||
|
||||
@@ -245,6 +245,7 @@
|
||||
"Choose a date" : "Válasszon dátumot",
|
||||
"Remove due date" : "Határidő eltávolítása",
|
||||
"Mark as done" : "Megjelölés készként",
|
||||
"Not done" : "Nincs kész",
|
||||
"Unarchive card" : "Kártya archiválásának visszavonása",
|
||||
"Archive card" : "Kártya archiválása",
|
||||
"Select Date" : "Dátum kiválasztása",
|
||||
|
||||
@@ -60,6 +60,7 @@ class CardService {
|
||||
private StackMapper $stackMapper;
|
||||
private BoardMapper $boardMapper;
|
||||
private LabelMapper $labelMapper;
|
||||
private LabelService $labelService;
|
||||
private PermissionService $permissionService;
|
||||
private BoardService $boardService;
|
||||
private NotificationHelper $notificationHelper;
|
||||
@@ -81,6 +82,7 @@ class CardService {
|
||||
StackMapper $stackMapper,
|
||||
BoardMapper $boardMapper,
|
||||
LabelMapper $labelMapper,
|
||||
LabelService $labelService,
|
||||
PermissionService $permissionService,
|
||||
BoardService $boardService,
|
||||
NotificationHelper $notificationHelper,
|
||||
@@ -101,6 +103,7 @@ class CardService {
|
||||
$this->stackMapper = $stackMapper;
|
||||
$this->boardMapper = $boardMapper;
|
||||
$this->labelMapper = $labelMapper;
|
||||
$this->labelService = $labelService;
|
||||
$this->permissionService = $permissionService;
|
||||
$this->boardService = $boardService;
|
||||
$this->notificationHelper = $notificationHelper;
|
||||
@@ -369,8 +372,34 @@ class CardService {
|
||||
}
|
||||
$card->setDescription($description);
|
||||
|
||||
|
||||
// @var Card $card
|
||||
$card = $this->cardMapper->update($card);
|
||||
$oldBoardId = $this->stackMapper->findBoardId($changes->getBefore()->getStackId());
|
||||
$boardId = $this->cardMapper->findBoardId($card->getId());
|
||||
if($boardId !== $oldBoardId) {
|
||||
$stack = $this->stackMapper->find($card->getStackId());
|
||||
$board = $this->boardService->find($this->cardMapper->findBoardId($card->getId()));
|
||||
$boardLabels = $board->getLabels() ?? [];
|
||||
foreach($card->getLabels() as $cardLabel) {
|
||||
$this->removeLabel($card->getId(), $cardLabel->getId());
|
||||
$label = $this->labelMapper->find($cardLabel->getId());
|
||||
$filteredLabels = array_values(array_filter($boardLabels, fn ($item) => $item->getTitle() === $label->getTitle()));
|
||||
// clone labels that are assigned to card but don't exist in new board
|
||||
if (empty($filteredLabels)) {
|
||||
if ($this->permissionService->getPermissions($boardId)[Acl::PERMISSION_MANAGE] === true) {
|
||||
$newLabel = $this->labelService->create($label->getTitle(), $label->getColor(), $board->getId());
|
||||
$boardLabels[] = $label;
|
||||
$this->assignLabel($card->getId(), $newLabel->getId());
|
||||
}
|
||||
} else {
|
||||
$this->assignLabel($card->getId(), $filteredLabels[0]->getId());
|
||||
}
|
||||
}
|
||||
$board->setLabels($boardLabels);
|
||||
$this->boardMapper->update($board);
|
||||
$this->changeHelper->boardChanged($board->getId());
|
||||
}
|
||||
|
||||
if ($resetDuedateNotification) {
|
||||
$this->notificationHelper->markDuedateAsRead($card);
|
||||
}
|
||||
|
||||
@@ -129,8 +129,10 @@ class DeckJsonService extends ABoardImportService {
|
||||
foreach ($this->tmpCards as $sourceCard) {
|
||||
foreach ($sourceCard->labels as $label) {
|
||||
$cardId = $this->cards[$sourceCard->id]->getId();
|
||||
$labelId = $this->labels[$label->id]->getId();
|
||||
$cardsLabels[$cardId][] = $labelId;
|
||||
if ($this->getImportService()->getData()->id === $label->boardId) {
|
||||
$labelId = $this->labels[$label->id]->getId();
|
||||
$cardsLabels[$cardId][] = $labelId;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $cardsLabels;
|
||||
|
||||
24
package-lock.json
generated
24
package-lock.json
generated
@@ -1917,9 +1917,9 @@
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.25.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
|
||||
"integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
|
||||
"version": "7.25.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
|
||||
"integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
|
||||
"dependencies": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
},
|
||||
@@ -7910,9 +7910,9 @@
|
||||
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
|
||||
},
|
||||
"node_modules/cypress": {
|
||||
"version": "13.13.3",
|
||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.3.tgz",
|
||||
"integrity": "sha512-hUxPrdbJXhUOTzuML+y9Av7CKoYznbD83pt8g3klgpioEha0emfx4WNIuVRx0C76r0xV2MIwAW9WYiXfVJYFQw==",
|
||||
"version": "13.14.1",
|
||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.14.1.tgz",
|
||||
"integrity": "sha512-Wo+byPmjps66hACEH5udhXINEiN3qS3jWNGRzJOjrRJF3D0+YrcP2LVB1T7oYaVQM/S+eanqEvBWYc8cf7Vcbg==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
@@ -23170,9 +23170,9 @@
|
||||
"peer": true
|
||||
},
|
||||
"@babel/runtime": {
|
||||
"version": "7.25.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
|
||||
"integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
|
||||
"version": "7.25.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
|
||||
"integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
},
|
||||
@@ -27679,9 +27679,9 @@
|
||||
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA=="
|
||||
},
|
||||
"cypress": {
|
||||
"version": "13.13.3",
|
||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.3.tgz",
|
||||
"integrity": "sha512-hUxPrdbJXhUOTzuML+y9Av7CKoYznbD83pt8g3klgpioEha0emfx4WNIuVRx0C76r0xV2MIwAW9WYiXfVJYFQw==",
|
||||
"version": "13.14.1",
|
||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.14.1.tgz",
|
||||
"integrity": "sha512-Wo+byPmjps66hACEH5udhXINEiN3qS3jWNGRzJOjrRJF3D0+YrcP2LVB1T7oYaVQM/S+eanqEvBWYc8cf7Vcbg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@cypress/request": "^3.0.1",
|
||||
|
||||
@@ -68,6 +68,8 @@ class CardServiceTest extends TestCase {
|
||||
private $boardService;
|
||||
/** @var LabelMapper|MockObject */
|
||||
private $labelMapper;
|
||||
/** @var LabelService|MockObject */
|
||||
private $labelService;
|
||||
private $boardMapper;
|
||||
/** @var AttachmentService|MockObject */
|
||||
private $attachmentService;
|
||||
@@ -96,6 +98,7 @@ class CardServiceTest extends TestCase {
|
||||
$this->stackMapper = $this->createMock(StackMapper::class);
|
||||
$this->boardMapper = $this->createMock(BoardMapper::class);
|
||||
$this->labelMapper = $this->createMock(LabelMapper::class);
|
||||
$this->labelService = $this->createMock(LabelService::class);
|
||||
$this->permissionService = $this->createMock(PermissionService::class);
|
||||
$this->boardService = $this->createMock(BoardService::class);
|
||||
$this->notificationHelper = $this->createMock(NotificationHelper::class);
|
||||
@@ -118,6 +121,7 @@ class CardServiceTest extends TestCase {
|
||||
$this->stackMapper,
|
||||
$this->boardMapper,
|
||||
$this->labelMapper,
|
||||
$this->labelService,
|
||||
$this->permissionService,
|
||||
$this->boardService,
|
||||
$this->notificationHelper,
|
||||
|
||||
Reference in New Issue
Block a user