]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge pull request #3347 from Kdecherf/entry-stats
authorNicolas Lœuillet <nicolas@loeuillet.org>
Sat, 16 Sep 2017 11:01:33 +0000 (13:01 +0200)
committerGitHub <noreply@github.com>
Sat, 16 Sep 2017 11:01:33 +0000 (13:01 +0200)
Entry view: update .stats margins and color

app/Resources/static/themes/_global/index.js
app/Resources/static/themes/_global/js/shortcuts/main.js
composer.json
src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTagData.php
src/Wallabag/CoreBundle/Helper/EntriesExport.php
src/Wallabag/CoreBundle/Repository/EntryRepository.php
src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php
tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php
tests/Wallabag/CoreBundle/Controller/RssControllerTest.php

index 3ec26488272b5da2fe2aa61a0d0203b66fd1ca3f..fddb476dcf67650fbf5cbd8f37b1b90e60b7e987 100644 (file)
@@ -9,7 +9,7 @@ import 'material-design-icons-iconfont/dist/material-design-icons.css';
 import 'lato-font/css/lato-font.css';
 import './global.scss';
 
-/* Shortcuts*/
+/* Shortcuts */
 import './js/shortcuts/entry';
 import './js/shortcuts/main';
 
index c81bf8690f8588b5dc126b024a1860dc089f7a95..b99fa802a8fa6b7a5cf2da79514c6eb0b9e2ab05 100644 (file)
@@ -1,6 +1,6 @@
 import Mousetrap from 'mousetrap';
 
-/** Shortcuts **/
+/* Shortcuts */
 
 /* Go to */
 Mousetrap.bind('g u', () => { window.location.href = Routing.generate('homepage'); });
index e609af40a711fd922b7d7af60d6f0975691c5610..fa0a4a39d7309145058f80221557fe4c169dab56 100644 (file)
@@ -84,7 +84,8 @@
         "symfony/dom-crawler": "^3.1",
         "friendsofsymfony/jsrouting-bundle": "^1.6",
         "bdunogier/guzzle-site-authenticator": "^1.0.0@dev",
-        "defuse/php-encryption": "^2.1"
+        "defuse/php-encryption": "^2.1",
+        "html2text/html2text": "^4.1"
     },
     "require-dev": {
         "doctrine/doctrine-fixtures-bundle": "~2.2",
index 6de561e0d5843908e414fe44473380f172a008ff..0ecfd18b55ddab8c00f1616586f78a9f576af5c3 100644 (file)
@@ -19,7 +19,7 @@ class LoadTagData extends AbstractFixture implements OrderedFixtureInterface
 
         $manager->persist($tag1);
 
-        $this->addReference('foo-tag', $tag1);
+        $this->addReference('foo-bar-tag', $tag1);
 
         $tag2 = new Tag();
         $tag2->setLabel('bar');
@@ -35,6 +35,13 @@ class LoadTagData extends AbstractFixture implements OrderedFixtureInterface
 
         $this->addReference('baz-tag', $tag3);
 
+        $tag4 = new Tag();
+        $tag4->setLabel('foo');
+
+        $manager->persist($tag4);
+
+        $this->addReference('foo-tag', $tag4);
+
         $manager->flush();
     }
 
index de259e7ffc25246acbab2299078b63afd38778cd..838b97342eb171ed8ee671f75b70549720e7ee32 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace Wallabag\CoreBundle\Helper;
 
+use Html2Text\Html2Text;
 use JMS\Serializer\SerializationContext;
 use JMS\Serializer\SerializerBuilder;
 use PHPePub\Core\EPub;
