Merge pull request #3376 from wallabag/symfony-3.3

Symfony 3.3
This commit is contained in:
Jérémy Benoist 2017-10-11 09:55:03 +02:00 committed by GitHub
commit d8dc7372ab
44 changed files with 90 additions and 68 deletions

View file

@ -28,7 +28,7 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
*/ */
public function up(Schema $schema) public function up(Schema $schema)
{ {
$this->skipIf($this->connection->getDatabasePlatform()->getName() === 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.'); $this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
// remove all FK from entry_tag // remove all FK from entry_tag
switch ($this->connection->getDatabasePlatform()->getName()) { switch ($this->connection->getDatabasePlatform()->getName()) {

View file

@ -27,7 +27,7 @@ class Version20161022134138 extends AbstractMigration implements ContainerAwareI
*/ */
public function up(Schema $schema) public function up(Schema $schema)
{ {
$this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL'); $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
$this->addSql('ALTER DATABASE ' . $this->connection->getParams()['dbname'] . ' CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;'); $this->addSql('ALTER DATABASE ' . $this->connection->getParams()['dbname'] . ' CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;');
@ -58,7 +58,7 @@ class Version20161022134138 extends AbstractMigration implements ContainerAwareI
*/ */
public function down(Schema $schema) public function down(Schema $schema)
{ {
$this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL'); $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
$this->addSql('ALTER DATABASE ' . $this->connection->getParams()['dbname'] . ' CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;'); $this->addSql('ALTER DATABASE ' . $this->connection->getParams()['dbname'] . ' CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;');

View file

@ -55,7 +55,7 @@ class Version20161024212538 extends AbstractMigration implements ContainerAwareI
$clientsTable->dropColumn('user_id', 'integer'); $clientsTable->dropColumn('user_id', 'integer');
if ($this->connection->getDatabasePlatform()->getName() !== 'sqlite') { if ('sqlite' !== $this->connection->getDatabasePlatform()->getName()) {
$clientsTable->removeForeignKey($this->constraintName); $clientsTable->removeForeignKey($this->constraintName);
} }
} }

View file

@ -34,7 +34,7 @@ class Version20170510082609 extends AbstractMigration implements ContainerAwareI
*/ */
public function up(Schema $schema) public function up(Schema $schema)
{ {
$this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL'); $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
foreach ($this->fields as $field) { foreach ($this->fields as $field) {
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE ' . $field . ' ' . $field . ' VARCHAR(180) NOT NULL;'); $this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE ' . $field . ' ' . $field . ' VARCHAR(180) NOT NULL;');
@ -46,7 +46,7 @@ class Version20170510082609 extends AbstractMigration implements ContainerAwareI
*/ */
public function down(Schema $schema) public function down(Schema $schema)
{ {
$this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL'); $this->skipIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'This migration only apply to MySQL');
foreach ($this->fields as $field) { foreach ($this->fields as $field) {
$this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE ' . $field . ' ' . $field . ' VARCHAR(255) NOT NULL;'); $this->addSql('ALTER TABLE ' . $this->getTable('user') . ' CHANGE ' . $field . ' ' . $field . ' VARCHAR(255) NOT NULL;');

View file

@ -27,7 +27,7 @@ class Version20170719231144 extends AbstractMigration implements ContainerAwareI
*/ */
public function up(Schema $schema) public function up(Schema $schema)
{ {
$this->skipIf($this->connection->getDatabasePlatform()->getName() === 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.'); $this->skipIf('sqlite' === $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
// Find tags which need to be merged // Find tags which need to be merged
$dupTags = $this->connection->query(' $dupTags = $this->connection->query('

View file

@ -350,3 +350,10 @@ fos_js_routing:
- howto - howto
- fos_user_security_logout - fos_user_security_logout
- new - new
jms_serializer:
handlers:
# to be removed if we switch to (default) ISO8601 datetime instead of ATOM
# see: https://github.com/schmittjoh/JMSSerializerBundle/pull/494
datetime:
default_format: "Y-m-d\\TH:i:sO" # ATOM

View file

@ -43,7 +43,7 @@
"ext-iconv": "*", "ext-iconv": "*",
"ext-tokenizer": "*", "ext-tokenizer": "*",
"ext-pdo": "*", "ext-pdo": "*",
"symfony/symfony": "3.2.*", "symfony/symfony": "3.3.*",
"doctrine/orm": "^2.5", "doctrine/orm": "^2.5",
"doctrine/doctrine-bundle": "^1.6", "doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2", "doctrine/doctrine-cache-bundle": "^1.2",
@ -51,15 +51,15 @@
"symfony/swiftmailer-bundle": "^2.3", "symfony/swiftmailer-bundle": "^2.3",
"symfony/monolog-bundle": "^3.0", "symfony/monolog-bundle": "^3.0",
"sensio/distribution-bundle": "^5.0", "sensio/distribution-bundle": "^5.0",
"sensio/framework-extra-bundle": "^3.0.2", "sensio/framework-extra-bundle": "^3.0",
"incenteev/composer-parameter-handler": "^2.0", "incenteev/composer-parameter-handler": "^2.0",
"nelmio/cors-bundle": "~1.4.0", "nelmio/cors-bundle": "~1.4",
"friendsofsymfony/rest-bundle": "~2.1", "friendsofsymfony/rest-bundle": "~2.1",
"jms/serializer-bundle": "~1.1", "jms/serializer-bundle": "~2.2",
"nelmio/api-doc-bundle": "~2.7", "nelmio/api-doc-bundle": "~2.7",
"mgargano/simplehtmldom": "~1.5", "mgargano/simplehtmldom": "~1.5",
"wallabag/tcpdf": "^6.2", "wallabag/tcpdf": "^6.2",
"simplepie/simplepie": "~1.3.1", "simplepie/simplepie": "~1.5",
"willdurand/hateoas-bundle": "~1.0", "willdurand/hateoas-bundle": "~1.0",
"liip/theme-bundle": "~1.1", "liip/theme-bundle": "~1.1",
"lexik/form-filter-bundle": "~5.0", "lexik/form-filter-bundle": "~5.0",
@ -89,12 +89,12 @@
}, },
"require-dev": { "require-dev": {
"doctrine/doctrine-fixtures-bundle": "~2.2", "doctrine/doctrine-fixtures-bundle": "~2.2",
"doctrine/data-fixtures": "~1.1.1", "doctrine/data-fixtures": "~1.1",
"sensio/generator-bundle": "^3.0", "sensio/generator-bundle": "^3.0",
"symfony/phpunit-bridge": "^3.3", "symfony/phpunit-bridge": "^3.3",
"friendsofphp/php-cs-fixer": "~2.0", "friendsofphp/php-cs-fixer": "~2.0",
"m6web/redis-mock": "^2.0", "m6web/redis-mock": "^2.0",
"dama/doctrine-test-bundle": "^1.0" "dama/doctrine-test-bundle": "^3.0"
}, },
"scripts": { "scripts": {
"post-cmd": [ "post-cmd": [

View file

@ -32,6 +32,6 @@
</filter> </filter>
<listeners> <listeners>
<listener class="\DAMA\DoctrineTestBundle\PHPUnit\PHPUnitStaticDbConnectionListener" /> <listener class="\DAMA\DoctrineTestBundle\PHPUnit\LegacyPHPUnitListener" />
</listeners> </listeners>
</phpunit> </phpunit>

View file

@ -31,7 +31,7 @@ class WallabagAnnotationController extends FOSRestController
$total = count($annotationRows); $total = count($annotationRows);
$annotations = ['total' => $total, 'rows' => $annotationRows]; $annotations = ['total' => $total, 'rows' => $annotationRows];
$json = $this->get('serializer')->serialize($annotations, 'json'); $json = $this->get('jms_serializer')->serialize($annotations, 'json');
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }
@ -64,7 +64,7 @@ class WallabagAnnotationController extends FOSRestController
$em->persist($annotation); $em->persist($annotation);
$em->flush(); $em->flush();
$json = $this->get('serializer')->serialize($annotation, 'json'); $json = $this->get('jms_serializer')->serialize($annotation, 'json');
return JsonResponse::fromJsonString($json); return JsonResponse::fromJsonString($json);
} }
@ -99,7 +99,7 @@ class WallabagAnnotationController extends FOSRestController
$em->persist($annotation); $em->persist($annotation);
$em->flush(); $em->flush();
$json = $this->get('serializer')->serialize($annotation, 'json'); $json = $this->get('jms_serializer')->serialize($annotation, 'json');
return JsonResponse::fromJsonString($json); return JsonResponse::fromJsonString($json);
} }
@ -124,7 +124,7 @@ class WallabagAnnotationController extends FOSRestController
$em->remove($annotation); $em->remove($annotation);
$em->flush(); $em->flush();
$json = $this->get('serializer')->serialize($annotation, 'json'); $json = $this->get('jms_serializer')->serialize($annotation, 'json');
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }

View file

@ -752,7 +752,7 @@ class EntryRestController extends WallabagRestController
$context = new SerializationContext(); $context = new SerializationContext();
$context->setSerializeNull(true); $context->setSerializeNull(true);
$json = $this->get('serializer')->serialize($data, 'json', $context); $json = $this->get('jms_serializer')->serialize($data, 'json', $context);
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }

View file

@ -25,7 +25,7 @@ class TagRestController extends WallabagRestController
->getRepository('WallabagCoreBundle:Tag') ->getRepository('WallabagCoreBundle:Tag')
->findAllTags($this->getUser()->getId()); ->findAllTags($this->getUser()->getId());
$json = $this->get('serializer')->serialize($tags, 'json'); $json = $this->get('jms_serializer')->serialize($tags, 'json');
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }
@ -58,7 +58,7 @@ class TagRestController extends WallabagRestController
$this->cleanOrphanTag($tag); $this->cleanOrphanTag($tag);
$json = $this->get('serializer')->serialize($tag, 'json'); $json = $this->get('jms_serializer')->serialize($tag, 'json');
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }
@ -100,7 +100,7 @@ class TagRestController extends WallabagRestController
$this->cleanOrphanTag($tags); $this->cleanOrphanTag($tags);
$json = $this->get('serializer')->serialize($tags, 'json'); $json = $this->get('jms_serializer')->serialize($tags, 'json');
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }
@ -126,7 +126,7 @@ class TagRestController extends WallabagRestController
$this->cleanOrphanTag($tag); $this->cleanOrphanTag($tag);
$json = $this->get('serializer')->serialize($tag, 'json'); $json = $this->get('jms_serializer')->serialize($tag, 'json');
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }
@ -145,7 +145,7 @@ class TagRestController extends WallabagRestController
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
foreach ($tags as $tag) { foreach ($tags as $tag) {
if (count($tag->getEntries()) === 0) { if (0 === count($tag->getEntries())) {
$em->remove($tag); $em->remove($tag);
} }
} }

View file

@ -46,7 +46,7 @@ class UserRestController extends WallabagRestController
public function putUserAction(Request $request) public function putUserAction(Request $request)
{ {
if (!$this->getParameter('fosuser_registration') || !$this->get('craue_config')->get('api_user_registration')) { if (!$this->getParameter('fosuser_registration') || !$this->get('craue_config')->get('api_user_registration')) {
$json = $this->get('serializer')->serialize(['error' => "Server doesn't allow registrations"], 'json'); $json = $this->get('jms_serializer')->serialize(['error' => "Server doesn't allow registrations"], 'json');
return (new JsonResponse()) return (new JsonResponse())
->setJson($json) ->setJson($json)
@ -92,7 +92,7 @@ class UserRestController extends WallabagRestController
$errors['password'] = $this->translateErrors($data['plainPassword']['children']['first']['errors']); $errors['password'] = $this->translateErrors($data['plainPassword']['children']['first']['errors']);
} }
$json = $this->get('serializer')->serialize(['error' => $errors], 'json'); $json = $this->get('jms_serializer')->serialize(['error' => $errors], 'json');
return (new JsonResponse()) return (new JsonResponse())
->setJson($json) ->setJson($json)
@ -127,7 +127,7 @@ class UserRestController extends WallabagRestController
*/ */
private function sendUser(User $user, $group = 'user_api', $status = JsonResponse::HTTP_OK) private function sendUser(User $user, $group = 'user_api', $status = JsonResponse::HTTP_OK)
{ {
$json = $this->get('serializer')->serialize( $json = $this->get('jms_serializer')->serialize(
$user, $user,
'json', 'json',
SerializationContext::create()->setGroups([$group]) SerializationContext::create()->setGroups([$group])

View file

@ -19,7 +19,7 @@ class WallabagRestController extends FOSRestController
public function getVersionAction() public function getVersionAction()
{ {
$version = $this->container->getParameter('wallabag_core.version'); $version = $this->container->getParameter('wallabag_core.version');
$json = $this->get('serializer')->serialize($version, 'json'); $json = $this->get('jms_serializer')->serialize($version, 'json');
return (new JsonResponse())->setJson($json); return (new JsonResponse())->setJson($json);
} }

View file

@ -52,7 +52,7 @@ class ListUserCommand extends ContainerAwareCommand
'%s/%s%s user(s) displayed.', '%s/%s%s user(s) displayed.',
count($users), count($users),
$nbUsers, $nbUsers,
$input->getArgument('search') === null ? '' : ' (filtered)' null === $input->getArgument('search') ? '' : ' (filtered)'
) )
); );

View file

@ -56,7 +56,7 @@ class ShowUserCommand extends ContainerAwareCommand
sprintf('Email: %s', $user->getEmail()), sprintf('Email: %s', $user->getEmail()),
sprintf('Display name: %s', $user->getName()), sprintf('Display name: %s', $user->getName()),
sprintf('Creation date: %s', $user->getCreatedAt()->format('Y-m-d H:i:s')), sprintf('Creation date: %s', $user->getCreatedAt()->format('Y-m-d H:i:s')),
sprintf('Last login: %s', $user->getLastLogin() !== null ? $user->getLastLogin()->format('Y-m-d H:i:s') : 'never'), sprintf('Last login: %s', null !== $user->getLastLogin() ? $user->getLastLogin()->format('Y-m-d H:i:s') : 'never'),
sprintf('2FA activated: %s', $user->isTwoFactorAuthentication() ? 'yes' : 'no'), sprintf('2FA activated: %s', $user->isTwoFactorAuthentication() ? 'yes' : 'no'),
]); ]);
} }

View file

@ -348,7 +348,7 @@ class ConfigController extends Controller
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
foreach ($tags as $tag) { foreach ($tags as $tag) {
if (count($tag->getEntries()) === 0) { if (0 === count($tag->getEntries())) {
$em->remove($tag); $em->remove($tag);
} }
} }

View file

@ -195,7 +195,7 @@ class EntryController extends Controller
public function showUnreadAction(Request $request, $page) public function showUnreadAction(Request $request, $page)
{ {
// load the quickstart if no entry in database // load the quickstart if no entry in database
if ((int) $page === 1 && $this->get('wallabag_core.entry_repository')->countAllEntriesByUser($this->getUser()->getId()) === 0) { if (1 === (int) $page && 0 === $this->get('wallabag_core.entry_repository')->countAllEntriesByUser($this->getUser()->getId())) {
return $this->redirect($this->generateUrl('quickstart')); return $this->redirect($this->generateUrl('quickstart'));
} }

View file

@ -59,7 +59,7 @@ class ExportController extends Controller
$methodBuilder = 'getBuilderFor' . $method . 'ByUser'; $methodBuilder = 'getBuilderFor' . $method . 'ByUser';
$repository = $this->get('wallabag_core.entry_repository'); $repository = $this->get('wallabag_core.entry_repository');
if ($category === 'tag_entries') { if ('tag_entries' === $category) {
$tag = $this->get('wallabag_core.tag_repository')->findOneBySlug($request->query->get('tag')); $tag = $this->get('wallabag_core.tag_repository')->findOneBySlug($request->query->get('tag'));
$entries = $repository->findAllByTagId( $entries = $repository->findAllByTagId(

View file

@ -65,7 +65,7 @@ class TagController extends Controller
$em->flush(); $em->flush();
// remove orphan tag in case no entries are associated to it // remove orphan tag in case no entries are associated to it
if (count($tag->getEntries()) === 0) { if (0 === count($tag->getEntries())) {
$em->remove($tag); $em->remove($tag);
$em->flush(); $em->flush();
} }

View file

@ -42,7 +42,7 @@ class TablePrefixSubscriber implements EventSubscriber
$classMetadata->setPrimaryTable(['name' => $this->prefix . $classMetadata->getTableName()]); $classMetadata->setPrimaryTable(['name' => $this->prefix . $classMetadata->getTableName()]);
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) { foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
if ($mapping['type'] === ClassMetadataInfo::MANY_TO_MANY && isset($classMetadata->associationMappings[$fieldName]['joinTable']['name'])) { if (ClassMetadataInfo::MANY_TO_MANY === $mapping['type'] && isset($classMetadata->associationMappings[$fieldName]['joinTable']['name'])) {
$mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name']; $mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
$classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName; $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
} }

View file

@ -48,7 +48,7 @@ class StringToListTransformer implements DataTransformerInterface
*/ */
public function reverseTransform($string) public function reverseTransform($string)
{ {
if ($string === null) { if (null === $string) {
return; return;
} }

View file

@ -58,7 +58,7 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
{ {
// required by credentials below // required by credentials below
$host = strtolower($host); $host = strtolower($host);
if (substr($host, 0, 4) === 'www.') { if ('www.' === substr($host, 0, 4)) {
$host = substr($host, 4); $host = substr($host, 4);
} }
@ -113,7 +113,7 @@ class GrabySiteConfigBuilder implements SiteConfigBuilder
$extraFields = []; $extraFields = [];
foreach ($extraFieldsStrings as $extraField) { foreach ($extraFieldsStrings as $extraField) {
if (strpos($extraField, '=') === false) { if (false === strpos($extraField, '=')) {
continue; continue;
} }

View file

@ -125,7 +125,7 @@ class ContentProxy
$date = $value; $date = $value;
// is it a timestamp? // is it a timestamp?
if (filter_var($date, FILTER_VALIDATE_INT) !== false) { if (false !== filter_var($date, FILTER_VALIDATE_INT)) {
$date = '@' . $date; $date = '@' . $date;
} }

View file

@ -16,7 +16,7 @@ class Matches
{ {
public function __invoke($subject, $pattern) public function __invoke($subject, $pattern)
{ {
if ($pattern[0] === "'") { if ("'" === $pattern[0]) {
$pattern = sprintf("'%%%s%%'", substr($pattern, 1, -1)); $pattern = sprintf("'%%%s%%'", substr($pattern, 1, -1));
} }

View file

@ -16,7 +16,7 @@ class NotMatches
{ {
public function __invoke($subject, $pattern) public function __invoke($subject, $pattern)
{ {
if ($pattern[0] === "'") { if ("'" === $pattern[0]) {
$pattern = sprintf("'%%%s%%'", substr($pattern, 1, -1)); $pattern = sprintf("'%%%s%%'", substr($pattern, 1, -1));
} }

View file

@ -16,6 +16,6 @@ class Matches
{ {
public function __invoke($subject, $pattern) public function __invoke($subject, $pattern)
{ {
return stripos($subject, $pattern) !== false; return false !== stripos($subject, $pattern);
} }
} }

View file

@ -16,6 +16,6 @@ class NotMatches
{ {
public function __invoke($subject, $pattern) public function __invoke($subject, $pattern)
{ {
return stripos($subject, $pattern) === false; return false === stripos($subject, $pattern);
} }
} }

View file

@ -165,7 +165,7 @@ abstract class AbstractImport implements ImportInterface
$entryToBeFlushed[] = $entry; $entryToBeFlushed[] = $entry;
// flush every 20 entries // flush every 20 entries
if (($i % 20) === 0) { if (0 === ($i % 20)) {
$this->em->flush(); $this->em->flush();
foreach ($entryToBeFlushed as $entry) { foreach ($entryToBeFlushed as $entry) {

View file

@ -171,7 +171,7 @@ abstract class BrowserImport extends AbstractImport
$entryToBeFlushed[] = $entry; $entryToBeFlushed[] = $entry;
// flush every 20 entries // flush every 20 entries
if (($i % 20) === 0) { if (0 === ($i % 20)) {
$this->em->flush(); $this->em->flush();
foreach ($entryToBeFlushed as $entry) { foreach ($entryToBeFlushed as $entry) {

View file

@ -45,7 +45,7 @@ class ChromeImport extends BrowserImport
'created_at' => substr($entry['date_added'], 0, 10), 'created_at' => substr($entry['date_added'], 0, 10),
]; ];
if (array_key_exists('tags', $entry) && $entry['tags'] !== '') { if (array_key_exists('tags', $entry) && '' !== $entry['tags']) {
$data['tags'] = $entry['tags']; $data['tags'] = $entry['tags'];
} }

View file

@ -45,7 +45,7 @@ class FirefoxImport extends BrowserImport
'created_at' => substr($entry['dateAdded'], 0, 10), 'created_at' => substr($entry['dateAdded'], 0, 10),
]; ];
if (array_key_exists('tags', $entry) && $entry['tags'] !== '') { if (array_key_exists('tags', $entry) && '' !== $entry['tags']) {
$data['tags'] = $entry['tags']; $data['tags'] = $entry['tags'];
} }

View file

@ -63,7 +63,7 @@ class InstapaperImport extends AbstractImport
$entries = []; $entries = [];
$handle = fopen($this->filepath, 'r'); $handle = fopen($this->filepath, 'r');
while (($data = fgetcsv($handle, 10240)) !== false) { while (false !== ($data = fgetcsv($handle, 10240))) {
if ('URL' === $data[0]) { if ('URL' === $data[0]) {
continue; continue;
} }
@ -80,8 +80,8 @@ class InstapaperImport extends AbstractImport
'url' => $data[0], 'url' => $data[0],
'title' => $data[1], 'title' => $data[1],
'status' => $data[3], 'status' => $data[3],
'is_archived' => $data[3] === 'Archive' || $data[3] === 'Starred', 'is_archived' => 'Archive' === $data[3] || 'Starred' === $data[3],
'is_starred' => $data[3] === 'Starred', 'is_starred' => 'Starred' === $data[3],
'html' => false, 'html' => false,
'tags' => $tags, 'tags' => $tags,
]; ];

View file

@ -149,7 +149,7 @@ class PocketImport extends AbstractImport
// - first call get 5k offset 0 // - first call get 5k offset 0
// - second call get 5k offset 5k // - second call get 5k offset 5k
// - and so on // - and so on
if (count($entries['list']) === self::NB_ELEMENTS) { if (self::NB_ELEMENTS === count($entries['list'])) {
++$run; ++$run;
return $this->import(self::NB_ELEMENTS * $run); return $this->import(self::NB_ELEMENTS * $run);
@ -175,7 +175,7 @@ class PocketImport extends AbstractImport
*/ */
public function parseEntry(array $importedEntry) public function parseEntry(array $importedEntry)
{ {
$url = isset($importedEntry['resolved_url']) && $importedEntry['resolved_url'] !== '' ? $importedEntry['resolved_url'] : $importedEntry['given_url']; $url = isset($importedEntry['resolved_url']) && '' !== $importedEntry['resolved_url'] ? $importedEntry['resolved_url'] : $importedEntry['given_url'];
$existingEntry = $this->em $existingEntry = $this->em
->getRepository('WallabagCoreBundle:Entry') ->getRepository('WallabagCoreBundle:Entry')
@ -194,15 +194,15 @@ class PocketImport extends AbstractImport
$this->fetchContent($entry, $url); $this->fetchContent($entry, $url);
// 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted
$entry->setArchived($importedEntry['status'] === 1 || $this->markAsRead); $entry->setArchived(1 === $importedEntry['status'] || $this->markAsRead);
// 0 or 1 - 1 If the item is starred // 0 or 1 - 1 If the item is starred
$entry->setStarred($importedEntry['favorite'] === 1); $entry->setStarred(1 === $importedEntry['favorite']);
$title = 'Untitled'; $title = 'Untitled';
if (isset($importedEntry['resolved_title']) && $importedEntry['resolved_title'] !== '') { if (isset($importedEntry['resolved_title']) && '' !== $importedEntry['resolved_title']) {
$title = $importedEntry['resolved_title']; $title = $importedEntry['resolved_title'];
} elseif (isset($importedEntry['given_title']) && $importedEntry['given_title'] !== '') { } elseif (isset($importedEntry['given_title']) && '' !== $importedEntry['given_title']) {
$title = $importedEntry['given_title']; $title = $importedEntry['given_title'];
} }

View file

@ -61,7 +61,7 @@ class WallabagV1Import extends WallabagImport
$data['html'] = $this->fetchingErrorMessage; $data['html'] = $this->fetchingErrorMessage;
} }
if (array_key_exists('tags', $entry) && $entry['tags'] !== '') { if (array_key_exists('tags', $entry) && '' !== $entry['tags']) {
$data['tags'] = $entry['tags']; $data['tags'] = $entry['tags'];
} }

View file

@ -1268,7 +1268,7 @@ class EntryControllerTest extends WallabagCoreTestCase
'ru', 'ru',
], ],
'fr-FR' => [ 'fr-FR' => [
'http://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/', 'https://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/',
'fr_FR', 'fr_FR',
], ],
'de' => [ 'de' => [
@ -1300,7 +1300,7 @@ class EntryControllerTest extends WallabagCoreTestCase
null, null,
], ],
'es-ES' => [ 'es-ES' => [
'http://www.muylinux.com/2015/04/17/odf-reino-unido-microsoft-google/', 'https://www.muylinux.com/2015/04/17/odf-reino-unido-microsoft-google/',
'es_ES', 'es_ES',
], ],
]; ];
@ -1343,7 +1343,7 @@ class EntryControllerTest extends WallabagCoreTestCase
*/ */
public function testRestrictedArticle() public function testRestrictedArticle()
{ {
$url = 'http://www.monde-diplomatique.fr/2017/05/BONNET/57475'; $url = 'https://www.monde-diplomatique.fr/2017/05/BONNET/57475';
$this->logInAs('admin'); $this->logInAs('admin');
$client = $this->getClient(); $client = $this->getClient();
$em = $client->getContainer()->get('doctrine.orm.entity_manager'); $em = $client->getContainer()->get('doctrine.orm.entity_manager');

View file

@ -114,10 +114,11 @@ class ChromeControllerTest extends WallabagCoreTestCase
->get('doctrine.orm.entity_manager') ->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry') ->getRepository('WallabagCoreBundle:Entry')
->findByUrlAndUserId( ->findByUrlAndUserId(
'http://www.usinenouvelle.com/article/la-multiplication-des-chefs-de-projet-est-une-catastrophe-manageriale-majeure-affirme-le-sociologue-francois-dupuy.N307730', 'https://www.usinenouvelle.com/article/la-multiplication-des-chefs-de-projet-est-une-catastrophe-manageriale-majeure-affirme-le-sociologue-francois-dupuy.N307730',
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for http://www.usinenouvelle.com is ok'); $this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for http://www.usinenouvelle.com is ok');
$this->assertNotEmpty($content->getLanguage(), 'Language for http://www.usinenouvelle.com is ok'); $this->assertNotEmpty($content->getLanguage(), 'Language for http://www.usinenouvelle.com is ok');
$this->assertSame(1, count($content->getTags())); $this->assertSame(1, count($content->getTags()));

View file

@ -118,6 +118,7 @@ class FirefoxControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertNotEmpty($content->getMimetype(), 'Mimetype for http://lexpansion.lexpress.fr is ok'); $this->assertNotEmpty($content->getMimetype(), 'Mimetype for http://lexpansion.lexpress.fr is ok');
$this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for http://lexpansion.lexpress.fr is ok'); $this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for http://lexpansion.lexpress.fr is ok');
$this->assertNotEmpty($content->getLanguage(), 'Language for http://lexpansion.lexpress.fr is ok'); $this->assertNotEmpty($content->getLanguage(), 'Language for http://lexpansion.lexpress.fr is ok');
@ -131,6 +132,7 @@ class FirefoxControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertNotEmpty($content->getMimetype(), 'Mimetype for https://stackoverflow.com is ok'); $this->assertNotEmpty($content->getMimetype(), 'Mimetype for https://stackoverflow.com is ok');
$this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for https://stackoverflow.com is ok'); $this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for https://stackoverflow.com is ok');
$this->assertEmpty($content->getLanguage(), 'Language for https://stackoverflow.com is ok'); $this->assertEmpty($content->getLanguage(), 'Language for https://stackoverflow.com is ok');

View file

@ -118,6 +118,7 @@ class PinboardControllerTest extends WallabagCoreTestCase
$this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
$this->assertContains('flashes.import.notice.summary', $body[0]); $this->assertContains('flashes.import.notice.summary', $body[0]);
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertNotEmpty($content->getMimetype(), 'Mimetype for https://ma.ttias.be is ok'); $this->assertNotEmpty($content->getMimetype(), 'Mimetype for https://ma.ttias.be is ok');
$this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for https://ma.ttias.be is ok'); $this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for https://ma.ttias.be is ok');
$this->assertNotEmpty($content->getLanguage(), 'Language for https://ma.ttias.be is ok'); $this->assertNotEmpty($content->getLanguage(), 'Language for https://ma.ttias.be is ok');
@ -161,6 +162,7 @@ class PinboardControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content1);
$this->assertTrue($content1->isArchived()); $this->assertTrue($content1->isArchived());
$content2 = $client->getContainer() $content2 = $client->getContainer()
@ -171,6 +173,7 @@ class PinboardControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content2);
$this->assertTrue($content2->isArchived()); $this->assertTrue($content2->isArchived());
$this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));

View file

@ -111,13 +111,14 @@ class ReadabilityControllerTest extends WallabagCoreTestCase
->get('doctrine.orm.entity_manager') ->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry') ->getRepository('WallabagCoreBundle:Entry')
->findByUrlAndUserId( ->findByUrlAndUserId(
'http://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/', 'https://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/',
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
$this->assertContains('flashes.import.notice.summary', $body[0]); $this->assertContains('flashes.import.notice.summary', $body[0]);
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertNotEmpty($content->getMimetype(), 'Mimetype for http://www.zataz.com is ok'); $this->assertNotEmpty($content->getMimetype(), 'Mimetype for http://www.zataz.com is ok');
$this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for http://www.zataz.com is ok'); $this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for http://www.zataz.com is ok');
$this->assertNotEmpty($content->getLanguage(), 'Language for http://www.zataz.com is ok'); $this->assertNotEmpty($content->getLanguage(), 'Language for http://www.zataz.com is ok');
@ -159,16 +160,18 @@ class ReadabilityControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content1);
$this->assertTrue($content1->isArchived()); $this->assertTrue($content1->isArchived());
$content2 = $client->getContainer() $content2 = $client->getContainer()
->get('doctrine.orm.entity_manager') ->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry') ->getRepository('WallabagCoreBundle:Entry')
->findByUrlAndUserId( ->findByUrlAndUserId(
'https://facebook.github.io/graphql/', 'https://facebook.github.io/graphql/October2016/',
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content2);
$this->assertTrue($content2->isArchived()); $this->assertTrue($content2->isArchived());
$this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));

View file

@ -119,6 +119,7 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
$this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
$this->assertContains('flashes.import.notice.summary', $body[0]); $this->assertContains('flashes.import.notice.summary', $body[0]);
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertEmpty($content->getMimetype(), 'Mimetype for http://www.framablog.org is empty'); $this->assertEmpty($content->getMimetype(), 'Mimetype for http://www.framablog.org is empty');
$this->assertEmpty($content->getPreviewPicture(), 'Preview picture for http://www.framablog.org is empty'); $this->assertEmpty($content->getPreviewPicture(), 'Preview picture for http://www.framablog.org is empty');
$this->assertEmpty($content->getLanguage(), 'Language for http://www.framablog.org is empty'); $this->assertEmpty($content->getLanguage(), 'Language for http://www.framablog.org is empty');
@ -160,6 +161,7 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content1);
$this->assertTrue($content1->isArchived()); $this->assertTrue($content1->isArchived());
$content2 = $client->getContainer() $content2 = $client->getContainer()
@ -170,6 +172,7 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content2);
$this->assertTrue($content2->isArchived()); $this->assertTrue($content2->isArchived());
$this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));

View file

@ -119,6 +119,8 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
// empty because it wasn't re-imported // empty because it wasn't re-imported
$this->assertEmpty($content->getMimetype(), 'Mimetype for http://www.liberation.fr is empty'); $this->assertEmpty($content->getMimetype(), 'Mimetype for http://www.liberation.fr is empty');
$this->assertEmpty($content->getPreviewPicture(), 'Preview picture for http://www.liberation.fr is empty'); $this->assertEmpty($content->getPreviewPicture(), 'Preview picture for http://www.liberation.fr is empty');
@ -136,6 +138,7 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
$this->getLoggedInUserId() $this->getLoggedInUserId()
); );
$this->assertInstanceOf('Wallabag\CoreBundle\Entity\Entry', $content);
$this->assertNotEmpty($content->getMimetype(), 'Mimetype for https://www.mediapart.fr is ok'); $this->assertNotEmpty($content->getMimetype(), 'Mimetype for https://www.mediapart.fr is ok');
$this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for https://www.mediapart.fr is ok'); $this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for https://www.mediapart.fr is ok');
$this->assertNotEmpty($content->getLanguage(), 'Language for https://www.mediapart.fr is ok'); $this->assertNotEmpty($content->getLanguage(), 'Language for https://www.mediapart.fr is ok');

View file

@ -14,7 +14,7 @@
"article__excerpt": "The GraphQL Type system describes the capabilities of a GraphQL server and is used to determine if a query is valid. The type system also describes the input types of query variables to determine if&hellip;", "article__excerpt": "The GraphQL Type system describes the capabilities of a GraphQL server and is used to determine if a query is valid. The type system also describes the input types of query variables to determine if&hellip;",
"favorite": false, "favorite": false,
"date_archived": "2016-07-19T06:48:31", "date_archived": "2016-07-19T06:48:31",
"article__url": "https://facebook.github.io/graphql/", "article__url": "https://facebook.github.io/graphql/October2016/",
"date_added": "2016-06-24T17:50:16", "date_added": "2016-06-24T17:50:16",
"date_favorited": null, "date_favorited": null,
"article__title": "GraphQL", "article__title": "GraphQL",

View file

@ -22,7 +22,7 @@
"date_added": "2016-09-08T11:55:58+0200", "date_added": "2016-09-08T11:55:58+0200",
"favorite": 0, "favorite": 0,
"article__title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ", "article__title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ",
"article__url": "http://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/" "article__url": "https://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/"
} }
], ],
"recommendations": [] "recommendations": []

View file

@ -71,14 +71,14 @@
"is_starred": 0, "is_starred": 0,
"id": 608, "id": 608,
"title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ", "title": "90% des dossiers médicaux des Coréens du sud vendus à des entreprises privées - ZATAZ",
"url": "http://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/", "url": "https://www.zataz.com/90-des-dossiers-medicaux-des-coreens-du-sud-vendus-a-des-entreprises-privees/",
"content": "<p class=\"c2\"><strong>La Corée du Sud vibre en ce moment à la lecture dune information qui pend aux nez des Français. Une entreprise privée a récupéré 90% des dossiers médicaux des habitants du pays du matin calme au soleil levant pour les revendre.</strong></p>\n<p>Une entreprise spécialisée dans le développement de logiciels en charge de gérer les frais médicaux, programmes utilisés dans les hôpitaux et la Korean Pharmaceutical Information Center, a offert il y a quelques mois ses logiciels de gestion dofficines. Plus de la moitié des pharmacies du pays ont utilisé loutil. Sauf que <a href=\"http://www.koreaherald.com/view.php?ud=20150726000368\" target=\"_blank\">les données sauvegardées ont été revendues</a> à IMS Health Korea. Cette entreprise, dont le siège social est basé aux USA, a ensuite commercialisé, illégalement, les données à dautres sociétés en Corée.</p>\n<p>La loi 2011 sur le droit de la protection des renseignements personnels interdit lutilisation des renseignements personnels et des renseignements médicaux sans le consentement des patients. Le Pharmaceutical Information Center est actuellement jugé pour cette collecte illégale, qui date de 2013, et la distribution des informations médicales de 90% des Coréens.</p>\n<blockquote readability=\"4\">\n<p><strong>Un cas qui pourrait toucher la France ?</strong></p>\n</blockquote>\n<p class=\"c2\">Depuis février 2015, louverture des données de santé dans lhexagone a été décidée par le législateur. Lassurance-maladie a annoncé quelle proposait, en accès libre, sa base de données « <em>Damir</em> » sur le site data.gouv.fr. Un big data de la santé qui regroupe les informations issues de 1,2 milliard de feuilles de soins, de 500 millions dactes médicaux et de 11 millions dhospitalisations. Ce big data ne propose pas les identités (pas de nom, de numéro de sécurité sociale, …), uniquement des millions de chiffres et de données de santé. Cette faramineuse base de données, qui double de volume chaque année, permet dextraire, par exemple, des statistiques liées à la santé dans les régions. <a href=\"http://www.assemblee-nationale.fr/14/amendements/2302/CION-SOC/AS1387.pdf\" target=\"_blank\">Larticle 47 de loi</a> permet aux acteurs privés daccéder aux données de la CNAMTS. Cest lInstitut national des données de santé (<a href=\"http://www.institut-des-donnees-de-sante.fr/\" target=\"_blank\">INDS</a>) qui a en charge de répondre aux demandes du « privé » pour accéder aux données plus ciblées (et payantes).</p>\n", "content": "<p class=\"c2\"><strong>La Corée du Sud vibre en ce moment à la lecture dune information qui pend aux nez des Français. Une entreprise privée a récupéré 90% des dossiers médicaux des habitants du pays du matin calme au soleil levant pour les revendre.</strong></p>\n<p>Une entreprise spécialisée dans le développement de logiciels en charge de gérer les frais médicaux, programmes utilisés dans les hôpitaux et la Korean Pharmaceutical Information Center, a offert il y a quelques mois ses logiciels de gestion dofficines. Plus de la moitié des pharmacies du pays ont utilisé loutil. Sauf que <a href=\"http://www.koreaherald.com/view.php?ud=20150726000368\" target=\"_blank\">les données sauvegardées ont été revendues</a> à IMS Health Korea. Cette entreprise, dont le siège social est basé aux USA, a ensuite commercialisé, illégalement, les données à dautres sociétés en Corée.</p>\n<p>La loi 2011 sur le droit de la protection des renseignements personnels interdit lutilisation des renseignements personnels et des renseignements médicaux sans le consentement des patients. Le Pharmaceutical Information Center est actuellement jugé pour cette collecte illégale, qui date de 2013, et la distribution des informations médicales de 90% des Coréens.</p>\n<blockquote readability=\"4\">\n<p><strong>Un cas qui pourrait toucher la France ?</strong></p>\n</blockquote>\n<p class=\"c2\">Depuis février 2015, louverture des données de santé dans lhexagone a été décidée par le législateur. Lassurance-maladie a annoncé quelle proposait, en accès libre, sa base de données « <em>Damir</em> » sur le site data.gouv.fr. Un big data de la santé qui regroupe les informations issues de 1,2 milliard de feuilles de soins, de 500 millions dactes médicaux et de 11 millions dhospitalisations. Ce big data ne propose pas les identités (pas de nom, de numéro de sécurité sociale, …), uniquement des millions de chiffres et de données de santé. Cette faramineuse base de données, qui double de volume chaque année, permet dextraire, par exemple, des statistiques liées à la santé dans les régions. <a href=\"http://www.assemblee-nationale.fr/14/amendements/2302/CION-SOC/AS1387.pdf\" target=\"_blank\">Larticle 47 de loi</a> permet aux acteurs privés daccéder aux données de la CNAMTS. Cest lInstitut national des données de santé (<a href=\"http://www.institut-des-donnees-de-sante.fr/\" target=\"_blank\">INDS</a>) qui a en charge de répondre aux demandes du « privé » pour accéder aux données plus ciblées (et payantes).</p>\n",
"annotations": [], "annotations": [],
"mimetype": "text/html", "mimetype": "text/html",
"language": "fr-FR", "language": "fr-FR",
"reading_time": 1, "reading_time": 1,
"domain_name": "www.zataz.com", "domain_name": "www.zataz.com",
"preview_picture": "http://www.zataz.com/wp-content/uploads/HD-Virus.png", "preview_picture": "https://www.zataz.com/wp-content/uploads/HD-Virus.png",
"tags": [] "tags": []
}, },
{ {