Entry: add archived_at property and updateArchived method

This commit is contained in:
Sébastien Viande 2018-04-11 11:42:52 +02:00 committed by Jeremy Benoist
parent 2f3af70e1a
commit 7975395d10
No known key found for this signature in database
GPG key ID: BCA73962457ACC3C
13 changed files with 132 additions and 15 deletions

View file

@ -0,0 +1,68 @@
<?php
namespace Application\Migrations;
use Doctrine\DBAL\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Add archived_at column and set its value to updated_at for is_archived entries.
*/
class Version20180405182455 extends AbstractMigration implements ContainerAwareInterface
{
/**
* @var ContainerInterface
*/
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf($entryTable->hasColumn('archived_at'), 'It seems that you already played this migration.');
$entryTable->addColumn('archived_at', 'datetime', [
'notnull' => false,
]);
}
public function postUp(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf(!$entryTable->hasColumn('archived_at'), 'Unable to add archived_at colum');
$this->connection->executeQuery(
'UPDATE ' . $this->getTable('entry') . ' SET archived_at = updated_at WHERE is_archived = :is_archived',
[
'is_archived' => true,
]
);
}
/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
$this->skipIf(!$entryTable->hasColumn('archived_at'), 'It seems that you already played this migration.');
$entryTable->dropColumn('archived_at');
}
private function getTable($tableName)
{
return $this->container->getParameter('database_table_prefix') . $tableName;
}
}

View file

