aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas LÅ“uillet <nicolas@loeuillet.org>2015-08-07 22:20:30 +0200
committerNicolas LÅ“uillet <nicolas@loeuillet.org>2015-08-12 09:01:29 +0200
commit2686457448372543fdf4f1fc54c4fd20f0f02c2c (patch)
tree485eeecc3bd3db3613d47de25662d5c9163e4afe
parentfedaf005377e6d62ff0986f7f54afef3287a6451 (diff)
downloadwallabag-2686457448372543fdf4f1fc54c4fd20f0f02c2c.tar.gz
wallabag-2686457448372543fdf4f1fc54c4fd20f0f02c2c.tar.zst
wallabag-2686457448372543fdf4f1fc54c4fd20f0f02c2c.zip
store estimated reading time / filters on reading time
-rw-r--r--app/AppKernel.php1
-rw-r--r--app/SymfonyRequirements.php2
-rw-r--r--app/check.php4
-rw-r--r--app/config/config.yml4
-rw-r--r--composer.json3
-rw-r--r--composer.lock427
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php66
-rw-r--r--src/Wallabag/CoreBundle/Controller/RssController.php17
-rw-r--r--src/Wallabag/CoreBundle/Entity/Entry.php4
-rw-r--r--src/Wallabag/CoreBundle/Filter/EntryFilterType.php28
-rwxr-xr-xsrc/Wallabag/CoreBundle/Helper/Tools.php12
-rw-r--r--src/Wallabag/CoreBundle/Repository/EntryRepository.php36
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/Entry/entries.html.twig7
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/_global/public/css/style.css8
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css50
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig5
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/views/themes/material/public/css/print.css2
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php19
-rw-r--r--src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php13
20 files changed, 433 insertions, 279 deletions
diff --git a/app/AppKernel.php b/app/AppKernel.php
index 9a52f349..953614c0 100644
--- a/app/AppKernel.php
+++ b/app/AppKernel.php
@@ -25,6 +25,7 @@ class AppKernel extends Kernel
25 new Wallabag\CoreBundle\WallabagCoreBundle(), 25 new Wallabag\CoreBundle\WallabagCoreBundle(),
26 new Wallabag\ApiBundle\WallabagApiBundle(), 26 new Wallabag\ApiBundle\WallabagApiBundle(),
27 new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(), 27 new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
28 new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(),
28 ); 29 );
29 30
30 if (in_array($this->getEnvironment(), array('dev', 'test'))) { 31 if (in_array($this->getEnvironment(), array('dev', 'test'))) {
diff --git a/app/SymfonyRequirements.php b/app/SymfonyRequirements.php
index b9d62f72..abaf0c17 100644
--- a/app/SymfonyRequirements.php
+++ b/app/SymfonyRequirements.php
@@ -638,7 +638,7 @@ class SymfonyRequirements extends RequirementCollection
638 } 638 }
639 639
640 $this->addRecommendation( 640 $this->addRecommendation(
641 class_exists('Locale'), 641 extension_loaded('intl'),
642 'intl extension should be available', 642 'intl extension should be available',
643 'Install and enable the <strong>intl</strong> extension (used for validators).' 643 'Install and enable the <strong>intl</strong> extension (used for validators).'
644 ); 644 );
diff --git a/app/check.php b/app/check.php
index 90bad4a7..60ae0a8b 100644
--- a/app/check.php
+++ b/app/check.php
@@ -42,9 +42,9 @@ foreach ($symfonyRequirements->getRecommendations() as $req) {
42} 42}
43 43
44if ($checkPassed) { 44if ($checkPassed) {
45 echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects', true); 45 echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects');
46} else { 46} else {
47 echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects', true); 47 echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects');
48 48
49 echo_title('Fix the following mandatory requirements', 'red'); 49 echo_title('Fix the following mandatory requirements', 'red');
50 50
diff --git a/app/config/config.yml b/app/config/config.yml
index 75e09039..1f5f7441 100644
--- a/app/config/config.yml
+++ b/app/config/config.yml
@@ -47,7 +47,9 @@ twig:
47 version: %app.version% 47 version: %app.version%
48 paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb" 48 paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
49 flattr_url: "https://flattr.com/thing/1265480" 49 flattr_url: "https://flattr.com/thing/1265480"
50 50 form:
51 resources:
52 - LexikFormFilterBundle:Form:form_div_layout.html.twig
51# Assetic Configuration 53# Assetic Configuration
52assetic: 54assetic:
53 debug: "%kernel.debug%" 55 debug: "%kernel.debug%"
diff --git a/composer.json b/composer.json
index 5fe6eb02..5c093257 100644
--- a/composer.json
+++ b/composer.json
@@ -83,7 +83,8 @@
83 "wallabag/php-readability": "dev-master", 83 "wallabag/php-readability": "dev-master",
84 "wallabag/phpMobi": "dev-master", 84 "wallabag/phpMobi": "dev-master",
85 "wallabag/Fivefilters_Libraries": "dev-master", 85 "wallabag/Fivefilters_Libraries": "dev-master",
86 "pagerfanta/pagerfanta": "~1.0.3" 86 "pagerfanta/pagerfanta": "~1.0.3",
87 "lexik/form-filter-bundle": "~4.0"
87 }, 88 },
88 "require-dev": { 89 "require-dev": {
89 "doctrine/doctrine-fixtures-bundle": "~2.2.0", 90 "doctrine/doctrine-fixtures-bundle": "~2.2.0",
diff --git a/composer.lock b/composer.lock
index a5620bb1..a9902472 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,23 +1,23 @@
1{ 1{
2 "_readme": [ 2 "_readme": [
3 "This file locks the dependencies of your project to a known state", 3 "This file locks the dependencies of your project to a known state",
4 "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 "This file is @generated automatically" 5 "This file is @generated automatically"
6 ], 6 ],
7 "hash": "d7869b0dce6699d8f4916e675a4209a8", 7 "hash": "14a5e3837adfc98bca8d7eef22c9cc45",
8 "packages": [ 8 "packages": [
9 { 9 {
10 "name": "doctrine/annotations", 10 "name": "doctrine/annotations",
11 "version": "v1.2.4", 11 "version": "v1.2.6",
12 "source": { 12 "source": {
13 "type": "git", 13 "type": "git",
14 "url": "https://github.com/doctrine/annotations.git", 14 "url": "https://github.com/doctrine/annotations.git",
15 "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e" 15 "reference": "f4a91702ca3cd2e568c3736aa031ed00c3752af4"
16 }, 16 },
17 "dist": { 17 "dist": {
18 "type": "zip", 18 "type": "zip",
19 "url": "https://api.github.com/repos/doctrine/annotations/zipball/b5202eb9e83f8db52e0e58867e0a46e63be8332e", 19 "url": "https://api.github.com/repos/doctrine/annotations/zipball/f4a91702ca3cd2e568c3736aa031ed00c3752af4",
20 "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e", 20 "reference": "f4a91702ca3cd2e568c3736aa031ed00c3752af4",
21 "shasum": "" 21 "shasum": ""
22 }, 22 },
23 "require": { 23 "require": {
@@ -72,7 +72,7 @@
72 "docblock", 72 "docblock",
73 "parser" 73 "parser"
74 ], 74 ],
75 "time": "2014-12-23 22:40:37" 75 "time": "2015-06-17 12:21:22"
76 }, 76 },
77 { 77 {
78 "name": "doctrine/cache", 78 "name": "doctrine/cache",
@@ -585,16 +585,16 @@
585 }, 585 },
586 { 586 {
587 "name": "doctrine/instantiator", 587 "name": "doctrine/instantiator",
588 "version": "1.0.4", 588 "version": "1.0.5",
589 "source": { 589 "source": {
590 "type": "git", 590 "type": "git",
591 "url": "https://github.com/doctrine/instantiator.git", 591 "url": "https://github.com/doctrine/instantiator.git",
592 "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" 592 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
593 }, 593 },
594 "dist": { 594 "dist": {
595 "type": "zip", 595 "type": "zip",
596 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", 596 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
597 "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", 597 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
598 "shasum": "" 598 "shasum": ""
599 }, 599 },
600 "require": { 600 "require": {
@@ -605,7 +605,7 @@
605 "ext-pdo": "*", 605 "ext-pdo": "*",
606 "ext-phar": "*", 606 "ext-phar": "*",
607 "phpunit/phpunit": "~4.0", 607 "phpunit/phpunit": "~4.0",
608 "squizlabs/php_codesniffer": "2.0.*@ALPHA" 608 "squizlabs/php_codesniffer": "~2.0"
609 }, 609 },
610 "type": "library", 610 "type": "library",
611 "extra": { 611 "extra": {
@@ -614,8 +614,8 @@
614 } 614 }
615 }, 615 },
616 "autoload": { 616 "autoload": {
617 "psr-0": { 617 "psr-4": {
618 "Doctrine\\Instantiator\\": "src" 618 "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
619 } 619 }
620 }, 620 },
621 "notification-url": "https://packagist.org/downloads/", 621 "notification-url": "https://packagist.org/downloads/",
@@ -635,7 +635,7 @@
635 "constructor", 635 "constructor",
636 "instantiate" 636 "instantiate"
637 ], 637 ],
638 "time": "2014-10-13 12:58:55" 638 "time": "2015-06-14 21:17:01"
639 }, 639 },
640 { 640 {
641 "name": "doctrine/lexer", 641 "name": "doctrine/lexer",
@@ -770,16 +770,16 @@
770 }, 770 },
771 { 771 {
772 "name": "ezyang/htmlpurifier", 772 "name": "ezyang/htmlpurifier",
773 "version": "v4.6.0", 773 "version": "v4.7.0",
774 "source": { 774 "source": {
775 "type": "git", 775 "type": "git",
776 "url": "https://github.com/ezyang/htmlpurifier.git", 776 "url": "https://github.com/ezyang/htmlpurifier.git",
777 "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd" 777 "reference": "ae1828d955112356f7677c465f94f7deb7d27a40"
778 }, 778 },
779 "dist": { 779 "dist": {
780 "type": "zip", 780 "type": "zip",
781 "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/6f389f0f25b90d0b495308efcfa073981177f0fd", 781 "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/ae1828d955112356f7677c465f94f7deb7d27a40",
782 "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd", 782 "reference": "ae1828d955112356f7677c465f94f7deb7d27a40",
783 "shasum": "" 783 "shasum": ""
784 }, 784 },
785 "require": { 785 "require": {
@@ -810,21 +810,21 @@
810 "keywords": [ 810 "keywords": [
811 "html" 811 "html"
812 ], 812 ],
813 "time": "2013-11-30 08:25:19" 813 "time": "2015-08-05 01:03:42"
814 }, 814 },
815 { 815 {
816 "name": "friendsofsymfony/rest-bundle", 816 "name": "friendsofsymfony/rest-bundle",
817 "version": "1.6.0", 817 "version": "1.7.1",
818 "target-dir": "FOS/RestBundle", 818 "target-dir": "FOS/RestBundle",
819 "source": { 819 "source": {
820 "type": "git", 820 "type": "git",
821 "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", 821 "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git",
822 "reference": "832d08199cadf1770ec43c2cba68b42b4d5e7f9f" 822 "reference": "3fb2d30c58cde59213dbddd031bc36171b8b68b6"
823 }, 823 },
824 "dist": { 824 "dist": {
825 "type": "zip", 825 "type": "zip",
826 "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/832d08199cadf1770ec43c2cba68b42b4d5e7f9f", 826 "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/3fb2d30c58cde59213dbddd031bc36171b8b68b6",
827 "reference": "832d08199cadf1770ec43c2cba68b42b4d5e7f9f", 827 "reference": "3fb2d30c58cde59213dbddd031bc36171b8b68b6",
828 "shasum": "" 828 "shasum": ""
829 }, 829 },
830 "require": { 830 "require": {
@@ -863,7 +863,7 @@
863 "type": "symfony-bundle", 863 "type": "symfony-bundle",
864 "extra": { 864 "extra": {
865 "branch-alias": { 865 "branch-alias": {
866 "dev-master": "1.6-dev" 866 "dev-master": "1.7-dev"
867 } 867 }
868 }, 868 },
869 "autoload": { 869 "autoload": {
@@ -894,7 +894,7 @@
894 "keywords": [ 894 "keywords": [
895 "rest" 895 "rest"
896 ], 896 ],
897 "time": "2015-05-22 20:17:35" 897 "time": "2015-06-16 08:39:26"
898 }, 898 },
899 { 899 {
900 "name": "htmlawed/htmlawed", 900 "name": "htmlawed/htmlawed",
@@ -944,17 +944,16 @@
944 }, 944 },
945 { 945 {
946 "name": "incenteev/composer-parameter-handler", 946 "name": "incenteev/composer-parameter-handler",
947 "version": "v2.1.0", 947 "version": "v2.1.1",
948 "target-dir": "Incenteev/ParameterHandler",
949 "source": { 948 "source": {
950 "type": "git", 949 "type": "git",
951 "url": "https://github.com/Incenteev/ParameterHandler.git", 950 "url": "https://github.com/Incenteev/ParameterHandler.git",
952 "reference": "143272a0a09c62616a3c8011fc165a10c6b35241" 951 "reference": "84a205fe80a46101607bafbc423019527893ddd0"
953 }, 952 },
954 "dist": { 953 "dist": {
955 "type": "zip", 954 "type": "zip",
956 "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/143272a0a09c62616a3c8011fc165a10c6b35241", 955 "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/84a205fe80a46101607bafbc423019527893ddd0",
957 "reference": "143272a0a09c62616a3c8011fc165a10c6b35241", 956 "reference": "84a205fe80a46101607bafbc423019527893ddd0",
958 "shasum": "" 957 "shasum": ""
959 }, 958 },
960 "require": { 959 "require": {
@@ -973,8 +972,8 @@
973 } 972 }
974 }, 973 },
975 "autoload": { 974 "autoload": {
976 "psr-0": { 975 "psr-4": {
977 "Incenteev\\ParameterHandler": "" 976 "Incenteev\\ParameterHandler\\": ""
978 } 977 }
979 }, 978 },
980 "notification-url": "https://packagist.org/downloads/", 979 "notification-url": "https://packagist.org/downloads/",
@@ -992,7 +991,7 @@
992 "keywords": [ 991 "keywords": [
993 "parameters management" 992 "parameters management"
994 ], 993 ],
995 "time": "2013-12-07 10:10:39" 994 "time": "2015-06-03 08:27:03"
996 }, 995 },
997 { 996 {
998 "name": "jdorn/sql-formatter", 997 "name": "jdorn/sql-formatter",
@@ -1346,6 +1345,65 @@
1346 "time": "2014-12-12 05:04:05" 1345 "time": "2014-12-12 05:04:05"
1347 }, 1346 },
1348 { 1347 {
1348 "name": "lexik/form-filter-bundle",
1349 "version": "v4.0.0",
1350 "source": {
1351 "type": "git",
1352 "url": "https://github.com/lexik/LexikFormFilterBundle.git",
1353 "reference": "325432453705062ff43b02952b5ca815c5697ba6"
1354 },
1355 "dist": {
1356 "type": "zip",
1357 "url": "https://api.github.com/repos/lexik/LexikFormFilterBundle/zipball/325432453705062ff43b02952b5ca815c5697ba6",
1358 "reference": "325432453705062ff43b02952b5ca815c5697ba6",
1359 "shasum": ""
1360 },
1361 "require": {
1362 "doctrine/orm": "~2.2",
1363 "php": ">=5.3.2",
1364 "symfony/form": "~2.7",
1365 "symfony/framework-bundle": "~2.7"
1366 },
1367 "require-dev": {
1368 "phpunit/phpunit": "~3.7"
1369 },
1370 "type": "symfony-bundle",
1371 "extra": {
1372 "branch-alias": {
1373 "dev-master": "4.x.x-dev"
1374 }
1375 },
1376 "autoload": {
1377 "psr-4": {
1378 "Lexik\\Bundle\\FormFilterBundle\\": ""
1379 }
1380 },
1381 "notification-url": "https://packagist.org/downloads/",
1382 "license": [
1383 "MIT"
1384 ],
1385 "authors": [
1386 {
1387 "name": "Dev Lexik",
1388 "email": "dev@lexik.fr"
1389 },
1390 {
1391 "name": "Cedric Girard",
1392 "email": "c.girard@lexik.fr"
1393 }
1394 ],
1395 "description": "This bundle aim to provide classes to build some form filters and then build a doctrine query from this form filter.",
1396 "homepage": "https://github.com/lexik/LexikFormFilterBundle",
1397 "keywords": [
1398 "Symfony2",
1399 "bundle",
1400 "doctrine",
1401 "filter",
1402 "form"
1403 ],
1404 "time": "2015-07-31 13:58:10"
1405 },
1406 {
1349 "name": "liip/theme-bundle", 1407 "name": "liip/theme-bundle",
1350 "version": "1.1.3", 1408 "version": "1.1.3",
1351 "target-dir": "Liip/ThemeBundle", 1409 "target-dir": "Liip/ThemeBundle",
@@ -1405,12 +1463,12 @@
1405 "version": "1.5", 1463 "version": "1.5",
1406 "source": { 1464 "source": {
1407 "type": "git", 1465 "type": "git",
1408 "url": "https://github.com/matstars/simplehtmldom.git", 1466 "url": "https://github.com/matgargano/simplehtmldom.git",
1409 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be" 1467 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be"
1410 }, 1468 },
1411 "dist": { 1469 "dist": {
1412 "type": "zip", 1470 "type": "zip",
1413 "url": "https://api.github.com/repos/matstars/simplehtmldom/zipball/37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be", 1471 "url": "https://api.github.com/repos/matgargano/simplehtmldom/zipball/37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be",
1414 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be", 1472 "reference": "37fb0d7c1bda45c5a4cf14fdef56c1edf6aa42be",
1415 "shasum": "" 1473 "shasum": ""
1416 }, 1474 },
@@ -1500,16 +1558,16 @@
1500 }, 1558 },
1501 { 1559 {
1502 "name": "monolog/monolog", 1560 "name": "monolog/monolog",
1503 "version": "1.13.1", 1561 "version": "1.16.0",
1504 "source": { 1562 "source": {
1505 "type": "git", 1563 "type": "git",
1506 "url": "https://github.com/Seldaek/monolog.git", 1564 "url": "https://github.com/Seldaek/monolog.git",
1507 "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac" 1565 "reference": "c0c0b4bee3aabce7182876b0d912ef2595563db7"
1508 }, 1566 },
1509 "dist": { 1567 "dist": {
1510 "type": "zip", 1568 "type": "zip",
1511 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", 1569 "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c0c0b4bee3aabce7182876b0d912ef2595563db7",
1512 "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", 1570 "reference": "c0c0b4bee3aabce7182876b0d912ef2595563db7",
1513 "shasum": "" 1571 "shasum": ""
1514 }, 1572 },
1515 "require": { 1573 "require": {
@@ -1520,12 +1578,14 @@
1520 "psr/log-implementation": "1.0.0" 1578 "psr/log-implementation": "1.0.0"
1521 }, 1579 },
1522 "require-dev": { 1580 "require-dev": {
1523 "aws/aws-sdk-php": "~2.4, >2.4.8", 1581 "aws/aws-sdk-php": "^2.4.9",
1524 "doctrine/couchdb": "~1.0@dev", 1582 "doctrine/couchdb": "~1.0@dev",
1525 "graylog2/gelf-php": "~1.0", 1583 "graylog2/gelf-php": "~1.0",
1526 "phpunit/phpunit": "~4.0", 1584 "php-console/php-console": "^3.1.3",
1527 "raven/raven": "~0.5", 1585 "phpunit/phpunit": "~4.5",
1528 "ruflin/elastica": "0.90.*", 1586 "phpunit/phpunit-mock-objects": "2.3.0",
1587 "raven/raven": "~0.8",
1588 "ruflin/elastica": ">=0.90 <3.0",
1529 "swiftmailer/swiftmailer": "~5.3", 1589 "swiftmailer/swiftmailer": "~5.3",
1530 "videlalvaro/php-amqplib": "~2.4" 1590 "videlalvaro/php-amqplib": "~2.4"
1531 }, 1591 },
@@ -1535,6 +1595,7 @@
1535 "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 1595 "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
1536 "ext-mongo": "Allow sending log messages to a MongoDB server", 1596 "ext-mongo": "Allow sending log messages to a MongoDB server",
1537 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 1597 "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
1598 "php-console/php-console": "Allow sending log messages to Google Chrome",
1538 "raven/raven": "Allow sending log messages to a Sentry server", 1599 "raven/raven": "Allow sending log messages to a Sentry server",
1539 "rollbar/rollbar": "Allow sending log messages to Rollbar", 1600 "rollbar/rollbar": "Allow sending log messages to Rollbar",
1540 "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 1601 "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
@@ -1543,7 +1604,7 @@
1543 "type": "library", 1604 "type": "library",
1544 "extra": { 1605 "extra": {
1545 "branch-alias": { 1606 "branch-alias": {
1546 "dev-master": "1.13.x-dev" 1607 "dev-master": "1.16.x-dev"
1547 } 1608 }
1548 }, 1609 },
1549 "autoload": { 1610 "autoload": {
@@ -1569,7 +1630,7 @@
1569 "logging", 1630 "logging",
1570 "psr-3" 1631 "psr-3"
1571 ], 1632 ],
1572 "time": "2015-03-09 09:58:04" 1633 "time": "2015-08-09 17:44:44"
1573 }, 1634 },
1574 { 1635 {
1575 "name": "nelmio/api-doc-bundle", 1636 "name": "nelmio/api-doc-bundle",
@@ -1910,22 +1971,22 @@
1910 }, 1971 },
1911 { 1972 {
1912 "name": "sensio/distribution-bundle", 1973 "name": "sensio/distribution-bundle",
1913 "version": "v3.0.28", 1974 "version": "v3.0.31",
1914 "target-dir": "Sensio/Bundle/DistributionBundle", 1975 "target-dir": "Sensio/Bundle/DistributionBundle",
1915 "source": { 1976 "source": {
1916 "type": "git", 1977 "type": "git",
1917 "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", 1978 "url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
1918 "reference": "8175618b07793b9d43c3be931f3d8d4c14c9e866" 1979 "reference": "3a900814bd57bf20f9453ae81ff8772bc95d7fff"
1919 }, 1980 },
1920 "dist": { 1981 "dist": {
1921 "type": "zip", 1982 "type": "zip",
1922 "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/8175618b07793b9d43c3be931f3d8d4c14c9e866", 1983 "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/3a900814bd57bf20f9453ae81ff8772bc95d7fff",
1923 "reference": "8175618b07793b9d43c3be931f3d8d4c14c9e866", 1984 "reference": "3a900814bd57bf20f9453ae81ff8772bc95d7fff",
1924 "shasum": "" 1985 "shasum": ""
1925 }, 1986 },
1926 "require": { 1987 "require": {
1927 "php": ">=5.3.3", 1988 "php": ">=5.3.3",
1928 "sensiolabs/security-checker": "~2.0", 1989 "sensiolabs/security-checker": "~3.0",
1929 "symfony/class-loader": "~2.2", 1990 "symfony/class-loader": "~2.2",
1930 "symfony/framework-bundle": "~2.3", 1991 "symfony/framework-bundle": "~2.3",
1931 "symfony/process": "~2.2" 1992 "symfony/process": "~2.2"
@@ -1966,20 +2027,20 @@
1966 "configuration", 2027 "configuration",
1967 "distribution" 2028 "distribution"
1968 ], 2029 ],
1969 "time": "2015-06-01 15:04:20" 2030 "time": "2015-08-03 10:07:12"
1970 }, 2031 },
1971 { 2032 {
1972 "name": "sensio/framework-extra-bundle", 2033 "name": "sensio/framework-extra-bundle",
1973 "version": "v3.0.8", 2034 "version": "v3.0.10",
1974 "source": { 2035 "source": {
1975 "type": "git", 2036 "type": "git",
1976 "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", 2037 "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git",
1977 "reference": "a30fc18bf147bc25faf6b1d54bf55cfad4b63cba" 2038 "reference": "18fc2063c4d6569cdca47a39fbac32342eb65f3c"
1978 }, 2039 },
1979 "dist": { 2040 "dist": {
1980 "type": "zip", 2041 "type": "zip",
1981 "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/a30fc18bf147bc25faf6b1d54bf55cfad4b63cba", 2042 "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/18fc2063c4d6569cdca47a39fbac32342eb65f3c",
1982 "reference": "a30fc18bf147bc25faf6b1d54bf55cfad4b63cba", 2043 "reference": "18fc2063c4d6569cdca47a39fbac32342eb65f3c",
1983 "shasum": "" 2044 "shasum": ""
1984 }, 2045 },
1985 "require": { 2046 "require": {
@@ -2021,24 +2082,23 @@
2021 "annotations", 2082 "annotations",
2022 "controllers" 2083 "controllers"
2023 ], 2084 ],
2024 "time": "2015-05-29 18:27:23" 2085 "time": "2015-08-03 11:59:27"
2025 }, 2086 },
2026 { 2087 {
2027 "name": "sensiolabs/security-checker", 2088 "name": "sensiolabs/security-checker",
2028 "version": "v2.0.5", 2089 "version": "v3.0.1",
2029 "source": { 2090 "source": {
2030 "type": "git", 2091 "type": "git",
2031 "url": "https://github.com/sensiolabs/security-checker.git", 2092 "url": "https://github.com/sensiolabs/security-checker.git",
2032 "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810" 2093 "reference": "7735fd97ff7303d9df776b8dbc970f949399abc9"
2033 }, 2094 },
2034 "dist": { 2095 "dist": {
2035 "type": "zip", 2096 "type": "zip",
2036 "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/2c2a71f1c77d9765c12638c4724d9ca23658a810", 2097 "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/7735fd97ff7303d9df776b8dbc970f949399abc9",
2037 "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810", 2098 "reference": "7735fd97ff7303d9df776b8dbc970f949399abc9",
2038 "shasum": "" 2099 "shasum": ""
2039 }, 2100 },
2040 "require": { 2101 "require": {
2041 "ext-curl": "*",
2042 "symfony/console": "~2.0" 2102 "symfony/console": "~2.0"
2043 }, 2103 },
2044 "bin": [ 2104 "bin": [
@@ -2047,7 +2107,7 @@
2047 "type": "library", 2107 "type": "library",
2048 "extra": { 2108 "extra": {
2049 "branch-alias": { 2109 "branch-alias": {
2050 "dev-master": "2.0-dev" 2110 "dev-master": "3.0-dev"
2051 } 2111 }
2052 }, 2112 },
2053 "autoload": { 2113 "autoload": {
@@ -2066,7 +2126,7 @@
2066 } 2126 }
2067 ], 2127 ],
2068 "description": "A security checker for your composer.lock", 2128 "description": "A security checker for your composer.lock",
2069 "time": "2015-05-28 14:22:40" 2129 "time": "2015-08-11 12:11:25"
2070 }, 2130 },
2071 { 2131 {
2072 "name": "simplepie/simplepie", 2132 "name": "simplepie/simplepie",
@@ -2124,23 +2184,23 @@
2124 }, 2184 },
2125 { 2185 {
2126 "name": "swiftmailer/swiftmailer", 2186 "name": "swiftmailer/swiftmailer",
2127 "version": "v5.4.0", 2187 "version": "v5.4.1",
2128 "source": { 2188 "source": {
2129 "type": "git", 2189 "type": "git",
2130 "url": "https://github.com/swiftmailer/swiftmailer.git", 2190 "url": "https://github.com/swiftmailer/swiftmailer.git",
2131 "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f" 2191 "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421"
2132 }, 2192 },
2133 "dist": { 2193 "dist": {
2134 "type": "zip", 2194 "type": "zip",
2135 "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/31454f258f10329ae7c48763eb898a75c39e0a9f", 2195 "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421",
2136 "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f", 2196 "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421",
2137 "shasum": "" 2197 "shasum": ""
2138 }, 2198 },
2139 "require": { 2199 "require": {
2140 "php": ">=5.3.3" 2200 "php": ">=5.3.3"
2141 }, 2201 },
2142 "require-dev": { 2202 "require-dev": {
2143 "mockery/mockery": "~0.9.1" 2203 "mockery/mockery": "~0.9.1,<0.9.4"
2144 }, 2204 },
2145 "type": "library", 2205 "type": "library",
2146 "extra": { 2206 "extra": {
@@ -2169,10 +2229,11 @@
2169 "description": "Swiftmailer, free feature-rich PHP mailer", 2229 "description": "Swiftmailer, free feature-rich PHP mailer",
2170 "homepage": "http://swiftmailer.org", 2230 "homepage": "http://swiftmailer.org",
2171 "keywords": [ 2231 "keywords": [
2232 "email",
2172 "mail", 2233 "mail",
2173 "mailer" 2234 "mailer"
2174 ], 2235 ],
2175 "time": "2015-03-14 06:06:39" 2236 "time": "2015-06-06 14:19:39"
2176 }, 2237 },
2177 { 2238 {
2178 "name": "symfony/assetic-bundle", 2239 "name": "symfony/assetic-bundle",
@@ -2357,16 +2418,16 @@
2357 }, 2418 },
2358 { 2419 {
2359 "name": "symfony/symfony", 2420 "name": "symfony/symfony",
2360 "version": "v2.7.0", 2421 "version": "v2.7.3",
2361 "source": { 2422 "source": {
2362 "type": "git", 2423 "type": "git",
2363 "url": "https://github.com/symfony/symfony.git", 2424 "url": "https://github.com/symfony/symfony.git",
2364 "reference": "9975b1eca3de4db792a2c3e4e16f676a4aadcd46" 2425 "reference": "a9af4708b4bb650c4897e9b8dfbfbdb2ea5f0486"
2365 }, 2426 },
2366 "dist": { 2427 "dist": {
2367 "type": "zip", 2428 "type": "zip",
2368 "url": "https://api.github.com/repos/symfony/symfony/zipball/9975b1eca3de4db792a2c3e4e16f676a4aadcd46", 2429 "url": "https://api.github.com/repos/symfony/symfony/zipball/a9af4708b4bb650c4897e9b8dfbfbdb2ea5f0486",
2369 "reference": "9975b1eca3de4db792a2c3e4e16f676a4aadcd46", 2430 "reference": "a9af4708b4bb650c4897e9b8dfbfbdb2ea5f0486",
2370 "shasum": "" 2431 "shasum": ""
2371 }, 2432 },
2372 "require": { 2433 "require": {
@@ -2475,20 +2536,20 @@
2475 "keywords": [ 2536 "keywords": [
2476 "framework" 2537 "framework"
2477 ], 2538 ],
2478 "time": "2015-05-30 16:52:28" 2539 "time": "2015-07-31 13:24:45"
2479 }, 2540 },
2480 { 2541 {
2481 "name": "tecnick.com/tcpdf", 2542 "name": "tecnick.com/tcpdf",
2482 "version": "6.2.8", 2543 "version": "6.2.11",
2483 "source": { 2544 "source": {
2484 "type": "git", 2545 "type": "git",
2485 "url": "https://github.com/tecnickcom/TCPDF.git", 2546 "url": "https://github.com/tecnickcom/TCPDF.git",
2486 "reference": "3dee9e7f3a414875fd1d9f4f1dfc2433493a86d2" 2547 "reference": "354433a33946ae7497c3eab291eaaf814bccbfab"
2487 }, 2548 },
2488 "dist": { 2549 "dist": {
2489 "type": "zip", 2550 "type": "zip",
2490 "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/3dee9e7f3a414875fd1d9f4f1dfc2433493a86d2", 2551 "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/354433a33946ae7497c3eab291eaaf814bccbfab",
2491 "reference": "3dee9e7f3a414875fd1d9f4f1dfc2433493a86d2", 2552 "reference": "354433a33946ae7497c3eab291eaaf814bccbfab",
2492 "shasum": "" 2553 "shasum": ""
2493 }, 2554 },
2494 "require": { 2555 "require": {
@@ -2538,7 +2599,7 @@
2538 "pdf417", 2599 "pdf417",
2539 "qrcode" 2600 "qrcode"
2540 ], 2601 ],
2541 "time": "2015-04-29 16:13:58" 2602 "time": "2015-08-02 12:30:27"
2542 }, 2603 },
2543 { 2604 {
2544 "name": "twig/extensions", 2605 "name": "twig/extensions",
@@ -2594,16 +2655,16 @@
2594 }, 2655 },
2595 { 2656 {
2596 "name": "twig/twig", 2657 "name": "twig/twig",
2597 "version": "v1.18.1", 2658 "version": "v1.19.0",
2598 "source": { 2659 "source": {
2599 "type": "git", 2660 "type": "git",
2600 "url": "https://github.com/twigphp/Twig.git", 2661 "url": "https://github.com/twigphp/Twig.git",
2601 "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f" 2662 "reference": "edbeaf43b0a606cdaadc32a11d2673614a377b90"
2602 }, 2663 },
2603 "dist": { 2664 "dist": {
2604 "type": "zip", 2665 "type": "zip",
2605 "url": "https://api.github.com/repos/twigphp/Twig/zipball/9f70492f44398e276d1b81c1b43adfe6751c7b7f", 2666 "url": "https://api.github.com/repos/twigphp/Twig/zipball/edbeaf43b0a606cdaadc32a11d2673614a377b90",
2606 "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f", 2667 "reference": "edbeaf43b0a606cdaadc32a11d2673614a377b90",
2607 "shasum": "" 2668 "shasum": ""
2608 }, 2669 },
2609 "require": { 2670 "require": {
@@ -2612,7 +2673,7 @@
2612 "type": "library", 2673 "type": "library",
2613 "extra": { 2674 "extra": {
2614 "branch-alias": { 2675 "branch-alias": {
2615 "dev-master": "1.18-dev" 2676 "dev-master": "1.19-dev"
2616 } 2677 }
2617 }, 2678 },
2618 "autoload": { 2679 "autoload": {
@@ -2647,7 +2708,7 @@
2647 "keywords": [ 2708 "keywords": [
2648 "templating" 2709 "templating"
2649 ], 2710 ],
2650 "time": "2015-04-19 08:30:27" 2711 "time": "2015-07-31 13:45:26"
2651 }, 2712 },
2652 { 2713 {
2653 "name": "umpirsky/twig-gettext-extractor", 2714 "name": "umpirsky/twig-gettext-extractor",
@@ -3143,16 +3204,16 @@
3143 }, 3204 },
3144 { 3205 {
3145 "name": "willdurand/negotiation", 3206 "name": "willdurand/negotiation",
3146 "version": "1.3.4", 3207 "version": "1.4.0",
3147 "source": { 3208 "source": {
3148 "type": "git", 3209 "type": "git",
3149 "url": "https://github.com/willdurand/Negotiation.git", 3210 "url": "https://github.com/willdurand/Negotiation.git",
3150 "reference": "d7fa4ce4a0436915b9ba9f7cb5ff37719f0a834c" 3211 "reference": "8a84c5956e765f432542fc52a8c6e9aff4508eb3"
3151 }, 3212 },
3152 "dist": { 3213 "dist": {
3153 "type": "zip", 3214 "type": "zip",
3154 "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/d7fa4ce4a0436915b9ba9f7cb5ff37719f0a834c", 3215 "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/8a84c5956e765f432542fc52a8c6e9aff4508eb3",
3155 "reference": "d7fa4ce4a0436915b9ba9f7cb5ff37719f0a834c", 3216 "reference": "8a84c5956e765f432542fc52a8c6e9aff4508eb3",
3156 "shasum": "" 3217 "shasum": ""
3157 }, 3218 },
3158 "require": { 3219 "require": {
@@ -3161,12 +3222,12 @@
3161 "type": "library", 3222 "type": "library",
3162 "extra": { 3223 "extra": {
3163 "branch-alias": { 3224 "branch-alias": {
3164 "dev-master": "1.3-dev" 3225 "dev-master": "1.4-dev"
3165 } 3226 }
3166 }, 3227 },
3167 "autoload": { 3228 "autoload": {
3168 "psr-0": { 3229 "psr-4": {
3169 "Negotiation": "src/" 3230 "Negotiation\\": "src/Negotiation"
3170 } 3231 }
3171 }, 3232 },
3172 "notification-url": "https://packagist.org/downloads/", 3233 "notification-url": "https://packagist.org/downloads/",
@@ -3188,7 +3249,7 @@
3188 "header", 3249 "header",
3189 "negotiation" 3250 "negotiation"
3190 ], 3251 ],
3191 "time": "2014-10-02 07:26:00" 3252 "time": "2015-07-28 13:10:50"
3192 } 3253 }
3193 ], 3254 ],
3194 "packages-dev": [ 3255 "packages-dev": [
@@ -3251,17 +3312,16 @@
3251 }, 3312 },
3252 { 3313 {
3253 "name": "doctrine/doctrine-fixtures-bundle", 3314 "name": "doctrine/doctrine-fixtures-bundle",
3254 "version": "v2.2.0", 3315 "version": "v2.2.1",
3255 "target-dir": "Doctrine/Bundle/FixturesBundle",
3256 "source": { 3316 "source": {
3257 "type": "git", 3317 "type": "git",
3258 "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", 3318 "url": "https://github.com/doctrine/DoctrineFixturesBundle.git",
3259 "reference": "c811f96f0cf83b997e3a3ed037cac729bbe3e803" 3319 "reference": "817c2d233fde0fe85cb7e4d25d43fbfcd028aef8"
3260 }, 3320 },
3261 "dist": { 3321 "dist": {
3262 "type": "zip", 3322 "type": "zip",
3263 "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/c811f96f0cf83b997e3a3ed037cac729bbe3e803", 3323 "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/817c2d233fde0fe85cb7e4d25d43fbfcd028aef8",
3264 "reference": "c811f96f0cf83b997e3a3ed037cac729bbe3e803", 3324 "reference": "817c2d233fde0fe85cb7e4d25d43fbfcd028aef8",
3265 "shasum": "" 3325 "shasum": ""
3266 }, 3326 },
3267 "require": { 3327 "require": {
@@ -3273,12 +3333,12 @@
3273 "type": "symfony-bundle", 3333 "type": "symfony-bundle",
3274 "extra": { 3334 "extra": {
3275 "branch-alias": { 3335 "branch-alias": {
3276 "dev-master": "2.1.x-dev" 3336 "dev-master": "2.2.x-dev"
3277 } 3337 }
3278 }, 3338 },
3279 "autoload": { 3339 "autoload": {
3280 "psr-0": { 3340 "psr-4": {
3281 "Doctrine\\Bundle\\FixturesBundle": "" 3341 "Doctrine\\Bundle\\FixturesBundle\\": ""
3282 } 3342 }
3283 }, 3343 },
3284 "notification-url": "https://packagist.org/downloads/", 3344 "notification-url": "https://packagist.org/downloads/",
@@ -3287,18 +3347,16 @@
3287 ], 3347 ],
3288 "authors": [ 3348 "authors": [
3289 { 3349 {
3290 "name": "Fabien Potencier",
3291 "email": "fabien@symfony.com",
3292 "homepage": "http://fabien.potencier.org",
3293 "role": "Lead Developer"
3294 },
3295 {
3296 "name": "Symfony Community", 3350 "name": "Symfony Community",
3297 "homepage": "http://symfony.com/contributors" 3351 "homepage": "http://symfony.com/contributors"
3298 }, 3352 },
3299 { 3353 {
3300 "name": "Doctrine Project", 3354 "name": "Doctrine Project",
3301 "homepage": "http://www.doctrine-project.org" 3355 "homepage": "http://www.doctrine-project.org"
3356 },
3357 {
3358 "name": "Fabien Potencier",
3359 "email": "fabien@symfony.com"
3302 } 3360 }
3303 ], 3361 ],
3304 "description": "Symfony DoctrineFixturesBundle", 3362 "description": "Symfony DoctrineFixturesBundle",
@@ -3307,7 +3365,7 @@
3307 "Fixture", 3365 "Fixture",
3308 "persistence" 3366 "persistence"
3309 ], 3367 ],
3310 "time": "2013-09-05 11:23:37" 3368 "time": "2015-08-04 22:43:14"
3311 }, 3369 },
3312 { 3370 {
3313 "name": "phpdocumentor/reflection-docblock", 3371 "name": "phpdocumentor/reflection-docblock",
@@ -3420,16 +3478,16 @@
3420 }, 3478 },
3421 { 3479 {
3422 "name": "phpunit/php-code-coverage", 3480 "name": "phpunit/php-code-coverage",
3423 "version": "2.1.2", 3481 "version": "2.2.2",
3424 "source": { 3482 "source": {
3425 "type": "git", 3483 "type": "git",
3426 "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 3484 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
3427 "reference": "6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f" 3485 "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c"
3428 }, 3486 },
3429 "dist": { 3487 "dist": {
3430 "type": "zip", 3488 "type": "zip",
3431 "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f", 3489 "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2d7c03c0e4e080901b8f33b2897b0577be18a13c",
3432 "reference": "6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f", 3490 "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c",
3433 "shasum": "" 3491 "shasum": ""
3434 }, 3492 },
3435 "require": { 3493 "require": {
@@ -3437,7 +3495,7 @@
3437 "phpunit/php-file-iterator": "~1.3", 3495 "phpunit/php-file-iterator": "~1.3",
3438 "phpunit/php-text-template": "~1.2", 3496 "phpunit/php-text-template": "~1.2",
3439 "phpunit/php-token-stream": "~1.3", 3497 "phpunit/php-token-stream": "~1.3",
3440 "sebastian/environment": "~1.0", 3498 "sebastian/environment": "^1.3.2",
3441 "sebastian/version": "~1.0" 3499 "sebastian/version": "~1.0"
3442 }, 3500 },
3443 "require-dev": { 3501 "require-dev": {
@@ -3452,7 +3510,7 @@
3452 "type": "library", 3510 "type": "library",
3453 "extra": { 3511 "extra": {
3454 "branch-alias": { 3512 "branch-alias": {
3455 "dev-master": "2.1.x-dev" 3513 "dev-master": "2.2.x-dev"
3456 } 3514 }
3457 }, 3515 },
3458 "autoload": { 3516 "autoload": {
@@ -3478,20 +3536,20 @@
3478 "testing", 3536 "testing",
3479 "xunit" 3537 "xunit"
3480 ], 3538 ],
3481 "time": "2015-06-01 07:35:26" 3539 "time": "2015-08-04 03:42:39"
3482 }, 3540 },
3483 { 3541 {
3484 "name": "phpunit/php-file-iterator", 3542 "name": "phpunit/php-file-iterator",
3485 "version": "1.4.0", 3543 "version": "1.4.1",
3486 "source": { 3544 "source": {
3487 "type": "git", 3545 "type": "git",
3488 "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 3546 "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
3489 "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb" 3547 "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
3490 }, 3548 },
3491 "dist": { 3549 "dist": {
3492 "type": "zip", 3550 "type": "zip",
3493 "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb", 3551 "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
3494 "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb", 3552 "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
3495 "shasum": "" 3553 "shasum": ""
3496 }, 3554 },
3497 "require": { 3555 "require": {
@@ -3525,20 +3583,20 @@
3525 "filesystem", 3583 "filesystem",
3526 "iterator" 3584 "iterator"
3527 ], 3585 ],
3528 "time": "2015-04-02 05:19:05" 3586 "time": "2015-06-21 13:08:43"
3529 }, 3587 },
3530 { 3588 {
3531 "name": "phpunit/php-text-template", 3589 "name": "phpunit/php-text-template",
3532 "version": "1.2.0", 3590 "version": "1.2.1",
3533 "source": { 3591 "source": {
3534 "type": "git", 3592 "type": "git",
3535 "url": "https://github.com/sebastianbergmann/php-text-template.git", 3593 "url": "https://github.com/sebastianbergmann/php-text-template.git",
3536 "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" 3594 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
3537 }, 3595 },
3538 "dist": { 3596 "dist": {
3539 "type": "zip", 3597 "type": "zip",
3540 "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", 3598 "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
3541 "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", 3599 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
3542 "shasum": "" 3600 "shasum": ""
3543 }, 3601 },
3544 "require": { 3602 "require": {
@@ -3547,20 +3605,17 @@
3547 "type": "library", 3605 "type": "library",
3548 "autoload": { 3606 "autoload": {
3549 "classmap": [ 3607 "classmap": [
3550 "Text/" 3608 "src/"
3551 ] 3609 ]
3552 }, 3610 },
3553 "notification-url": "https://packagist.org/downloads/", 3611 "notification-url": "https://packagist.org/downloads/",
3554 "include-path": [
3555 ""
3556 ],
3557 "license": [ 3612 "license": [
3558 "BSD-3-Clause" 3613 "BSD-3-Clause"
3559 ], 3614 ],
3560 "authors": [ 3615 "authors": [
3561 { 3616 {
3562 "name": "Sebastian Bergmann", 3617 "name": "Sebastian Bergmann",
3563 "email": "sb@sebastian-bergmann.de", 3618 "email": "sebastian@phpunit.de",
3564 "role": "lead" 3619 "role": "lead"
3565 } 3620 }
3566 ], 3621 ],
@@ -3569,20 +3624,20 @@
3569 "keywords": [ 3624 "keywords": [
3570 "template" 3625 "template"
3571 ], 3626 ],
3572 "time": "2014-01-30 17:20:04" 3627 "time": "2015-06-21 13:50:34"
3573 }, 3628 },
3574 { 3629 {
3575 "name": "phpunit/php-timer", 3630 "name": "phpunit/php-timer",
3576 "version": "1.0.5", 3631 "version": "1.0.7",
3577 "source": { 3632 "source": {
3578 "type": "git", 3633 "type": "git",
3579 "url": "https://github.com/sebastianbergmann/php-timer.git", 3634 "url": "https://github.com/sebastianbergmann/php-timer.git",
3580 "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" 3635 "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
3581 }, 3636 },
3582 "dist": { 3637 "dist": {
3583 "type": "zip", 3638 "type": "zip",
3584 "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", 3639 "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
3585 "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", 3640 "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
3586 "shasum": "" 3641 "shasum": ""
3587 }, 3642 },
3588 "require": { 3643 "require": {
@@ -3591,13 +3646,10 @@
3591 "type": "library", 3646 "type": "library",
3592 "autoload": { 3647 "autoload": {
3593 "classmap": [ 3648 "classmap": [
3594 "PHP/" 3649 "src/"
3595 ] 3650 ]
3596 }, 3651 },
3597 "notification-url": "https://packagist.org/downloads/", 3652 "notification-url": "https://packagist.org/downloads/",
3598 "include-path": [
3599 ""
3600 ],
3601 "license": [ 3653 "license": [
3602 "BSD-3-Clause" 3654 "BSD-3-Clause"
3603 ], 3655 ],
@@ -3613,20 +3665,20 @@
3613 "keywords": [ 3665 "keywords": [
3614 "timer" 3666 "timer"
3615 ], 3667 ],
3616 "time": "2013-08-02 07:42:54" 3668 "time": "2015-06-21 08:01:12"
3617 }, 3669 },
3618 { 3670 {
3619 "name": "phpunit/php-token-stream", 3671 "name": "phpunit/php-token-stream",
3620 "version": "1.4.1", 3672 "version": "1.4.3",
3621 "source": { 3673 "source": {
3622 "type": "git", 3674 "type": "git",
3623 "url": "https://github.com/sebastianbergmann/php-token-stream.git", 3675 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
3624 "reference": "eab81d02569310739373308137284e0158424330" 3676 "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9"
3625 }, 3677 },
3626 "dist": { 3678 "dist": {
3627 "type": "zip", 3679 "type": "zip",
3628 "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330", 3680 "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
3629 "reference": "eab81d02569310739373308137284e0158424330", 3681 "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
3630 "shasum": "" 3682 "shasum": ""
3631 }, 3683 },
3632 "require": { 3684 "require": {
@@ -3662,20 +3714,20 @@
3662 "keywords": [ 3714 "keywords": [
3663 "tokenizer" 3715 "tokenizer"
3664 ], 3716 ],
3665 "time": "2015-04-08 04:46:07" 3717 "time": "2015-06-19 03:43:16"
3666 }, 3718 },
3667 { 3719 {
3668 "name": "phpunit/phpunit", 3720 "name": "phpunit/phpunit",
3669 "version": "4.6.9", 3721 "version": "4.8.3",
3670 "source": { 3722 "source": {
3671 "type": "git", 3723 "type": "git",
3672 "url": "https://github.com/sebastianbergmann/phpunit.git", 3724 "url": "https://github.com/sebastianbergmann/phpunit.git",
3673 "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1" 3725 "reference": "fd3050e26e3105f416d74c4d33aea659b406c59d"
3674 }, 3726 },
3675 "dist": { 3727 "dist": {
3676 "type": "zip", 3728 "type": "zip",
3677 "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/816d12536a7a032adc3b68737f82cfbbf98b79c1", 3729 "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fd3050e26e3105f416d74c4d33aea659b406c59d",
3678 "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1", 3730 "reference": "fd3050e26e3105f416d74c4d33aea659b406c59d",
3679 "shasum": "" 3731 "shasum": ""
3680 }, 3732 },
3681 "require": { 3733 "require": {
@@ -3685,15 +3737,15 @@
3685 "ext-reflection": "*", 3737 "ext-reflection": "*",
3686 "ext-spl": "*", 3738 "ext-spl": "*",
3687 "php": ">=5.3.3", 3739 "php": ">=5.3.3",
3688 "phpspec/prophecy": "~1.3,>=1.3.1", 3740 "phpspec/prophecy": "^1.3.1",
3689 "phpunit/php-code-coverage": "~2.0,>=2.0.11", 3741 "phpunit/php-code-coverage": "~2.1",
3690 "phpunit/php-file-iterator": "~1.4", 3742 "phpunit/php-file-iterator": "~1.4",
3691 "phpunit/php-text-template": "~1.2", 3743 "phpunit/php-text-template": "~1.2",
3692 "phpunit/php-timer": "~1.0", 3744 "phpunit/php-timer": ">=1.0.6",
3693 "phpunit/phpunit-mock-objects": "~2.3", 3745 "phpunit/phpunit-mock-objects": "~2.3",
3694 "sebastian/comparator": "~1.1", 3746 "sebastian/comparator": "~1.1",
3695 "sebastian/diff": "~1.2", 3747 "sebastian/diff": "~1.2",
3696 "sebastian/environment": "~1.2", 3748 "sebastian/environment": "~1.3",
3697 "sebastian/exporter": "~1.2", 3749 "sebastian/exporter": "~1.2",
3698 "sebastian/global-state": "~1.0", 3750 "sebastian/global-state": "~1.0",
3699 "sebastian/version": "~1.0", 3751 "sebastian/version": "~1.0",
@@ -3708,7 +3760,7 @@
3708 "type": "library", 3760 "type": "library",
3709 "extra": { 3761 "extra": {
3710 "branch-alias": { 3762 "branch-alias": {
3711 "dev-master": "4.6.x-dev" 3763 "dev-master": "4.8.x-dev"
3712 } 3764 }
3713 }, 3765 },
3714 "autoload": { 3766 "autoload": {
@@ -3734,26 +3786,27 @@
3734 "testing", 3786 "testing",
3735 "xunit" 3787 "xunit"
3736 ], 3788 ],
3737 "time": "2015-05-29 06:00:03" 3789 "time": "2015-08-10 09:16:56"
3738 }, 3790 },
3739 { 3791 {
3740 "name": "phpunit/phpunit-mock-objects", 3792 "name": "phpunit/phpunit-mock-objects",
3741 "version": "2.3.3", 3793 "version": "2.3.6",
3742 "source": { 3794 "source": {
3743 "type": "git", 3795 "type": "git",
3744 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 3796 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
3745 "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7" 3797 "reference": "18dfbcb81d05e2296c0bcddd4db96cade75e6f42"
3746 }, 3798 },
3747 "dist": { 3799 "dist": {
3748 "type": "zip", 3800 "type": "zip",
3749 "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/253c005852591fd547fc18cd5b7b43a1ec82d8f7", 3801 "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/18dfbcb81d05e2296c0bcddd4db96cade75e6f42",
3750 "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7", 3802 "reference": "18dfbcb81d05e2296c0bcddd4db96cade75e6f42",
3751 "shasum": "" 3803 "shasum": ""
3752 }, 3804 },
3753 "require": { 3805 "require": {
3754 "doctrine/instantiator": "~1.0,>=1.0.2", 3806 "doctrine/instantiator": "~1.0,>=1.0.2",
3755 "php": ">=5.3.3", 3807 "php": ">=5.3.3",
3756 "phpunit/php-text-template": "~1.2" 3808 "phpunit/php-text-template": "~1.2",
3809 "sebastian/exporter": "~1.2"
3757 }, 3810 },
3758 "require-dev": { 3811 "require-dev": {
3759 "phpunit/phpunit": "~4.4" 3812 "phpunit/phpunit": "~4.4"
@@ -3789,20 +3842,20 @@
3789 "mock", 3842 "mock",
3790 "xunit" 3843 "xunit"
3791 ], 3844 ],
3792 "time": "2015-05-29 05:19:18" 3845 "time": "2015-07-10 06:54:24"
3793 }, 3846 },
3794 { 3847 {
3795 "name": "sebastian/comparator", 3848 "name": "sebastian/comparator",
3796 "version": "1.1.1", 3849 "version": "1.2.0",
3797 "source": { 3850 "source": {
3798 "type": "git", 3851 "type": "git",
3799 "url": "https://github.com/sebastianbergmann/comparator.git", 3852 "url": "https://github.com/sebastianbergmann/comparator.git",
3800 "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" 3853 "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
3801 }, 3854 },
3802 "dist": { 3855 "dist": {
3803 "type": "zip", 3856 "type": "zip",
3804 "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", 3857 "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
3805 "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", 3858 "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
3806 "shasum": "" 3859 "shasum": ""
3807 }, 3860 },
3808 "require": { 3861 "require": {
@@ -3816,7 +3869,7 @@
3816 "type": "library", 3869 "type": "library",
3817 "extra": { 3870 "extra": {
3818 "branch-alias": { 3871 "branch-alias": {
3819 "dev-master": "1.1.x-dev" 3872 "dev-master": "1.2.x-dev"
3820 } 3873 }
3821 }, 3874 },
3822 "autoload": { 3875 "autoload": {
@@ -3853,7 +3906,7 @@
3853 "compare", 3906 "compare",
3854 "equality" 3907 "equality"
3855 ], 3908 ],
3856 "time": "2015-01-29 16:28:08" 3909 "time": "2015-07-26 15:48:44"
3857 }, 3910 },
3858 { 3911 {
3859 "name": "sebastian/diff", 3912 "name": "sebastian/diff",
@@ -3909,16 +3962,16 @@
3909 }, 3962 },
3910 { 3963 {
3911 "name": "sebastian/environment", 3964 "name": "sebastian/environment",
3912 "version": "1.2.2", 3965 "version": "1.3.2",
3913 "source": { 3966 "source": {
3914 "type": "git", 3967 "type": "git",
3915 "url": "https://github.com/sebastianbergmann/environment.git", 3968 "url": "https://github.com/sebastianbergmann/environment.git",
3916 "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" 3969 "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44"
3917 }, 3970 },
3918 "dist": { 3971 "dist": {
3919 "type": "zip", 3972 "type": "zip",
3920 "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", 3973 "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44",
3921 "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", 3974 "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44",
3922 "shasum": "" 3975 "shasum": ""
3923 }, 3976 },
3924 "require": { 3977 "require": {
@@ -3955,20 +4008,20 @@
3955 "environment", 4008 "environment",
3956 "hhvm" 4009 "hhvm"
3957 ], 4010 ],
3958 "time": "2015-01-01 10:01:08" 4011 "time": "2015-08-03 06:14:51"
3959 }, 4012 },
3960 { 4013 {
3961 "name": "sebastian/exporter", 4014 "name": "sebastian/exporter",
3962 "version": "1.2.0", 4015 "version": "1.2.1",
3963 "source": { 4016 "source": {
3964 "type": "git", 4017 "type": "git",
3965 "url": "https://github.com/sebastianbergmann/exporter.git", 4018 "url": "https://github.com/sebastianbergmann/exporter.git",
3966 "reference": "84839970d05254c73cde183a721c7af13aede943" 4019 "reference": "7ae5513327cb536431847bcc0c10edba2701064e"
3967 }, 4020 },
3968 "dist": { 4021 "dist": {
3969 "type": "zip", 4022 "type": "zip",
3970 "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", 4023 "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
3971 "reference": "84839970d05254c73cde183a721c7af13aede943", 4024 "reference": "7ae5513327cb536431847bcc0c10edba2701064e",
3972 "shasum": "" 4025 "shasum": ""
3973 }, 4026 },
3974 "require": { 4027 "require": {
@@ -4021,7 +4074,7 @@
4021 "export", 4074 "export",
4022 "exporter" 4075 "exporter"
4023 ], 4076 ],
4024 "time": "2015-01-27 07:23:06" 4077 "time": "2015-06-21 07:55:53"
4025 }, 4078 },
4026 { 4079 {
4027 "name": "sebastian/global-state", 4080 "name": "sebastian/global-state",
@@ -4076,16 +4129,16 @@
4076 }, 4129 },
4077 { 4130 {
4078 "name": "sebastian/recursion-context", 4131 "name": "sebastian/recursion-context",
4079 "version": "1.0.0", 4132 "version": "1.0.1",
4080 "source": { 4133 "source": {
4081 "type": "git", 4134 "type": "git",
4082 "url": "https://github.com/sebastianbergmann/recursion-context.git", 4135 "url": "https://github.com/sebastianbergmann/recursion-context.git",
4083 "reference": "3989662bbb30a29d20d9faa04a846af79b276252" 4136 "reference": "994d4a811bafe801fb06dccbee797863ba2792ba"
4084 }, 4137 },
4085 "dist": { 4138 "dist": {
4086 "type": "zip", 4139 "type": "zip",
4087 "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", 4140 "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba",
4088 "reference": "3989662bbb30a29d20d9faa04a846af79b276252", 4141 "reference": "994d4a811bafe801fb06dccbee797863ba2792ba",
4089 "shasum": "" 4142 "shasum": ""
4090 }, 4143 },
4091 "require": { 4144 "require": {
@@ -4125,20 +4178,20 @@
4125 ], 4178 ],
4126 "description": "Provides functionality to recursively process PHP variables", 4179 "description": "Provides functionality to recursively process PHP variables",
4127 "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 4180 "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
4128 "time": "2015-01-24 09:48:32" 4181 "time": "2015-06-21 08:04:50"
4129 }, 4182 },
4130 { 4183 {
4131 "name": "sebastian/version", 4184 "name": "sebastian/version",
4132 "version": "1.0.5", 4185 "version": "1.0.6",
4133 "source": { 4186 "source": {
4134 "type": "git", 4187 "type": "git",
4135 "url": "https://github.com/sebastianbergmann/version.git", 4188 "url": "https://github.com/sebastianbergmann/version.git",
4136 "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4" 4189 "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
4137 }, 4190 },
4138 "dist": { 4191 "dist": {
4139 "type": "zip", 4192 "type": "zip",
4140 "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", 4193 "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
4141 "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", 4194 "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
4142 "shasum": "" 4195 "shasum": ""
4143 }, 4196 },
4144 "type": "library", 4197 "type": "library",
@@ -4160,7 +4213,7 @@
4160 ], 4213 ],
4161 "description": "Library that helps with managing the version number of Git-hosted PHP projects", 4214 "description": "Library that helps with managing the version number of Git-hosted PHP projects",
4162 "homepage": "https://github.com/sebastianbergmann/version", 4215 "homepage": "https://github.com/sebastianbergmann/version",
4163 "time": "2015-02-24 06:35:25" 4216 "time": "2015-06-21 13:59:46"
4164 }, 4217 },
4165 { 4218 {
4166 "name": "sensio/generator-bundle", 4219 "name": "sensio/generator-bundle",
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index 29e0ffb0..8894690c 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -9,6 +9,9 @@ use Wallabag\CoreBundle\Entity\Entry;
9use Wallabag\CoreBundle\Service\Extractor; 9use Wallabag\CoreBundle\Service\Extractor;
10use Wallabag\CoreBundle\Form\Type\NewEntryType; 10use Wallabag\CoreBundle\Form\Type\NewEntryType;
11use Wallabag\CoreBundle\Form\Type\EditEntryType; 11use Wallabag\CoreBundle\Form\Type\EditEntryType;
12use Wallabag\CoreBundle\Filter\EntryFilterType;
13use Pagerfanta\Adapter\DoctrineORMAdapter;
14use Pagerfanta\Pagerfanta;
12 15
13class EntryController extends Controller 16class EntryController extends Controller
14{ 17{
@@ -89,22 +92,39 @@ class EntryController extends Controller
89 /** 92 /**
90 * Shows unread entries for current user. 93 * Shows unread entries for current user.
91 * 94 *
95 * @param Request $request
96 * @param int $page
97 *
92 * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"}) 98 * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"})
93 * 99 *
94 * @return \Symfony\Component\HttpFoundation\Response 100 * @return \Symfony\Component\HttpFoundation\Response
95 */ 101 */
96 public function showUnreadAction($page) 102 public function showUnreadAction(Request $request, $page)
97 { 103 {
98 $entries = $this->getDoctrine() 104 $form = $this->get('form.factory')->create(new EntryFilterType());
105
106 $filterBuilder = $this->getDoctrine()
99 ->getRepository('WallabagCoreBundle:Entry') 107 ->getRepository('WallabagCoreBundle:Entry')
100 ->findUnreadByUser($this->getUser()->getId()); 108 ->findUnreadByUser($this->getUser()->getId());
101 109
110 if ($request->query->has($form->getName())) {
111 // manually bind values from the request
112 $form->submit($request->query->get($form->getName()));
113
114 // build the query from the given form object
115 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
116 }
117
118 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
119 $entries = new Pagerfanta($pagerAdapter);
120
102 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage()); 121 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
103 $entries->setCurrentPage($page); 122 $entries->setCurrentPage($page);
104 123
105 return $this->render( 124 return $this->render(
106 'WallabagCoreBundle:Entry:entries.html.twig', 125 'WallabagCoreBundle:Entry:entries.html.twig',
107 array( 126 array(
127 'form' => $form->createView(),
108 'entries' => $entries, 128 'entries' => $entries,
109 'currentPage' => $page 129 'currentPage' => $page
110 ) 130 )
@@ -114,22 +134,39 @@ class EntryController extends Controller
114 /** 134 /**
115 * Shows read entries for current user. 135 * Shows read entries for current user.
116 * 136 *
137 * @param Request $request
138 * @param int $page
139 *
117 * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"}) 140 * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"})
118 * 141 *
119 * @return \Symfony\Component\HttpFoundation\Response 142 * @return \Symfony\Component\HttpFoundation\Response
120 */ 143 */
121 public function showArchiveAction($page) 144 public function showArchiveAction(Request $request, $page)
122 { 145 {
123 $entries = $this->getDoctrine() 146 $form = $this->get('form.factory')->create(new EntryFilterType());
147
148 $filterBuilder = $this->getDoctrine()
124 ->getRepository('WallabagCoreBundle:Entry') 149 ->getRepository('WallabagCoreBundle:Entry')
125 ->findArchiveByUser($this->getUser()->getId()); 150 ->findArchiveByUser($this->getUser()->getId());
126 151
152 if ($request->query->has($form->getName())) {
153 // manually bind values from the request
154 $form->submit($request->query->get($form->getName()));
155
156 // build the query from the given form object
157 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
158 }
159
160 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
161 $entries = new Pagerfanta($pagerAdapter);
162
127 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage()); 163 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
128 $entries->setCurrentPage($page); 164 $entries->setCurrentPage($page);
129 165
130 return $this->render( 166 return $this->render(
131 'WallabagCoreBundle:Entry:entries.html.twig', 167 'WallabagCoreBundle:Entry:entries.html.twig',
132 array( 168 array(
169 'form' => $form->createView(),
133 'entries' => $entries, 170 'entries' => $entries,
134 'currentPage' => $page 171 'currentPage' => $page
135 ) 172 )
@@ -139,22 +176,39 @@ class EntryController extends Controller
139 /** 176 /**
140 * Shows starred entries for current user. 177 * Shows starred entries for current user.
141 * 178 *
179 * @param Request $request
180 * @param int $page
181 *
142 * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"}) 182 * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"})
143 * 183 *
144 * @return \Symfony\Component\HttpFoundation\Response 184 * @return \Symfony\Component\HttpFoundation\Response
145 */ 185 */
146 public function showStarredAction($page) 186 public function showStarredAction(Request $request, $page)
147 { 187 {
148 $entries = $this->getDoctrine() 188 $form = $this->get('form.factory')->create(new EntryFilterType());
189
190 $filterBuilder = $this->getDoctrine()
149 ->getRepository('WallabagCoreBundle:Entry') 191 ->getRepository('WallabagCoreBundle:Entry')
150 ->findStarredByUser($this->getUser()->getId()); 192 ->findStarredByUser($this->getUser()->getId());
151 193
194 if ($request->query->has($form->getName())) {
195 // manually bind values from the request
196 $form->submit($request->query->get($form->getName()));
197
198 // build the query from the given form object
199 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
200 }
201
202 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
203 $entries = new Pagerfanta($pagerAdapter);
204
152 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage()); 205 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
153 $entries->setCurrentPage($page); 206 $entries->setCurrentPage($page);
154 207
155 return $this->render( 208 return $this->render(
156 'WallabagCoreBundle:Entry:entries.html.twig', 209 'WallabagCoreBundle:Entry:entries.html.twig',
157 array( 210 array(
211 'form' => $form->createView(),
158 'entries' => $entries, 212 'entries' => $entries,
159 'currentPage' => $page 213 'currentPage' => $page
160 ) 214 )
diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php
index 8428dce0..0558c53b 100644
--- a/src/Wallabag/CoreBundle/Controller/RssController.php
+++ b/src/Wallabag/CoreBundle/Controller/RssController.php
@@ -7,6 +7,8 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
7use Symfony\Bundle\FrameworkBundle\Controller\Controller; 7use Symfony\Bundle\FrameworkBundle\Controller\Controller;
8use Wallabag\CoreBundle\Entity\User; 8use Wallabag\CoreBundle\Entity\User;
9use Wallabag\CoreBundle\Entity\Entry; 9use Wallabag\CoreBundle\Entity\Entry;
10use Pagerfanta\Adapter\DoctrineORMAdapter;
11use Pagerfanta\Pagerfanta;
10 12
11class RssController extends Controller 13class RssController extends Controller
12{ 14{
@@ -20,12 +22,15 @@ class RssController extends Controller
20 */ 22 */
21 public function showUnreadAction(User $user) 23 public function showUnreadAction(User $user)
22 { 24 {
23 $entries = $this->getDoctrine() 25 $qb = $this->getDoctrine()
24 ->getRepository('WallabagCoreBundle:Entry') 26 ->getRepository('WallabagCoreBundle:Entry')
25 ->findUnreadByUser( 27 ->findUnreadByUser(
26 $user->getId() 28 $user->getId()
27 ); 29 );
28 30
31 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
32 $entries = new Pagerfanta($pagerAdapter);
33
29 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit'); 34 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
30 $entries->setMaxPerPage($perPage); 35 $entries->setMaxPerPage($perPage);
31 36
@@ -45,12 +50,15 @@ class RssController extends Controller
45 */ 50 */
46 public function showArchiveAction(User $user) 51 public function showArchiveAction(User $user)
47 { 52 {
48 $entries = $this->getDoctrine() 53 $qb = $this->getDoctrine()
49 ->getRepository('WallabagCoreBundle:Entry') 54 ->getRepository('WallabagCoreBundle:Entry')
50 ->findArchiveByUser( 55 ->findArchiveByUser(
51 $user->getId() 56 $user->getId()
52 ); 57 );
53 58
59 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
60 $entries = new Pagerfanta($pagerAdapter);
61
54 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit'); 62 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
55 $entries->setMaxPerPage($perPage); 63 $entries->setMaxPerPage($perPage);
56 64
@@ -70,12 +78,15 @@ class RssController extends Controller
70 */ 78 */
71 public function showStarredAction(User $user) 79 public function showStarredAction(User $user)
72 { 80 {
73 $entries = $this->getDoctrine() 81 $qb = $this->getDoctrine()
74 ->getRepository('WallabagCoreBundle:Entry') 82 ->getRepository('WallabagCoreBundle:Entry')
75 ->findStarredByUser( 83 ->findStarredByUser(
76 $user->getId() 84 $user->getId()
77 ); 85 );
78 86
87 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
88 $entries = new Pagerfanta($pagerAdapter);
89
79 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit'); 90 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
80 $entries->setMaxPerPage($perPage); 91 $entries->setMaxPerPage($perPage);
81 92
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php
index f139bbac..9aebc55b 100644
--- a/src/Wallabag/CoreBundle/Entity/Entry.php
+++ b/src/Wallabag/CoreBundle/Entity/Entry.php
@@ -7,6 +7,7 @@ use Doctrine\ORM\Mapping as ORM;
7use Symfony\Component\Validator\Constraints as Assert; 7use Symfony\Component\Validator\Constraints as Assert;
8use Hateoas\Configuration\Annotation as Hateoas; 8use Hateoas\Configuration\Annotation as Hateoas;
9use JMS\Serializer\Annotation\XmlRoot; 9use JMS\Serializer\Annotation\XmlRoot;
10use Wallabag\CoreBundle\Helper\Tools;
10 11
11/** 12/**
12 * Entry. 13 * Entry.
@@ -96,7 +97,7 @@ class Entry
96 /** 97 /**
97 * @var int 98 * @var int
98 * 99 *
99 * @ORM\Column(name="reading_type", type="integer", nullable=true) 100 * @ORM\Column(name="reading_time", type="integer", nullable=true)
100 */ 101 */
101 private $readingTime; 102 private $readingTime;
102 103
@@ -264,6 +265,7 @@ class Entry
264 public function setContent($content) 265 public function setContent($content)
265 { 266 {
266 $this->content = $content; 267 $this->content = $content;
268 $this->readingTime = Tools::getReadingTime($content);
267 269
268 return $this; 270 return $this;
269 } 271 }
diff --git a/src/Wallabag/CoreBundle/Filter/EntryFilterType.php b/src/Wallabag/CoreBundle/Filter/EntryFilterType.php
new file mode 100644
index 00000000..636ba324
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Filter/EntryFilterType.php
@@ -0,0 +1,28 @@
1<?php
2
3namespace Wallabag\CoreBundle\Filter;
4
5use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\FormBuilderInterface;
7use Symfony\Component\OptionsResolver\OptionsResolver;
8
9class EntryFilterType extends AbstractType
10{
11 public function buildForm(FormBuilderInterface $builder, array $options)
12 {
13 $builder->add('readingTime', 'filter_number_range');
14 }
15
16 public function getName()
17 {
18 return 'entry_filter';
19 }
20
21 public function configureOptions(OptionsResolver $resolver)
22 {
23 $resolver->setDefaults(array(
24 'csrf_protection' => false,
25 'validation_groups' => array('filtering')
26 ));
27 }
28}
diff --git a/src/Wallabag/CoreBundle/Helper/Tools.php b/src/Wallabag/CoreBundle/Helper/Tools.php
index be29ab99..d368ee71 100755
--- a/src/Wallabag/CoreBundle/Helper/Tools.php
+++ b/src/Wallabag/CoreBundle/Helper/Tools.php
@@ -118,4 +118,16 @@ final class Tools
118 118
119 return str_replace('+', '', $token); 119 return str_replace('+', '', $token);
120 } 120 }
121
122 /**
123 * For a given text, we calculate reading time for an article.
124 *
125 * @param $text
126 *
127 * @return float
128 */
129 public static function getReadingTime($text)
130 {
131 return floor(str_word_count(strip_tags($text)) / 200);
132 }
121} 133}
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index a4514d9e..f885ee94 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -13,20 +13,15 @@ class EntryRepository extends EntityRepository
13 * 13 *
14 * @param int $userId 14 * @param int $userId
15 * 15 *
16 * @return Pagerfanta 16 * @return QueryBuilder
17 */ 17 */
18 public function findUnreadByUser($userId) 18 public function findUnreadByUser($userId)
19 { 19 {
20 $qb = $this->createQueryBuilder('e') 20 return $this->createQueryBuilder('e')
21 ->leftJoin('e.user', 'u') 21 ->leftJoin('e.user', 'u')
22 ->where('e.isArchived = false') 22 ->where('e.isArchived = false')
23 ->andWhere('u.id =:userId')->setParameter('userId', $userId) 23 ->andWhere('u.id =:userId')->setParameter('userId', $userId)
24 ->orderBy('e.id', 'desc') 24 ->orderBy('e.id', 'desc');
25 ->getQuery();
26
27 $pagerAdapter = new DoctrineORMAdapter($qb);
28
29 return new Pagerfanta($pagerAdapter);
30 } 25 }
31 26
32 /** 27 /**
@@ -34,21 +29,15 @@ class EntryRepository extends EntityRepository
34 * 29 *
35 * @param int $userId 30 * @param int $userId
36 * 31 *
37 * @return Pagerfanta 32 * @return QueryBuilder
38 */ 33 */
39 public function findArchiveByUser($userId) 34 public function findArchiveByUser($userId)
40 { 35 {
41 $qb = $this->createQueryBuilder('e') 36 return $this->createQueryBuilder('e')
42 ->select('e')
43 ->leftJoin('e.user', 'u') 37 ->leftJoin('e.user', 'u')
44 ->where('e.isArchived = true') 38 ->where('e.isArchived = true')
45 ->andWhere('u.id =:userId')->setParameter('userId', $userId) 39 ->andWhere('u.id =:userId')->setParameter('userId', $userId)
46 ->orderBy('e.id', 'desc') 40 ->orderBy('e.id', 'desc');
47 ->getQuery();
48
49 $pagerAdapter = new DoctrineORMAdapter($qb);
50
51 return new Pagerfanta($pagerAdapter);
52 } 41 }
53 42
54 /** 43 /**
@@ -56,22 +45,15 @@ class EntryRepository extends EntityRepository
56 * 45 *
57 * @param int $userId 46 * @param int $userId
58 * 47 *
59 * @return Pagerfanta 48 * @return QueryBuilder
60 */ 49 */
61 public function findStarredByUser($userId) 50 public function findStarredByUser($userId)
62 { 51 {
63 52 return $this->createQueryBuilder('e')
64 $qb = $this->createQueryBuilder('e')
65 ->select('e')
66 ->leftJoin('e.user', 'u') 53 ->leftJoin('e.user', 'u')
67 ->where('e.isStarred = true') 54 ->where('e.isStarred = true')
68 ->andWhere('u.id =:userId')->setParameter('userId', $userId) 55 ->andWhere('u.id =:userId')->setParameter('userId', $userId)
69 ->orderBy('e.id', 'desc') 56 ->orderBy('e.id', 'desc');
70 ->getQuery();
71
72 $pagerAdapter = new DoctrineORMAdapter($qb);
73
74 return new Pagerfanta($pagerAdapter);
75 } 57 }
76 58
77 /** 59 /**
diff --git a/src/Wallabag/CoreBundle/Resources/views/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/Entry/entries.html.twig
index bf3caf09..7629ef35 100644
--- a/src/Wallabag/CoreBundle/Resources/views/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/Entry/entries.html.twig
@@ -21,11 +21,12 @@
21 {% if entries is empty %} 21 {% if entries is empty %}
22 <div class="messages warning"><p>{% trans %}No articles found.{% endtrans %}</p></div> 22 <div class="messages warning"><p>{% trans %}No articles found.{% endtrans %}</p></div>
23 {% else %} 23 {% else %}
24 <div><form>{{ form_rest(form) }}<button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">Filter</button></form></div>
24 {% for entry in entries %} 25 {% for entry in entries %}
25 <div id="entry-{{ entry.id|e }}" class="entrie"> 26 <div id="entry-{{ entry.id|e }}" class="entry">
26 <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2> 27 <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2>
27 {% if entry.content| readingTime > 0 %} 28 {% if entry.readingTime > 0 %}
28 <div class="estimatedTime"><span class="tool reading-time">{% trans %}estimated reading time :{% endtrans %} {{ entry.content| readingTime }} min</span></div> 29 <div class="estimatedTime"><span class="tool reading-time">{% trans %}estimated reading time :{% endtrans %} {{ entry.readingTime }} min</span></div>
29 {% else %} 30 {% else %}
30 <div class="estimatedTime"><span class="tool reading-time">{% trans %}estimated reading time :{% endtrans %} <small class="inferieur">&lt;</small> 1 min</span></div> 31 <div class="estimatedTime"><span class="tool reading-time">{% trans %}estimated reading time :{% endtrans %} <small class="inferieur">&lt;</small> 1 min</span></div>
31 {% endif %} 32 {% endif %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig
index 5ec9bc03..a39a8dc3 100644
--- a/src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig
@@ -17,8 +17,8 @@
17 <pubDate>{{ entry.createdAt|date('D, d M Y H:i:s') }}</pubDate> 17 <pubDate>{{ entry.createdAt|date('D, d M Y H:i:s') }}</pubDate>
18 <description> 18 <description>
19 <![CDATA[ 19 <![CDATA[
20 {%- if entry.content|readingTime > 0 -%} 20 {%- if entry.readingTime > 0 -%}
21 {% trans %}estimated reading time :{% endtrans %} {{ entry.content|readingTime }} min 21 {% trans %}estimated reading time :{% endtrans %} {{ entry.readingTime }} min
22 {%- else -%} 22 {%- else -%}
23 {% trans %}estimated reading time :{% endtrans %} &lt; 1 min 23 {% trans %}estimated reading time :{% endtrans %} &lt; 1 min
24 {%- endif %} 24 {%- endif %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/_global/public/css/style.css b/src/Wallabag/CoreBundle/Resources/views/themes/_global/public/css/style.css
index e3069b86..ffd9d022 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/_global/public/css/style.css
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/_global/public/css/style.css
@@ -121,7 +121,7 @@ a:visited {
121 font-size: 1.3em; 121 font-size: 1.3em;
122} 122}
123 123
124#main #content .entrie { 124#main #content .entry {
125 margin-top: 15px; 125 margin-top: 15px;
126 padding-bottom: 15px; 126 padding-bottom: 15px;
127 border-bottom: 1px dashed #222; 127 border-bottom: 1px dashed #222;
@@ -129,19 +129,19 @@ a:visited {
129} 129}
130 130
131/* First entry */ 131/* First entry */
132#main #content .results + .entrie { 132#main #content .results + .entry {
133 clear: both; 133 clear: both;
134 margin-top: 0; 134 margin-top: 0;
135} 135}
136 136
137#main .entrie .tools { 137#main .entry .tools {
138 float: right; 138 float: right;
139 text-align: right; 139 text-align: right;
140 list-style-type: none; 140 list-style-type: none;
141 opacity: 0.5; 141 opacity: 0.5;
142} 142}
143 143
144#main .entrie .tools .tool span { 144#main .entry .tools .tool span {
145 display: inline-block; 145 display: inline-block;
146 width: 16px; 146 width: 16px;
147 height: 16px; 147 height: 16px;
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css
index e2844ccc..6090face 100755
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css
@@ -322,7 +322,7 @@ footer a {
322 letter-spacing:-5px; 322 letter-spacing:-5px;
323} 323}
324 324
325.listmode .entrie { 325.listmode .entry {
326 width: 100%!important; 326 width: 100%!important;
327 margin-left: 0!important; 327 margin-left: 0!important;
328} 328}
@@ -343,7 +343,7 @@ footer a {
343 top: -1px; 343 top: -1px;
344} 344}
345 345
346.entrie { 346.entry {
347 background-color: #FFF; 347 background-color: #FFF;
348 letter-spacing:normal; 348 letter-spacing:normal;
349 box-shadow: 0 3px 7px rgba(0,0,0,0.3); 349 box-shadow: 0 3px 7px rgba(0,0,0,0.3);
@@ -366,7 +366,7 @@ footer a {
366 /* transition: all 0.5s ease; */ 366 /* transition: all 0.5s ease; */
367} 367}
368 368
369.entrie:before { 369.entry:before {
370 content: ""; 370 content: "";
371 width: 0; 371 width: 0;
372 height: 0; 372 height: 0;
@@ -384,7 +384,7 @@ footer a {
384 transition: all 0.5s ease; 384 transition: all 0.5s ease;
385} 385}
386 386
387.entrie:after { 387.entry:after {
388 content: ""; 388 content: "";
389 position: absolute; 389 position: absolute;
390 height: 7px; 390 height: 7px;
@@ -399,34 +399,34 @@ footer a {
399 transition: all 0.5s ease; 399 transition: all 0.5s ease;
400} 400}
401 401
402.entrie:hover { 402.entry:hover {
403 box-shadow: 0 3px 10px rgba(0,0,0,1); 403 box-shadow: 0 3px 10px rgba(0,0,0,1);
404} 404}
405 405
406.entrie:hover:after { 406.entry:hover:after {
407 height: 40px; 407 height: 40px;
408} 408}
409 409
410.entrie:hover:before { 410.entry:hover:before {
411 bottom: 2.4em; 411 bottom: 2.4em;
412} 412}
413 413
414.entrie:hover h2 a { 414.entry:hover h2 a {
415 color: #666; 415 color: #666;
416} 416}
417 417
418.entrie h2 { 418.entry h2 {
419 text-transform: none; 419 text-transform: none;
420 margin-bottom: 0; 420 margin-bottom: 0;
421 line-height: 1.2; 421 line-height: 1.2;
422} 422}
423 423
424 .entrie h2:after { 424 .entry h2:after {
425 content: none; 425 content: none;
426 } 426 }
427 427
428 428
429.entrie h2 a { 429.entry h2 a {
430 display: block; 430 display: block;
431 text-decoration: none; 431 text-decoration: none;
432 color: #000; 432 color: #000;
@@ -438,7 +438,7 @@ footer a {
438 transition: all 0.5s ease; 438 transition: all 0.5s ease;
439} 439}
440/* 440/*
441.entrie h2 a:after { 441.entry h2 a:after {
442 content: ""; 442 content: "";
443 position: absolute; 443 position: absolute;
444 top: 0; 444 top: 0;
@@ -448,21 +448,21 @@ footer a {
448} 448}
449*/ 449*/
450 450
451.entrie p { 451.entry p {
452 color: #666; 452 color: #666;
453 font-size: 0.9em; 453 font-size: 0.9em;
454 line-height: 1.7; 454 line-height: 1.7;
455} 455}
456 456
457 .entrie h2 a:first-letter { 457 .entry h2 a:first-letter {
458 text-transform: uppercase; 458 text-transform: uppercase;
459 } 459 }
460 460
461.entrie:hover .tools { 461.entry:hover .tools {
462 bottom: 0; 462 bottom: 0;
463} 463}
464 464
465.entrie .tools { 465.entry .tools {
466 position: absolute; 466 position: absolute;
467 bottom: -50px; 467 bottom: -50px;
468 left: 0; 468 left: 0;
@@ -477,22 +477,22 @@ footer a {
477 transition: all 0.5s ease; 477 transition: all 0.5s ease;
478} 478}
479 479
480 .entrie .tools a { 480 .entry .tools a {
481 color: #666; 481 color: #666;
482 text-decoration: none; 482 text-decoration: none;
483 display: block; 483 display: block;
484 padding: 0.4em; 484 padding: 0.4em;
485 } 485 }
486 486
487 .entrie .tools a:hover { 487 .entry .tools a:hover {
488 color: #FFF; 488 color: #FFF;
489 } 489 }
490 490
491 .entrie .tools li { 491 .entry .tools li {
492 display: inline-block; 492 display: inline-block;
493 } 493 }
494 494
495.entrie:nth-child(3n+1) { 495.entry:nth-child(3n+1) {
496 margin-left: 0; 496 margin-left: 0;
497} 497}
498 498
@@ -941,13 +941,13 @@ pre code {
941 ========================================================================== */ 941 ========================================================================== */
942 942
943@media screen and (max-width: 1050px) { 943@media screen and (max-width: 1050px) {
944 .entrie { 944 .entry {
945 width: 49%; 945 width: 49%;
946 } 946 }
947 .entrie:nth-child(3n+1) { 947 .entry:nth-child(3n+1) {
948 margin-left: 1.5%; 948 margin-left: 1.5%;
949 } 949 }
950 .entrie:nth-child(2n+1) { 950 .entry:nth-child(2n+1) {
951 margin-left: 0; 951 margin-left: 0;
952 } 952 }
953} 953}
@@ -962,7 +962,7 @@ pre code {
962} 962}
963 963
964@media screen and (max-width: 700px) { 964@media screen and (max-width: 700px) {
965 .entrie { 965 .entry {
966 width: 100%; 966 width: 100%;
967 margin-left: 0; 967 margin-left: 0;
968 } 968 }
@@ -972,7 +972,7 @@ pre code {
972} 972}
973 973
974@media screen and (max-width: 500px) { 974@media screen and (max-width: 500px) {
975 .entrie { 975 .entry {
976 width: 100%; 976 width: 100%;
977 margin-left: 0; 977 margin-left: 0;
978 } 978 }
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
index fbdc1ffd..b9f1be49 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
@@ -18,6 +18,7 @@
18 {% if entries is not empty %} 18 {% if entries is not empty %}
19 <div class="results clearfix"> 19 <div class="results clearfix">
20 <div class="nb-results left">{{ entries.count }} {% trans %}entries{% endtrans %}</div> 20 <div class="nb-results left">{{ entries.count }} {% trans %}entries{% endtrans %}</div>
21 <div class="left"><form>{{ form_rest(form) }}<button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">Filter</button></form></div>
21 <ul class="pagination right"> 22 <ul class="pagination right">
22 {% for p in range(1, entries.nbPages) %} 23 {% for p in range(1, entries.nbPages) %}
23 <li class="{{ currentPage == p ? 'active':'waves-effect'}}"> 24 <li class="{{ currentPage == p ? 'active':'waves-effect'}}">
@@ -38,8 +39,8 @@
38 <div class="card"> 39 <div class="card">
39 <div class="card-content"> 40 <div class="card-content">
40 <span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></span> 41 <span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></span>
41 {% if entry.content| readingTime > 0 %} 42 {% if entry.readingTime > 0 %}
42 <div class="estimatedTime grey-text"><span class="tool reading-time">{% trans %}estimated reading time: {% endtrans %} {{ entry.content| readingTime }} min</span></div> 43 <div class="estimatedTime grey-text"><span class="tool reading-time">{% trans %}estimated reading time: {% endtrans %} {{ entry.readingTime }} min</span></div>
43 {% else %} 44 {% else %}
44 <div class="estimatedTime grey-text"><span class="tool reading-time">{% trans %}estimated reading time: {% endtrans %} <small class="inferieur">&lt;</small> 1 min</span></div> 45 <div class="estimatedTime grey-text"><span class="tool reading-time">{% trans %}estimated reading time: {% endtrans %} <small class="inferieur">&lt;</small> 1 min</span></div>
45 {% endif %} 46 {% endif %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/public/css/print.css b/src/Wallabag/CoreBundle/Resources/views/themes/material/public/css/print.css
index 9dd6d295..2a799c44 100755
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/public/css/print.css
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/public/css/print.css
@@ -25,7 +25,7 @@ body > footer,
25div.tools, 25div.tools,
26header div, 26header div,
27.messages, 27.messages,
28.entrie + .results { 28.entry + .results {
29 display: none !important; 29 display: none !important;
30} 30}
31 31
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
index 2cd50130..24848eb2 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
@@ -240,4 +240,23 @@ class EntryControllerTest extends WallabagCoreTestCase
240 240
241 $this->assertEquals(403, $client->getResponse()->getStatusCode()); 241 $this->assertEquals(403, $client->getResponse()->getStatusCode());
242 } 242 }
243
244 public function testFilterOnUnreadeView()
245 {
246 $this->logInAs('admin');
247 $client = $this->getClient();
248
249 $crawler = $client->request('GET', '/unread/list');
250
251 $form = $crawler->filter('button[id=submit-filter]')->form();
252
253 $data = array(
254 'entry_filter[readingTime][right_number]' => 11,
255 'entry_filter[readingTime][left_number]' => 11
256 );
257
258 $crawler = $client->submit($form, $data);
259
260 $this->assertCount(1, $crawler->filter('div[class=entry]'));
261 }
243} 262}
diff --git a/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php b/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php
index 18388948..5f0a9643 100644
--- a/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php
+++ b/src/Wallabag/CoreBundle/Twig/Extension/WallabagExtension.php
@@ -7,7 +7,6 @@ class WallabagExtension extends \Twig_Extension
7 public function getFilters() 7 public function getFilters()
8 { 8 {
9 return array( 9 return array(
10 new \Twig_SimpleFilter('readingTime', array($this, 'getReadingTime')),
11 new \Twig_SimpleFilter('domainName', array($this, 'getDomainName')), 10 new \Twig_SimpleFilter('domainName', array($this, 'getDomainName')),
12 ); 11 );
13 } 12 }
@@ -24,18 +23,6 @@ class WallabagExtension extends \Twig_Extension
24 return parse_url($url, PHP_URL_HOST); 23 return parse_url($url, PHP_URL_HOST);
25 } 24 }
26 25
27 /**
28 * For a given text, we calculate reading time for an article.
29 *
30 * @param $text
31 *
32 * @return float
33 */
34 public static function getReadingTime($text)
35 {
36 return floor(str_word_count(strip_tags($text)) / 200);
37 }
38
39 public function getName() 26 public function getName()
40 { 27 {
41 return 'wallabag_extension'; 28 return 'wallabag_extension';