Update documentation, import created

Signed-off-by: Vitor Mattos <vitor@php.rio>
This commit is contained in:
Vitor Mattos
2021-07-27 00:00:29 -03:00
committed by Julius Härtl
parent 4561887348
commit 5b30577df0
6 changed files with 50 additions and 6 deletions

View File

@@ -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. 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: It is possible to import from the following sources:
#### Trello JSON #### Trello JSON

View File

@@ -273,7 +273,21 @@ class BoardImportService {
public function importCards(): void { public function importCards(): void {
$cards = $this->getImportSystem()->getCards(); $cards = $this->getImportSystem()->getCards();
foreach ($cards as $code => $card) { foreach ($cards as $code => $card) {
$createdAt = $card->getCreatedAt();
$lastModified = $card->getLastModified();
$this->cardMapper->insert($card); $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); $this->getImportSystem()->updateCard($code, $card);
} }
} }

View File

@@ -71,7 +71,7 @@ class BoardImportTrelloApiService extends BoardImportTrelloJsonService {
$data->actions = $this->doRequest( $data->actions = $this->doRequest(
'/boards/' . $data->id . '/actions', '/boards/' . $data->id . '/actions',
[ [
'filter' => 'commentCard', 'filter' => 'commentCard,createCard',
'fields=memberCreator,type,data,date', 'fields=memberCreator,type,data,date',
'memberCreator_fields' => 'username', 'memberCreator_fields' => 'username',
'limit' => 1000 'limit' => 1000

View File

@@ -255,7 +255,7 @@ class BoardImportTrelloJsonService extends ABoardImportService {
$lastModified = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->dateLastActivity); $lastModified = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $trelloCard->dateLastActivity);
$card->setLastModified($lastModified->format('Y-m-d H:i:s')); $card->setLastModified($lastModified->format('Y-m-d H:i:s'));
if ($trelloCard->closed) { if ($trelloCard->closed) {
$card->setDeletedAt($lastModified->format('U')); $card->setArchived(true);
} }
if ((count($trelloCard->idChecklists) !== 0)) { if ((count($trelloCard->idChecklists) !== 0)) {
foreach ($this->getImportService()->getData()->checklists[$trelloCard->id] as $checklist) { foreach ($this->getImportService()->getData()->checklists[$trelloCard->id] as $checklist) {
@@ -272,6 +272,24 @@ class BoardImportTrelloJsonService extends ABoardImportService {
$card->setType('plain'); $card->setType('plain');
$card->setOrder($trelloCard->pos); $card->setOrder($trelloCard->pos);
$card->setOwner($this->getImportService()->getConfig('owner')->getUID()); $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); $card->setDescription($trelloCard->desc);
if ($trelloCard->due) { if ($trelloCard->due) {
$duedate = \DateTime::createFromFormat('Y-m-d\TH:i:s.v\Z', $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 .= "| {$this->l10n->t('File')} | {$this->l10n->t('date')} |\n";
$trelloCard->desc .= "|---|---\n"; $trelloCard->desc .= "|---|---\n";
foreach ($trelloCard->attachments as $attachment) { 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"; $trelloCard->desc .= "| [{$name}]({$attachment->url}) | {$attachment->date} |\n";
} }
} }

View File

@@ -27,6 +27,7 @@ use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AclMapper; use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\Assignment; use OCA\Deck\Db\Assignment;
use OCA\Deck\Db\AssignmentMapper; use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\AttachmentMapper;
use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\Card; use OCA\Deck\Db\Card;
use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\CardMapper;
@@ -57,6 +58,8 @@ class BoardImportServiceTest extends \Test\TestCase {
private $cardMapper; private $cardMapper;
/** @var AssignmentMapper|MockObject */ /** @var AssignmentMapper|MockObject */
private $assignmentMapper; private $assignmentMapper;
/** @var AttachmentMapper|MockObject */
private $attachmentMapper;
/** @var ICommentsManager|MockObject */ /** @var ICommentsManager|MockObject */
private $commentsManager; private $commentsManager;
/** @var BoardImportTrelloJsonService|MockObject */ /** @var BoardImportTrelloJsonService|MockObject */
@@ -70,8 +73,9 @@ class BoardImportServiceTest extends \Test\TestCase {
$this->aclMapper = $this->createMock(AclMapper::class); $this->aclMapper = $this->createMock(AclMapper::class);
$this->labelMapper = $this->createMock(LabelMapper::class); $this->labelMapper = $this->createMock(LabelMapper::class);
$this->stackMapper = $this->createMock(StackMapper::class); $this->stackMapper = $this->createMock(StackMapper::class);
$this->cardMapper = $this->createMock(AssignmentMapper::class); $this->cardMapper = $this->createMock(CardMapper::class);
$this->assignmentMapper = $this->createMock(CardMapper::class); $this->assignmentMapper = $this->createMock(AssignmentMapper::class);
$this->attachmentMapper = $this->createMock(AttachmentMapper::class);
$this->commentsManager = $this->createMock(ICommentsManager::class); $this->commentsManager = $this->createMock(ICommentsManager::class);
$this->boardImportService = new BoardImportService( $this->boardImportService = new BoardImportService(
$this->dbConn, $this->dbConn,
@@ -80,8 +84,9 @@ class BoardImportServiceTest extends \Test\TestCase {
$this->aclMapper, $this->aclMapper,
$this->labelMapper, $this->labelMapper,
$this->stackMapper, $this->stackMapper,
$this->cardMapper,
$this->assignmentMapper, $this->assignmentMapper,
$this->attachmentMapper,
$this->cardMapper,
$this->commentsManager $this->commentsManager
); );

View File

@@ -23,21 +23,26 @@
namespace OCA\Deck\Service; namespace OCA\Deck\Service;
use OCP\IL10N; use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUser; use OCP\IUser;
use OCP\IUserManager; use OCP\IUserManager;
class BoardImportTrelloJsonServiceTest extends \Test\TestCase { class BoardImportTrelloJsonServiceTest extends \Test\TestCase {
/** @var BoardImportTrelloJsonService */ /** @var BoardImportTrelloJsonService */
private $service; private $service;
/** @var IURLGenerator */
private $urlGenerator;
/** @var IUserManager */ /** @var IUserManager */
private $userManager; private $userManager;
/** @var IL10N */ /** @var IL10N */
private $l10n; private $l10n;
public function setUp(): void { public function setUp(): void {
$this->userManager = $this->createMock(IUserManager::class); $this->userManager = $this->createMock(IUserManager::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->l10n = $this->createMock(IL10N::class); $this->l10n = $this->createMock(IL10N::class);
$this->service = new BoardImportTrelloJsonService( $this->service = new BoardImportTrelloJsonService(
$this->userManager, $this->userManager,
$this->urlGenerator,
$this->l10n $this->l10n
); );
} }