@ -358,7 +358,7 @@ class EntryRestController extends WallabagRestController
} }
if (null !== $data['isArchived']) { if (null !== $data['isArchived']) {
$entry->setArchived((bool) $data['isArchived']); $entry->updateArchived((bool) $data['isArchived']);
} }
if (null !== $data['isStarred']) { if (null !== $data['isStarred']) {
@ -474,7 +474,7 @@ class EntryRestController extends WallabagRestController
} }
if (null !== $data['isArchived']) { if (null !== $data['isArchived']) {
$entry->setArchived((bool) $data['isArchived']); $entry->updateArchived((bool) $data['isArchived']);
} }
if (null !== $data['isStarred']) { if (null !== $data['isStarred']) {

View file

@ -98,7 +98,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
$entry6->setMimetype('text/html'); $entry6->setMimetype('text/html');
$entry6->setTitle('test title entry6'); $entry6->setTitle('test title entry6');
$entry6->setContent('This is my content /o/'); $entry6->setContent('This is my content /o/');
$entry6->setArchived(true); $entry6->updateArchived(true);
$entry6->setLanguage('de'); $entry6->setLanguage('de');
$entry6->addTag($this->getReference('bar-tag')); $entry6->addTag($this->getReference('bar-tag'));

View file

@ -86,6 +86,15 @@ class Entry
*/ */
private $isArchived = false; private $isArchived = false;
/**
* @var \DateTime
*
* @ORM\Column(name="archived_at", type="datetime", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $archivedAt = null;
/** /**
* @var bool * @var bool
* *
@ -335,6 +344,44 @@ class Entry
return $this; return $this;
} }
/**
* update isArchived and archive_at fields.
*
* @param bool $isArchived
*
* @return Entry
*/
public function updateArchived($isArchived = false)
{
$this->setArchived($isArchived);
$this->setArchivedAt(null);
if ($this->isArchived()) {
$this->setArchivedAt(new \DateTime());
}
return $this;
}
/**
* @return \DateTime|null
*/
public function getArchivedAt()
{
return $this->archivedAt;
}
/**
* @param \DateTime|null $archivedAt
*
* @return Entry
*/
public function setArchivedAt($archivedAt = null)
{
$this->archivedAt = $archivedAt;
return $this;
}
/** /**
* Get isArchived. * Get isArchived.
* *
@ -357,7 +404,7 @@ class Entry
public function toggleArchive() public function toggleArchive()
{ {
$this->isArchived = $this->isArchived() ^ 1; $this->updateArchived($this->isArchived() ^ 1);
return $this; return $this;
} }

View file

@ -133,7 +133,7 @@ abstract class BrowserImport extends AbstractImport
); );
} }
$entry->setArchived($data['is_archived']); $entry->updateArchived($data['is_archived']);
if (!empty($data['created_at'])) { if (!empty($data['created_at'])) {
$dt = new \DateTime(); $dt = new \DateTime();

View file

@ -135,7 +135,7 @@ class InstapaperImport extends AbstractImport
); );
} }
$entry->setArchived($importedEntry['is_archived']); $entry->updateArchived($importedEntry['is_archived']);
$entry->setStarred($importedEntry['is_starred']); $entry->setStarred($importedEntry['is_starred']);
$this->em->persist($entry); $this->em->persist($entry);

View file

@ -119,7 +119,7 @@ class PinboardImport extends AbstractImport
); );
} }
$entry->setArchived($data['is_archived']); $entry->updateArchived($data['is_archived']);
$entry->setStarred($data['is_starred']); $entry->setStarred($data['is_starred']);
$entry->setCreatedAt(new \DateTime($data['created_at'])); $entry->setCreatedAt(new \DateTime($data['created_at']));

View file

@ -194,7 +194,7 @@ class PocketImport extends AbstractImport
$this->fetchContent($entry, $url); $this->fetchContent($entry, $url);
// 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted
$entry->setArchived(1 === $importedEntry['status'] || $this->markAsRead); $entry->updateArchived(1 === $importedEntry['status'] || $this->markAsRead);
// 0 or 1 - 1 If the item is starred // 0 or 1 - 1 If the item is starred
$entry->setStarred(1 === $importedEntry['favorite']); $entry->setStarred(1 === $importedEntry['favorite']);

View file

@ -111,7 +111,7 @@ class ReadabilityImport extends AbstractImport
// update entry with content (in case fetching failed, the given entry will be return) // update entry with content (in case fetching failed, the given entry will be return)
$this->fetchContent($entry, $data['url'], $data); $this->fetchContent($entry, $data['url'], $data);
$entry->setArchived($data['is_archived']); $entry->updateArchived($data['is_archived']);
$entry->setStarred($data['is_starred']); $entry->setStarred($data['is_starred']);
$entry->setCreatedAt(new \DateTime($data['created_at'])); $entry->setCreatedAt(new \DateTime($data['created_at']));

View file

@ -122,7 +122,7 @@ abstract class WallabagImport extends AbstractImport
$entry->setPreviewPicture($importedEntry['preview_picture']); $entry->setPreviewPicture($importedEntry['preview_picture']);
} }
$entry->setArchived($data['is_archived']); $entry->updateArchived($data['is_archived']);
$entry->setStarred($data['is_starred']); $entry->setStarred($data['is_starred']);
if (!empty($data['created_at'])) { if (!empty($data['created_at'])) {

View file

@ -438,6 +438,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
$this->assertSame(0, $content['is_archived']); $this->assertSame(0, $content['is_archived']);
$this->assertSame(0, $content['is_starred']); $this->assertSame(0, $content['is_starred']);
$this->assertNull($content['starred_at']); $this->assertNull($content['starred_at']);
$this->assertNull($content['archived_at']);
$this->assertSame('New title for my article', $content['title']); $this->assertSame('New title for my article', $content['title']);
$this->assertSame(1, $content['user_id']); $this->assertSame(1, $content['user_id']);
$this->assertCount(2, $content['tags']); $this->assertCount(2, $content['tags']);
@ -533,6 +534,7 @@ class EntryRestControllerTest extends WallabagApiTestCase
$this->assertSame(1, $content['is_archived']); $this->assertSame(1, $content['is_archived']);
$this->assertSame(1, $content['is_starred']); $this->assertSame(1, $content['is_starred']);
$this->assertGreaterThanOrEqual($now->getTimestamp(), (new \DateTime($content['starred_at']))->getTimestamp()); $this->assertGreaterThanOrEqual($now->getTimestamp(), (new \DateTime($content['starred_at']))->getTimestamp());
$this->assertGreaterThanOrEqual($now->getTimestamp(), (new \DateTime($content['archived_at']))->getTimestamp());
$this->assertSame(1, $content['user_id']); $this->assertSame(1, $content['user_id']);
} }

View file

@ -849,7 +849,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
$entryArchived->setContent('Youhou'); $entryArchived->setContent('Youhou');
$entryArchived->setTitle('Youhou'); $entryArchived->setTitle('Youhou');
$entryArchived->addTag($tagArchived); $entryArchived->addTag($tagArchived);
$entryArchived->setArchived(true); $entryArchived->updateArchived(true);
$em->persist($entryArchived); $em->persist($entryArchived);
$annotationArchived = new Annotation($user); $annotationArchived = new Annotation($user);

View file

@ -621,7 +621,7 @@ class EntryControllerTest extends WallabagCoreTestCase
$content->setMimetype('text/html'); $content->setMimetype('text/html');
$content->setTitle('test title entry'); $content->setTitle('test title entry');
$content->setContent('This is my content /o/'); $content->setContent('This is my content /o/');
$content->setArchived(true); $content->updateArchived(true);
$content->setLanguage('fr'); $content->setLanguage('fr');
$em->persist($content); $em->persist($content);
@ -774,7 +774,7 @@ class EntryControllerTest extends WallabagCoreTestCase
$entry = new Entry($this->getLoggedInUser()); $entry = new Entry($this->getLoggedInUser());
$entry->setUrl($this->url); $entry->setUrl($this->url);
$entry->setArchived(false); $entry->updateArchived(false);
$this->getEntityManager()->persist($entry); $this->getEntityManager()->persist($entry);
$this->getEntityManager()->flush(); $this->getEntityManager()->flush();
@ -1245,7 +1245,7 @@ class EntryControllerTest extends WallabagCoreTestCase
$entry = new Entry($this->getLoggedInUser()); $entry = new Entry($this->getLoggedInUser());
$entry->setUrl('http://0.0.0.0/foo/baz/qux'); $entry->setUrl('http://0.0.0.0/foo/baz/qux');
$entry->setTitle('Le manège'); $entry->setTitle('Le manège');
$entry->setArchived(true); $entry->updateArchived(true);
$this->getEntityManager()->persist($entry); $this->getEntityManager()->persist($entry);
$this->getEntityManager()->flush(); $this->getEntityManager()->flush();
@ -1275,7 +1275,7 @@ class EntryControllerTest extends WallabagCoreTestCase
$entry = new Entry($this->getLoggedInUser()); $entry = new Entry($this->getLoggedInUser());
$entry->setUrl('http://domain/qux'); $entry->setUrl('http://domain/qux');
$entry->setTitle('Le manège'); $entry->setTitle('Le manège');
$entry->setArchived(true); $entry->updateArchived(true);
$this->getEntityManager()->persist($entry); $this->getEntityManager()->persist($entry);
$this->getEntityManager()->flush(); $this->getEntityManager()->flush();