diff --git a/docs/User_documentation_en.md b/docs/User_documentation_en.md index 6000fba0c..3a6f9dc18 100644 --- a/docs/User_documentation_en.md +++ b/docs/User_documentation_en.md @@ -75,6 +75,8 @@ The **Timeline** allows you to see everything that happened in your boards. Ever Importing can be done using the API or the `occ` `deck:import` command. +Comments with more than 1000 characters are placed as attached files to the card. + It is possible to import from the following sources: #### Trello JSON diff --git a/lib/Service/BoardImportService.php b/lib/Service/BoardImportService.php index 5a71a91fb..50e395c2a 100644 --- a/lib/Service/BoardImportService.php +++ b/lib/Service/BoardImportService.php @@ -273,7 +273,21 @@ class BoardImportService { public function importCards(): void { $cards = $this->getImportSystem()->getCards(); foreach ($cards as $code => $card) { + $createdAt = $card->getCreatedAt(); + $lastModified = $card->getLastModified(); $this->cardMapper->insert($card); + $updateDate = false; + if ($createdAt && $createdAt !== $card->getCreatedAt()) { + $card->setCreatedAt($createdAt); + $updateDate = true; + } + if ($lastModified && $lastModified !== $card->getLastModified()) { + $card->setLastModified($lastModified); + $updateDate = true; + } + if ($updateDate) { + $this->cardMapper->update($card, false); + } $this->getImportSystem()->updateCard($code, $card); } } diff --git a/lib/Service/BoardImportTrelloApiService.php b/lib/Service/BoardImportTrelloApiService.php index 8cecbbd13..301daa6d4 100644 --- a/lib/Service/BoardImportTrelloApiService.php +++ b/lib/Service/BoardImportTrelloApiService.php @@ -71,7 +71,7 @@ class BoardImportTrelloApiService extends BoardImportTrelloJsonService { $data->actions = $this->doRequest( '/boards/' . $data->id . '/actions', [ - 'filter' => 'commentCard', + 'filter' => 'commentCard,createCard', 'fields=memberCreator,type,data,date', 'memberCreator_fields' => 'username', 'limit' => 1000 diff --git a/lib/Service/BoardImportTrelloJsonService.php b/lib/Service/BoardImportTrelloJsonService.php index 2f69d7a19..6645f0e76 100644 --- a/lib/Service/BoardImportTrelloJsonService.php +++ b/lib/Service/BoardImportTrelloJsonService.php @@ -255,7 +255,7 @@ class BoardImportTrelloJsonService extends ABoardImportService { $lastModified = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->dateLastActivity); $card->setLastModified($lastModified->format('Y-m-d H:i:s')); if ($trelloCard->closed) { - $card->setDeletedAt($lastModified->format('U')); + $card->setArchived(true); } if ((count($trelloCard->idChecklists) !== 0)) { foreach ($this->getImportService()->getData()->checklists[$trelloCard->id] as $checklist) { @@ -272,6 +272,24 @@ class BoardImportTrelloJsonService extends ABoardImportService { $card->setType('plain'); $card->setOrder($trelloCard->pos); $card->setOwner($this->getImportService()->getConfig('owner')->getUID()); + + $lastModified = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->dateLastActivity); + $card->setLastModified($lastModified->format('U')); + + $createCardDate = array_filter( + $this->getImportService()->getData()->actions, + function (\stdClass $a) use ($trelloCard) { + return $a->type === 'createCard' && $a->data->card->id === $trelloCard->id; + } + ); + $createCardDate = current($createCardDate); + $createCardDate = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $createCardDate->date); + if ($createCardDate) { + $card->setCreatedAt($createCardDate->format('U')); + } else { + $card->setCreatedAt($lastModified->format('U')); + } + $card->setDescription($trelloCard->desc); if ($trelloCard->due) { $duedate = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->due) @@ -365,7 +383,7 @@ class BoardImportTrelloJsonService extends ABoardImportService { $trelloCard->desc .= "| {$this->l10n->t('File')} | {$this->l10n->t('date')} |\n"; $trelloCard->desc .= "|---|---\n"; foreach ($trelloCard->attachments as $attachment) { - $name = $attachment->name === $attachment->url ? null : $attachment->name; + $name = mb_strlen($attachment->name, 'UTF-8') ? $attachment->name : $attachment->url; $trelloCard->desc .= "| [{$name}]({$attachment->url}) | {$attachment->date} |\n"; } } diff --git a/tests/unit/Service/BoardImportServiceTest.php b/tests/unit/Service/BoardImportServiceTest.php index 49f2afcd9..a7a88e82e 100644 --- a/tests/unit/Service/BoardImportServiceTest.php +++ b/tests/unit/Service/BoardImportServiceTest.php @@ -27,6 +27,7 @@ use OCA\Deck\Db\Acl; use OCA\Deck\Db\AclMapper; use OCA\Deck\Db\Assignment; use OCA\Deck\Db\AssignmentMapper; +use OCA\Deck\Db\AttachmentMapper; use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\Card; use OCA\Deck\Db\CardMapper; @@ -57,6 +58,8 @@ class BoardImportServiceTest extends \Test\TestCase { private $cardMapper; /** @var AssignmentMapper|MockObject */ private $assignmentMapper; + /** @var AttachmentMapper|MockObject */ + private $attachmentMapper; /** @var ICommentsManager|MockObject */ private $commentsManager; /** @var BoardImportTrelloJsonService|MockObject */ @@ -70,8 +73,9 @@ class BoardImportServiceTest extends \Test\TestCase { $this->aclMapper = $this->createMock(AclMapper::class); $this->labelMapper = $this->createMock(LabelMapper::class); $this->stackMapper = $this->createMock(StackMapper::class); - $this->cardMapper = $this->createMock(AssignmentMapper::class); - $this->assignmentMapper = $this->createMock(CardMapper::class); + $this->cardMapper = $this->createMock(CardMapper::class); + $this->assignmentMapper = $this->createMock(AssignmentMapper::class); + $this->attachmentMapper = $this->createMock(AttachmentMapper::class); $this->commentsManager = $this->createMock(ICommentsManager::class); $this->boardImportService = new BoardImportService( $this->dbConn, @@ -80,8 +84,9 @@ class BoardImportServiceTest extends \Test\TestCase { $this->aclMapper, $this->labelMapper, $this->stackMapper, - $this->cardMapper, $this->assignmentMapper, + $this->attachmentMapper, + $this->cardMapper, $this->commentsManager ); diff --git a/tests/unit/Service/BoardImportTrelloServiceTest.php b/tests/unit/Service/BoardImportTrelloServiceTest.php index 99c8f8c2d..b8df68359 100644 --- a/tests/unit/Service/BoardImportTrelloServiceTest.php +++ b/tests/unit/Service/BoardImportTrelloServiceTest.php @@ -23,21 +23,26 @@ namespace OCA\Deck\Service; use OCP\IL10N; +use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; class BoardImportTrelloJsonServiceTest extends \Test\TestCase { /** @var BoardImportTrelloJsonService */ private $service; + /** @var IURLGenerator */ + private $urlGenerator; /** @var IUserManager */ private $userManager; /** @var IL10N */ private $l10n; public function setUp(): void { $this->userManager = $this->createMock(IUserManager::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->l10n = $this->createMock(IL10N::class); $this->service = new BoardImportTrelloJsonService( $this->userManager, + $this->urlGenerator, $this->l10n ); }