]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge pull request #2667 from wallabag/upgrade-symfony-32
authorNicolas Lœuillet <nicolas@loeuillet.org>
Thu, 15 Dec 2016 21:18:45 +0000 (22:18 +0100)
committerGitHub <noreply@github.com>
Thu, 15 Dec 2016 21:18:45 +0000 (22:18 +0100)
Upgrade to Symfony 3.2

61 files changed:
app/DoctrineMigrations/Version20160410190541.php
app/DoctrineMigrations/Version20160812120952.php
app/DoctrineMigrations/Version20160911214952.php
app/DoctrineMigrations/Version20160916201049.php
app/DoctrineMigrations/Version20161001072726.php
app/DoctrineMigrations/Version20161022134138.php
app/DoctrineMigrations/Version20161024212538.php
app/DoctrineMigrations/Version20161031132655.php
app/DoctrineMigrations/Version20161104073720.php
app/DoctrineMigrations/Version20161106113822.php
app/DoctrineMigrations/Version20161117071626.php
app/DoctrineMigrations/Version20161118134328.php
app/DoctrineMigrations/Version20161122144743.php
app/DoctrineMigrations/Version20161122203647.php
app/DoctrineMigrations/Version20161128084725.php
app/config/config.yml
docs/de/developer/asynchronous.rst
docs/en/developer/asynchronous.rst
docs/fr/developer/asynchronous.rst
src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php
src/Wallabag/CoreBundle/DependencyInjection/Configuration.php
src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php
src/Wallabag/CoreBundle/Entity/TaggingRule.php
src/Wallabag/CoreBundle/Helper/ContentProxy.php
src/Wallabag/CoreBundle/Helper/DownloadImages.php
src/Wallabag/CoreBundle/Repository/EntryRepository.php
src/Wallabag/CoreBundle/Resources/config/parameters.yml
src/Wallabag/CoreBundle/Resources/config/services.yml
src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
src/Wallabag/CoreBundle/Resources/views/themes/common/Static/howto.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php
src/Wallabag/ImportBundle/Import/ChromeImport.php
src/Wallabag/ImportBundle/Import/FirefoxImport.php
src/Wallabag/ImportBundle/Import/InstapaperImport.php
src/Wallabag/ImportBundle/Import/PinboardImport.php
src/Wallabag/ImportBundle/Import/ReadabilityImport.php
src/Wallabag/ImportBundle/Import/WallabagV1Import.php
src/Wallabag/ImportBundle/Import/WallabagV2Import.php
src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig
src/Wallabag/UserBundle/EventListener/CreateConfigListener.php
src/Wallabag/UserBundle/Resources/config/services.yml
src/Wallabag/UserBundle/Resources/translations/wallabag_user.de.yml [new file with mode: 0644]
src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml
src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig
tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php
tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php
tests/Wallabag/UserBundle/EventListener/CreateConfigListenerTest.php

index f034b0e467b46c83ffc67e393adfc6737c9b6845..0cdec00852dd1a715a9898dd7e5c02d56f06b0d4 100644 (file)
@@ -21,7 +21,7 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,13 +29,14 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        if ($this->connection->getDatabasePlatform()->getName() == 'postgresql') {
-            $this->addSql('ALTER TABLE "'.$this->getTable('entry').'" ADD uuid UUID DEFAULT NULL');
-        } else {
-            $this->addSql('ALTER TABLE "'.$this->getTable('entry').'" ADD uuid LONGTEXT DEFAULT NULL');
-        }
+        $entryTable = $schema->getTable($this->getTable('entry'));
 