@@ -408,7 +409,8 @@ class EntriesExport
         $bar = str_repeat('=', 100);
         foreach ($this->entries as $entry) {
             $content .= "\n\n" . $bar . "\n\n" . $entry->getTitle() . "\n\n" . $bar . "\n\n";
-            $content .= trim(preg_replace('/\s+/S', ' ', strip_tags($entry->getContent()))) . "\n\n";
+            $html = new Html2Text($entry->getContent(), ['do_links' => 'none', 'width' => 100]);
+            $content .= $html->getText();
         }
 
         return Response::create(
index ecc159fc0463b8585c75d90e1a8ba53d76e99d80..05f0e0ba17e665bb4cea4ed942d8e7aa1fd406e2 100644 (file)
@@ -133,7 +133,7 @@ class EntryRepository extends EntityRepository
     {
         $qb = $this->createQueryBuilder('e')
             ->leftJoin('e.tags', 't')
-            ->where('e.user =:userId')->setParameter('userId', $userId);
+            ->where('e.user = :userId')->setParameter('userId', $userId);
 
         if (null !== $isArchived) {
             $qb->andWhere('e.isArchived = :isArchived')->setParameter('isArchived', (bool) $isArchived);
@@ -152,8 +152,23 @@ class EntryRepository extends EntityRepository
         }
 
         if ('' !== $tags) {
-            foreach (explode(',', $tags) as $tag) {
-                $qb->andWhere('t.label = :label')->setParameter('label', $tag);
+            foreach (explode(',', $tags) as $i => $tag) {
+                $entryAlias = 'e' . $i;
+                $tagAlias = 't' . $i;
+
+                // Complexe queries to ensure multiple tags are associated to an entry
+                // https://stackoverflow.com/a/6638146/569101
+                $qb->andWhere($qb->expr()->in(
+                    'e.id',
+                    $this->createQueryBuilder($entryAlias)
+                        ->select($entryAlias . '.id')
+                        ->leftJoin($entryAlias . '.tags', $tagAlias)
+                        ->where($tagAlias . '.label = :label' . $i)
+                        ->getDQL()
+                ));
+
+                // bound parameter to the main query builder
+                $qb->setParameter('label' . $i, $tag);
             }
         }
 
@@ -181,7 +196,7 @@ class EntryRepository extends EntityRepository
             ->innerJoin('e.tags', 't')
             ->innerJoin('e.user', 'u')
             ->addSelect('t', 'u')
-            ->where('e.user=:userId')->setParameter('userId', $userId)
+            ->where('e.user = :userId')->setParameter('userId', $userId)
         ;
 
         return $qb->getQuery()->getResult();
@@ -323,7 +338,7 @@ class EntryRepository extends EntityRepository
     {
         $qb = $this->createQueryBuilder('e')
             ->select('count(e)')
-            ->where('e.user=:userId')->setParameter('userId', $userId)
+            ->where('e.user = :userId')->setParameter('userId', $userId)
         ;
 
         return (int) $qb->getQuery()->getSingleScalarResult();
index 5e1f692e6db1db04820c47225d920ba8c415ad8c..455d47d12f41e2bd0db64dab237fbb1c13a7737a 100644 (file)
@@ -392,7 +392,7 @@ tag:
     page_title: 'Etiquetas'
     list:
         number_on_the_page: "{0} I a pas cap d'etiquetas.|{1} I a una etiqueta.|]1,Inf[ I a %count% etiquetas."
-        see_untagged_entries: "Afichar las entradas sens pas cap d'etiquetas"
+        see_untagged_entries: "Afichar las entradas sens etiquetas"
     new:
         add: 'Ajustar'
         placeholder: "Podètz ajustar mai qu'una etiqueta, separadas per de virgula."
index f4c8a6304f7477b1907932384793472cb652cc14..fcec3f3b2fba1ad15f11c55ba3d8d318fbc833c5 100644 (file)
@@ -292,6 +292,9 @@ class EntryRestControllerTest extends WallabagApiTestCase
         $this->assertSame(1, $content['page']);
         $this->assertGreaterThanOrEqual(1, $content['pages']);
 
+        $this->assertContains('foo', array_column($content['_embedded']['items'][0]['tags'], 'label'), 'Entries tags should have "foo" tag');
+        $this->assertContains('bar', array_column($content['_embedded']['items'][0]['tags'], 'label'), 'Entries tags should have "bar" tag');
+
         $this->assertArrayHasKey('_links', $content);
         $this->assertArrayHasKey('self', $content['_links']);
         $this->assertArrayHasKey('first', $content['_links']);
index 3e216381eb797903c2b7b38dfcafe33327201d66..ab7f23cc516a51acf4f959b39c8d7cc584745b89 100644 (file)
@@ -239,7 +239,8 @@ class ExportControllerTest extends WallabagCoreTestCase
         $this->assertSame($contentInDB->getLanguage(), $content[0]['language']);
         $this->assertSame($contentInDB->getReadingtime(), $content[0]['reading_time']);
         $this->assertSame($contentInDB->getDomainname(), $content[0]['domain_name']);
-        $this->assertSame(['foo bar', 'baz'], $content[0]['tags']);
+        $this->assertContains('baz', $content[0]['tags']);
+        $this->assertContains('foo', $content[0]['tags']);
     }
 
     public function testXmlExport()
index 6167fe2dbf82d2a880f0f34ca5f397b181297351..c6ca49374cd002086226fa66714102b7992d462e 100644 (file)
@@ -184,13 +184,13 @@ class RssControllerTest extends WallabagCoreTestCase
         $em->flush();
 
         $client = $this->getClient();
-        $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml');
+        $client->request('GET', '/admin/SUPERTOKEN/tags/foo.xml');
 
         $this->assertSame(200, $client->getResponse()->getStatusCode());
 
-        $this->validateDom($client->getResponse()->getContent(), 'tag (foo bar)', 'tags/foo-bar');
+        $this->validateDom($client->getResponse()->getContent(), 'tag (foo)', 'tags/foo');
 
-        $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml?page=3000');
+        $client->request('GET', '/admin/SUPERTOKEN/tags/foo.xml?page=3000');
         $this->assertSame(302, $client->getResponse()->getStatusCode());
     }
 }