diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/DoctrineMigrations/Version20160812120952.php | 2 | ||||
-rw-r--r-- | app/DoctrineMigrations/Version20161001072726.php | 63 | ||||
-rw-r--r-- | app/DoctrineMigrations/Version20161022134138.php | 77 | ||||
-rw-r--r-- | app/config/config.yml | 31 | ||||
-rw-r--r-- | app/config/config_test.yml | 2 | ||||
-rw-r--r-- | app/config/parameters.yml.dist | 14 | ||||
-rw-r--r-- | app/config/parameters_test.yml | 1 | ||||
-rw-r--r-- | app/config/routing_rest.yml | 5 | ||||
-rw-r--r-- | app/config/tests/parameters_test.mysql.yml | 1 | ||||
-rw-r--r-- | app/config/tests/parameters_test.pgsql.yml | 1 | ||||
-rw-r--r-- | app/config/tests/parameters_test.sqlite.yml | 1 |
11 files changed, 185 insertions, 13 deletions
diff --git a/app/DoctrineMigrations/Version20160812120952.php b/app/DoctrineMigrations/Version20160812120952.php index 3aafea64..39423e2f 100644 --- a/app/DoctrineMigrations/Version20160812120952.php +++ b/app/DoctrineMigrations/Version20160812120952.php | |||
@@ -33,9 +33,11 @@ class Version20160812120952 extends AbstractMigration implements ContainerAwareI | |||
33 | case 'sqlite': | 33 | case 'sqlite': |
34 | $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext DEFAULT NULL'); | 34 | $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext DEFAULT NULL'); |
35 | break; | 35 | break; |
36 | |||
36 | case 'mysql': | 37 | case 'mysql': |
37 | $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext COLLATE \'utf8_unicode_ci\' DEFAULT NULL'); | 38 | $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name longtext COLLATE \'utf8_unicode_ci\' DEFAULT NULL'); |
38 | break; | 39 | break; |
40 | |||
39 | case 'postgresql': | 41 | case 'postgresql': |
40 | $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name text DEFAULT NULL'); | 42 | $this->addSql('ALTER TABLE '.$this->getTable('oauth2_clients').' ADD name text DEFAULT NULL'); |
41 | } | 43 | } |
diff --git a/app/DoctrineMigrations/Version20161001072726.php b/app/DoctrineMigrations/Version20161001072726.php new file mode 100644 index 00000000..237db932 --- /dev/null +++ b/app/DoctrineMigrations/Version20161001072726.php | |||
@@ -0,0 +1,63 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Application\Migrations; | ||
4 | |||
5 | use Doctrine\DBAL\Migrations\AbstractMigration; | ||
6 | use Doctrine\DBAL\Schema\Schema; | ||
7 | use Symfony\Component\DependencyInjection\ContainerAwareInterface; | ||
8 | use Symfony\Component\DependencyInjection\ContainerInterface; | ||
9 | |||
10 | class Version20161001072726 extends AbstractMigration implements ContainerAwareInterface | ||
11 | { | ||
12 | /** | ||
13 | * @var ContainerInterface | ||
14 | */ | ||
15 | private $container; | ||
16 | |||
17 | public function setContainer(ContainerInterface $container = null) | ||
18 | { | ||
19 | $this->container = $container; | ||
20 | } | ||
21 | |||
22 | private function getTable($tableName) | ||
23 | { | ||
24 | return $this->container->getParameter('database_table_prefix') . $tableName; | ||
25 | } | ||
26 | |||
27 | /** | ||
28 | * @param Schema $schema | ||
29 | */ | ||
30 | public function up(Schema $schema) | ||
31 | { | ||
32 | $this->skipIf($this->connection->getDatabasePlatform()->getName() == 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.'); | ||
33 | |||
34 | // remove all FK from entry_tag | ||
35 | $query = $this->connection->query("SELECT CONSTRAINT_NAME FROM information_schema.key_column_usage WHERE TABLE_NAME = '".$this->getTable('entry_tag')."' AND CONSTRAINT_NAME LIKE 'FK_%' AND TABLE_SCHEMA = '".$this->connection->getDatabase()."'"); | ||
36 | $query->execute(); | ||
37 | |||
38 | foreach ($query->fetchAll() as $fk) { | ||
39 | $this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' DROP FOREIGN KEY '.$fk['CONSTRAINT_NAME']); | ||
40 | } | ||
41 | |||
42 | $this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' ADD CONSTRAINT FK_entry_tag_entry FOREIGN KEY (entry_id) REFERENCES '.$this->getTable('entry').' (id) ON DELETE CASCADE'); | ||
43 | $this->addSql('ALTER TABLE '.$this->getTable('entry_tag').' ADD CONSTRAINT FK_entry_tag_tag FOREIGN KEY (tag_id) REFERENCES '.$this->getTable('tag').' (id) ON DELETE CASCADE'); | ||
44 | |||
45 | // remove entry FK from annotation | ||
46 | $query = $this->connection->query("SELECT CONSTRAINT_NAME FROM information_schema.key_column_usage WHERE TABLE_NAME = '".$this->getTable('annotation')."' AND CONSTRAINT_NAME LIKE 'FK_%' and COLUMN_NAME = 'entry_id' AND TABLE_SCHEMA = '".$this->connection->getDatabase()."'"); | ||
47 | $query->execute(); | ||
48 | |||
49 | foreach ($query->fetchAll() as $fk) { | ||
50 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' DROP FOREIGN KEY '.$fk['CONSTRAINT_NAME']); | ||
51 | } | ||
52 | |||
53 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' ADD CONSTRAINT FK_annotation_entry FOREIGN KEY (entry_id) REFERENCES '.$this->getTable('entry').' (id) ON DELETE CASCADE'); | ||
54 | } | ||
55 | |||
56 | /** | ||
57 | * @param Schema $schema | ||
58 | */ | ||
59 | public function down(Schema $schema) | ||
60 | { | ||
61 | throw new SkipMigrationException('Too complex ...'); | ||
62 | } | ||
63 | } | ||
diff --git a/app/DoctrineMigrations/Version20161022134138.php b/app/DoctrineMigrations/Version20161022134138.php new file mode 100644 index 00000000..5cce55a5 --- /dev/null +++ b/app/DoctrineMigrations/Version20161022134138.php | |||
@@ -0,0 +1,77 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Application\Migrations; | ||
4 | |||
5 | use Doctrine\DBAL\Migrations\AbstractMigration; | ||
6 | use Doctrine\DBAL\Schema\Schema; | ||
7 | use Symfony\Component\DependencyInjection\ContainerAwareInterface; | ||
8 | use Symfony\Component\DependencyInjection\ContainerInterface; | ||
9 | |||
10 | class Version20161022134138 extends AbstractMigration implements ContainerAwareInterface | ||
11 | { | ||
12 | /** | ||
13 | * @var ContainerInterface | ||
14 | */ | ||
15 | private $container; | ||
16 | |||
17 | public function setContainer(ContainerInterface $container = null) | ||
18 | { | ||
19 | $this->container = $container; | ||
20 | } | ||
21 | |||
22 | private function getTable($tableName) | ||
23 | { | ||
24 | return $this->container->getParameter('database_table_prefix') . $tableName; | ||
25 | } | ||
26 | |||
27 | /** | ||
28 | * @param Schema $schema | ||
29 | */ | ||
30 | public function up(Schema $schema) | ||
31 | { | ||
32 | $this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL'); | ||
33 | |||
34 | $this->addSql('ALTER DATABASE '.$this->container->getParameter('database_name').' CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;'); | ||
35 | |||
36 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
37 | $this->addSql('ALTER TABLE '.$this->getTable('entry').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
38 | $this->addSql('ALTER TABLE '.$this->getTable('tag').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
39 | $this->addSql('ALTER TABLE '.$this->getTable('user').' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
40 | |||
41 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `text` `text` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
42 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `quote` `quote` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
43 | |||
44 | $this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `title` `title` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
45 | $this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `content` `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
46 | |||
47 | $this->addSql('ALTER TABLE '.$this->getTable('tag').' CHANGE `label` `label` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
48 | |||
49 | $this->addSql('ALTER TABLE '.$this->getTable('user').' CHANGE `name` `name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | ||
50 | } | ||
51 | |||
52 | /** | ||
53 | * @param Schema $schema | ||
54 | */ | ||
55 | public function down(Schema $schema) | ||
56 | { | ||
57 | $this->skipIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'This migration only apply to MySQL'); | ||
58 | |||
59 | $this->addSql('ALTER DATABASE '.$this->container->getParameter('database_name').' CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;'); | ||
60 | |||
61 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
62 | $this->addSql('ALTER TABLE '.$this->getTable('entry').' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
63 | $this->addSql('ALTER TABLE '.$this->getTable('tag').' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
64 | $this->addSql('ALTER TABLE '.$this->getTable('user').' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
65 | |||
66 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `text` `text` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
67 | $this->addSql('ALTER TABLE '.$this->getTable('annotation').' CHANGE `quote` `quote` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
68 | |||
69 | $this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `title` `title` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
70 | $this->addSql('ALTER TABLE '.$this->getTable('entry').' CHANGE `content` `content` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
71 | |||
72 | $this->addSql('ALTER TABLE '.$this->getTable('tag').' CHANGE `label` `label` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
73 | |||
74 | $this->addSql('ALTER TABLE '.$this->getTable('user').' CHANGE `name` `name` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); | ||
75 | |||
76 | } | ||
77 | } | ||
diff --git a/app/config/config.yml b/app/config/config.yml index a56cbdd9..dfb0e3b2 100644 --- a/app/config/config.yml +++ b/app/config/config.yml | |||
@@ -76,7 +76,7 @@ doctrine: | |||
76 | dbname: "%database_name%" | 76 | dbname: "%database_name%" |
77 | user: "%database_user%" | 77 | user: "%database_user%" |
78 | password: "%database_password%" | 78 | password: "%database_password%" |
79 | charset: UTF8 | 79 | charset: "%database_charset%" |
80 | path: "%database_path%" | 80 | path: "%database_path%" |
81 | unix_socket: "%database_socket%" | 81 | unix_socket: "%database_socket%" |
82 | server_version: 5.6 | 82 | server_version: 5.6 |
@@ -113,12 +113,26 @@ swiftmailer: | |||
113 | fos_rest: | 113 | fos_rest: |
114 | param_fetcher_listener: true | 114 | param_fetcher_listener: true |
115 | body_listener: true | 115 | body_listener: true |
116 | format_listener: true | ||
117 | view: | 116 | view: |
117 | mime_types: | ||
118 | csv: | ||
119 | - 'text/csv' | ||
120 | - 'text/plain' | ||
121 | pdf: | ||
122 | - 'application/pdf' | ||
123 | epub: | ||
124 | - 'application/epub+zip' | ||
125 | mobi: | ||
126 | - 'application/x-mobipocket-ebook' | ||
118 | view_response_listener: 'force' | 127 | view_response_listener: 'force' |
119 | formats: | 128 | formats: |
120 | xml: true | 129 | xml: true |
121 | json : true | 130 | json: true |
131 | txt: true | ||
132 | csv: true | ||
133 | pdf: true | ||
134 | epub: true | ||
135 | mobi: true | ||
122 | templating_formats: | 136 | templating_formats: |
123 | html: true | 137 | html: true |
124 | force_redirects: | 138 | force_redirects: |
@@ -127,10 +141,21 @@ fos_rest: | |||
127 | default_engine: twig | 141 | default_engine: twig |
128 | routing_loader: | 142 | routing_loader: |
129 | default_format: json | 143 | default_format: json |
144 | format_listener: | ||
145 | enabled: true | ||
146 | rules: | ||
147 | - { path: "^/api/entries/([0-9]+)/export.(.*)", priorities: ['epub', 'mobi', 'pdf', 'txt', 'csv'], fallback_format: false, prefer_extension: false } | ||
148 | - { path: "^/api", priorities: ['json', 'xml'], fallback_format: false, prefer_extension: false } | ||
149 | - { path: "^/annotations", priorities: ['json', 'xml'], fallback_format: false, prefer_extension: false } | ||
150 | # for an unknown reason, EACH REQUEST goes to FOS\RestBundle\EventListener\FormatListener | ||
151 | # so we need to add custom rule for custom api export but also for all other routes of the application... | ||
152 | - { path: '^/', priorities: ['text/html', '*/*'], fallback_format: html, prefer_extension: false } | ||
130 | 153 | ||
131 | nelmio_api_doc: | 154 | nelmio_api_doc: |
132 | sandbox: | 155 | sandbox: |
133 | enabled: false | 156 | enabled: false |
157 | cache: | ||
158 | enabled: true | ||
134 | name: wallabag API documentation | 159 | name: wallabag API documentation |
135 | 160 | ||
136 | nelmio_cors: | 161 | nelmio_cors: |
diff --git a/app/config/config_test.yml b/app/config/config_test.yml index 3eab6fb2..f5e2c25e 100644 --- a/app/config/config_test.yml +++ b/app/config/config_test.yml | |||
@@ -28,7 +28,7 @@ doctrine: | |||
28 | dbname: "%test_database_name%" | 28 | dbname: "%test_database_name%" |
29 | user: "%test_database_user%" | 29 | user: "%test_database_user%" |
30 | password: "%test_database_password%" | 30 | password: "%test_database_password%" |
31 | charset: UTF8 | 31 | charset: "%test_database_charset%" |
32 | path: "%test_database_path%" | 32 | path: "%test_database_path%" |
33 | orm: | 33 | orm: |
34 | metadata_cache_driver: | 34 | metadata_cache_driver: |
diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist index ece4903a..7a22cb98 100644 --- a/app/config/parameters.yml.dist +++ b/app/config/parameters.yml.dist | |||
@@ -19,16 +19,18 @@ parameters: | |||
19 | database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite" | 19 | database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite" |
20 | database_table_prefix: wallabag_ | 20 | database_table_prefix: wallabag_ |
21 | database_socket: null | 21 | database_socket: null |
22 | # with MySQL, use "utf8mb4" if you got problem with content with emojis | ||
23 | database_charset: utf8 | ||
22 | 24 | ||
23 | mailer_transport: smtp | 25 | mailer_transport: smtp |
24 | mailer_host: 127.0.0.1 | 26 | mailer_host: 127.0.0.1 |
25 | mailer_user: ~ | 27 | mailer_user: ~ |
26 | mailer_password: ~ | 28 | mailer_password: ~ |
27 | 29 | ||
28 | locale: en | 30 | locale: en |
29 | 31 | ||
30 | # A secret key that's used to generate certain security-related tokens | 32 | # A secret key that's used to generate certain security-related tokens |
31 | secret: ovmpmAWXRCabNlMgzlzFXDYmCFfzGv | 33 | secret: ovmpmAWXRCabNlMgzlzFXDYmCFfzGv |
32 | 34 | ||
33 | # two factor stuff | 35 | # two factor stuff |
34 | twofactor_auth: true | 36 | twofactor_auth: true |
diff --git a/app/config/parameters_test.yml b/app/config/parameters_test.yml index 2943b27a..5f2e25bb 100644 --- a/app/config/parameters_test.yml +++ b/app/config/parameters_test.yml | |||
@@ -6,3 +6,4 @@ parameters: | |||
6 | test_database_user: null | 6 | test_database_user: null |
7 | test_database_password: null | 7 | test_database_password: null |
8 | test_database_path: '%kernel.root_dir%/../data/db/wallabag_test.sqlite' | 8 | test_database_path: '%kernel.root_dir%/../data/db/wallabag_test.sqlite' |
9 | test_database_charset: utf8 | ||
diff --git a/app/config/routing_rest.yml b/app/config/routing_rest.yml index 52d395dd..29f4ab14 100644 --- a/app/config/routing_rest.yml +++ b/app/config/routing_rest.yml | |||
@@ -1,4 +1,3 @@ | |||
1 | Rest_Wallabag: | 1 | Rest_Wallabag: |
2 | type : rest | 2 | type : rest |
3 | resource: "@WallabagApiBundle/Resources/config/routing_rest.yml" | 3 | resource: "@WallabagApiBundle/Resources/config/routing_rest.yml" |
4 | |||
diff --git a/app/config/tests/parameters_test.mysql.yml b/app/config/tests/parameters_test.mysql.yml index d8512845..bca2d466 100644 --- a/app/config/tests/parameters_test.mysql.yml +++ b/app/config/tests/parameters_test.mysql.yml | |||
@@ -6,3 +6,4 @@ parameters: | |||
6 | test_database_user: root | 6 | test_database_user: root |
7 | test_database_password: ~ | 7 | test_database_password: ~ |
8 | test_database_path: ~ | 8 | test_database_path: ~ |
9 | test_database_charset: utf8mb4 | ||
diff --git a/app/config/tests/parameters_test.pgsql.yml b/app/config/tests/parameters_test.pgsql.yml index 41383868..3e18d4a0 100644 --- a/app/config/tests/parameters_test.pgsql.yml +++ b/app/config/tests/parameters_test.pgsql.yml | |||
@@ -6,3 +6,4 @@ parameters: | |||
6 | test_database_user: travis | 6 | test_database_user: travis |
7 | test_database_password: ~ | 7 | test_database_password: ~ |
8 | test_database_path: ~ | 8 | test_database_path: ~ |
9 | test_database_charset: utf8 | ||
diff --git a/app/config/tests/parameters_test.sqlite.yml b/app/config/tests/parameters_test.sqlite.yml index 1952e3a6..b8a5f41a 100644 --- a/app/config/tests/parameters_test.sqlite.yml +++ b/app/config/tests/parameters_test.sqlite.yml | |||
@@ -6,3 +6,4 @@ parameters: | |||
6 | test_database_user: ~ | 6 | test_database_user: ~ |
7 | test_database_password: ~ | 7 | test_database_password: ~ |
8 | test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite" | 8 | test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite" |
9 | test_database_charset: utf8 | ||