|
2 | 2 |
|
3 | 3 | namespace FriendsOfRedaxo\Neues;
|
4 | 4 |
|
| 5 | +use FriendsOfRedaxo\Neues\Cronjob\Publish; |
5 | 6 | use rex;
|
6 | 7 | use rex_addon;
|
7 |
| -use rex_article; |
8 | 8 | use rex_config;
|
9 | 9 | use rex_file;
|
10 | 10 | use rex_media;
|
11 | 11 | use rex_media_service;
|
12 | 12 | use rex_path;
|
13 | 13 | use rex_sql;
|
14 | 14 | use rex_yform_manager_table_api;
|
| 15 | +use Url\Cache; |
| 16 | +use Url\Profile; |
15 | 17 |
|
16 |
| -use function count; |
| 18 | +/** @var rex_addon $this */ |
17 | 19 |
|
18 | 20 | $sql = rex_sql::factory();
|
19 | 21 |
|
20 |
| -/* Tablesets aktualisieren */ |
21 |
| -if (rex_plugin::get('yform', 'manager')->isAvailable()) { |
22 |
| - rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/tableset.json')); |
| 22 | +/** |
| 23 | + * Tablesets aktualisieren |
| 24 | + * - Datenbanktabellen anlegen bzw. das Schema aktualisieren |
| 25 | + * - YForm-Tablesets eintragen bzw. aktualisieren (soweit das möglich ist) |
| 26 | + * - bei vorhandenen Datensätzen ggf. leere UUIDs füllen. |
| 27 | + */ |
| 28 | +$this->includeFile(__DIR__ . '/install/update_scheme.php'); |
23 | 29 |
|
24 |
| - // Vorhandene leere UUID-Felder aktualisieren |
25 |
| - $sql->setQuery('UPDATE ' . rex::getTable('neues_author') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); |
26 |
| - $sql->setQuery('UPDATE ' . rex::getTable('neues_category') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); |
27 |
| - $sql->setQuery('UPDATE ' . rex::getTable('neues_entry') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); |
| 30 | +rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/tableset.json', '[]')); |
28 | 31 |
|
29 |
| - require_once __DIR__ . '/install/update_scheme.php'; |
30 |
| -} |
| 32 | +$sql->setQuery('UPDATE ' . rex::getTable('neues_author') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); |
| 33 | +$sql->setQuery('UPDATE ' . rex::getTable('neues_category') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); |
| 34 | +$sql->setQuery('UPDATE ' . rex::getTable('neues_entry') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); |
31 | 35 |
|
32 |
| -if (null === rex_media::get('neues_entry_fallback_image.png')) { |
33 |
| - rex_file::copy(__DIR__ . '/install/neues_entry_fallback_image.png', rex_path::media('neues_entry_fallback_image.png')); |
| 36 | +/** |
| 37 | + * Fallback-Image bereitstellen falls noch nicht in der Mediathek. |
| 38 | + */ |
| 39 | +$fallbackImage = 'neues_entry_fallback_image.png'; |
| 40 | +if (null === rex_media::get($fallbackImage)) { |
| 41 | + rex_file::copy(__DIR__ . '/install/' . $fallbackImage, rex_path::media($fallbackImage)); |
34 | 42 | $data = [];
|
35 | 43 | $data['title'] = 'Aktuelles - Fallback-Image';
|
36 | 44 | $data['category_id'] = 0;
|
37 | 45 | $data['file'] = [
|
38 |
| - 'name' => 'neues_entry_fallback_image.png', |
39 |
| - 'path' => rex_path::media('neues_entry_fallback_image.png'), |
| 46 | + 'name' => $fallbackImage, |
| 47 | + 'path' => rex_path::media($fallbackImage), |
40 | 48 | ];
|
41 | 49 |
|
42 | 50 | rex_media_service::addMedia($data, false);
|
43 | 51 | }
|
44 | 52 |
|
45 |
| -/* Cronjob installieren */ |
46 |
| -if (rex_addon::get('cronjob')->isAvailable()) { |
47 |
| - $cronjobPublish = 'FriendsOfRedaxo\\Neues\\Cronjob\\Publish'; |
| 53 | +/** |
| 54 | + * für nachfolgende $this->includeFile. |
| 55 | + */ |
| 56 | +$subScriptParams = ['sql' => $sql, 'installUser' => 'neues']; |
48 | 57 |
|
| 58 | +/** |
| 59 | + * Optional: Cronjob installieren falls das Cronjob-Addon aktiviert ist. |
| 60 | + */ |
| 61 | +if (rex_addon::get('cronjob')->isAvailable()) { |
49 | 62 | /**
|
50 | 63 | * ggf Update von früheren Versionen mit dem alten Klassennamen
|
51 | 64 | * -> rex_cronjob_neues_publish ändern in FriendsOfRedaxo\Neues\Cronjob\Publish.
|
52 | 65 | */
|
53 | 66 | $sql->setTable(rex::getTable('cronjob'));
|
54 |
| - $sql->setValue('type', $cronjobPublish); |
| 67 | + $sql->setValue('type', Publish::class); |
55 | 68 | $sql->setWhere('`type` = :class', [':class' => 'rex_cronjob_neues_publish']);
|
56 | 69 | $sql->update();
|
57 | 70 |
|
58 | 71 | /**
|
59 | 72 | * Fehlenden CronJob eintragen.
|
60 | 73 | */
|
61 |
| - $sql = rex_sql::factory(); |
62 | 74 | $sql->setTable(rex::getTable('cronjob'));
|
63 |
| - $sql->setWhere('`type` = :class', [':class' => $cronjobPublish]); |
| 75 | + $sql->setWhere('`type` = :class', [':class' => Publish::class]); |
64 | 76 | $sql->select();
|
65 | 77 |
|
66 | 78 | if (0 === $sql->getRows()) {
|
67 |
| - $query = rex_file::get(__DIR__ . '/install/rex_cronjob_neues_publish.sql'); |
68 |
| - rex_sql::factory()->setQuery($query); |
| 79 | + $this->includeFile(__DIR__ . '/install/cronjob_publish.php', $subScriptParams); |
69 | 80 | }
|
70 | 81 | }
|
71 | 82 |
|
72 |
| -/* URL-Profile installieren */ |
| 83 | +/** |
| 84 | + * Optional: URL-Profile installieren falls das Url-Addon aktiviert ist |
| 85 | + * Nach einer erfolgreichen Installation wird in der Config ein Flag gesetzt |
| 86 | + * um eine erneute Installation zu vermeiden |
| 87 | + * (rex_config::set('neues', 'url_profile', true)). |
| 88 | + */ |
73 | 89 | if (rex_addon::get('url')->isAvailable()) {
|
74 | 90 | if (false === rex_config::get('neues', 'url_profile', false)) {
|
75 |
| - $rex_neues_category = array_filter(rex_sql::factory()->getArray("SELECT * FROM rex_url_generator_profile WHERE `table_name` = '1_xxx_rex_neues_category'")); |
76 |
| - if (0 < count($rex_neues_category)) { |
77 |
| - $query = str_replace('999999', (string) rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_category.sql')); |
78 |
| - rex_sql::factory()->setQuery($query); |
| 91 | + $urlProfileTable = rex::getTable(Profile::TABLE_NAME); |
| 92 | + // Category |
| 93 | + $sql->setTable($urlProfileTable); |
| 94 | + $sql->setWhere('table_name = :tn', [':tn' => '1_xxx_rex_neues_category']); |
| 95 | + $sql->select(); |
| 96 | + if (0 === $sql->getRows()) { |
| 97 | + $this->includeFile(__DIR__ . '/install/url_profile_category.php', $subScriptParams); |
79 | 98 | }
|
80 |
| - $rex_neues_entry = array_filter(rex_sql::factory()->getArray("SELECT * FROM rex_url_generator_profile WHERE `table_name` = '1_xxx_rex_neues_entry'")); |
81 |
| - if (0 < count($rex_neues_entry)) { |
82 |
| - $query = str_replace('999999', (string) rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_entry.sql')); |
83 |
| - rex_sql::factory()->setQuery($query); |
| 99 | + |
| 100 | + // Entry |
| 101 | + $sql->setTable($urlProfileTable); |
| 102 | + $sql->setWhere('table_name = :tn', [':tn' => '1_xxx_rex_neues_entry']); |
| 103 | + $sql->select(); |
| 104 | + if (0 === $sql->getRows()) { |
| 105 | + $this->includeFile(__DIR__ . '/install/url_profile_entry.php', $subScriptParams); |
84 | 106 | }
|
85 |
| - /* URL-Profile wurden bereits einmal installiert, daher nicht nochmals installieren und Entwickler-Einstellungen respektieren */ |
| 107 | + |
| 108 | + Cache::deleteProfiles(); |
| 109 | + |
| 110 | + // URL-Profile als installiert markieren |
86 | 111 | rex_config::set('neues', 'url_profile', true);
|
87 | 112 | }
|
88 | 113 | }
|
0 commit comments