-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
install.php
127 lines (109 loc) · 4.1 KB
/
install.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace FriendsOfRedaxo\Neues;
use FriendsOfRedaxo\Neues\Cronjob\Publish;
use rex;
use rex_addon;
use rex_config;
use rex_file;
use rex_media;
use rex_media_service;
use rex_path;
use rex_sql;
use rex_version;
use rex_yform_manager_table_api;
use Url\Cache;
use Url\Profile;
/** @var rex_addon $this */
$sql = rex_sql::factory();
/**
* Tablesets aktualisieren
* - Datenbanktabellen anlegen bzw. das Schema aktualisieren
* - YForm-Tablesets eintragen bzw. aktualisieren (soweit das möglich ist)
* - bei vorhandenen Datensätzen ggf. leere UUIDs füllen.
*/
$this->includeFile(__DIR__ . '/install/update_scheme.php');
rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/tableset.json', '[]'));
$sql->setQuery('UPDATE ' . rex::getTable('neues_author') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
$sql->setQuery('UPDATE ' . rex::getTable('neues_category') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
$sql->setQuery('UPDATE ' . rex::getTable('neues_entry') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""');
/**
* Fallback-Image bereitstellen falls noch nicht in der Mediathek.
*/
$fallbackImage = 'neues_entry_fallback_image.png';
if (null === rex_media::get($fallbackImage)) {
rex_file::copy(__DIR__ . '/install/' . $fallbackImage, rex_path::media($fallbackImage));
$data = [];
// TODO: Text nach *.lang verlagern
$data['title'] = 'Aktuelles - Fallback-Image';
$data['category_id'] = 0;
$data['file'] = [
'name' => $fallbackImage,
'path' => rex_path::media($fallbackImage),
];
rex_media_service::addMedia($data, false);
}
/**
* für nachfolgende $this->includeFile.
*/
$subScriptParams = ['sql' => $sql, 'installUser' => 'neues'];
/**
* Optional: Cronjob installieren falls das Cronjob-Addon aktiviert ist.
*/
if (rex_addon::get('cronjob')->isAvailable()) {
/**
* ggf Update von früheren Versionen mit dem alten Klassennamen
* -> rex_cronjob_neues_publish ändern in FriendsOfRedaxo\Neues\Cronjob\Publish.
*/
$sql->setTable(rex::getTable('cronjob'));
$sql->setValue('type', 'FriendsOfRedaxo\\Neues\\Cronjob\\Publish');
$sql->setWhere('`type` = :class', [':class' => 'rex_cronjob_neues_publish']);
$sql->update();
/**
* Fehlenden CronJob eintragen.
*/
$sql->setTable(rex::getTable('cronjob'));
$sql->setWhere('`type` = :class', [':class' => 'FriendsOfRedaxo\\Neues\\Cronjob\\Publish']);
$sql->select();
if (0 === $sql->getRows()) {
$this->includeFile(__DIR__ . '/install/cronjob_publish.php', $subScriptParams);
}
}
/**
* Optional: URL-Profile installieren falls das Url-Addon aktiviert ist
* Nach einer erfolgreichen Installation wird in der Config ein Flag gesetzt
* um eine erneute Installation zu vermeiden
* (rex_config::set('neues', 'url_profile', true)).
*/
if (rex_addon::get('url')->isAvailable()) {
if (false === rex_config::get('neues', 'url_profile', false)) {
$urlProfileTable = rex::getTable(Profile::TABLE_NAME);
// Category
$sql->setTable($urlProfileTable);
$sql->setWhere('table_name = :tn', [':tn' => '1_xxx_rex_neues_category']);
$sql->select();
if (0 === $sql->getRows()) {
$this->includeFile(__DIR__ . '/install/url_profile_category.php', $subScriptParams);
}
// Entry
$sql->setTable($urlProfileTable);
$sql->setWhere('table_name = :tn', [':tn' => '1_xxx_rex_neues_entry']);
$sql->select();
if (0 === $sql->getRows()) {
$this->includeFile(__DIR__ . '/install/url_profile_entry.php', $subScriptParams);
}
Cache::deleteProfiles();
// URL-Profile als installiert markieren
rex_config::set('neues', 'url_profile', true);
}
}
/**
* Beim Update einer Version vor 5.1.0 wird ein Fehler bei den Status-Werten
* korrigiert. Deleted wird von 2 auf -2 geändert.
*/
if (rex_version::compare('5.1.0', $this->getVersion(), '>')) {
$sql = rex_sql::factory();
$sql->setTable(rex::getTable('neues_entry'));
$sql->setWhere('status', 2);
$sql->setValue('status', -2);
$sql->update();
}