aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas LÅ“uillet <nicolas@loeuillet.org>2016-12-29 10:54:07 +0100
committerGitHub <noreply@github.com>2016-12-29 10:54:07 +0100
commit8527238846b0ea307ba68ca8a831eb0884c68d4a (patch)
treef93d54cd9fcbb85fa43c989ef670612f9a4d47e5
parent90f6ee4dbe761f97edf0bf87ffeb1f75acec6c25 (diff)
parent7239082a5e290dada1d393f7a25acebb09ace2de (diff)
downloadwallabag-8527238846b0ea307ba68ca8a831eb0884c68d4a.tar.gz
wallabag-8527238846b0ea307ba68ca8a831eb0884c68d4a.tar.zst
wallabag-8527238846b0ea307ba68ca8a831eb0884c68d4a.zip
Merge pull request #2702 from wallabag/add-index-uuid
Added index on entry.uuid
-rwxr-xr-xMakefile3
-rw-r--r--app/DoctrineMigrations/Version20160410190541.php7
-rw-r--r--app/DoctrineMigrations/Version20161214094403.php53
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php10
-rw-r--r--src/Wallabag/CoreBundle/Entity/Entry.php29
-rw-r--r--tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php12
6 files changed, 85 insertions, 29 deletions
diff --git a/Makefile b/Makefile
index 83c5f37a..b3335261 100755
--- a/Makefile
+++ b/Makefile
@@ -27,8 +27,7 @@ build: ## Run grunt
27 @grunt 27 @grunt
28 28
29test: ## Launch wallabag testsuite 29test: ## Launch wallabag testsuite
30 @if [ ! -d "vendor/phpunit" ]; then composer install; fi 30 @ant prepare && bin/simple-phpunit -v
31 @ant prepare && vendor/phpunit/phpunit/phpunit -v
32 31
33release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`). 32release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
34ifndef VERSION 33ifndef VERSION
diff --git a/app/DoctrineMigrations/Version20160410190541.php b/app/DoctrineMigrations/Version20160410190541.php
index 0cdec008..f166a325 100644
--- a/app/DoctrineMigrations/Version20160410190541.php
+++ b/app/DoctrineMigrations/Version20160410190541.php
@@ -31,10 +31,11 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
31 { 31 {
32 $entryTable = $schema->getTable($this->getTable('entry')); 32 $entryTable = $schema->getTable($this->getTable('entry'));
33 33
34 $this->skipIf($entryTable->hasColumn('uuid'), 'It seems that you already played this migration.'); 34 $this->skipIf($entryTable->hasColumn('uid'), 'It seems that you already played this migration.');
35 35
36 $entryTable->addColumn('uuid', 'guid', [ 36 $entryTable->addColumn('uid', 'string', [
37 'notnull' => false, 37 'notnull' => false,
38 'length' => 23,
38 ]); 39 ]);
39 $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_public', '1', 'entry')"); 40 $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_public', '1', 'entry')");
40 } 41 }
@@ -45,7 +46,7 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
45 public function down(Schema $schema) 46 public function down(Schema $schema)
46 { 47 {
47 $entryTable = $schema->getTable($this->getTable('entry')); 48 $entryTable = $schema->getTable($this->getTable('entry'));
48 $entryTable->dropColumn('uuid'); 49 $entryTable->dropColumn('uid');
49 50
50 $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_public'"); 51 $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_public'");
51 } 52 }
diff --git a/app/DoctrineMigrations/Version20161214094403.php b/app/DoctrineMigrations/Version20161214094403.php
new file mode 100644
index 00000000..5948b5fa
--- /dev/null
+++ b/app/DoctrineMigrations/Version20161214094403.php
@@ -0,0 +1,53 @@
1<?php
2
3namespace Application\Migrations;
4
5use Doctrine\DBAL\Migrations\AbstractMigration;
6use Doctrine\DBAL\Schema\Schema;
7use Symfony\Component\DependencyInjection\ContainerAwareInterface;
8use Symfony\Component\DependencyInjection\ContainerInterface;
9
10/**
11 * Added index on wallabag_entry.uid
12 */
13class Version20161214094403 extends AbstractMigration implements ContainerAwareInterface
14{
15 /**
16 * @var ContainerInterface
17 */
18 private $container;
19
20 private $indexName = 'IDX_entry_uid';
21
22 public function setContainer(ContainerInterface $container = null)
23 {
24 $this->container = $container;
25 }
26
27 private function getTable($tableName)
28 {
29 return $this->container->getParameter('database_table_prefix').$tableName;
30 }
31
32 /**
33 * @param Schema $schema
34 */
35 public function up(Schema $schema)
36 {
37 $entryTable = $schema->getTable($this->getTable('entry'));
38 $this->skipIf($entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
39
40 $entryTable->addIndex(['uid'], $this->indexName);
41 }
42
43 /**
44 * @param Schema $schema
45 */
46 public function down(Schema $schema)
47 {
48 $entryTable = $schema->getTable($this->getTable('entry'));
49 $this->skipIf(false === $entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
50
51 $entryTable->dropIndex($this->indexName);
52 }
53}
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index b03f49ed..f7398e69 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -539,8 +539,8 @@ class EntryController extends Controller
539 { 539 {
540 $this->checkUserAction($entry); 540 $this->checkUserAction($entry);
541 541
542 if (null === $entry->getUuid()) { 542 if (null === $entry->getUid()) {
543 $entry->generateUuid(); 543 $entry->generateUid();
544 544
545 $em = $this->getDoctrine()->getManager(); 545 $em = $this->getDoctrine()->getManager();
546 $em->persist($entry); 546 $em->persist($entry);
@@ -548,7 +548,7 @@ class EntryController extends Controller
548 } 548 }
549 549
550 return $this->redirect($this->generateUrl('share_entry', [ 550 return $this->redirect($this->generateUrl('share_entry', [
551 'uuid' => $entry->getUuid(), 551 'uid' => $entry->getUid(),
552 ])); 552 ]));
553 } 553 }
554 554
@@ -565,7 +565,7 @@ class EntryController extends Controller
565 { 565 {
566 $this->checkUserAction($entry); 566 $this->checkUserAction($entry);
567 567
568 $entry->cleanUuid(); 568 $entry->cleanUid();
569 569
570 $em = $this->getDoctrine()->getManager(); 570 $em = $this->getDoctrine()->getManager();
571 $em->persist($entry); 571 $em->persist($entry);
@@ -581,7 +581,7 @@ class EntryController extends Controller
581 * 581 *
582 * @param Entry $entry 582 * @param Entry $entry
583 * 583 *
584 * @Route("/share/{uuid}", requirements={"uuid" = ".+"}, name="share_entry") 584 * @Route("/share/{uid}", requirements={"uid" = ".+"}, name="share_entry")
585 * @Cache(maxage="25200", smaxage="25200", public=true) 585 * @Cache(maxage="25200", smaxage="25200", public=true)
586 * 586 *
587 * @return \Symfony\Component\HttpFoundation\Response 587 * @return \Symfony\Component\HttpFoundation\Response
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php
index 3ae5334f..7276b437 100644
--- a/src/Wallabag/CoreBundle/Entity/Entry.php
+++ b/src/Wallabag/CoreBundle/Entity/Entry.php
@@ -22,7 +22,10 @@ use Wallabag\AnnotationBundle\Entity\Annotation;
22 * @ORM\Table( 22 * @ORM\Table(
23 * name="`entry`", 23 * name="`entry`",
24 * options={"collate"="utf8mb4_unicode_ci", "charset"="utf8mb4"}, 24 * options={"collate"="utf8mb4_unicode_ci", "charset"="utf8mb4"},
25 * indexes={@ORM\Index(name="created_at", columns={"created_at"})} 25 * indexes={
26 * @ORM\Index(name="created_at", columns={"created_at"}),
27 * @ORM\Index(name="uid", columns={"uid"})
28 * }
26 * ) 29 * )
27 * @ORM\HasLifecycleCallbacks() 30 * @ORM\HasLifecycleCallbacks()
28 * @Hateoas\Relation("self", href = "expr('/api/entries/' ~ object.getId())") 31 * @Hateoas\Relation("self", href = "expr('/api/entries/' ~ object.getId())")
@@ -44,11 +47,11 @@ class Entry
44 /** 47 /**
45 * @var string 48 * @var string
46 * 49 *
47 * @ORM\Column(name="uuid", type="text", nullable=true) 50 * @ORM\Column(name="uid", type="string", length=23, nullable=true)
48 * 51 *
49 * @Groups({"entries_for_user", "export_all"}) 52 * @Groups({"entries_for_user", "export_all"})
50 */ 53 */
51 private $uuid; 54 private $uid;
52 55
53 /** 56 /**
54 * @var string 57 * @var string
@@ -649,34 +652,34 @@ class Entry
649 /** 652 /**
650 * @return string 653 * @return string
651 */ 654 */
652 public function getUuid() 655 public function getUid()
653 { 656 {
654 return $this->uuid; 657 return $this->uid;
655 } 658 }
656 659
657 /** 660 /**
658 * @param string $uuid 661 * @param string $uid
659 * 662 *
660 * @return Entry 663 * @return Entry
661 */ 664 */
662 public function setUuid($uuid) 665 public function setUid($uid)
663 { 666 {
664 $this->uuid = $uuid; 667 $this->uid = $uid;
665 668
666 return $this; 669 return $this;
667 } 670 }
668 671
669 public function generateUuid() 672 public function generateUid()
670 { 673 {
671 if (null === $this->uuid) { 674 if (null === $this->uid) {
672 // @see http://blog.kevingomez.fr/til/2015/07/26/why-is-uniqid-slow/ for true parameter 675 // @see http://blog.kevingomez.fr/til/2015/07/26/why-is-uniqid-slow/ for true parameter
673 $this->uuid = uniqid('', true); 676 $this->uid = uniqid('', true);
674 } 677 }
675 } 678 }
676 679
677 public function cleanUuid() 680 public function cleanUid()
678 { 681 {
679 $this->uuid = null; 682 $this->uid = null;
680 } 683 }
681 684
682 /** 685 /**
diff --git a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
index c347cca5..06ed2db6 100644
--- a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
@@ -810,15 +810,15 @@ class EntryControllerTest extends WallabagCoreTestCase
810 ->getRepository('WallabagCoreBundle:Entry') 810 ->getRepository('WallabagCoreBundle:Entry')
811 ->findOneByUser($this->getLoggedInUserId()); 811 ->findOneByUser($this->getLoggedInUserId());
812 812
813 // no uuid 813 // no uid
814 $client->request('GET', '/share/'.$content->getUuid()); 814 $client->request('GET', '/share/'.$content->getUid());
815 $this->assertEquals(404, $client->getResponse()->getStatusCode()); 815 $this->assertEquals(404, $client->getResponse()->getStatusCode());
816 816
817 // generating the uuid 817 // generating the uid
818 $client->request('GET', '/share/'.$content->getId()); 818 $client->request('GET', '/share/'.$content->getId());
819 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 819 $this->assertEquals(302, $client->getResponse()->getStatusCode());
820 820
821 // follow link with uuid 821 // follow link with uid
822 $crawler = $client->followRedirect(); 822 $crawler = $client->followRedirect();
823 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 823 $this->assertEquals(200, $client->getResponse()->getStatusCode());
824 $this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control')); 824 $this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control'));
@@ -832,7 +832,7 @@ class EntryControllerTest extends WallabagCoreTestCase
832 832
833 // sharing is now disabled 833 // sharing is now disabled
834 $client->getContainer()->get('craue_config')->set('share_public', 0); 834 $client->getContainer()->get('craue_config')->set('share_public', 0);
835 $client->request('GET', '/share/'.$content->getUuid()); 835 $client->request('GET', '/share/'.$content->getUid());
836 $this->assertEquals(404, $client->getResponse()->getStatusCode()); 836 $this->assertEquals(404, $client->getResponse()->getStatusCode());
837 837
838 $client->request('GET', '/view/'.$content->getId()); 838 $client->request('GET', '/view/'.$content->getId());
@@ -843,7 +843,7 @@ class EntryControllerTest extends WallabagCoreTestCase
843 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 843 $this->assertEquals(302, $client->getResponse()->getStatusCode());
844 844
845 // share is now disable 845 // share is now disable
846 $client->request('GET', '/share/'.$content->getUuid()); 846 $client->request('GET', '/share/'.$content->getUid());
847 $this->assertEquals(404, $client->getResponse()->getStatusCode()); 847 $this->assertEquals(404, $client->getResponse()->getStatusCode());
848 } 848 }
849 849