mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-26 11:01:04 +00:00
Entry: add archived_at property and updateArchived method
This commit is contained in:
parent
2f3af70e1a
commit
7975395d10
13 changed files with 132 additions and 15 deletions
68
app/DoctrineMigrations/Version20180405182455.php
Executable file
68
app/DoctrineMigrations/Version20180405182455.php
Executable 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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']) {
|
||||||
|
|
|
@ -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'));
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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']));
|
||||||
|
|
||||||
|
|
|
@ -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']);
|
||||||
|
|
|
@ -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']));
|
||||||
|
|
||||||
|
|
|
@ -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'])) {
|
||||||
|
|
|
@ -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']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue