diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/DoctrineMigrations/Version20170719231144.php | 103 | ||||
-rw-r--r-- | app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml | 72 |
2 files changed, 139 insertions, 36 deletions
diff --git a/app/DoctrineMigrations/Version20170719231144.php b/app/DoctrineMigrations/Version20170719231144.php new file mode 100644 index 00000000..0f5fa75a --- /dev/null +++ b/app/DoctrineMigrations/Version20170719231144.php | |||
@@ -0,0 +1,103 @@ | |||
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 | /** | ||
11 | * Changed tags to lowercase. | ||
12 | */ | ||
13 | class Version20170719231144 extends AbstractMigration implements ContainerAwareInterface | ||
14 | { | ||
15 | /** | ||
16 | * @var ContainerInterface | ||
17 | */ | ||
18 | private $container; | ||
19 | |||
20 | public function setContainer(ContainerInterface $container = null) | ||
21 | { | ||
22 | $this->container = $container; | ||
23 | } | ||
24 | |||
25 | /** | ||
26 | * @param Schema $schema | ||
27 | */ | ||
28 | public function up(Schema $schema) | ||
29 | { | ||
30 | $this->skipIf($this->connection->getDatabasePlatform()->getName() === 'sqlite', 'Migration can only be executed safely on \'mysql\' or \'postgresql\'.'); | ||
31 | |||
32 | // Find tags which need to be merged | ||
33 | $dupTags = $this->connection->query(' | ||
34 | SELECT LOWER(label) | ||
35 | FROM ' . $this->getTable('tag') . ' | ||
36 | GROUP BY LOWER(label) | ||
37 | HAVING COUNT(*) > 1' | ||
38 | ); | ||
39 | $dupTags->execute(); | ||
40 | |||
41 | foreach ($dupTags->fetchAll() as $duplicates) { | ||
42 | $label = $duplicates['LOWER(label)']; | ||
43 | |||
44 | // Retrieve all duplicate tags for a given tag | ||
45 | $tags = $this->connection->query(' | ||
46 | SELECT id | ||
47 | FROM ' . $this->getTable('tag') . " | ||
48 | WHERE LOWER(label) = '" . $label . "' | ||
49 | ORDER BY id ASC" | ||
50 | ); | ||
51 | $tags->execute(); | ||
52 | |||
53 | $first = true; | ||
54 | $newId = null; | ||
55 | $ids = []; | ||
56 | |||
57 | foreach ($tags->fetchAll() as $tag) { | ||
58 | // Ignore the first tag as we use it as the new reference tag | ||
59 | if ($first) { | ||
60 | $first = false; | ||
61 | $newId = $tag['id']; | ||
62 | } else { | ||
63 | $ids[] = $tag['id']; | ||
64 | } | ||
65 | } | ||
66 | |||
67 | // Just in case... | ||
68 | if (count($ids) > 0) { | ||
69 | // Merge tags | ||
70 | $this->addSql(' | ||
71 | UPDATE ' . $this->getTable('entry_tag') . ' | ||
72 | SET tag_id = ' . $newId . ' | ||
73 | WHERE tag_id IN (' . implode(',', $ids) . ')' | ||
74 | ); | ||
75 | |||
76 | // Delete unused tags | ||
77 | $this->addSql(' | ||
78 | DELETE FROM ' . $this->getTable('tag') . ' | ||
79 | WHERE id IN (' . implode(',', $ids) . ')' | ||
80 | ); | ||
81 | } | ||
82 | } | ||
83 | |||
84 | // Iterate over all tags to lowercase them | ||
85 | $this->addSql(' | ||
86 | UPDATE ' . $this->getTable('tag') . ' | ||
87 | SET label = LOWER(label)' | ||
88 | ); | ||
89 | } | ||
90 | |||
91 | /** | ||
92 | * @param Schema $schema | ||
93 | */ | ||
94 | public function down(Schema $schema) | ||
95 | { | ||
96 | throw new SkipMigrationException('Too complex ...'); | ||
97 | } | ||
98 | |||
99 | private function getTable($tableName) | ||
100 | { | ||
101 | return $this->container->getParameter('database_table_prefix') . $tableName; | ||
102 | } | ||
103 | } | ||
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml index f57db303..a066c8e3 100644 --- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml +++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.de.yml | |||
@@ -1,36 +1,36 @@ | |||
1 | # settings_changed: Configuration updated | 1 | settings_changed: 'Konfiguration aktualisiert' |
2 | download_pictures: Bilder auf den Server herunterladen | 2 | download_pictures: 'Bilder auf den Server herunterladen' |
3 | carrot: Teilen zu Carrot aktivieren | 3 | carrot: 'Teilen zu Carrot aktivieren' |
4 | diaspora_url: Diaspora-URL, sofern der Service aktiviert ist | 4 | diaspora_url: 'Diaspora-URL, sofern der Service aktiviert ist' |
5 | export_epub: ePUB-Export aktivieren | 5 | export_epub: 'ePUB-Export aktivieren' |
6 | export_mobi: mobi-Export aktivieren | 6 | export_mobi: 'mobi-Export aktivieren' |
7 | export_pdf: PDF-Export aktivieren | 7 | export_pdf: 'PDF-Export aktivieren' |
8 | export_csv: CSV-Export aktivieren | 8 | export_csv: 'CSV-Export aktivieren' |
9 | export_json: JSON-Export aktivieren | 9 | export_json: 'JSON-Export aktivieren' |
10 | export_txt: TXT-Export aktivieren | 10 | export_txt: 'TXT-Export aktivieren' |
11 | export_xml: XML-Export aktivieren | 11 | export_xml: 'XML-Export aktivieren' |
12 | import_with_rabbitmq: Aktiviere RabbitMQ, um Artikel asynchron zu importieren | 12 | import_with_rabbitmq: 'Aktiviere RabbitMQ, um Artikel asynchron zu importieren' |
13 | import_with_redis: Aktiviere Redis, um Artikel asynchron zu importieren | 13 | import_with_redis: 'Aktiviere Redis, um Artikel asynchron zu importieren' |
14 | shaarli_url: Shaarli-URL, sofern der Service aktiviert ist | 14 | shaarli_url: 'Shaarli-URL, sofern der Service aktiviert ist' |
15 | share_diaspora: Teilen zu Diaspora aktiveren | 15 | share_diaspora: 'Teilen zu Diaspora aktiveren' |
16 | share_mail: Teilen via E-Mail aktiveren | 16 | share_mail: 'Teilen via E-Mail aktiveren' |
17 | share_shaarli: Teilen zu Shaarli aktiveren | 17 | share_shaarli: 'Teilen zu Shaarli aktiveren' |
18 | share_scuttle: Teilen zu Scuttle aktiveren | 18 | share_twitter: 'Teilen zu Twitter aktiveren' |
19 | share_twitter: Teilen zu Twitter aktiveren | 19 | share_unmark: 'Teilen zu Unmark.it aktiveren' |
20 | share_unmark: Teilen zu Unmark.it aktiveren | 20 | show_printlink: 'Link anzeigen, um den Inhalt auszudrucken' |
21 | show_printlink: Link anzeigen, um den Inhalt auszudrucken | 21 | wallabag_support_url: 'Support-URL für wallabag' |
22 | wallabag_support_url: Support-URL für wallabag | 22 | wallabag_url: 'URL von *deiner* wallabag-Instanz' |
23 | entry: "Artikel" | 23 | entry: 'Artikel' |
24 | export: "Export" | 24 | export: 'Export' |
25 | import: "Import" | 25 | import: 'Import' |
26 | misc: "Verschiedenes" | 26 | misc: 'Verschiedenes' |
27 | modify_settings: "Übernehmen" | 27 | modify_settings: 'Übernehmen' |
28 | piwik_host: Host deiner Webseite in Piwik (ohne http:// oder https://) | 28 | piwik_host: 'Host deiner Webseite in Piwik (ohne http:// oder https://)' |
29 | piwik_site_id: ID deiner Webseite in Piwik | 29 | piwik_site_id: 'ID deiner Webseite in Piwik' |
30 | piwik_enabled: Piwik aktivieren | 30 | piwik_enabled: 'Piwik aktivieren' |
31 | demo_mode_enabled: "Test-Modus aktivieren? (nur für die öffentliche wallabag-Demo genutzt)" | 31 | demo_mode_enabled: 'Test-Modus aktivieren? (nur für die öffentliche wallabag-Demo genutzt)' |
32 | demo_mode_username: "Test-Benutzer" | 32 | demo_mode_username: 'Test-Benutzer' |
33 | share_public: Erlaube eine öffentliche URL für Einträge | 33 | share_public: 'Erlaube eine öffentliche URL für Einträge' |
34 | # download_images_enabled: Download images locally | 34 | download_images_enabled: 'Bilder lokal herunterladen' |
35 | # restricted_access: Enable authentication for websites with paywall | 35 | restricted_access: 'Authentifizierung für Webseiten mit Paywall aktivieren' |
36 | # api_user_registration: Enable user to be registered using the API | 36 | api_user_registration: 'Registrierung eines Benutzers über die API ermöglichen' |