-        $this->addSql("INSERT INTO \"".$this->getTable('craue_config_setting')."\" (name, value, section) VALUES ('share_public', '1', 'entry')");
+        $this->skipIf($entryTable->hasColumn('uuid'), 'It seems that you already played this migration.');
+
+        $entryTable->addColumn('uuid', 'guid', [
+            'notnull' => false,
+        ]);
+        $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_public', '1', 'entry')");
     }
 
     /**
@@ -43,9 +44,9 @@ class Version20160410190541 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'sqlite', 'This down migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
+        $entryTable = $schema->getTable($this->getTable('entry'));
+        $entryTable->dropColumn('uuid');
 
-        $this->addSql('ALTER TABLE "'.$this->getTable('entry').'" DROP uuid');
-        $this->addSql("DELETE FROM \"".$this->getTable('craue_config_setting')."\" WHERE name = 'share_public'");
+        $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_public'");
     }
 }
index 39423e2f56d1a9eb8004bc01bb82f373435bb8c2..053b8d889c736baf3030d0c89c1ffdcbdb357af6 100644 (file)
@@ -21,7 +21,7 @@ class Version20160812120952 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,18 +29,10 @@ class Version20160812120952 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        switch ($this->connection->getDatabasePlatform()->getName()) {
-            case 'sqlite':
-                $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext DEFAULT NULL');
-                break;
-
-            case 'mysql':
-                $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext COLLATE \'utf8_unicode_ci\' DEFAULT NULL');
-                break;
-
-            case 'postgresql':
-                $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name text DEFAULT NULL');
-        }
+        $clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
+        $this->skipIf($clientsTable->hasColumn('name'), 'It seems that you already played this migration.');
+
+        $clientsTable->addColumn('name', 'blob');
     }
 
     /**
@@ -48,8 +40,7 @@ class Version20160812120952 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->abortIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
-
-        $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' DROP COLUMN name');
+        $clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
+        $clientsTable->dropColumn('name');
     }
 }
index f14f7bc6f825a61564f4e376f402f2328ccb4675..963821ae81ee6c4cf1c97661a2bcae2eeed642fe 100644 (file)
@@ -21,7 +21,7 @@ class Version20160911214952 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,8 +29,8 @@ class Version20160911214952 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->addSql('INSERT INTO "'.$this->getTable('craue_config_setting').'" (name, value, section) VALUES (\'import_with_redis\', \'0\', \'import\')');
-        $this->addSql('INSERT INTO "'.$this->getTable('craue_config_setting').'" (name, value, section) VALUES (\'import_with_rabbitmq\', \'0\', \'import\')');
+        $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('import_with_redis', 0, 'import')");
+        $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('import_with_rabbitmq', 0, 'import')");
     }
 
     /**
@@ -38,5 +38,7 @@ class Version20160911214952 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
+        $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'import_with_redis';");
+        $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'import_with_rabbitmq';");
     }
 }
index 0d2edf9ef47069b664eaacaf11c46530c6709315..9390755ea0ee526655268224e4c4d56c599146b8 100644 (file)
@@ -21,7 +21,7 @@ class Version20160916201049 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,8 +29,12 @@ class Version20160916201049 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->addSql('ALTER TABLE "'.$this->getTable('config').'" ADD pocket_consumer_key VARCHAR(255) DEFAULT NULL');
-        $this->addSql("DELETE FROM \"".$this->getTable('craue_config_setting')."\" WHERE name = 'pocket_consumer_key';");
+        $configTable = $schema->getTable($this->getTable('config'));
+
+        $this->skipIf($configTable->hasColumn('pocket_consumer_key'), 'It seems that you already played this migration.');
+
+        $configTable->addColumn('pocket_consumer_key', 'string');
+        $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'pocket_consumer_key';");
     }
 
     /**
@@ -38,9 +42,8 @@ class Version20160916201049 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->abortIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
-
-        $this->addSql('ALTER TABLE "'.$this->getTable('config').'" DROP pocket_consumer_key');
-        $this->addSql("INSERT INTO \"".$this->getTable('craue_config_setting')."\" (name, value, section) VALUES ('pocket_consumer_key', NULL, 'import')");
+        $configTable = $schema->getTable($this->getTable('config'));
+        $configTable->dropColumn('pocket_consumer_key');
+        $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('pocket_consumer_key', NULL, 'import')");
     }
 }
index 237db93206d45bbba72c4357d3425a7275aa0a6c..5ab88555c2bc3225ab4c31245ea141215533f8e4 100644 (file)
@@ -21,7 +21,7 @@ class Version20161001072726 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
index 5cce55a5eca39e4169040ca3bb933efe86348e1e..b3d02b407ace5c4b6bc5d732208d71e4208dec0c 100644 (file)
@@ -21,7 +21,7 @@ class Version20161022134138 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -72,6 +72,5 @@ class Version20161022134138 extends AbstractMigration implements ContainerAwareI
         $this->addSql('ALTER TABLE '.$this->getTable('tag').' CHANGE `label` `label` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
 
         $this->addSql('ALTER TABLE '.$this->getTable('user').' CHANGE `name` `name` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
-
     }
 }
index f8e927e478d3276251a1230572cd52e6f1b130bf..75ff86f1fa40602870e851d1ab72985fc21240f1 100644 (file)
@@ -21,7 +21,7 @@ class Version20161024212538 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,10 +29,18 @@ class Version20161024212538 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->skipIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
+        $clientsTable = $schema->getTable($this->getTable('oauth2_clients'));
 
-        $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD user_id INT(11) DEFAULT NULL');
-        $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD CONSTRAINT FK_clients_user_clients FOREIGN KEY (user_id) REFERENCES '.$this->getTable('user').' (id) ON DELETE CASCADE');
+        $this->skipIf($clientsTable->hasColumn('user_id'), 'It seems that you already played this migration.');
+
+        $clientsTable->addColumn('user_id', 'integer');
+
+        $clientsTable->addForeignKeyConstraint(
+            $this->getTable('user'),
+            ['user_id'],
+            ['id'],
+            ['onDelete' => 'CASCADE']
+        );
     }
 
     /**
@@ -40,6 +48,5 @@ class Version20161024212538 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-
     }
 }
index c73644288e6b009e3ea46636f46ca8cf00d52fc6..39b85ea9759f979a913ea0fb84271ebe46914762 100644 (file)
@@ -21,7 +21,7 @@ class Version20161031132655 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,7 +29,7 @@ class Version20161031132655 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->addSql("INSERT INTO \"".$this->getTable('craue_config_setting')."\" (name, value, section) VALUES ('download_images_enabled', 0, 'misc')");
+        $this->addSql('INSERT INTO "'.$this->getTable('craue_config_setting')."\" (name, value, section) VALUES ('download_images_enabled', 0, 'misc')");
     }
 
     /**
@@ -37,8 +37,6 @@ class Version20161031132655 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->abortIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.');
-
-        $this->addSql("DELETE FROM \"".$this->getTable('craue_config_setting')."\" WHERE name = 'download_images_enabled';");
+        $this->addSql('DELETE FROM "'.$this->getTable('craue_config_setting')."\" WHERE name = 'download_images_enabled';");
     }
 }
index 16503b4b05d9ce6bbc655020d7f192fe4d2315d9..4721426a406aa093b0142eb2ae0888699de5ec76 100644 (file)
@@ -14,6 +14,8 @@ class Version20161104073720 extends AbstractMigration implements ContainerAwareI
      */
     private $container;
 
