diff options
Diffstat (limited to 'src')
48 files changed, 280 insertions, 93 deletions
diff --git a/src/Wallabag/AnnotationBundle/Controller/WallabagAnnotationController.php b/src/Wallabag/AnnotationBundle/Controller/WallabagAnnotationController.php index f3090e65..3a7421c7 100644 --- a/src/Wallabag/AnnotationBundle/Controller/WallabagAnnotationController.php +++ b/src/Wallabag/AnnotationBundle/Controller/WallabagAnnotationController.php | |||
@@ -28,7 +28,7 @@ class WallabagAnnotationController extends FOSRestController | |||
28 | ->getDoctrine() | 28 | ->getDoctrine() |
29 | ->getRepository('WallabagAnnotationBundle:Annotation') | 29 | ->getRepository('WallabagAnnotationBundle:Annotation') |
30 | ->findAnnotationsByPageId($entry->getId(), $this->getUser()->getId()); | 30 | ->findAnnotationsByPageId($entry->getId(), $this->getUser()->getId()); |
31 | $total = count($annotationRows); | 31 | $total = \count($annotationRows); |
32 | $annotations = ['total' => $total, 'rows' => $annotationRows]; | 32 | $annotations = ['total' => $total, 'rows' => $annotationRows]; |
33 | 33 | ||
34 | $json = $this->get('jms_serializer')->serialize($annotations, 'json'); | 34 | $json = $this->get('jms_serializer')->serialize($annotations, 'json'); |
diff --git a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php index b44f7e64..0de5c934 100644 --- a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php +++ b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php | |||
@@ -21,7 +21,7 @@ class AnnotationRepository extends EntityRepository | |||
21 | public function getBuilderForAllByUser($userId) | 21 | public function getBuilderForAllByUser($userId) |
22 | { | 22 | { |
23 | return $this | 23 | return $this |
24 | ->getBuilderByUser($userId) | 24 | ->getSortedQueryBuilderByUser($userId) |
25 | ; | 25 | ; |
26 | } | 26 | } |
27 | 27 | ||
@@ -133,7 +133,7 @@ class AnnotationRepository extends EntityRepository | |||
133 | * | 133 | * |
134 | * @return QueryBuilder | 134 | * @return QueryBuilder |
135 | */ | 135 | */ |
136 | private function getBuilderByUser($userId) | 136 | private function getSortedQueryBuilderByUser($userId) |
137 | { | 137 | { |
138 | return $this->createQueryBuilder('a') | 138 | return $this->createQueryBuilder('a') |
139 | ->leftJoin('a.user', 'u') | 139 | ->leftJoin('a.user', 'u') |
diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php index fc47c479..0b4e74a0 100644 --- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php +++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php | |||
@@ -102,7 +102,7 @@ class EntryRestController extends WallabagRestController | |||
102 | $order = $request->query->get('order', 'desc'); | 102 | $order = $request->query->get('order', 'desc'); |
103 | $page = (int) $request->query->get('page', 1); | 103 | $page = (int) $request->query->get('page', 1); |
104 | $perPage = (int) $request->query->get('perPage', 30); | 104 | $perPage = (int) $request->query->get('perPage', 30); |
105 | $tags = is_array($request->query->get('tags')) ? '' : (string) $request->query->get('tags', ''); | 105 | $tags = \is_array($request->query->get('tags')) ? '' : (string) $request->query->get('tags', ''); |
106 | $since = $request->query->get('since', 0); | 106 | $since = $request->query->get('since', 0); |
107 | 107 | ||
108 | /** @var \Pagerfanta\Pagerfanta $pager */ | 108 | /** @var \Pagerfanta\Pagerfanta $pager */ |
@@ -253,7 +253,7 @@ class EntryRestController extends WallabagRestController | |||
253 | 253 | ||
254 | $limit = $this->container->getParameter('wallabag_core.api_limit_mass_actions'); | 254 | $limit = $this->container->getParameter('wallabag_core.api_limit_mass_actions'); |
255 | 255 | ||
256 | if (count($urls) > $limit) { | 256 | if (\count($urls) > $limit) { |
257 | throw new HttpException(400, 'API limit reached'); | 257 | throw new HttpException(400, 'API limit reached'); |
258 | } | 258 | } |
259 | 259 | ||
@@ -347,7 +347,7 @@ class EntryRestController extends WallabagRestController | |||
347 | 'open_graph' => [ | 347 | 'open_graph' => [ |
348 | 'og_image' => !empty($data['picture']) ? $data['picture'] : $entry->getPreviewPicture(), | 348 | 'og_image' => !empty($data['picture']) ? $data['picture'] : $entry->getPreviewPicture(), |
349 | ], | 349 | ], |
350 | 'authors' => is_string($data['authors']) ? explode(',', $data['authors']) : $entry->getPublishedBy(), | 350 | 'authors' => \is_string($data['authors']) ? explode(',', $data['authors']) : $entry->getPublishedBy(), |
351 | ] | 351 | ] |
352 | ); | 352 | ); |
353 | } catch (\Exception $e) { | 353 | } catch (\Exception $e) { |
@@ -461,7 +461,7 @@ class EntryRestController extends WallabagRestController | |||
461 | $contentProxy->updateLanguage($entry, $data['language']); | 461 | $contentProxy->updateLanguage($entry, $data['language']); |
462 | } | 462 | } |
463 | 463 | ||
464 | if (!empty($data['authors']) && is_string($data['authors'])) { | 464 | if (!empty($data['authors']) && \is_string($data['authors'])) { |
465 | $entry->setPublishedBy(explode(',', $data['authors'])); | 465 | $entry->setPublishedBy(explode(',', $data['authors'])); |
466 | } | 466 | } |
467 | 467 | ||
diff --git a/src/Wallabag/ApiBundle/Controller/TagRestController.php b/src/Wallabag/ApiBundle/Controller/TagRestController.php index 9d333fe4..c6d6df6a 100644 --- a/src/Wallabag/ApiBundle/Controller/TagRestController.php +++ b/src/Wallabag/ApiBundle/Controller/TagRestController.php | |||
@@ -138,14 +138,14 @@ class TagRestController extends WallabagRestController | |||
138 | */ | 138 | */ |
139 | private function cleanOrphanTag($tags) | 139 | private function cleanOrphanTag($tags) |
140 | { | 140 | { |
141 | if (!is_array($tags)) { | 141 | if (!\is_array($tags)) { |
142 | $tags = [$tags]; | 142 | $tags = [$tags]; |
143 | } | 143 | } |
144 | 144 | ||
145 | $em = $this->getDoctrine()->getManager(); | 145 | $em = $this->getDoctrine()->getManager(); |
146 | 146 | ||
147 | foreach ($tags as $tag) { | 147 | foreach ($tags as $tag) { |
148 | if (0 === count($tag->getEntries())) { | 148 | if (0 === \count($tag->getEntries())) { |
149 | $em->remove($tag); | 149 | $em->remove($tag); |
150 | } | 150 | } |
151 | } | 151 | } |
diff --git a/src/Wallabag/CoreBundle/Command/CleanDuplicatesCommand.php b/src/Wallabag/CoreBundle/Command/CleanDuplicatesCommand.php index b58909db..99170967 100644 --- a/src/Wallabag/CoreBundle/Command/CleanDuplicatesCommand.php +++ b/src/Wallabag/CoreBundle/Command/CleanDuplicatesCommand.php | |||
@@ -51,7 +51,7 @@ class CleanDuplicatesCommand extends ContainerAwareCommand | |||
51 | } else { | 51 | } else { |
52 | $users = $this->getContainer()->get('wallabag_user.user_repository')->findAll(); | 52 | $users = $this->getContainer()->get('wallabag_user.user_repository')->findAll(); |
53 | 53 | ||
54 | $this->io->text(sprintf('Cleaning through <info>%d</info> user accounts', count($users))); | 54 | $this->io->text(sprintf('Cleaning through <info>%d</info> user accounts', \count($users))); |
55 | 55 | ||
56 | foreach ($users as $user) { | 56 | foreach ($users as $user) { |
57 | $this->io->text(sprintf('Processing user <info>%s</info>', $user->getUsername())); | 57 | $this->io->text(sprintf('Processing user <info>%s</info>', $user->getUsername())); |
@@ -79,7 +79,7 @@ class CleanDuplicatesCommand extends ContainerAwareCommand | |||
79 | $url = $this->similarUrl($entry['url']); | 79 | $url = $this->similarUrl($entry['url']); |
80 | 80 | ||
81 | /* @var $entry Entry */ | 81 | /* @var $entry Entry */ |
82 | if (in_array($url, $urls, true)) { | 82 | if (\in_array($url, $urls, true)) { |
83 | ++$duplicatesCount; | 83 | ++$duplicatesCount; |
84 | 84 | ||
85 | $em->remove($repo->find($entry['id'])); | 85 | $em->remove($repo->find($entry['id'])); |
@@ -96,8 +96,8 @@ class CleanDuplicatesCommand extends ContainerAwareCommand | |||
96 | 96 | ||
97 | private function similarUrl($url) | 97 | private function similarUrl($url) |
98 | { | 98 | { |
99 | if (in_array(substr($url, -1), ['/', '#'], true)) { // get rid of "/" and "#" and the end of urls | 99 | if (\in_array(substr($url, -1), ['/', '#'], true)) { // get rid of "/" and "#" and the end of urls |
100 | return substr($url, 0, strlen($url)); | 100 | return substr($url, 0, \strlen($url)); |
101 | } | 101 | } |
102 | 102 | ||
103 | return $url; | 103 | return $url; |
diff --git a/src/Wallabag/CoreBundle/Command/ExportCommand.php b/src/Wallabag/CoreBundle/Command/ExportCommand.php index 75e9ad91..128f9d65 100644 --- a/src/Wallabag/CoreBundle/Command/ExportCommand.php +++ b/src/Wallabag/CoreBundle/Command/ExportCommand.php | |||
@@ -47,7 +47,7 @@ class ExportCommand extends ContainerAwareCommand | |||
47 | ->getQuery() | 47 | ->getQuery() |
48 | ->getResult(); | 48 | ->getResult(); |
49 | 49 | ||
50 | $io->text(sprintf('Exporting <info>%d</info> entrie(s) for user <info>%s</info>...', count($entries), $user->getUserName())); | 50 | $io->text(sprintf('Exporting <info>%d</info> entrie(s) for user <info>%s</info>...', \count($entries), $user->getUserName())); |
51 | 51 | ||
52 | $filePath = $input->getArgument('filepath'); | 52 | $filePath = $input->getArgument('filepath'); |
53 | 53 | ||
diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php index a56a3257..3c76545c 100644 --- a/src/Wallabag/CoreBundle/Command/InstallCommand.php +++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php | |||
@@ -81,7 +81,7 @@ class InstallCommand extends ContainerAwareCommand | |||
81 | $status = '<info>OK!</info>'; | 81 | $status = '<info>OK!</info>'; |
82 | $help = ''; | 82 | $help = ''; |
83 | 83 | ||
84 | if (!extension_loaded($this->getContainer()->getParameter('database_driver'))) { | 84 | if (!\extension_loaded($this->getContainer()->getParameter('database_driver'))) { |
85 | $fulfilled = false; | 85 | $fulfilled = false; |
86 | $status = '<error>ERROR!</error>'; | 86 | $status = '<error>ERROR!</error>'; |
87 | $help = 'Database driver "' . $this->getContainer()->getParameter('database_driver') . '" is not installed.'; | 87 | $help = 'Database driver "' . $this->getContainer()->getParameter('database_driver') . '" is not installed.'; |
@@ -146,7 +146,7 @@ class InstallCommand extends ContainerAwareCommand | |||
146 | $status = '<info>OK!</info>'; | 146 | $status = '<info>OK!</info>'; |
147 | $help = ''; | 147 | $help = ''; |
148 | 148 | ||
149 | if (!function_exists($functionRequired)) { | 149 | if (!\function_exists($functionRequired)) { |
150 | $fulfilled = false; | 150 | $fulfilled = false; |
151 | $status = '<error>ERROR!</error>'; | 151 | $status = '<error>ERROR!</error>'; |
152 | $help = 'You need the ' . $functionRequired . ' function activated'; | 152 | $help = 'You need the ' . $functionRequired . ' function activated'; |
@@ -371,7 +371,7 @@ class InstallCommand extends ContainerAwareCommand | |||
371 | } | 371 | } |
372 | 372 | ||
373 | try { | 373 | try { |
374 | return in_array($databaseName, $schemaManager->listDatabases(), true); | 374 | return \in_array($databaseName, $schemaManager->listDatabases(), true); |
375 | } catch (\Doctrine\DBAL\Exception\DriverException $e) { | 375 | } catch (\Doctrine\DBAL\Exception\DriverException $e) { |
376 | // it means we weren't able to get database list, assume the database doesn't exist | 376 | // it means we weren't able to get database list, assume the database doesn't exist |
377 | 377 | ||
@@ -389,6 +389,6 @@ class InstallCommand extends ContainerAwareCommand | |||
389 | { | 389 | { |
390 | $schemaManager = $this->getContainer()->get('doctrine')->getManager()->getConnection()->getSchemaManager(); | 390 | $schemaManager = $this->getContainer()->get('doctrine')->getManager()->getConnection()->getSchemaManager(); |
391 | 391 | ||
392 | return count($schemaManager->listTableNames()) > 0 ? true : false; | 392 | return \count($schemaManager->listTableNames()) > 0 ? true : false; |
393 | } | 393 | } |
394 | } | 394 | } |
diff --git a/src/Wallabag/CoreBundle/Command/ListUserCommand.php b/src/Wallabag/CoreBundle/Command/ListUserCommand.php index 68e515da..a7101a02 100644 --- a/src/Wallabag/CoreBundle/Command/ListUserCommand.php +++ b/src/Wallabag/CoreBundle/Command/ListUserCommand.php | |||
@@ -50,7 +50,7 @@ class ListUserCommand extends ContainerAwareCommand | |||
50 | $io->success( | 50 | $io->success( |
51 | sprintf( | 51 | sprintf( |
52 | '%s/%s%s user(s) displayed.', | 52 | '%s/%s%s user(s) displayed.', |
53 | count($users), | 53 | \count($users), |
54 | $nbUsers, | 54 | $nbUsers, |
55 | null === $input->getArgument('search') ? '' : ' (filtered)' | 55 | null === $input->getArgument('search') ? '' : ' (filtered)' |
56 | ) | 56 | ) |
diff --git a/src/Wallabag/CoreBundle/Command/ReloadEntryCommand.php b/src/Wallabag/CoreBundle/Command/ReloadEntryCommand.php index 91998841..10918872 100644 --- a/src/Wallabag/CoreBundle/Command/ReloadEntryCommand.php +++ b/src/Wallabag/CoreBundle/Command/ReloadEntryCommand.php | |||
@@ -43,7 +43,7 @@ class ReloadEntryCommand extends ContainerAwareCommand | |||
43 | $entryRepository = $this->getContainer()->get('wallabag_core.entry_repository'); | 43 | $entryRepository = $this->getContainer()->get('wallabag_core.entry_repository'); |
44 | $entryIds = $entryRepository->findAllEntriesIdByUserId($userId); | 44 | $entryIds = $entryRepository->findAllEntriesIdByUserId($userId); |
45 | 45 | ||
46 | $nbEntries = count($entryIds); | 46 | $nbEntries = \count($entryIds); |
47 | if (!$nbEntries) { | 47 | if (!$nbEntries) { |
48 | $io->success('No entry to reload.'); | 48 | $io->success('No entry to reload.'); |
49 | 49 | ||
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index a89bb780..b999c539 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php | |||
@@ -348,7 +348,7 @@ class ConfigController extends Controller | |||
348 | $em = $this->getDoctrine()->getManager(); | 348 | $em = $this->getDoctrine()->getManager(); |
349 | 349 | ||
350 | foreach ($tags as $tag) { | 350 | foreach ($tags as $tag) { |
351 | if (0 === count($tag->getEntries())) { | 351 | if (0 === \count($tag->getEntries())) { |
352 | $em->remove($tag); | 352 | $em->remove($tag); |
353 | } | 353 | } |
354 | } | 354 | } |
diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php index e84044b1..848bb814 100644 --- a/src/Wallabag/CoreBundle/Controller/RssController.php +++ b/src/Wallabag/CoreBundle/Controller/RssController.php | |||
@@ -12,7 +12,6 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; | |||
12 | use Symfony\Component\HttpFoundation\Request; | 12 | use Symfony\Component\HttpFoundation\Request; |
13 | use Symfony\Component\HttpFoundation\Response; | 13 | use Symfony\Component\HttpFoundation\Response; |
14 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | 14 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; |
15 | use Wallabag\CoreBundle\Entity\Entry; | ||
16 | use Wallabag\CoreBundle\Entity\Tag; | 15 | use Wallabag\CoreBundle\Entity\Tag; |
17 | use Wallabag\UserBundle\Entity\User; | 16 | use Wallabag\UserBundle\Entity\User; |
18 | 17 | ||
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php index 616c37f2..b6d28e59 100644 --- a/src/Wallabag/CoreBundle/Controller/TagController.php +++ b/src/Wallabag/CoreBundle/Controller/TagController.php | |||
@@ -65,7 +65,7 @@ class TagController extends Controller | |||
65 | $em->flush(); | 65 | $em->flush(); |
66 | 66 | ||
67 | // remove orphan tag in case no entries are associated to it | 67 | // remove orphan tag in case no entries are associated to it |
68 | if (0 === count($tag->getEntries())) { | 68 | if (0 === \count($tag->getEntries())) { |
69 | $em->remove($tag); | 69 | $em->remove($tag); |
70 | $em->flush(); | 70 | $em->flush(); |
71 | } | 71 | } |
diff --git a/src/Wallabag/CoreBundle/Doctrine/WallabagMigration.php b/src/Wallabag/CoreBundle/Doctrine/WallabagMigration.php new file mode 100644 index 00000000..7aa2409a --- /dev/null +++ b/src/Wallabag/CoreBundle/Doctrine/WallabagMigration.php | |||
@@ -0,0 +1,49 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Doctrine; | ||
4 | |||
5 | use Doctrine\DBAL\Migrations\AbstractMigration; | ||
6 | use Doctrine\DBAL\Schema\Schema; | ||
7 | use Symfony\Component\DependencyInjection\ContainerAwareInterface; | ||
8 | use Symfony\Component\DependencyInjection\ContainerInterface; | ||
9 | |||
10 | abstract class WallabagMigration extends AbstractMigration implements ContainerAwareInterface | ||
11 | { | ||
12 | const UN_ESCAPED_TABLE = true; | ||
13 | |||
14 | /** | ||
15 | * @var ContainerInterface | ||
16 | */ | ||
17 | protected $container; | ||
18 | |||
19 | // because there are declared as abstract in `AbstractMigration` we need to delarer here too | ||
20 | public function up(Schema $schema) | ||
21 | { | ||
22 | } | ||
23 | |||
24 | public function down(Schema $schema) | ||
25 | { | ||
26 | } | ||
27 | |||
28 | public function setContainer(ContainerInterface $container = null) | ||
29 | { | ||
30 | $this->container = $container; | ||
31 | } | ||
32 | |||
33 | protected function getTable($tableName, $unEscaped = false) | ||
34 | { | ||
35 | $table = $this->container->getParameter('database_table_prefix') . $tableName; | ||
36 | |||
37 | if (self::UN_ESCAPED_TABLE === $unEscaped) { | ||
38 | return $table; | ||
39 | } | ||
40 | |||
41 | // escape table name is handled using " on postgresql | ||
42 | if ('postgresql' === $this->connection->getDatabasePlatform()->getName()) { | ||
43 | return '"' . $table . '"'; | ||
44 | } | ||
45 | |||
46 | // return escaped table | ||
47 | return '`' . $table . '`'; | ||
48 | } | ||
49 | } | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php index 6f8c9e27..702c7f7a 100644 --- a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php +++ b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php | |||
@@ -33,7 +33,7 @@ class EntryFilterType extends AbstractType | |||
33 | 33 | ||
34 | $this->user = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null; | 34 | $this->user = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null; |
35 | 35 | ||
36 | if (null === $this->user || !is_object($this->user)) { | 36 | if (null === $this->user || !\is_object($this->user)) { |
37 | return; | 37 | return; |
38 | } | 38 | } |
39 | } | 39 | } |
@@ -96,7 +96,7 @@ class EntryFilterType extends AbstractType | |||
96 | ->add('domainName', TextFilterType::class, [ | 96 | ->add('domainName', TextFilterType::class, [ |
97 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { | 97 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { |
98 | $value = $values['value']; | 98 | $value = $values['value']; |
99 | if (strlen($value) <= 2 || empty($value)) { | 99 | if (\strlen($value) <= 2 || empty($value)) { |
100 | return; | 100 | return; |
101 | } | 101 | } |
102 | $expression = $filterQuery->getExpr()->like($field, $filterQuery->getExpr()->lower($filterQuery->getExpr()->literal('%' . $value . '%'))); | 102 | $expression = $filterQuery->getExpr()->like($field, $filterQuery->getExpr()->lower($filterQuery->getExpr()->literal('%' . $value . '%'))); |
diff --git a/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php b/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php index 2c85da62..90e00c62 100644 --- a/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php +++ b/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php | |||
@@ -107,7 +107,7 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder | |||
107 | */ | 107 | */ |
108 | protected function processExtraFields($extraFieldsStrings) | 108 | protected function processExtraFields($extraFieldsStrings) |
109 | { | 109 | { |
110 | if (!is_array($extraFieldsStrings)) { | 110 | if (!\is_array($extraFieldsStrings)) { |
111 | return []; | 111 | return []; |
112 | } | 112 | } |
113 | 113 | ||
diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index fe795d42..d4ea608f 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php | |||
@@ -53,6 +53,7 @@ class ContentProxy | |||
53 | 53 | ||
54 | if ((empty($content) || false === $this->validateContent($content)) && false === $disableContentUpdate) { | 54 | if ((empty($content) || false === $this->validateContent($content)) && false === $disableContentUpdate) { |
55 | $fetchedContent = $this->graby->fetchContent($url); | 55 | $fetchedContent = $this->graby->fetchContent($url); |
56 | $fetchedContent['title'] = $this->sanitizeContentTitle($fetchedContent['title'], $fetchedContent['content_type']); | ||
56 | 57 | ||
57 | // when content is imported, we have information in $content | 58 | // when content is imported, we have information in $content |
58 | // in case fetching content goes bad, we'll keep the imported information instead of overriding them | 59 | // in case fetching content goes bad, we'll keep the imported information instead of overriding them |
@@ -85,7 +86,7 @@ class ContentProxy | |||
85 | (new LocaleConstraint()) | 86 | (new LocaleConstraint()) |
86 | ); | 87 | ); |
87 | 88 | ||
88 | if (0 === count($errors)) { | 89 | if (0 === \count($errors)) { |
89 | $entry->setLanguage($value); | 90 | $entry->setLanguage($value); |
90 | 91 | ||
91 | return; | 92 | return; |
@@ -107,7 +108,7 @@ class ContentProxy | |||
107 | (new UrlConstraint()) | 108 | (new UrlConstraint()) |
108 | ); | 109 | ); |
109 | 110 | ||
110 | if (0 === count($errors)) { | 111 | if (0 === \count($errors)) { |
111 | $entry->setPreviewPicture($value); | 112 | $entry->setPreviewPicture($value); |
112 | 113 | ||
113 | return; | 114 | return; |
@@ -177,6 +178,59 @@ class ContentProxy | |||
177 | } | 178 | } |
178 | 179 | ||
179 | /** | 180 | /** |
181 | * Try to sanitize the title of the fetched content from wrong character encodings and invalid UTF-8 character. | ||
182 | * | ||
183 | * @param $title | ||
184 | * @param $contentType | ||
185 | * | ||
186 | * @return string | ||
187 | */ | ||
188 | private function sanitizeContentTitle($title, $contentType) | ||
189 | { | ||
190 | if ('application/pdf' === $contentType) { | ||
191 | $title = $this->convertPdfEncodingToUTF8($title); | ||
192 | } | ||
193 | |||
194 | return $this->sanitizeUTF8Text($title); | ||
195 | } | ||
196 | |||
197 | /** | ||
198 | * If the title from the fetched content comes from a PDF, then its very possible that the character encoding is not | ||
199 | * UTF-8. This methods tries to identify the character encoding and translate the title to UTF-8. | ||
200 | * | ||
201 | * @param $title | ||
202 | * | ||
203 | * @return string (maybe contains invalid UTF-8 character) | ||
204 | */ | ||
205 | private function convertPdfEncodingToUTF8($title) | ||
206 | { | ||
207 | // first try UTF-8 because its easier to detect its present/absence | ||
208 | foreach (['UTF-8', 'UTF-16BE', 'WINDOWS-1252'] as $encoding) { | ||
209 | if (mb_check_encoding($title, $encoding)) { | ||
210 | return mb_convert_encoding($title, 'UTF-8', $encoding); | ||
211 | } | ||
212 | } | ||
213 | |||
214 | return $title; | ||
215 | } | ||
216 | |||
217 | /** | ||
218 | * Remove invalid UTF-8 characters from the given string. | ||
219 | * | ||
220 | * @param string $rawText | ||
221 | * | ||
222 | * @return string | ||
223 | */ | ||
224 | private function sanitizeUTF8Text($rawText) | ||
225 | { | ||
226 | if (mb_check_encoding($rawText, 'UTF-8')) { | ||
227 | return $rawText; | ||
228 | } | ||
229 | |||
230 | return iconv('UTF-8', 'UTF-8//IGNORE', $rawText); | ||
231 | } | ||
232 | |||
233 | /** | ||
180 | * Stock entry with fetched or imported content. | 234 | * Stock entry with fetched or imported content. |
181 | * Will fall back to OpenGraph data if available. | 235 | * Will fall back to OpenGraph data if available. |
182 | * | 236 | * |
@@ -212,7 +266,7 @@ class ContentProxy | |||
212 | $entry->setHttpStatus($content['status']); | 266 | $entry->setHttpStatus($content['status']); |
213 | } | 267 | } |
214 | 268 | ||
215 | if (!empty($content['authors']) && is_array($content['authors'])) { | 269 | if (!empty($content['authors']) && \is_array($content['authors'])) { |
216 | $entry->setPublishedBy($content['authors']); | 270 | $entry->setPublishedBy($content['authors']); |
217 | } | 271 | } |
218 | 272 | ||
@@ -233,7 +287,7 @@ class ContentProxy | |||
233 | } | 287 | } |
234 | 288 | ||
235 | // if content is an image, define it as a preview too | 289 | // if content is an image, define it as a preview too |
236 | if (!empty($content['content_type']) && in_array($this->mimeGuesser->guess($content['content_type']), ['jpeg', 'jpg', 'gif', 'png'], true)) { | 290 | if (!empty($content['content_type']) && \in_array($this->mimeGuesser->guess($content['content_type']), ['jpeg', 'jpg', 'gif', 'png'], true)) { |
237 | $this->updatePreviewPicture($entry, $content['url']); | 291 | $this->updatePreviewPicture($entry, $content['url']); |
238 | } | 292 | } |
239 | 293 | ||
diff --git a/src/Wallabag/CoreBundle/Helper/CryptoProxy.php b/src/Wallabag/CoreBundle/Helper/CryptoProxy.php index 7d8c9888..67d73915 100644 --- a/src/Wallabag/CoreBundle/Helper/CryptoProxy.php +++ b/src/Wallabag/CoreBundle/Helper/CryptoProxy.php | |||
@@ -81,6 +81,6 @@ class CryptoProxy | |||
81 | */ | 81 | */ |
82 | private function mask($value) | 82 | private function mask($value) |
83 | { | 83 | { |
84 | return strlen($value) > 0 ? $value[0] . '*****' . $value[strlen($value) - 1] : 'Empty value'; | 84 | return \strlen($value) > 0 ? $value[0] . '*****' . $value[\strlen($value) - 1] : 'Empty value'; |
85 | } | 85 | } |
86 | } | 86 | } |
diff --git a/src/Wallabag/CoreBundle/Helper/DownloadImages.php b/src/Wallabag/CoreBundle/Helper/DownloadImages.php index 252ba57c..cc3dcfce 100644 --- a/src/Wallabag/CoreBundle/Helper/DownloadImages.php +++ b/src/Wallabag/CoreBundle/Helper/DownloadImages.php | |||
@@ -42,14 +42,17 @@ class DownloadImages | |||
42 | public function processHtml($entryId, $html, $url) | 42 | public function processHtml($entryId, $html, $url) |
43 | { | 43 | { |
44 | $crawler = new Crawler($html); | 44 | $crawler = new Crawler($html); |
45 | $result = $crawler | 45 | $imagesCrawler = $crawler |
46 | ->filterXpath('//img') | 46 | ->filterXpath('//img'); |
47 | $imagesUrls = $imagesCrawler | ||
47 | ->extract(['src']); | 48 | ->extract(['src']); |
49 | $imagesSrcsetUrls = $this->getSrcsetUrls($imagesCrawler); | ||
50 | $imagesUrls = array_unique(array_merge($imagesUrls, $imagesSrcsetUrls)); | ||
48 | 51 | ||
49 | $relativePath = $this->getRelativePath($entryId); | 52 | $relativePath = $this->getRelativePath($entryId); |
50 | 53 | ||
51 | // download and save the image to the folder | 54 | // download and save the image to the folder |
52 | foreach ($result as $image) { | 55 | foreach ($imagesUrls as $image) { |
53 | $imagePath = $this->processSingleImage($entryId, $image, $url, $relativePath); | 56 | $imagePath = $this->processSingleImage($entryId, $image, $url, $relativePath); |
54 | 57 | ||
55 | if (false === $imagePath) { | 58 | if (false === $imagePath) { |
@@ -82,6 +85,10 @@ class DownloadImages | |||
82 | */ | 85 | */ |
83 | public function processSingleImage($entryId, $imagePath, $url, $relativePath = null) | 86 | public function processSingleImage($entryId, $imagePath, $url, $relativePath = null) |
84 | { | 87 | { |
88 | if (null === $imagePath) { | ||
89 | return false; | ||
90 | } | ||
91 | |||
85 | if (null === $relativePath) { | 92 | if (null === $relativePath) { |
86 | $relativePath = $this->getRelativePath($entryId); | 93 | $relativePath = $this->getRelativePath($entryId); |
87 | } | 94 | } |
@@ -172,6 +179,38 @@ class DownloadImages | |||
172 | } | 179 | } |
173 | 180 | ||
174 | /** | 181 | /** |
182 | * Get images urls from the srcset image attribute. | ||
183 | * | ||
184 | * @param Crawler $imagesCrawler | ||
185 | * | ||
186 | * @return array An array of urls | ||
187 | */ | ||
188 | private function getSrcsetUrls(Crawler $imagesCrawler) | ||
189 | { | ||
190 | $urls = []; | ||
191 | $iterator = $imagesCrawler | ||
192 | ->getIterator(); | ||
193 | while ($iterator->valid()) { | ||
194 | $srcsetAttribute = $iterator->current()->getAttribute('srcset'); | ||
195 | if ('' !== $srcsetAttribute) { | ||
196 | // Couldn't start with " OR ' OR a white space | ||
197 | // Could be one or more white space | ||
198 | // Must be one or more digits followed by w OR x | ||
199 | $pattern = "/(?:[^\"'\s]+\s*(?:\d+[wx])+)/"; | ||
200 | preg_match_all($pattern, $srcsetAttribute, $matches); | ||
201 | $srcset = \call_user_func_array('array_merge', $matches); | ||
202 | $srcsetUrls = array_map(function ($src) { | ||
203 | return trim(explode(' ', $src, 2)[0]); | ||
204 | }, $srcset); | ||
205 | $urls = array_merge($srcsetUrls, $urls); | ||
206 | } | ||
207 | $iterator->next(); | ||
208 | } | ||
209 | |||
210 | return $urls; | ||
211 | } | ||
212 | |||
213 | /** | ||
175 | * Setup base folder where all images are going to be saved. | 214 | * Setup base folder where all images are going to be saved. |
176 | */ | 215 | */ |
177 | private function setFolder() | 216 | private function setFolder() |
@@ -269,7 +308,7 @@ class DownloadImages | |||
269 | $this->logger->debug('DownloadImages: Checking extension (alternative)', ['ext' => $ext]); | 308 | $this->logger->debug('DownloadImages: Checking extension (alternative)', ['ext' => $ext]); |
270 | } | 309 | } |
271 | 310 | ||
272 | if (!in_array($ext, ['jpeg', 'jpg', 'gif', 'png'], true)) { | 311 | if (!\in_array($ext, ['jpeg', 'jpg', 'gif', 'png'], true)) { |
273 | $this->logger->error('DownloadImages: Processed image with not allowed extension. Skipping: ' . $imagePath); | 312 | $this->logger->error('DownloadImages: Processed image with not allowed extension. Skipping: ' . $imagePath); |
274 | 313 | ||
275 | return false; | 314 | return false; |
diff --git a/src/Wallabag/CoreBundle/Helper/EntriesExport.php b/src/Wallabag/CoreBundle/Helper/EntriesExport.php index 136f66f5..cbf1037b 100644 --- a/src/Wallabag/CoreBundle/Helper/EntriesExport.php +++ b/src/Wallabag/CoreBundle/Helper/EntriesExport.php | |||
@@ -45,7 +45,7 @@ class EntriesExport | |||
45 | */ | 45 | */ |
46 | public function setEntries($entries) | 46 | public function setEntries($entries) |
47 | { | 47 | { |
48 | if (!is_array($entries)) { | 48 | if (!\is_array($entries)) { |
49 | $this->language = $entries->getLanguage(); | 49 | $this->language = $entries->getLanguage(); |
50 | $entries = [$entries]; | 50 | $entries = [$entries]; |
51 | } | 51 | } |
@@ -325,7 +325,7 @@ class EntriesExport | |||
325 | { | 325 | { |
326 | $delimiter = ';'; | 326 | $delimiter = ';'; |
327 | $enclosure = '"'; | 327 | $enclosure = '"'; |
328 | $handle = fopen('php://memory', 'rb+'); | 328 | $handle = fopen('php://memory', 'b+r'); |
329 | 329 | ||
330 | fputcsv($handle, ['Title', 'URL', 'Content', 'Tags', 'MIME Type', 'Language', 'Creation date'], $delimiter, $enclosure); | 330 | fputcsv($handle, ['Title', 'URL', 'Content', 'Tags', 'MIME Type', 'Language', 'Creation date'], $delimiter, $enclosure); |
331 | 331 | ||
diff --git a/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php b/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php index 49c1ea41..1c2c5093 100644 --- a/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php +++ b/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php | |||
@@ -31,7 +31,7 @@ class PreparePagerForEntries | |||
31 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; | 31 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; |
32 | } | 32 | } |
33 | 33 | ||
34 | if (null === $user || !is_object($user)) { | 34 | if (null === $user || !\is_object($user)) { |
35 | return; | 35 | return; |
36 | } | 36 | } |
37 | 37 | ||
diff --git a/src/Wallabag/CoreBundle/Helper/Redirect.php b/src/Wallabag/CoreBundle/Helper/Redirect.php index abc84d08..9d1a6345 100644 --- a/src/Wallabag/CoreBundle/Helper/Redirect.php +++ b/src/Wallabag/CoreBundle/Helper/Redirect.php | |||
@@ -31,7 +31,7 @@ class Redirect | |||
31 | { | 31 | { |
32 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; | 32 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; |
33 | 33 | ||
34 | if (null === $user || !is_object($user)) { | 34 | if (null === $user || !\is_object($user)) { |
35 | return $url; | 35 | return $url; |
36 | } | 36 | } |
37 | 37 | ||
diff --git a/src/Wallabag/CoreBundle/Helper/TagsAssigner.php b/src/Wallabag/CoreBundle/Helper/TagsAssigner.php index 0bfe5c57..e6b4989f 100644 --- a/src/Wallabag/CoreBundle/Helper/TagsAssigner.php +++ b/src/Wallabag/CoreBundle/Helper/TagsAssigner.php | |||
@@ -32,7 +32,7 @@ class TagsAssigner | |||
32 | { | 32 | { |
33 | $tagsEntities = []; | 33 | $tagsEntities = []; |
34 | 34 | ||
35 | if (!is_array($tags)) { | 35 | if (!\is_array($tags)) { |
36 | $tags = explode(',', $tags); | 36 | $tags = explode(',', $tags); |
37 | } | 37 | } |
38 | 38 | ||
@@ -48,7 +48,7 @@ class TagsAssigner | |||
48 | $label = trim(mb_convert_case($label, MB_CASE_LOWER)); | 48 | $label = trim(mb_convert_case($label, MB_CASE_LOWER)); |
49 | 49 | ||
50 | // avoid empty tag | 50 | // avoid empty tag |
51 | if (0 === strlen($label)) { | 51 | if (0 === \strlen($label)) { |
52 | continue; | 52 | continue; |
53 | } | 53 | } |
54 | 54 | ||
diff --git a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php index 40b5673d..4a2fcab5 100644 --- a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php +++ b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php | |||
@@ -36,7 +36,7 @@ class UsernameRssTokenConverter implements ParamConverterInterface | |||
36 | { | 36 | { |
37 | // If there is no manager, this means that only Doctrine DBAL is configured | 37 | // If there is no manager, this means that only Doctrine DBAL is configured |
38 | // In this case we can do nothing and just return | 38 | // In this case we can do nothing and just return |
39 | if (null === $this->registry || !count($this->registry->getManagers())) { | 39 | if (null === $this->registry || !\count($this->registry->getManagers())) { |
40 | return false; | 40 | return false; |
41 | } | 41 | } |
42 | 42 | ||
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php index b5e35eff..83379998 100644 --- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php +++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php | |||
@@ -21,7 +21,7 @@ class EntryRepository extends EntityRepository | |||
21 | public function getBuilderForAllByUser($userId) | 21 | public function getBuilderForAllByUser($userId) |
22 | { | 22 | { |
23 | return $this | 23 | return $this |
24 | ->getBuilderByUser($userId) | 24 | ->getSortedQueryBuilderByUser($userId) |
25 | ; | 25 | ; |
26 | } | 26 | } |
27 | 27 | ||
@@ -35,7 +35,7 @@ class EntryRepository extends EntityRepository | |||
35 | public function getBuilderForUnreadByUser($userId) | 35 | public function getBuilderForUnreadByUser($userId) |
36 | { | 36 | { |
37 | return $this | 37 | return $this |
38 | ->getBuilderByUser($userId) | 38 | ->getSortedQueryBuilderByUser($userId) |
39 | ->andWhere('e.isArchived = false') | 39 | ->andWhere('e.isArchived = false') |
40 | ; | 40 | ; |
41 | } | 41 | } |
@@ -50,7 +50,7 @@ class EntryRepository extends EntityRepository | |||
50 | public function getBuilderForArchiveByUser($userId) | 50 | public function getBuilderForArchiveByUser($userId) |
51 | { | 51 | { |
52 | return $this | 52 | return $this |
53 | ->getBuilderByUser($userId) | 53 | ->getSortedQueryBuilderByUser($userId) |
54 | ->andWhere('e.isArchived = true') | 54 | ->andWhere('e.isArchived = true') |
55 | ; | 55 | ; |
56 | } | 56 | } |
@@ -65,7 +65,7 @@ class EntryRepository extends EntityRepository | |||
65 | public function getBuilderForStarredByUser($userId) | 65 | public function getBuilderForStarredByUser($userId) |
66 | { | 66 | { |
67 | return $this | 67 | return $this |
68 | ->getBuilderByUser($userId, 'starredAt', 'desc') | 68 | ->getSortedQueryBuilderByUser($userId, 'starredAt', 'desc') |
69 | ->andWhere('e.isStarred = true') | 69 | ->andWhere('e.isStarred = true') |
70 | ; | 70 | ; |
71 | } | 71 | } |
@@ -82,7 +82,7 @@ class EntryRepository extends EntityRepository | |||
82 | public function getBuilderForSearchByUser($userId, $term, $currentRoute) | 82 | public function getBuilderForSearchByUser($userId, $term, $currentRoute) |
83 | { | 83 | { |
84 | $qb = $this | 84 | $qb = $this |
85 | ->getBuilderByUser($userId); | 85 | ->getSortedQueryBuilderByUser($userId); |
86 | 86 | ||
87 | if ('starred' === $currentRoute) { | 87 | if ('starred' === $currentRoute) { |
88 | $qb->andWhere('e.isStarred = true'); | 88 | $qb->andWhere('e.isStarred = true'); |
@@ -102,7 +102,7 @@ class EntryRepository extends EntityRepository | |||
102 | } | 102 | } |
103 | 103 | ||
104 | /** | 104 | /** |
105 | * Retrieves untagged entries for a user. | 105 | * Retrieve a sorted list of untagged entries for a user. |
106 | * | 106 | * |
107 | * @param int $userId | 107 | * @param int $userId |
108 | * | 108 | * |
@@ -111,8 +111,21 @@ class EntryRepository extends EntityRepository | |||
111 | public function getBuilderForUntaggedByUser($userId) | 111 | public function getBuilderForUntaggedByUser($userId) |
112 | { | 112 | { |
113 | return $this | 113 | return $this |
114 | ->getBuilderByUser($userId) | 114 | ->sortQueryBuilder($this->getRawBuilderForUntaggedByUser($userId)); |
115 | ->andWhere('size(e.tags) = 0'); | 115 | } |
116 | |||
117 | /** | ||
118 | * Retrieve untagged entries for a user. | ||
119 | * | ||
120 | * @param int $userId | ||
121 | * | ||
122 | * @return QueryBuilder | ||
123 | */ | ||
124 | public function getRawBuilderForUntaggedByUser($userId) | ||
125 | { | ||
126 | return $this->getQueryBuilderByUser($userId) | ||
127 | ->leftJoin('e.tags', 't') | ||
128 | ->andWhere('t.id is null'); | ||
116 | } | 129 | } |
117 | 130 | ||
118 | /** | 131 | /** |
@@ -151,7 +164,7 @@ class EntryRepository extends EntityRepository | |||
151 | $qb->andWhere('e.updatedAt > :since')->setParameter('since', new \DateTime(date('Y-m-d H:i:s', $since))); | 164 | $qb->andWhere('e.updatedAt > :since')->setParameter('since', new \DateTime(date('Y-m-d H:i:s', $since))); |
152 | } | 165 | } |
153 | 166 | ||
154 | if (is_string($tags) && '' !== $tags) { | 167 | if (\is_string($tags) && '' !== $tags) { |
155 | foreach (explode(',', $tags) as $i => $tag) { | 168 | foreach (explode(',', $tags) as $i => $tag) { |
156 | $entryAlias = 'e' . $i; | 169 | $entryAlias = 'e' . $i; |
157 | $tagAlias = 't' . $i; | 170 | $tagAlias = 't' . $i; |
@@ -260,7 +273,7 @@ class EntryRepository extends EntityRepository | |||
260 | */ | 273 | */ |
261 | public function removeTag($userId, Tag $tag) | 274 | public function removeTag($userId, Tag $tag) |
262 | { | 275 | { |
263 | $entries = $this->getBuilderByUser($userId) | 276 | $entries = $this->getSortedQueryBuilderByUser($userId) |
264 | ->innerJoin('e.tags', 't') | 277 | ->innerJoin('e.tags', 't') |
265 | ->andWhere('t.id = :tagId')->setParameter('tagId', $tag->getId()) | 278 | ->andWhere('t.id = :tagId')->setParameter('tagId', $tag->getId()) |
266 | ->getQuery() | 279 | ->getQuery() |
@@ -296,7 +309,7 @@ class EntryRepository extends EntityRepository | |||
296 | */ | 309 | */ |
297 | public function findAllByTagId($userId, $tagId) | 310 | public function findAllByTagId($userId, $tagId) |
298 | { | 311 | { |
299 | return $this->getBuilderByUser($userId) | 312 | return $this->getSortedQueryBuilderByUser($userId) |
300 | ->innerJoin('e.tags', 't') | 313 | ->innerJoin('e.tags', 't') |
301 | ->andWhere('t.id = :tagId')->setParameter('tagId', $tagId) | 314 | ->andWhere('t.id = :tagId')->setParameter('tagId', $tagId) |
302 | ->getQuery() | 315 | ->getQuery() |
@@ -320,7 +333,7 @@ class EntryRepository extends EntityRepository | |||
320 | ->getQuery() | 333 | ->getQuery() |
321 | ->getResult(); | 334 | ->getResult(); |
322 | 335 | ||
323 | if (count($res)) { | 336 | if (\count($res)) { |
324 | return current($res); | 337 | return current($res); |
325 | } | 338 | } |
326 | 339 | ||
@@ -414,7 +427,20 @@ class EntryRepository extends EntityRepository | |||
414 | } | 427 | } |
415 | 428 | ||
416 | /** | 429 | /** |
417 | * Return a query builder to used by other getBuilderFor* method. | 430 | * Return a query builder to be used by other getBuilderFor* method. |
431 | * | ||
432 | * @param int $userId | ||
433 | * | ||
434 | * @return QueryBuilder | ||
435 | */ | ||
436 | private function getQueryBuilderByUser($userId) | ||
437 | { | ||
438 | return $this->createQueryBuilder('e') | ||
439 | ->andWhere('e.user = :userId')->setParameter('userId', $userId); | ||
440 | } | ||
441 | |||
442 | /** | ||
443 | * Return a sorted query builder to be used by other getBuilderFor* method. | ||
418 | * | 444 | * |
419 | * @param int $userId | 445 | * @param int $userId |
420 | * @param string $sortBy | 446 | * @param string $sortBy |
@@ -422,10 +448,23 @@ class EntryRepository extends EntityRepository | |||
422 | * | 448 | * |
423 | * @return QueryBuilder | 449 | * @return QueryBuilder |
424 | */ | 450 | */ |
425 | private function getBuilderByUser($userId, $sortBy = 'createdAt', $direction = 'desc') | 451 | private function getSortedQueryBuilderByUser($userId, $sortBy = 'createdAt', $direction = 'desc') |
426 | { | 452 | { |
427 | return $this->createQueryBuilder('e') | 453 | return $this->sortQueryBuilder($this->getQueryBuilderByUser($userId), $sortBy, $direction); |
428 | ->andWhere('e.user = :userId')->setParameter('userId', $userId) | 454 | } |
455 | |||
456 | /** | ||
457 | * Return the given QueryBuilder with an orderBy() call. | ||
458 | * | ||
459 | * @param QueryBuilder $qb | ||
460 | * @param string $sortBy | ||
461 | * @param string $direction | ||
462 | * | ||
463 | * @return QueryBuilder | ||
464 | */ | ||
465 | private function sortQueryBuilder(QueryBuilder $qb, $sortBy = 'createdAt', $direction = 'desc') | ||
466 | { | ||
467 | return $qb | ||
429 | ->orderBy(sprintf('e.%s', $sortBy), $direction); | 468 | ->orderBy(sprintf('e.%s', $sortBy), $direction); |
430 | } | 469 | } |
431 | } | 470 | } |
diff --git a/src/Wallabag/CoreBundle/Repository/TagRepository.php b/src/Wallabag/CoreBundle/Repository/TagRepository.php index 5c45211f..3ae9d414 100644 --- a/src/Wallabag/CoreBundle/Repository/TagRepository.php +++ b/src/Wallabag/CoreBundle/Repository/TagRepository.php | |||
@@ -30,7 +30,7 @@ class TagRepository extends EntityRepository | |||
30 | $query->setResultCacheLifetime($cacheLifeTime); | 30 | $query->setResultCacheLifetime($cacheLifeTime); |
31 | } | 31 | } |
32 | 32 | ||
33 | return count($query->getArrayResult()); | 33 | return \count($query->getArrayResult()); |
34 | } | 34 | } |
35 | 35 | ||
36 | /** | 36 | /** |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml index 0a65ce9f..bd81c72f 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml | |||
@@ -116,7 +116,7 @@ config: | |||
116 | archived: Remove ALL archived entries | 116 | archived: Remove ALL archived entries |
117 | confirm: Are you really sure? (THIS CAN'T BE UNDONE) | 117 | confirm: Are you really sure? (THIS CAN'T BE UNDONE) |
118 | form_password: | 118 | form_password: |
119 | description: "You can change your password here. Your new password should by at least 8 characters long." | 119 | description: "You can change your password here. Your new password should be at least 8 characters long." |
120 | old_password_label: 'Current password' | 120 | old_password_label: 'Current password' |
121 | new_password_label: 'New password' | 121 | new_password_label: 'New password' |
122 | repeat_new_password_label: 'Repeat new password' | 122 | repeat_new_password_label: 'Repeat new password' |
@@ -265,7 +265,7 @@ about: | |||
265 | who_behind_wallabag: | 265 | who_behind_wallabag: |
266 | developped_by: 'Developed by' | 266 | developped_by: 'Developed by' |
267 | website: 'website' | 267 | website: 'website' |
268 | many_contributors: 'And many others contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">on Github</a>' | 268 | many_contributors: 'And many others contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">on GitHub</a>' |
269 | project_website: 'Project website' | 269 | project_website: 'Project website' |
270 | license: 'License' | 270 | license: 'License' |
271 | version: 'Version' | 271 | version: 'Version' |
@@ -323,7 +323,7 @@ howto: | |||
323 | go_import: Go to import | 323 | go_import: Go to import |
324 | go_developers: Go to developers | 324 | go_developers: Go to developers |
325 | go_howto: Go to howto (this page!) | 325 | go_howto: Go to howto (this page!) |
326 | go_logout: Logout | 326 | go_logout: Log out |
327 | list_title: Shortcuts available in listing pages | 327 | list_title: Shortcuts available in listing pages |
328 | search: Display the search form | 328 | search: Display the search form |
329 | article_title: Shortcuts available in entry view | 329 | article_title: Shortcuts available in entry view |
@@ -373,7 +373,7 @@ quickstart: | |||
373 | instapaper: 'Migrate from Instapaper' | 373 | instapaper: 'Migrate from Instapaper' |
374 | developer: | 374 | developer: |
375 | title: 'Developers' | 375 | title: 'Developers' |
376 | description: 'We also thought to the developers: Docker, API, translations, etc.' | 376 | description: 'We also thought of the developers: Docker, API, translations, etc.' |
377 | create_application: 'Create your third-party application' | 377 | create_application: 'Create your third-party application' |
378 | use_docker: 'Use Docker to install wallabag' | 378 | use_docker: 'Use Docker to install wallabag' |
379 | docs: | 379 | docs: |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml index 6130eee2..95bc9560 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml | |||
@@ -234,7 +234,7 @@ entry: | |||
234 | created_at: 'Data de creacion' | 234 | created_at: 'Data de creacion' |
235 | published_at: 'Data de publicacion' | 235 | published_at: 'Data de publicacion' |
236 | published_by: 'Publicat per' | 236 | published_by: 'Publicat per' |
237 | # provided_by: 'Provided by' | 237 | provided_by: 'Provesit per' |
238 | new: | 238 | new: |
239 | page_title: 'Enregistrar un novèl article' | 239 | page_title: 'Enregistrar un novèl article' |
240 | placeholder: 'http://website.com' | 240 | placeholder: 'http://website.com' |
@@ -246,7 +246,7 @@ entry: | |||
246 | page_title: 'Modificar un article' | 246 | page_title: 'Modificar un article' |
247 | title_label: 'Títol' | 247 | title_label: 'Títol' |
248 | url_label: 'Url' | 248 | url_label: 'Url' |
249 | # origin_url_label: 'Origin url (from where you found that entry)' | 249 | origin_url_label: 'Url d’origina (ont avètz trobat aqueste article)' |
250 | save_label: 'Enregistrar' | 250 | save_label: 'Enregistrar' |
251 | public: | 251 | public: |
252 | shared_by_wallabag: "Aqueste article es estat partejat per <a href='%wallabag_instance%'>wallabag</a>" | 252 | shared_by_wallabag: "Aqueste article es estat partejat per <a href='%wallabag_instance%'>wallabag</a>" |
@@ -400,8 +400,8 @@ tag: | |||
400 | add: 'Ajustar' | 400 | add: 'Ajustar' |
401 | placeholder: "Podètz ajustar mai qu'una etiqueta, separadas per de virgula." | 401 | placeholder: "Podètz ajustar mai qu'una etiqueta, separadas per de virgula." |
402 | 402 | ||
403 | # export: | 403 | export: |
404 | # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' | 404 | footer_template: '<div style="text-align:center;"><p>Produch per wallabag amb %method%</p><p>Mercés de dobrir <a href="https://github.com/wallabag/wallabag/issues">una sollicitacion</a> s’avètz de problèmas amb l’afichatge d’aqueste E-Book sus vòstre periferic.</p></div>' |
405 | 405 | ||
406 | import: | 406 | import: |
407 | page_title: 'Importar' | 407 | page_title: 'Importar' |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig index 9b0503d6..b9fcc005 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig | |||
@@ -7,7 +7,7 @@ | |||
7 | <meta property="og:title" content="{{ entry.title|e|raw }}" /> | 7 | <meta property="og:title" content="{{ entry.title|e|raw }}" /> |
8 | <meta property="og:type" content="article" /> | 8 | <meta property="og:type" content="article" /> |
9 | <meta property="og:url" content="{{ app.request.uri }}" /> | 9 | <meta property="og:url" content="{{ app.request.uri }}" /> |
10 | {% set picturePath = app.request.schemeAndHttpHost ~ asset('wallassets/themes/_global/img/logo-other_themes.png') %} | 10 | {% set picturePath = app.request.schemeAndHttpHost ~ asset('wallassets/themes/_global/img/logo-wallabag.svg') %} |
11 | {% if entry.previewPicture is not null %} | 11 | {% if entry.previewPicture is not null %} |
12 | {% set picturePath = entry.previewPicture %} | 12 | {% set picturePath = entry.previewPicture %} |
13 | {% endif %} | 13 | {% endif %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig index 3385cd53..9ebf1bed 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig | |||
@@ -1 +1 @@ | |||
<a id="bookmarklet" ondragend="this.click();" href="javascript:(function(){var url=location.href||url;var wllbg=window.open('{{ url('bookmarklet') }}?url=' + encodeURI(url),'_blank');})();">bag it!</a> | <a id="bookmarklet" ondragend="this.click();" href="javascript:(function(){var url=location.href||url;var wllbg=window.open('{{ url('bookmarklet') }}?url=' + encodeURIComponent(url),'_blank');})();">bag it!</a> | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_no_preview.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_no_preview.html.twig index 8e6bbae0..4fd4debd 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_no_preview.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_no_preview.html.twig | |||
@@ -1,5 +1,12 @@ | |||
1 | <div class="card"> | 1 | <div class="card"> |
2 | <div class="card-body"> | 2 | <div class="card-body"> |
3 | <div class="card-image waves-effect waves-block waves-light"> | ||
4 | <ul class="card-entry-labels"> | ||
5 | {% for tag in entry.tags | slice(0, 3) %} | ||
6 | <li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li> | ||
7 | {% endfor %} | ||
8 | </ul> | ||
9 | </div> | ||
3 | {% include "@WallabagCore/themes/material/Entry/Card/_content.html.twig" with {'entry': entry} only %} | 10 | {% include "@WallabagCore/themes/material/Entry/Card/_content.html.twig" with {'entry': entry} only %} |
4 | </div> | 11 | </div> |
5 | 12 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig index 0d05f4d5..7484d53b 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig | |||
@@ -245,7 +245,7 @@ | |||
245 | <li> | 245 | <li> |
246 | <i class="material-icons" title="{{ 'entry.view.published_by'|trans }}">person</i> | 246 | <i class="material-icons" title="{{ 'entry.view.published_by'|trans }}">person</i> |
247 | {% for author in entry.publishedBy %} | 247 | {% for author in entry.publishedBy %} |
248 | {{ author }}{% if not loop.last %}, {% endif %} | 248 | {{ author|raw }}{% if not loop.last %}, {% endif %} |
249 | {% endfor %} | 249 | {% endfor %} |
250 | </li> | 250 | </li> |
251 | {% endif %} | 251 | {% endif %} |
@@ -276,7 +276,7 @@ | |||
276 | </div> | 276 | </div> |
277 | 277 | ||
278 | {% if entry.previewPicture is not null %} | 278 | {% if entry.previewPicture is not null %} |
279 | <div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|striptags|e('html_attr') }}" /></div> | 279 | <div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|striptags|default('entry.default_title'|trans)|raw }}" /></div> |
280 | {% endif %} | 280 | {% endif %} |
281 | 281 | ||
282 | </aside> | 282 | </aside> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig index b5db40f5..741795aa 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig | |||
@@ -11,7 +11,7 @@ | |||
11 | <main class="valign-wrapper"> | 11 | <main class="valign-wrapper"> |
12 | <div class="valign row"> | 12 | <div class="valign row"> |
13 | <div class="card sw"> | 13 | <div class="card sw"> |
14 | <div class="center"><img src="{{ asset('wallassets/themes/_global/img/logo-other_themes.png') }}" alt="wallabag logo" /></div> | 14 | <div class="center"><img src="{{ asset('wallassets/themes/_global/img/logo-wallabag.svg') }}" alt="wallabag logo" class="typo-logo" /></div> |
15 | <div class="card-content"> | 15 | <div class="card-content"> |
16 | <div class="row"> | 16 | <div class="row"> |
17 | <h5>{{ status_code }}: {{ status_text }}</h5> | 17 | <h5>{{ status_code }}: {{ status_text }}</h5> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig index 6472d182..f0012ad9 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig | |||
@@ -29,7 +29,7 @@ | |||
29 | {% block logo %} | 29 | {% block logo %} |
30 | <li class="logo border-bottom"> | 30 | <li class="logo border-bottom"> |
31 | <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}"> | 31 | <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}"> |
32 | <img src="{{ asset('wallassets/themes/_global/img/logo-square.png') }}" alt="wallabag logo" /> | 32 | <img src="{{ asset('wallassets/themes/_global/img/logo-square.svg') }}" alt="wallabag logo" /> |
33 | </a> | 33 | </a> |
34 | </li> | 34 | </li> |
35 | {% endblock %} | 35 | {% endblock %} |
diff --git a/src/Wallabag/CoreBundle/Tools/Utils.php b/src/Wallabag/CoreBundle/Tools/Utils.php index eba21c02..46bb1dc5 100644 --- a/src/Wallabag/CoreBundle/Tools/Utils.php +++ b/src/Wallabag/CoreBundle/Tools/Utils.php | |||
@@ -29,6 +29,6 @@ class Utils | |||
29 | */ | 29 | */ |
30 | public static function getReadingTime($text) | 30 | public static function getReadingTime($text) |
31 | { | 31 | { |
32 | return floor(count(preg_split('~[^\p{L}\p{N}\']+~u', strip_tags($text))) / 200); | 32 | return floor(\count(preg_split('~[^\p{L}\p{N}\']+~u', strip_tags($text))) / 200); |
33 | } | 33 | } |
34 | } | 34 | } |
diff --git a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php index 8992117e..00b1e595 100644 --- a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php +++ b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php | |||
@@ -64,7 +64,7 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
64 | { | 64 | { |
65 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; | 65 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; |
66 | 66 | ||
67 | if (null === $user || !is_object($user)) { | 67 | if (null === $user || !\is_object($user)) { |
68 | return 0; | 68 | return 0; |
69 | } | 69 | } |
70 | 70 | ||
@@ -96,7 +96,7 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
96 | $query->useResultCache(true); | 96 | $query->useResultCache(true); |
97 | $query->setResultCacheLifetime($this->lifeTime); | 97 | $query->setResultCacheLifetime($this->lifeTime); |
98 | 98 | ||
99 | return count($query->getArrayResult()); | 99 | return \count($query->getArrayResult()); |
100 | } | 100 | } |
101 | 101 | ||
102 | /** | 102 | /** |
@@ -108,7 +108,7 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
108 | { | 108 | { |
109 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; | 109 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; |
110 | 110 | ||
111 | if (null === $user || !is_object($user)) { | 111 | if (null === $user || !\is_object($user)) { |
112 | return 0; | 112 | return 0; |
113 | } | 113 | } |
114 | 114 | ||
@@ -124,7 +124,7 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
124 | { | 124 | { |
125 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; | 125 | $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; |
126 | 126 | ||
127 | if (null === $user || !is_object($user)) { | 127 | if (null === $user || !\is_object($user)) { |
128 | return 0; | 128 | return 0; |
129 | } | 129 | } |
130 | 130 | ||
@@ -137,7 +137,7 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa | |||
137 | $query->useResultCache(true); | 137 | $query->useResultCache(true); |
138 | $query->setResultCacheLifetime($this->lifeTime); | 138 | $query->setResultCacheLifetime($this->lifeTime); |
139 | 139 | ||
140 | $nbArchives = count($query->getArrayResult()); | 140 | $nbArchives = \count($query->getArrayResult()); |
141 | 141 | ||
142 | $interval = $user->getCreatedAt()->diff(new \DateTime('now')); | 142 | $interval = $user->getCreatedAt()->diff(new \DateTime('now')); |
143 | $nbDays = (int) $interval->format('%a') ?: 1; | 143 | $nbDays = (int) $interval->format('%a') ?: 1; |
diff --git a/src/Wallabag/ImportBundle/Command/ImportCommand.php b/src/Wallabag/ImportBundle/Command/ImportCommand.php index 99056c2c..f9ffe994 100644 --- a/src/Wallabag/ImportBundle/Command/ImportCommand.php +++ b/src/Wallabag/ImportBundle/Command/ImportCommand.php | |||
@@ -43,7 +43,7 @@ class ImportCommand extends ContainerAwareCommand | |||
43 | $user = $em->getRepository('WallabagUserBundle:User')->findOneByUsername($input->getArgument('username')); | 43 | $user = $em->getRepository('WallabagUserBundle:User')->findOneByUsername($input->getArgument('username')); |
44 | } | 44 | } |
45 | 45 | ||
46 | if (!is_object($user)) { | 46 | if (!\is_object($user)) { |
47 | throw new Exception(sprintf('User "%s" not found', $input->getArgument('username'))); | 47 | throw new Exception(sprintf('User "%s" not found', $input->getArgument('username'))); |
48 | } | 48 | } |
49 | 49 | ||
diff --git a/src/Wallabag/ImportBundle/Controller/BrowserController.php b/src/Wallabag/ImportBundle/Controller/BrowserController.php index 77a7a904..6418925c 100644 --- a/src/Wallabag/ImportBundle/Controller/BrowserController.php +++ b/src/Wallabag/ImportBundle/Controller/BrowserController.php | |||
@@ -30,7 +30,7 @@ abstract class BrowserController extends Controller | |||
30 | $markAsRead = $form->get('mark_as_read')->getData(); | 30 | $markAsRead = $form->get('mark_as_read')->getData(); |
31 | $name = $this->getUser()->getId() . '.json'; | 31 | $name = $this->getUser()->getId() . '.json'; |
32 | 32 | ||
33 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 33 | if (null !== $file && \in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
34 | $res = $wallabag | 34 | $res = $wallabag |
35 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) | 35 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
36 | ->setMarkAsRead($markAsRead) | 36 | ->setMarkAsRead($markAsRead) |
diff --git a/src/Wallabag/ImportBundle/Controller/InstapaperController.php b/src/Wallabag/ImportBundle/Controller/InstapaperController.php index 550679c3..f184baf9 100644 --- a/src/Wallabag/ImportBundle/Controller/InstapaperController.php +++ b/src/Wallabag/ImportBundle/Controller/InstapaperController.php | |||
@@ -31,7 +31,7 @@ class InstapaperController extends Controller | |||
31 | $markAsRead = $form->get('mark_as_read')->getData(); | 31 | $markAsRead = $form->get('mark_as_read')->getData(); |
32 | $name = 'instapaper_' . $this->getUser()->getId() . '.csv'; | 32 | $name = 'instapaper_' . $this->getUser()->getId() . '.csv'; |
33 | 33 | ||
34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 34 | if (null !== $file && \in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
35 | $res = $instapaper | 35 | $res = $instapaper |
36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) | 36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
37 | ->setMarkAsRead($markAsRead) | 37 | ->setMarkAsRead($markAsRead) |
diff --git a/src/Wallabag/ImportBundle/Controller/PinboardController.php b/src/Wallabag/ImportBundle/Controller/PinboardController.php index 0e57fd41..6f54c69a 100644 --- a/src/Wallabag/ImportBundle/Controller/PinboardController.php +++ b/src/Wallabag/ImportBundle/Controller/PinboardController.php | |||
@@ -31,7 +31,7 @@ class PinboardController extends Controller | |||
31 | $markAsRead = $form->get('mark_as_read')->getData(); | 31 | $markAsRead = $form->get('mark_as_read')->getData(); |
32 | $name = 'pinboard_' . $this->getUser()->getId() . '.json'; | 32 | $name = 'pinboard_' . $this->getUser()->getId() . '.json'; |
33 | 33 | ||
34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 34 | if (null !== $file && \in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
35 | $res = $pinboard | 35 | $res = $pinboard |
36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) | 36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
37 | ->setMarkAsRead($markAsRead) | 37 | ->setMarkAsRead($markAsRead) |
diff --git a/src/Wallabag/ImportBundle/Controller/ReadabilityController.php b/src/Wallabag/ImportBundle/Controller/ReadabilityController.php index 59de24cb..729a97a3 100644 --- a/src/Wallabag/ImportBundle/Controller/ReadabilityController.php +++ b/src/Wallabag/ImportBundle/Controller/ReadabilityController.php | |||
@@ -31,7 +31,7 @@ class ReadabilityController extends Controller | |||
31 | $markAsRead = $form->get('mark_as_read')->getData(); | 31 | $markAsRead = $form->get('mark_as_read')->getData(); |
32 | $name = 'readability_' . $this->getUser()->getId() . '.json'; | 32 | $name = 'readability_' . $this->getUser()->getId() . '.json'; |
33 | 33 | ||
34 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 34 | if (null !== $file && \in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
35 | $res = $readability | 35 | $res = $readability |
36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) | 36 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
37 | ->setMarkAsRead($markAsRead) | 37 | ->setMarkAsRead($markAsRead) |
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagController.php b/src/Wallabag/ImportBundle/Controller/WallabagController.php index 6e6524b4..d182dd2c 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagController.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagController.php | |||
@@ -33,7 +33,7 @@ abstract class WallabagController extends Controller | |||
33 | $markAsRead = $form->get('mark_as_read')->getData(); | 33 | $markAsRead = $form->get('mark_as_read')->getData(); |
34 | $name = $this->getUser()->getId() . '.json'; | 34 | $name = $this->getUser()->getId() . '.json'; |
35 | 35 | ||
36 | if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | 36 | if (null !== $file && \in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { |
37 | $res = $wallabag | 37 | $res = $wallabag |
38 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) | 38 | ->setFilepath($this->getParameter('wallabag_import.resource_dir') . '/' . $name) |
39 | ->setMarkAsRead($markAsRead) | 39 | ->setMarkAsRead($markAsRead) |
diff --git a/src/Wallabag/ImportBundle/Import/BrowserImport.php b/src/Wallabag/ImportBundle/Import/BrowserImport.php index b5593180..225f1791 100644 --- a/src/Wallabag/ImportBundle/Import/BrowserImport.php +++ b/src/Wallabag/ImportBundle/Import/BrowserImport.php | |||
@@ -77,7 +77,7 @@ abstract class BrowserImport extends AbstractImport | |||
77 | */ | 77 | */ |
78 | public function parseEntry(array $importedEntry) | 78 | public function parseEntry(array $importedEntry) |
79 | { | 79 | { |
80 | if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && is_array(reset($importedEntry))) { | 80 | if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && \is_array(reset($importedEntry))) { |
81 | if ($this->producer) { | 81 | if ($this->producer) { |
82 | $this->parseEntriesForProducer($importedEntry); | 82 | $this->parseEntriesForProducer($importedEntry); |
83 | 83 | ||
diff --git a/src/Wallabag/ImportBundle/Import/InstapaperImport.php b/src/Wallabag/ImportBundle/Import/InstapaperImport.php index 7ab69e7a..e4f0970c 100644 --- a/src/Wallabag/ImportBundle/Import/InstapaperImport.php +++ b/src/Wallabag/ImportBundle/Import/InstapaperImport.php | |||
@@ -62,7 +62,7 @@ class InstapaperImport extends AbstractImport | |||
62 | } | 62 | } |
63 | 63 | ||
64 | $entries = []; | 64 | $entries = []; |
65 | $handle = fopen($this->filepath, 'r'); | 65 | $handle = fopen($this->filepath, 'rb'); |
66 | while (false !== ($data = fgetcsv($handle, 10240))) { | 66 | while (false !== ($data = fgetcsv($handle, 10240))) { |
67 | if ('URL' === $data[0]) { | 67 | if ('URL' === $data[0]) { |
68 | continue; | 68 | continue; |
@@ -72,7 +72,7 @@ class InstapaperImport extends AbstractImport | |||
72 | // BUT it can also be the status (since status = folder in Instapaper) | 72 | // BUT it can also be the status (since status = folder in Instapaper) |
73 | // and we don't want archive, unread & starred to become a tag | 73 | // and we don't want archive, unread & starred to become a tag |
74 | $tags = null; | 74 | $tags = null; |
75 | if (false === in_array($data[3], ['Archive', 'Unread', 'Starred'], true)) { | 75 | if (false === \in_array($data[3], ['Archive', 'Unread', 'Starred'], true)) { |
76 | $tags = [$data[3]]; | 76 | $tags = [$data[3]]; |
77 | } | 77 | } |
78 | 78 | ||
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index dddb87f4..c1b35b7e 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php | |||
@@ -149,7 +149,7 @@ class PocketImport extends AbstractImport | |||
149 | // - first call get 5k offset 0 | 149 | // - first call get 5k offset 0 |
150 | // - second call get 5k offset 5k | 150 | // - second call get 5k offset 5k |
151 | // - and so on | 151 | // - and so on |
152 | if (self::NB_ELEMENTS === count($entries['list'])) { | 152 | if (self::NB_ELEMENTS === \count($entries['list'])) { |
153 | ++$run; | 153 | ++$run; |
154 | 154 | ||
155 | return $this->import(self::NB_ELEMENTS * $run); | 155 | return $this->import(self::NB_ELEMENTS * $run); |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php index a35c411e..b9bb525a 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php | |||
@@ -56,7 +56,7 @@ class WallabagV1Import extends WallabagImport | |||
56 | 56 | ||
57 | // In case of a bad fetch in v1, replace title and content with v2 error strings | 57 | // In case of a bad fetch in v1, replace title and content with v2 error strings |
58 | // If fetching fails again, they will get this instead of the v1 strings | 58 | // If fetching fails again, they will get this instead of the v1 strings |
59 | if (in_array($entry['title'], $this->untitled, true)) { | 59 | if (\in_array($entry['title'], $this->untitled, true)) { |
60 | $data['title'] = $this->fetchingErrorMessageTitle; | 60 | $data['title'] = $this->fetchingErrorMessageTitle; |
61 | $data['html'] = $this->fetchingErrorMessage; | 61 | $data['html'] = $this->fetchingErrorMessage; |
62 | } | 62 | } |
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml index e62ea2bc..6277dc73 100644 --- a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml +++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml | |||
@@ -5,7 +5,7 @@ auth_code: | |||
5 | subject: "Còdi d'autentificacion wallabag" | 5 | subject: "Còdi d'autentificacion wallabag" |
6 | body: | 6 | body: |
7 | hello: "Bonjorn %user%," | 7 | hello: "Bonjorn %user%," |
8 | first_para: "Estant qu'avètz activat l'autentificacion en dos temps sus vòstre compte wallabag e que venètz de vos connectar dempuèi un novèl periferic (ordinador, mobil, etc.) vos mandem un còdi per validar la connexion." | 8 | first_para: "Estant qu'avètz activat l'autentificacion en dos temps sus vòstre compte wallabag e que venètz de vos connectar d'un novèl periferic (ordinador, mobil, etc.) vos mandem un còdi per validar la connexion." |
9 | second_para: "Vaquí lo còdi per dintrar : " | 9 | second_para: "Vaquí lo còdi per dintrar : " |
10 | support: "S'avètz un problèma de connexion, dobtetz pas a contactar l'assisténcia : " | 10 | support: "S'avètz un problèma de connexion, dobtetz pas a contactar l'assisténcia : " |
11 | signature: "La còla de wallabag" | 11 | signature: "La còla de wallabag" |
diff --git a/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig index 32984c84..3dd98fb6 100644 --- a/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig | |||
@@ -16,7 +16,7 @@ | |||
16 | 16 | ||
17 | <div class="input-field col s12"> | 17 | <div class="input-field col s12"> |
18 | <label for="username">{{ 'security.login.username'|trans }}</label> | 18 | <label for="username">{{ 'security.login.username'|trans }}</label> |
19 | <input type="text" id="username" name="_username" value="{{ last_username }}" /> | 19 | <input type="text" id="username" name="_username" value="{{ last_username }}" autofocus /> |
20 | </div> | 20 | </div> |
21 | 21 | ||
22 | <div class="input-field col s12"> | 22 | <div class="input-field col s12"> |
diff --git a/src/Wallabag/UserBundle/Resources/views/layout.html.twig b/src/Wallabag/UserBundle/Resources/views/layout.html.twig index eada1829..99bf7dfd 100644 --- a/src/Wallabag/UserBundle/Resources/views/layout.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/layout.html.twig | |||
@@ -11,7 +11,7 @@ | |||
11 | <main class="valign-wrapper"> | 11 | <main class="valign-wrapper"> |
12 | <div class="valign row"> | 12 | <div class="valign row"> |
13 | <div class="card sw"> | 13 | <div class="card sw"> |
14 | <div class="center"><img src="{{ asset('wallassets/themes/_global/img/logo-other_themes.png') }}" alt="wallabag logo" /></div> | 14 | <div class="center"><img src="{{ asset('wallassets/themes/_global/img/logo-wallabag.svg') }}" alt="wallabag logo" class="typo-logo" /></div> |
15 | {% block fos_user_content %} | 15 | {% block fos_user_content %} |
16 | {% endblock fos_user_content %} | 16 | {% endblock fos_user_content %} |
17 | </div> | 17 | </div> |