1 | <?php |
||
13 | class Installer { |
||
14 | const MAIN_CONFIG_STUB = /** @lang JSON */ |
||
15 | <<<CONFIG |
||
16 | { |
||
17 | //Domain of main mirror |
||
18 | "domain" : "@domain", |
||
19 | //Base timezone |
||
20 | "timezone" : "@timezone", |
||
21 | //Settings of main DB |
||
22 | "db_host" : "@db_host", |
||
23 | "db_type" : "@db_type", |
||
24 | "db_name" : "@db_name", |
||
25 | "db_user" : "@db_user", |
||
26 | "db_password" : "@db_password", |
||
27 | "db_prefix" : "@db_prefix", |
||
28 | //Settings of main Storage |
||
29 | "storage_type" : "Local", |
||
30 | "storage_url" : "", |
||
31 | "storage_host" : "localhost", |
||
32 | "storage_user" : "", |
||
33 | "storage_password" : "", |
||
34 | //Base language |
||
35 | "language" : "@language", |
||
36 | //Cache engine |
||
37 | "cache_engine" : "FileSystem", |
||
38 | //Settings of Memcached cache engine |
||
39 | "memcache_host" : "127.0.0.1", |
||
40 | "memcache_port" : "11211", |
||
41 | //Any length |
||
42 | "public_key" : "@public_key" |
||
43 | } |
||
44 | |||
45 | CONFIG; |
||
46 | /** |
||
47 | * @param string $source |
||
48 | * @param string $target |
||
49 | * @param string $site_name |
||
50 | * @param string $url |
||
51 | * @param string $timezone |
||
52 | * @param string $db_host |
||
53 | * @param string $db_engine |
||
54 | * @param string $db_name |
||
55 | * @param string $db_user |
||
56 | * @param string $db_password |
||
57 | * @param string $db_prefix |
||
58 | * @param string $language |
||
59 | * @param string $admin_email |
||
60 | * @param string $admin_password |
||
61 | * @param int $mode |
||
62 | * |
||
63 | * @throws RuntimeException |
||
64 | */ |
||
65 | static function install ( |
||
66 | $source, |
||
67 | $target, |
||
68 | $site_name, |
||
69 | $url, |
||
70 | $timezone, |
||
71 | $db_host, |
||
72 | $db_engine, |
||
73 | $db_name, |
||
74 | $db_user, |
||
75 | $db_password, |
||
76 | $db_prefix, |
||
77 | $language, |
||
78 | $admin_email, |
||
79 | $admin_password, |
||
80 | $mode |
||
81 | ) { |
||
82 | static::pre_installation_checks($source, $target, $db_engine); |
||
83 | // Needed to be defined before connecting to the database |
||
84 | defined('DEBUG') || define('DEBUG', false); |
||
85 | $file_index_map = static::initialize_filesystem($source); |
||
86 | static::extract($file_index_map, $source, $target); |
||
87 | $domain = parse_url($url, PHP_URL_HOST); |
||
88 | $public_key = hash('sha512', random_bytes(1000)); |
||
89 | static::initialize_core_config( |
||
90 | $target, |
||
91 | $domain, |
||
92 | $timezone, |
||
93 | $db_host, |
||
94 | $db_engine, |
||
95 | $db_name, |
||
96 | $db_user, |
||
97 | $db_password, |
||
98 | $db_prefix, |
||
99 | $language, |
||
100 | $public_key |
||
101 | ); |
||
102 | /** |
||
103 | * @var \cs\DB\_Abstract $cdb |
||
104 | */ |
||
105 | $cdb = "cs\\DB\\$db_engine"; |
||
106 | $cdb = new $cdb($db_name, $db_user, $db_password, $db_host, $db_prefix); |
||
107 | if (!is_object($cdb) || !$cdb->connected()) { |
||
108 | throw new RuntimeException("Can't connect to database! Installation aborted."); |
||
109 | } |
||
110 | static::initialize_db_structure($cdb, $source, $db_engine); |
||
111 | static::initialize_system_config($cdb, $source, $site_name, $url, $admin_email, $language, $domain, $timezone, $mode); |
||
112 | static::create_root_administrator($cdb, $admin_email, $admin_password, $public_key); |
||
113 | unset($cdb); |
||
114 | } |
||
115 | /** |
||
116 | * @param string $source |
||
117 | * @param string $target |
||
118 | * @param string $db_engine |
||
119 | * |
||
120 | * @throws RuntimeException |
||
121 | */ |
||
122 | protected static function pre_installation_checks ($source, $target, $db_engine) { |
||
130 | /** |
||
131 | * @param string $source |
||
132 | * |
||
133 | * @return array[] |
||
134 | */ |
||
135 | protected static function initialize_filesystem ($source) { |
||
171 | /** |
||
172 | * @param array[] $file_index_map |
||
173 | * @param string $source |
||
174 | * @param string $target |
||
175 | * |
||
176 | * @throws RuntimeException |
||
177 | */ |
||
178 | protected static function extract ($file_index_map, $source, $target) { |
||
197 | /** |
||
198 | * @param string $target |
||
199 | * @param string $domain |
||
200 | * @param string $timezone |
||
201 | * @param string $db_host |
||
202 | * @param string $db_engine |
||
203 | * @param string $db_name |
||
204 | * @param string $db_user |
||
205 | * @param string $db_password |
||
206 | * @param string $db_prefix |
||
207 | * @param string $language |
||
208 | * @param string $public_key |
||
209 | * |
||
210 | * @throws RuntimeException |
||
211 | */ |
||
212 | protected static function initialize_core_config ( |
||
236 | /** |
||
237 | * @param DB\_Abstract $cdb |
||
238 | * @param string $source |
||
239 | * @param string $db_engine |
||
240 | * |
||
241 | * @throws RuntimeException |
||
242 | */ |
||
243 | protected static function initialize_db_structure ($cdb, $source, $db_engine) { |
||
252 | /** |
||
253 | * @param DB\_Abstract $cdb |
||
254 | * @param string $source |
||
255 | * @param string $site_name |
||
256 | * @param string $url |
||
257 | * @param string $admin_email |
||
258 | * @param string $language |
||
259 | * @param string $domain |
||
260 | * @param string $timezone |
||
261 | * @param int $mode |
||
262 | * |
||
263 | * @throws RuntimeException |
||
264 | */ |
||
265 | protected static function initialize_system_config ($cdb, $source, $site_name, $url, $admin_email, $language, $domain, $timezone, $mode) { |
||
349 | /** |
||
350 | * @param DB\_Abstract $cdb |
||
351 | * @param string $admin_email |
||
352 | * @param string $admin_password |
||
353 | * @param string $public_key |
||
354 | * |
||
355 | * @throws RuntimeException |
||
356 | */ |
||
357 | protected static function create_root_administrator ($cdb, $admin_email, $admin_password, $public_key) { |
||
379 | } |
||
380 |