+    private $indexName = 'IDX_entry_created_at';
+
     public function setContainer(ContainerInterface $container = null)
     {
         $this->container = $container;
@@ -21,7 +23,7 @@ class Version20161104073720 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,18 +31,10 @@ class Version20161104073720 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        switch ($this->connection->getDatabasePlatform()->getName()) {
-            case 'sqlite':
-                $this->addSql('CREATE INDEX `created_at` ON `'.$this->getTable('entry').'` (`created_at` DESC)');
-                break;
-
-            case 'mysql':
-                $this->addSql('ALTER TABLE '.$this->getTable('entry').' ADD INDEX created_at (created_at);');
-                break;
-
-            case 'postgresql':
-                $this->addSql('CREATE INDEX created_at ON '.$this->getTable('entry').' (created_at DESC)');
-        }
+        $entryTable = $schema->getTable($this->getTable('entry'));
+        $this->skipIf($entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
+
+        $entryTable->addIndex(['created_at'], $this->indexName);
     }
 
     /**
@@ -48,6 +42,9 @@ class Version20161104073720 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
+        $entryTable = $schema->getTable($this->getTable('entry'));
+        $this->skipIf(false === $entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
 
+        $entryTable->dropIndex($this->indexName);
     }
 }
index edca54f5d732348dfb277362fffc22da52adadcf..5032a8f0563e3cfbe229e5e75dcdeadd9612194f 100644 (file)
@@ -21,7 +21,7 @@ class Version20161106113822 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,7 +29,13 @@ class Version20161106113822 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->addSql('ALTER TABLE '.$this->getTable('config').' ADD action_mark_as_read INT DEFAULT 0');
+        $configTable = $schema->getTable($this->getTable('config'));
+
+        $this->skipIf($configTable->hasColumn('action_mark_as_read'), 'It seems that you already played this migration.');
+
+        $configTable->addColumn('action_mark_as_read', 'integer', [
+            'default' => 0,
+        ]);
     }
 
     /**
@@ -37,8 +43,7 @@ class Version20161106113822 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'sqlite', 'This down migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
-
-        $this->addSql('ALTER TABLE '.$this->getTable('config').' DROP action_mark_as_read');
+        $configTable = $schema->getTable($this->getTable('config'));
+        $userTable->dropColumn('action_mark_as_read');
     }
 }
index 9ae55b5f3dda8577e77a5326dfd26cf27aa9b561..33f5707ebe070a9b81684516e87a95ece9f03258 100644 (file)
@@ -21,7 +21,7 @@ class Version20161117071626 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -29,8 +29,8 @@ class Version20161117071626 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->addSql("INSERT INTO ".$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_unmark', 0, 'entry')");
-        $this->addSql("INSERT INTO ".$this->getTable('craue_config_setting')." (name, value, section) VALUES ('unmark_url', 'https://unmark.it', 'entry')");
+        $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_unmark', 0, 'entry')");
+        $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('unmark_url', 'https://unmark.it', 'entry')");
     }
 
     /**
@@ -38,7 +38,7 @@ class Version20161117071626 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->addSql("DELETE FROM ".$this->getTable('craue_config_setting')." WHERE name = 'share_unmark';");
-        $this->addSql("DELETE FROM ".$this->getTable('craue_config_setting')." WHERE name = 'unmark_url';");
+        $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_unmark';");
+        $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'unmark_url';");
     }
 }
index 390e89ce610256d9377252089846bd923f997c7a..f168cb53c813a601b19607b29c3f58d78b547953 100644 (file)
@@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Add http_status in `entry_table`
+ * Add http_status in `entry_table`.
  */
 class Version20161118134328 extends AbstractMigration implements ContainerAwareInterface
 {
@@ -24,7 +24,7 @@ class Version20161118134328 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -32,7 +32,14 @@ class Version20161118134328 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->addSql('ALTER TABLE '.$this->getTable('entry').' ADD http_status VARCHAR(3) DEFAULT NULL');
+        $entryTable = $schema->getTable($this->getTable('entry'));
+
+        $this->skipIf($entryTable->hasColumn('http_status'), 'It seems that you already played this migration.');
+
+        $entryTable->addColumn('http_status', 'string', [
+            'length' => 3,
+            'notnull' => false,
+        ]);
     }
 
     /**
@@ -40,8 +47,7 @@ class Version20161118134328 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'sqlite', 'This down migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
-
-        $this->addSql('ALTER TABLE '.$this->getTable('entry').' DROP http_status');
+        $userTable = $schema->getTable($this->getTable('entry'));
+        $userTable->dropColumn('http_status');
     }
 }
index ec80c48e5d8d92cc44dccdd8e73c3ae39e4da734..536b833993539f2f3755c529042d8016dd15c2e8 100644 (file)
@@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Add the restricted_access internal setting for articles with paywall
+ * Add the restricted_access internal setting for articles with paywall.
  */
 class Version20161122144743 extends AbstractMigration implements ContainerAwareInterface
 {
@@ -24,7 +24,7 @@ class Version20161122144743 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -32,7 +32,7 @@ class Version20161122144743 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->addSql("INSERT INTO ".$this->getTable('craue_config_setting')." (name, value, section) VALUES ('restricted_access', 0, 'entry')");
+        $this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('restricted_access', 0, 'entry')");
     }
 
     /**
@@ -40,6 +40,6 @@ class Version20161122144743 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->addSql("DELETE FROM ".$this->getTable('craue_config_setting')." WHERE name = 'restricted_access';");
+        $this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'restricted_access';");
     }
 }
index ea2703b6b1f99c3447e9a05c7dfcbbb1a2ec73eb..94197193cdc3d6c277749330128b17eb467e35cc 100644 (file)
@@ -8,7 +8,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Methods and properties removed from `FOS\UserBundle\Model\User`
+ * Methods and properties removed from `FOS\UserBundle\Model\User`.
  *
  * - `$expired`
  * - `$credentialsExpired`
@@ -32,7 +32,7 @@ class Version20161122203647 extends AbstractMigration implements ContainerAwareI
 
     private function getTable($tableName)
     {
-        return $this->container->getParameter('database_table_prefix') . $tableName;
+        return $this->container->getParameter('database_table_prefix').$tableName;
     }
 
     /**
@@ -40,10 +40,12 @@ class Version20161122203647 extends AbstractMigration implements ContainerAwareI
      */
     public function up(Schema $schema)
     {
-        $this->abortIf($this->connection->getDatabasePlatform()->getName() === 'sqlite', 'This up migration can\'t be executed on SQLite databases, because SQLite don\'t support DROP COLUMN.');
+        $userTable = $schema->getTable($this->getTable('user'));
 
-        $this->addSql('ALTER TABLE '.$this->getTable('user').' DROP expired');
-        $this->addSql('ALTER TABLE '.$this->getTable('user').' DROP credentials_expired');
+        $this->skipIf(false === $userTable->hasColumn('expired') || false === $userTable->hasColumn('credentials_expired'), 'It seems that you already played this migration.');
+
+        $userTable->dropColumn('expired');
+        $userTable->dropColumn('credentials_expired');
     }
 
     /**
@@ -51,7 +53,8 @@ class Version20161122203647 extends AbstractMigration implements ContainerAwareI
      */
     public function down(Schema $schema)
     {
-        $this->addSql('ALTER TABLE '.$this->getTable('user').' ADD expired tinyint(1) NULL DEFAULT 0');
-        $this->addSql('ALTER TABLE '.$this->getTable('user').' ADD credentials_expired tinyint(1) NULL DEFAULT 0');
+        $userTable = $schema->getTable($this->getTable('user'));
+        $userTable->addColumn('expired', 'smallint');
+        $userTable->addColumn('credentials_expired', 'smallint');
     }
 }
index 242d59006c3ffe876924a5f97939e0c7b35021ee..ea370076c85fca183a5485dda9d017afa5a0c592 100644 (file)
@@ -35,7 +35,7 @@ class Version20161128084725 extends AbstractMigration implements ContainerAwareI
         $configTable = $schema->getTable($this->getTable('config'));
         $this->skipIf($configTable->hasColumn('list_mode'), 'It seems that you already played this migration.');
 
