]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Added given_url in entry table
authorNicolas Lœuillet <nicolas@loeuillet.org>
Mon, 10 Jul 2017 19:32:25 +0000 (21:32 +0200)
committerNicolas Lœuillet <nicolas@loeuillet.org>
Mon, 18 Dec 2017 13:50:04 +0000 (14:50 +0100)
app/DoctrineMigrations/Version20170710125843.php [new file with mode: 0644]
src/Wallabag/CoreBundle/Controller/EntryController.php
src/Wallabag/CoreBundle/Entity/Entry.php
src/Wallabag/CoreBundle/Repository/EntryRepository.php
tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php

diff --git a/app/DoctrineMigrations/Version20170710125843.php b/app/DoctrineMigrations/Version20170710125843.php
new file mode 100644 (file)
index 0000000..1bac94d
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+
+namespace Application\Migrations;
+
+use Doctrine\DBAL\Migrations\AbstractMigration;
+use Doctrine\DBAL\Schema\Schema;
+use Symfony\Component\DependencyInjection\ContainerAwareInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Added `given_url` field in entry table.
+ */
+class Version20170710125843 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('given_url'), 'It seems that you already played this migration.');
+
+        $entryTable->addColumn('given_url', 'text', [
+            'notnull' => false,
+        ]);
+    }
+
+    /**
+     * @param Schema $schema
+     */
+    public function down(Schema $schema)
+    {
+        $entryTable = $schema->getTable($this->getTable('entry'));
+
+        $this->skipIf(!$entryTable->hasColumn('given_url'), 'It seems that you already played this migration.');
+
+        $entryTable->dropColumn('given_url');
+    }
+
+    private function getTable($tableName)
+    {
+        return $this->container->getParameter('database_table_prefix') . $tableName;
+    }
+}
index b7fdea27942099e821bc836b1f0e081843550e2c..3ac0f8a6591b33ed6e023a7653704fc49f8e0172 100644 (file)
@@ -78,6 +78,7 @@ class EntryController extends Controller
                 return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
             }
 
+            $entry->setGivenUrl($entry->getUrl());
             $this->updateEntry($entry);
 
             $em = $this->getDoctrine()->getManager();
index 2b1f2e050799c24495611d2ba75212e37944f4d5..58ec51dbe01a80f47b7dcb42a76a4f2ec15cd163 100644 (file)
@@ -65,6 +65,15 @@ class Entry
      */
     private $title;
 
+    /**
+     * @var string
+     *
+     * @ORM\Column(name="given_url", type="text", nullable=true)
+     *
+     * @Groups({"entries_for_user", "export_all"})
+     */
+    private $givenUrl;
+
     /**
      * @var string
      *
@@ -297,6 +306,30 @@ class Entry
         return $this->title;
     }
 
+    /**
+     * Set given url.
+     *
+     * @param string $givenUrl
+     *
+     * @return Entry
+     */
+    public function setGivenUrl($givenUrl)
+    {
+        $this->givenUrl = $givenUrl;
+
+        return $this;
+    }
+
+    /**
+     * Get given Url.
+     *
+     * @return string
+     */
+    public function getGivenUrl()
+    {
+        return $this->givenUrl;
+    }
+
     /**
      * Set url.
      *
index b5e35eff3848a69a8e0ee43e769a7fa55aee18b1..9e471d3cb642f01d9a456f7d4abe4b77e70b0ff0 100644 (file)
@@ -314,8 +314,11 @@ class EntryRepository extends EntityRepository
      */
     public function findByUrlAndUserId($url, $userId)
     {
+        $url = urldecode($url);
+
         $res = $this->createQueryBuilder('e')
-            ->where('e.url = :url')->setParameter('url', urldecode($url))
+            ->where('e.url = :url')->setParameter('url', $url)
+            ->orWhere('e.givenUrl = :url')->setParameter('url', $url)
             ->andWhere('e.user = :user_id')->setParameter('user_id', $userId)
             ->getQuery()
             ->getResult();
index 0e7e157600c793db2f5a7558e0014351a199f4e8..cd63c1ba81775da0e18408cb57ee8b6e1d585c99 100644 (file)
@@ -265,6 +265,41 @@ class EntryControllerTest extends WallabagCoreTestCase
         $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
     }
 
+    public function testPostNewOkUrlExistWithRedirection()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $url = 'https://fashionunited.com/news/business/jigsaw-posts-8-percent-increase-in-annual-sales/2017070316404';
+
+        $crawler = $client->request('GET', '/new');
+
+        $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+        $form = $crawler->filter('form[name=entry]')->form();
+
+        $data = [
+            'entry[url]' => $url,
+        ];
+
+        $client->submit($form, $data);
+
+        $crawler = $client->request('GET', '/new');
+
+        $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+        $form = $crawler->filter('form[name=entry]')->form();
+
+        $data = [
+            'entry[url]' => $url,
+        ];
+
+        $client->submit($form, $data);
+
+        $this->assertSame(302, $client->getResponse()->getStatusCode());
+        $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
+    }
+
     /**
      * This test will require an internet connection.
      */