import 'lato-font/css/lato-font.css';
import './global.scss';
-/* Shortcuts*/
+/* Shortcuts */
import './js/shortcuts/entry';
import './js/shortcuts/main';
import Mousetrap from 'mousetrap';
-/** Shortcuts **/
+/* Shortcuts */
/* Go to */
Mousetrap.bind('g u', () => { window.location.href = Routing.generate('homepage'); });
"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",
$manager->persist($tag1);
- $this->addReference('foo-tag', $tag1);
+ $this->addReference('foo-bar-tag', $tag1);
$tag2 = new Tag();
$tag2->setLabel('bar');
$this->addReference('baz-tag', $tag3);
+ $tag4 = new Tag();
+ $tag4->setLabel('foo');
+
+ $manager->persist($tag4);
+
+ $this->addReference('foo-tag', $tag4);
+
$manager->flush();
}
namespace Wallabag\CoreBundle\Helper;
+use Html2Text\Html2Text;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerBuilder;
use PHPePub\Core\EPub;
$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(
{
$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);
}
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);
}
}
->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();
{
$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();
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."
$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']);
$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()
$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());
}
}