-        $configTable->addColumn('list_mode', 'integer');
+        $configTable->addColumn('list_mode', 'integer', ['notnull' => false]);
     }
 
     /**
index 6b1ed05669ef861e532207a75f7dea1915e35d47..d52f37c818f190aede838c00ce0dad98ffad07d4 100644 (file)
@@ -51,6 +51,8 @@ wallabag_core:
     rss_limit: 50
     reading_speed: 1
     cache_lifetime: 10
+    action_mark_as_read: 1
+    list_mode: 1
     fetching_error_message: |
         wallabag can't retrieve contents for this article. Please <a href="http://doc.wallabag.org/en/master/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>.
 
index 1d241a72ea79e051fcc4d247f9d1c2782383aac5..1707f3211e9b1903111bac35f6e5b97532120aa0 100644 (file)
@@ -149,10 +149,10 @@ Abhängig davon, über welchen Service du importieren möchtest, musst du den en
   bin/console wallabag:import:redis-worker -e=prod firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
 
   # für den Chrome-Import
-  bin/console wallabag:import:redis-worker -e=prod instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
+  bin/console wallabag:import:redis-worker -e=prod chrome -vv >> /path/to/wallabag/var/logs/redis-chrome.log
 
 Wenn du den Import nur für einige Artikel nutzen willst, kannst du die Nummer festlegen (hier: 12) und der Consumer wird nach dem zwölften Artikel aufhören:
 
 .. code:: bash
 
-  bin/console wallabag:import:redis-worker -e=prod pocket -vv --maxIterations=12
\ No newline at end of file
+  bin/console wallabag:import:redis-worker -e=prod pocket -vv --maxIterations=12
index 6a991cf64d327987a8a92c7198f05fc8a1bb658f..5cd402310bfc28eb4214ef2f766e274d0f7a6238 100644 (file)
@@ -150,7 +150,7 @@ Depending on which service you want to import from you need to enable one (or ma
   bin/console wallabag:import:redis-worker -e=prod firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
 
   # for Chrome import
-  bin/console wallabag:import:redis-worker -e=prod instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
+  bin/console wallabag:import:redis-worker -e=prod chrome -vv >> /path/to/wallabag/var/logs/redis-chrome.log
 
 If you want to launch the import only for some messages and not all, you can specify this number (here 12) and the worker will stop right after the 12th message :
 
index c54892282b18a051e9a1b669583be340a0aea653..8a493acf0586b9bc568a457cb2445922c26e0ee9 100644 (file)
@@ -150,7 +150,7 @@ En fonction du service dont vous souhaitez importer vos données, vous devez act
   bin/console wallabag:import:redis-worker -e=prod firefox -vv >> /path/to/wallabag/var/logs/redis-firefox.log
 
   # for Chrome import
-  bin/console wallabag:import:redis-worker -e=prod instapaper -vv >> /path/to/wallabag/var/logs/redis-chrome.log
+  bin/console wallabag:import:redis-worker -e=prod chrome -vv >> /path/to/wallabag/var/logs/redis-chrome.log
 
 Si vous souhaitez démarrer l'import pour quelques messages uniquement, vous pouvez spécifier cette valeur en paramètre (ici 12) et le client va s'arrêter après le 12ème message :
 
index 4535802279019a95d57982c4afde5133b01f5a9d..3d4d5def9aa2c6c02d97652bc62b8f764046159f 100644 (file)
@@ -22,6 +22,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
         $adminConfig->setLanguage('en');
         $adminConfig->setPocketConsumerKey('xxxxx');
         $adminConfig->setActionMarkAsRead(0);
+        $adminConfig->setListMode(0);
 
         $manager->persist($adminConfig);
 
@@ -34,6 +35,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
         $bobConfig->setLanguage('fr');
         $bobConfig->setPocketConsumerKey(null);
         $bobConfig->setActionMarkAsRead(1);
+        $bobConfig->setListMode(1);
 
         $manager->persist($bobConfig);
 
@@ -46,6 +48,7 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
         $emptyConfig->setLanguage('en');
         $emptyConfig->setPocketConsumerKey(null);
         $emptyConfig->setActionMarkAsRead(0);
+        $emptyConfig->setListMode(0);
 
         $manager->persist($emptyConfig);
 
index 3a3da0246f2d5869537a4b620fcb80782bcee99d..006a18c397a6ceea925ef29dcd5ea254c528eb52 100644 (file)
@@ -41,6 +41,12 @@ class Configuration implements ConfigurationInterface
                 ->end()
                 ->scalarNode('fetching_error_message')
                 ->end()
+                ->scalarNode('action_mark_as_read')
+                    ->defaultValue(1)
+                ->end()
+                ->scalarNode('list_mode')
+                    ->defaultValue(1)
+                ->end()
             ->end()
         ;
 
index b4992d545066506cf4824d0357977f6dfc08ac2b..aa9ee339adebd24a1e7d9282eb6b70714396e740 100644 (file)
@@ -23,6 +23,8 @@ class WallabagCoreExtension extends Extension
         $container->setParameter('wallabag_core.version', $config['version']);
         $container->setParameter('wallabag_core.paypal_url', $config['paypal_url']);
         $container->setParameter('wallabag_core.cache_lifetime', $config['cache_lifetime']);
+        $container->setParameter('wallabag_core.action_mark_as_read', $config['action_mark_as_read']);
+        $container->setParameter('wallabag_core.list_mode', $config['list_mode']);
         $container->setParameter('wallabag_core.fetching_error_message', $config['fetching_error_message']);
 
         $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
index 28914cc1949efb94ec3cb59fe688f6e1cd4a5da8..72651b19e1af2e17542c6199876b825f080d0267 100644 (file)
@@ -28,6 +28,7 @@ class TaggingRule
      * @var string
      *
      * @Assert\NotBlank()
+     * @Assert\Length(max=255)
      * @RulerZAssert\ValidRule(
      *  allowed_variables={"title", "url", "isArchived", "isStared", "content", "language", "mimetype", "readingTime", "domainName"},
      *  allowed_operators={">", "<", ">=", "<=", "=", "is", "!=", "and", "not", "or", "matches"}
index fd059325458892c33dcaf576593839e42766d5b6..0130bd2b21ccc7474db07994f26d7dbd14fafa34 100644 (file)
@@ -21,14 +21,16 @@ class ContentProxy
     protected $logger;
     protected $tagRepository;
     protected $mimeGuesser;
+    protected $fetchingErrorMessage;
 
-    public function __construct(Graby $graby, RuleBasedTagger $tagger, TagRepository $tagRepository, LoggerInterface $logger)
+    public function __construct(Graby $graby, RuleBasedTagger $tagger, TagRepository $tagRepository, LoggerInterface $logger, $fetchingErrorMessage)
     {
         $this->graby = $graby;
         $this->tagger = $tagger;
         $this->logger = $logger;
         $this->tagRepository = $tagRepository;
         $this->mimeGuesser = new MimeTypeExtensionGuesser();
+        $this->fetchingErrorMessage = $fetchingErrorMessage;
     }
 
     /**
@@ -48,7 +50,13 @@ class ContentProxy
     {
         // do we have to fetch the content or the provided one is ok?
         if (empty($content) || false === $this->validateContent($content)) {
-            $content = $this->graby->fetchContent($url);
+            $fetchedContent = $this->graby->fetchContent($url);
+
+            // when content is imported, we have information in $content
+            // in case fetching content goes bad, we'll keep the imported information instead of overriding them
+            if (empty($content) || $fetchedContent['html'] !== $this->fetchingErrorMessage) {
+                $content = $fetchedContent;
+            }
         }
 
         $title = $content['title'];
@@ -58,7 +66,7 @@ class ContentProxy
 
         $html = $content['html'];
         if (false === $html) {
-            $html = '<p>Unable to retrieve readable content.</p>';
+            $html = $this->fetchingErrorMessage;
 
             if (isset($content['open_graph']['og_description'])) {
                 $html .= '<p><i>But we found a short description: </i></p>';
@@ -71,8 +79,8 @@ class ContentProxy
         $entry->setContent($html);
         $entry->setHttpStatus(isset($content['status']) ? $content['status'] : '');
 
-        $entry->setLanguage($content['language']);
-        $entry->setMimetype($content['content_type']);
+        $entry->setLanguage(isset($content['language']) ? $content['language'] : '');
+        $entry->setMimetype(isset($content['content_type']) ? $content['content_type'] : '');
         $entry->setReadingTime(Utils::getReadingTime($html));
 
         $domainName = parse_url($entry->getUrl(), PHP_URL_HOST);
@@ -85,7 +93,7 @@ class ContentProxy
         }
 
         // if content is an image define as a preview too
-        if (in_array($this->mimeGuesser->guess($content['content_type']), ['jpeg', 'jpg', 'gif', 'png'], true)) {
+        if (isset($content['content_type']) && in_array($this->mimeGuesser->guess($content['content_type']), ['jpeg', 'jpg', 'gif', 'png'], true)) {
             $entry->setPreviewPicture($content['url']);
         }
 
index 264bc6a3eba7cb30ddedcad79821de83dac8341a..c83f96187f8a2c9b01479ae2a15cc34467065231 100644 (file)
@@ -36,7 +36,7 @@ class DownloadImages
     {
         // if folder doesn't exist, attempt to create one and store the folder name in property $folder
         if (!file_exists($this->baseFolder)) {
-            mkdir($this->baseFolder, 0777, true);
+            mkdir($this->baseFolder, 0755, true);
         }
     }
 
index 47e24d6b4796a572fac31fbb0de3636630441d3e..553ad6abadd7f0c91f687ad4edebe7d5a7fbd0db 100644 (file)
@@ -20,8 +20,7 @@ class EntryRepository extends EntityRepository
     private function getBuilderByUser($userId)
     {
         return $this->createQueryBuilder('e')
-            ->leftJoin('e.user', 'u')
-            ->andWhere('u.id = :userId')->setParameter('userId', $userId)
+            ->andWhere('e.user = :userId')->setParameter('userId', $userId)
             ->orderBy('e.createdAt', 'desc')
         ;
     }
index 6068e84cd80081200549c00bd3006533d2818a0f..52ac90fd4781fcd53b59a36cf304b90be8bd871d 100644 (file)
@@ -1,8 +1,9 @@
 parameters:
     addons_url:
         firefox: https://addons.mozilla.org/firefox/addon/wallabag-v2/
-        chrome: https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm
+        chrome: https://chrome.google.com/webstore/detail/wallabagger/gbmgphmejlcoihgedabhgjdkcahacjlj
+        opera: https://addons.opera.com/en/extensions/details/wallabagger/?display=en
         f_droid: https://f-droid.org/app/fr.gaulupeau.apps.InThePoche
         google_play: https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche
-        ios: https://itunes.apple.com/app/wallabag/id828331015?mt=8
+        ios: https://itunes.apple.com/app/wallabag-2/id1170800946?mt=8
         windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646
index bcf0c9cab338748831df21ba5f2164b9ae385ca5..fadd5e490d4083048e3599cb9359826c54f423cb 100644 (file)
@@ -86,6 +86,7 @@ services:
             - "@wallabag_core.rule_based_tagger"
             - "@wallabag_core.tag_repository"
             - "@logger"
+            - '%wallabag_core.fetching_error_message%'
 
     wallabag_core.rule_based_tagger:
         class: Wallabag\CoreBundle\Helper\RuleBasedTagger
index c9e219599612e7a63eb0cc78d536fc3c3bfe60ee..3380edcad02c74159c5ad472a42ab3c4f9ca0407 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Standardudvidelse til Firefox'
         chrome: 'Chrome-udvidelse'
+        opera: 'Opera-udvidelse'
     mobile_apps:
         android:
             via_f_droid: 'via F-Droid'
index b84bd9d395f75e4ae8889a801982cdaa281eb1d6..cfa11e82e9fbc08ba85a3b47450f0daa887b2be4 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Firefox-Erweiterung'
         chrome: 'Chrome-Erweiterung'
+        opera: 'Opera-Erweiterung'
     mobile_apps:
         android:
             via_f_droid: 'via F-Droid'
index 4b92fe97d37d8ec960edd986052a20549c26c27f..673a0a169c4f44956839bb55d992daa9427ecdc9 100644 (file)
@@ -283,8 +283,9 @@ howto:
     form:
         description: 'Thanks to this form'
     browser_addons:
-        firefox: 'Standard Firefox Add-On'
-        chrome: 'Chrome Extension'
+        firefox: 'Firefox addon'
+        chrome: 'Chrome addon'
+        opera: 'Opera addon'
     mobile_apps:
         android:
             via_f_droid: 'via F-Droid'
index 02ce7e19bd13bb35a0be21a18dfa9b47e0764058..d08edd6e5c4929d900598d8e37b3aceaedb99875 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Extensión Firefox'
         chrome: 'Extensión Chrome'
+        opera: 'Extensión Opera'
     mobile_apps:
         android:
             via_f_droid: 'via F-Droid'
index 99c0f71b63a04d65a8282c51d89f4904d01b381c..ad6144b8f99a1ffad3e5e39657e8c3455738713b 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'افزونهٔ فایرفاکس'
         chrome: 'افزونهٔ کروم'
+        # opera: 'Opera addon'
     mobile_apps:
         android:
             via_f_droid: 'از راه F-Droid'
index 5579bf1fad0bbbb5b5da7785aa34cdeee8b6e2a9..f7371d3eb72e23fe8b88a6d92b316f0dd5630a2f 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: "Extension Firefox"
         chrome: "Extension Chrome"
+        opera: "Extension Opera"
     mobile_apps:
         android:
             via_f_droid: "via F-Droid"
index 92ccef687c89d92eb23b66d403d704ffff5705f8..bbb526dc9669a77db41cda7a6bf5a3c0f23f66d1 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Add-On di Firefox'
         chrome: 'Estensione di Chrome'
+        opera: 'Estensione di Opera'
     mobile_apps:
         android:
             via_f_droid: 'via F-Droid'
index 9ef3b475425bf74d1642dd4edd01f166a2cf9dae..33c1a6607a9a4fc8808dcd3f25b3032fefe85095 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Extension Firefox'
         chrome: 'Extension Chrome'
+        opera: 'Extension Opera'
     mobile_apps:
         android:
             via_f_droid: 'via F-Droid'
index 9e3726a567b6767a0dbe7694ab039084c8845bd5..1eb83d5394bf5a9bee27d7a9d3d0920b32f6c68b 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Standardowe rozszerzenie dla Firefox'
         chrome: 'Rozszerzenie dla Chrome'
+        opera: 'Rozszerzenie dla Opera'
     mobile_apps:
         android:
             via_f_droid: 'w F-Droid'
index abe51305f3a5ce2b93fe3d5723c13845c9bbef1b..f58b211591801918593d05b9ed704878d9888f82 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Extensão padrão do Firefox'
         chrome: 'Extensão do Chrome'
+        opera: 'Extensão do Opera'
     mobile_apps:
         android:
             via_f_droid: 'via F-Droid'
index 88780b542c398568e71d7a01995cc80a8195a86d..b9a57e361b6cd4b3ebcfbec01de77675c3b3b2df 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Add-On standard de Firefox'
         chrome: 'Extensie Chrome'
+        opera: 'Extensie Opera'
     mobile_apps:
         android:
             via_f_droid: 'prin F-Droid'
index db0a9bbfe3e5d9308bb4bbaeda1bffeb52d2d3d8..ec21c014b3e71d90a127a591d330dfdd49ba5be7 100644 (file)
@@ -285,6 +285,7 @@ howto:
     browser_addons:
         firefox: 'Standart Firefox Eklentisi'
         chrome: 'Chrome Eklentisi'
+        opera: 'Opera Eklentisi'
     mobile_apps:
         android:
             # via_f_droid: 'via F-Droid'
index 3b02993eee3e64ca4c94095c3202adef1359366e..231f9bdf27ed8ffd4628239cd8b6ad12ac1e22ab 100644 (file)
@@ -30,6 +30,7 @@
                                 <ul>
                                     <li><a href="{{ addonsUrl.firefox }}" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
                                     <li><a href="{{ addonsUrl.chrome }}" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
+                                    <li><a href="{{ addonsUrl.opera }}" target="_blank">{{ 'howto.browser_addons.opera'|trans }}</a></li>
                                 </ul>
                             </div>
 
                             </tbody>
                         </table>
                     </div>
-                    
+
             </div>
         </div>
     </div>
index bed0fdec48234341480b11497cb79942af29e305..0cbf1999d1e826ff36ab411889999c1ba7146533 100644 (file)
         <article>
             {{ entry.content | raw }}
         </article>
+
+        <div class="fixed-action-btn horizontal click-to-toggle hide-on-large-only">
+            <a class="btn-floating btn-large">
+              <i class="material-icons">menu</i>
+            </a>
+            <ul>
+              <li><a class="btn-floating" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">done</i></a></li>
+              <li><a class="btn-floating" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">star_outline</i></a></li>
+              <li><a class="btn-floating" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons">delete</i></a></li>
+            </ul>
+        </div>
     </div>
 
 <script id="annotationroutes" type="application/json">
index e5bfc62c734b336ceefb1c0e743b5409eb29cbf9..131fbf265ffb32965b775b3ff65f9482603a3711 100644 (file)
@@ -19,8 +19,6 @@
             Materialize.toast('{{ flashMessage|trans }}', 4000);
         </script>
     {% endfor %}
-
-    {{ render(controller("WallabagImportBundle:Import:checkQueue")) }}
 {% endblock %}
 
 {% block menu %}
index f793a31423d242e64a463e6f847c9a410c7c0448..2d06af44732c4480c698b95b3339f1af1039a62c 100644 (file)
@@ -36,7 +36,7 @@ class RedisWorkerCommand extends ContainerAwareCommand
         $worker = new QueueWorker(
             $this->getContainer()->get('wallabag_import.queue.redis.'.$serviceName),
             $this->getContainer()->get('wallabag_import.consumer.redis.'.$serviceName),
-            $input->getOption('maxIterations')
+            (int) $input->getOption('maxIterations')
         );
 
         $worker->start();
index d7620bcb76139676611610bc92a6fcdc7437072b..2667890f0287791bd47ce3418ab1017f2616be6f 100644 (file)
@@ -37,9 +37,10 @@ class ChromeImport extends BrowserImport
     {
         $data = [
             'title' => $entry['name'],
-            'html' => '',
+            'html' => false,
             'url' => $entry['url'],
-            'is_archived' => $this->markAsRead,
+            'is_archived' => (int) $this->markAsRead,
+            'is_starred' => false,
             'tags' => '',
             'created_at' => substr($entry['date_added'], 0, 10),
         ];
index e010f5a46f5124cf51fd9ceb85ded702005d078b..c50c69b3aa42880c9b9cd03a41c03c467add59fa 100644 (file)
@@ -37,9 +37,10 @@ class FirefoxImport extends BrowserImport
     {
         $data = [
             'title' => $entry['title'],
-            'html' => '',
+            'html' => false,
             'url' => $entry['uri'],
-            'is_archived' => $this->markAsRead,
+            'is_archived' => (int) $this->markAsRead,
+            'is_starred' => false,
             'tags' => '',
             'created_at' => substr($entry['dateAdded'], 0, 10),
         ];
index cf4c785ce8dca325d3ab0b93a07a3b7e09b484bc..70a53f1af5309e64f1734ede1eb8686facc88b84 100644 (file)
@@ -74,8 +74,7 @@ class InstapaperImport extends AbstractImport
                 'status' => $data[3],
                 'is_archived' => $data[3] === 'Archive' || $data[3] === 'Starred',
                 'is_starred' => $data[3] === 'Starred',
-                'content_type' => '',
-                'language' => '',
+                'html' => false,
             ];
         }
         fclose($handle);
index 9bcfbc369d823b06411cd19d6d1936539deac0ec..d9865534ae8fe08a8e5d6d47ec90d595b19b6c0e 100644 (file)
@@ -98,8 +98,6 @@ class PinboardImport extends AbstractImport
         $data = [
             'title' => $importedEntry['description'],
             'url' => $importedEntry['href'],
-            'content_type' => '',
-            'language' => '',
             'is_archived' => ('no' === $importedEntry['toread']) || $this->markAsRead,
             'is_starred' => false,
             'created_at' => $importedEntry['time'],
index b8c0f777094e8d33a3645d528560df0d19812183..de320d23907070b53e4cdaa45c8909bfdab18be1 100644 (file)
@@ -98,11 +98,10 @@ class ReadabilityImport extends AbstractImport
         $data = [
             'title' => $importedEntry['article__title'],
             'url' => $importedEntry['article__url'],
-            'content_type' => '',
-            'language' => '',
             'is_archived' => $importedEntry['archive'] || $this->markAsRead,
             'is_starred' => $importedEntry['favorite'],
             'created_at' => $importedEntry['date_added'],
+            'html' => false,
         ];
 
         $entry = new Entry($this->user);
index 4f0010624d047131046697f7929f7baf632e16ab..59e3ce026c0ae6d76b79c5f9535d36be11ece5d1 100644 (file)
@@ -37,8 +37,6 @@ class WallabagV1Import extends WallabagImport
             'title' => $entry['title'],
             'html' => $entry['content'],
             'url' => $entry['url'],
-            'content_type' => '',
-            'language' => '',
             'is_archived' => $entry['is_read'] || $this->markAsRead,
             'is_starred' => $entry['is_fav'],
             'tags' => '',
index 37c8ca147940e044a6462e59b27722cf398bc4c9..d2a89d79aa77dd2e54abe2ddd479b5880fa36b75 100644 (file)
@@ -36,7 +36,8 @@ class WallabagV2Import extends WallabagImport
         return [
             'html' => $entry['content'],
             'content_type' => $entry['mimetype'],
-            'is_archived' => ($entry['is_archived'] || $this->markAsRead),
+            'is_archived' => (int) ($entry['is_archived'] || $this->markAsRead),
+            'is_starred' => false,
         ] + $entry;
     }
 
index b1ec40a6b91376cbd17b706b02dbb6c38f28c1e7..b79a1470b33fb758c5d2c0087c922d84229f75ba 100644 (file)
@@ -2,6 +2,12 @@
 
 {% block title %}{{ 'import.page_title'|trans }}{% endblock %}
 
+{% block messages %}
+    {{ render(controller("WallabagImportBundle:Import:checkQueue")) }}
+
+    {{ parent() }}
+{% endblock %}
+
 {% block content %}
 <div class="row">
     <div class="col s12">
index 8e2f04e9beca05428dc5c0c4d698e0ddb85252c2..0bdd1cae061d365a751911de1fc73f5f34c34e00 100644 (file)
@@ -21,8 +21,10 @@ class CreateConfigListener implements EventSubscriberInterface
     private $rssLimit;
     private $language;
     private $readingSpeed;
+    private $actionMarkAsRead;
+    private $listMode;
 
-    public function __construct(EntityManager $em, $theme, $itemsOnPage, $rssLimit, $language, $readingSpeed)
+    public function __construct(EntityManager $em, $theme, $itemsOnPage, $rssLimit, $language, $readingSpeed, $actionMarkAsRead, $listMode)
     {
         $this->em = $em;
         $this->theme = $theme;
@@ -30,6 +32,8 @@ class CreateConfigListener implements EventSubscriberInterface
         $this->rssLimit = $rssLimit;
         $this->language = $language;
         $this->readingSpeed = $readingSpeed;
+        $this->actionMarkAsRead = $actionMarkAsRead;
+        $this->listMode = $listMode;
     }
 
     public static function getSubscribedEvents()
@@ -51,6 +55,8 @@ class CreateConfigListener implements EventSubscriberInterface
         $config->setRssLimit($this->rssLimit);
         $config->setLanguage($this->language);
         $config->setReadingSpeed($this->readingSpeed);
+        $config->setActionMarkAsRead($this->actionMarkAsRead);
+        $config->setListMode($this->listMode);
 
         $this->em->persist($config);
         $this->em->flush();
index 164a25ec1e77060ec32d9cadcaa61ee1c89fc49b..72f6f12c1bb5f47c4191977ae41bb77af17c8f73 100644 (file)
@@ -31,5 +31,7 @@ services:
             - "%wallabag_core.rss_limit%"
             - "%wallabag_core.language%"
             - "%wallabag_core.reading_speed%"
+            - "%wallabag_core.action_mark_as_read%"
+            - "%wallabag_core.list_mode%"
         tags:
             - { name: kernel.event_subscriber }
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.de.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.de.yml
new file mode 100644 (file)
index 0000000..4efaaab
--- /dev/null
@@ -0,0 +1,11 @@
+# Two factor mail
+auth_code:
+    on: 'an'
+    mailer:
+        subject: 'wallabag Authentifizierungcode'
+        body:
+            hello: "Hi %user%,"
+            first_para: "da du die Zwei-Faktor-Authentifizierung in deinem wallabag Konto aktiviert hast, und du dich gerade von einem neuen Gerät (Computer, Handy, etc.) anmeldest, senden wir dir einen Code, um deinen Zugriff zu prüfen."
+            second_para: "Hier ist der Code:"
+            support: "Bitte zögere nicht, Kontakt mit uns aufzunehmen falls du ein Problem hast:"
+            signature: "Das wallabag Team"
index 85f2ea9cc5fdf7769dd848a54d2afc02fd850ab2..ee0a27d57af9cf5e9d436a3dcf8ac7614ea9abaf 100644 (file)
@@ -2,7 +2,7 @@
 auth_code:
     on: 'on'
     mailer:
-        subject: 'Wallabag authentication Code'
+        subject: 'wallabag authentication code'
         body:
             hello: "Hi %user%,"
             first_para: "Since you enable two factor authentication on your wallabag account and you just logged in from a new device (computer, phone, etc.), we send you a code to validate your connection."
index 3731f13b5cbc1df688e005632290e4827fdd53ef..5d1f22b7945469ab44ba1beba0c5c2c6acb775c4 100644 (file)
@@ -74,7 +74,7 @@
 
                 <table cellpadding="0" cellspacing="0" border="0" align="center" id="card">
                     <tr>
-                        <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ asset('bundles/wallabagcore/themes/material/img/logo-other_themes.png') }}" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td>
+                        <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ absolute_url(asset('bundles/wallabagcore/themes/_global/img/logo-other_themes.png')) }}" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td>
                         <td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc">
                             <h1>wallabag</h1>
                             <h5>{{ "auth_code.on"|trans({}, 'wallabag_user') }} {{ wallabag_url }}</h5>
index 447feb4f9741290d47c9531251d45000fa924917..beb0598a969f32dcbe8295a47e98cec18e3adb1a 100644 (file)
@@ -515,6 +515,29 @@ class ConfigControllerTest extends WallabagCoreTestCase
         }
     }
 
+    public function testTaggingRuleTooLong()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        $crawler = $client->request('GET', '/config');
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $form = $crawler->filter('button[id=tagging_rule_save]')->form();
+
+        $crawler = $client->submit($form, [
+            'tagging_rule[rule]' => str_repeat('title', 60),
+            'tagging_rule[tags]' => 'cool tag',
+        ]);
+
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
+
+        $this->assertContains('255 characters', $body[0]);
+    }
+
     public function testDeletingTaggingRuleFromAnOtherUser()
     {
         $this->logInAs('bob');
index 33b3ff2a53d4e6d58f64a242caf9831a12fe40cc..2ca13b9149f7b4c589af233cf8d7cfc3e225dc5f 100644 (file)
@@ -10,6 +10,8 @@ use Wallabag\UserBundle\Entity\User;
 
 class ContentProxyTest extends \PHPUnit_Framework_TestCase
 {
+    private $fetchingErrorMessage = 'wallabag can\'t retrieve contents for this article. Please <a href="http://doc.wallabag.org/en/master/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>.';
+
     public function testWithBadUrl()
     {
         $tagger = $this->getTaggerMock();
@@ -31,12 +33,12 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
+        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = $proxy->updateEntry(new Entry(new User()), 'http://user@:80');
 
         $this->assertEquals('http://user@:80', $entry->getUrl());
         $this->assertEmpty($entry->getTitle());
-        $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent());
+        $this->assertEquals($this->fetchingErrorMessage, $entry->getContent());
         $this->assertEmpty($entry->getPreviewPicture());
         $this->assertEmpty($entry->getMimetype());
         $this->assertEmpty($entry->getLanguage());
@@ -65,12 +67,12 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
                 'language' => '',
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
+        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
 
         $this->assertEquals('http://0.0.0.0', $entry->getUrl());
         $this->assertEmpty($entry->getTitle());
-        $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent());
+        $this->assertEquals($this->fetchingErrorMessage, $entry->getContent());
         $this->assertEmpty($entry->getPreviewPicture());
         $this->assertEmpty($entry->getMimetype());
         $this->assertEmpty($entry->getLanguage());
@@ -104,12 +106,12 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
                 ],
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
+        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = $proxy->updateEntry(new Entry(new User()), 'http://domain.io');
 
         $this->assertEquals('http://domain.io', $entry->getUrl());
         $this->assertEquals('my title', $entry->getTitle());
-        $this->assertEquals('<p>Unable to retrieve readable content.</p><p><i>But we found a short description: </i></p>desc', $entry->getContent());
+        $this->assertEquals($this->fetchingErrorMessage . '<p><i>But we found a short description: </i></p>desc', $entry->getContent());
         $this->assertEmpty($entry->getPreviewPicture());
         $this->assertEmpty($entry->getLanguage());
         $this->assertEmpty($entry->getHttpStatus());
@@ -145,7 +147,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
                 ],
             ]);
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
+        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0');
 
         $this->assertEquals('http://1.1.1.1', $entry->getUrl());
@@ -167,7 +169,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
 
         $graby = $this->getMockBuilder('Graby\Graby')->getMock();
 
-        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
+        $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger(), $this->fetchingErrorMessage);
         $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
             'html' => str_repeat('this is my content', 325),
             'title' => 'this is my title',
@@ -197,7 +199,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
             ->will($this->throwException(new \Exception()));
 
         $tagRepo = $this->getTagRepositoryMock();
-        $proxy = new ContentProxy($graby, $tagger, $tagRepo, $this->getLogger());
+        $proxy = new ContentProxy($graby, $tagger, $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
 
         $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
             'html' => str_repeat('this is my content', 325),
@@ -217,7 +219,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $tagRepo = $this->getTagRepositoryMock();
-        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
+        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
 
         $entry = new Entry(new User());
 
@@ -235,7 +237,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $tagRepo = $this->getTagRepositoryMock();
-        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
+        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
 
         $entry = new Entry(new User());
 
@@ -253,7 +255,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $tagRepo = $this->getTagRepositoryMock();
-        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
+        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
 
         $entry = new Entry(new User());
 
@@ -269,7 +271,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $tagRepo = $this->getTagRepositoryMock();
-        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
+        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
 
         $entry = new Entry(new User());
 
@@ -285,7 +287,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $tagRepo = $this->getTagRepositoryMock();
-        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
+        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
 
         $tagEntity = new Tag();
         $tagEntity->setLabel('tag1');
@@ -310,7 +312,7 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
         $tagRepo->expects($this->never())
             ->method('__call');
 
-        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger());
+        $proxy = new ContentProxy($graby, $this->getTaggerMock(), $tagRepo, $this->getLogger(), $this->fetchingErrorMessage);
 
         $tagEntity = new Tag();
         $tagEntity->setLabel('tag1');
index 2c370ed9959743911fbb466219c4b1f3d883ebee..acc3999797a7875a7268b83c52a26b756ad68d50 100644 (file)
@@ -112,7 +112,7 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
             ->get('doctrine.orm.entity_manager')
             ->getRepository('WallabagCoreBundle:Entry')
             ->findByUrlAndUserId(
-                'http://www.framablog.org/index.php/post/2014/02/05/Framabag-service-libre-gratuit-interview-developpeur',
+                'https://framablog.org/2014/02/05/framabag-service-libre-gratuit-interview-developpeur/',
                 $this->getLoggedInUserId()
             );
 
@@ -126,9 +126,9 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
         $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text']));
         $this->assertContains('flashes.import.notice.summary', $body[0]);
 
-        $this->assertEmpty($content->getMimetype(), 'Mimetype for http://www.framablog.org is ok');
-        $this->assertEmpty($content->getPreviewPicture(), 'Preview picture for http://www.framablog.org is ok');
-        $this->assertEmpty($content->getLanguage(), 'Language for http://www.framablog.org is ok');
+        $this->assertNotEmpty($content->getMimetype(), 'Mimetype for http://www.framablog.org is ok');
+        $this->assertNotEmpty($content->getPreviewPicture(), 'Preview picture for http://www.framablog.org is ok');
+        $this->assertNotEmpty($content->getLanguage(), 'Language for http://www.framablog.org is ok');
         $this->assertEquals(1, count($content->getTags()));
         $this->assertInstanceOf(\DateTime::class, $content->getCreatedAt());
     }
index a78b77bc37c332c628e7b405732a3339413899db..01796dedd4b7d95ce682b6616c3f336ec69b94e7 100644 (file)
@@ -31,6 +31,8 @@ class CreateConfigListenerTest extends \PHPUnit_Framework_TestCase
             20,
             50,
             'fr',
+            1,
+            1,
             1
         );