1 | <?php |
||
2 | /** |
||
3 | * @package CleverStyle Framework |
||
4 | * @subpackage Installer |
||
5 | * @author Nazar Mokrynskyi <[email protected]> |
||
6 | * @license 0BSD |
||
7 | */ |
||
8 | namespace cs; |
||
9 | use |
||
10 | PharException; |
||
11 | |||
12 | 4 | $phar_path = __DIR__; |
|
13 | 4 | if (strpos(__DIR__, 'phar://') !== 0) { |
|
14 | 4 | foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $step) { |
|
15 | 4 | if (preg_match('#^phar://.+/cli.php$#', $step['file'])) { |
|
16 | 4 | $phar_path = dirname($step['file']); |
|
17 | 4 | break; |
|
18 | } |
||
19 | } |
||
20 | } |
||
21 | |||
22 | 4 | date_default_timezone_set('UTC'); |
|
23 | 4 | require_once __DIR__.'/Installer.php'; |
|
24 | |||
25 | 4 | $help = false; |
|
26 | 4 | $interactive = false; |
|
27 | /** |
||
28 | * @var array $options |
||
29 | */ |
||
30 | $options = [ |
||
31 | 4 | 'db_driver' => 'MySQLi', |
|
32 | 4 | 'db_host' => 'localhost', |
|
33 | 4 | 'db_prefix' => substr(md5(random_bytes(1000)), 0, 5).'_', |
|
34 | 4 | 'timezone' => 'UTC', |
|
35 | 4 | 'language' => 'English', |
|
36 | 4 | 'mode' => 1 |
|
37 | ]; |
||
38 | /** |
||
39 | * @var array $argv |
||
40 | * @var int $argc |
||
41 | */ |
||
42 | 4 | for ($i = 1; $i < $argc; $i += 2) { |
|
43 | 4 | $value = $argv[$i + 1]; |
|
44 | 4 | switch ($argv[$i]) { |
|
45 | 4 | case '-h': |
|
46 | 4 | case '--help': |
|
47 | $help = true; |
||
48 | break; |
||
49 | 4 | case '-sn': |
|
50 | 4 | case '--site_name': |
|
51 | 4 | $options['site_name'] = $value; |
|
52 | 4 | break; |
|
53 | 4 | case '-su': |
|
54 | 4 | case '--site_url': |
|
55 | 4 | $options['site_url'] = $value; |
|
56 | 4 | break; |
|
57 | 4 | case '-de': |
|
58 | 4 | case '--db_driver': |
|
59 | 4 | $options['db_driver'] = $value; |
|
60 | 4 | break; |
|
61 | 4 | case '-dh': |
|
62 | 4 | case '--db_host': |
|
63 | 4 | $options['db_host'] = $value; |
|
64 | 4 | break; |
|
65 | 4 | case '-dn': |
|
66 | 4 | case '--db_name': |
|
67 | 4 | $options['db_name'] = $value; |
|
68 | 4 | break; |
|
69 | 4 | case '-du': |
|
70 | 4 | case '--db_user': |
|
71 | 4 | $options['db_user'] = $value; |
|
72 | 4 | break; |
|
73 | 4 | case '-dp': |
|
74 | 4 | case '--db_password': |
|
75 | 4 | $options['db_password'] = $value; |
|
76 | 4 | break; |
|
77 | 4 | case '-dr': |
|
78 | 4 | case '--db_prefix': |
|
79 | 3 | $options['db_prefix'] = $value; |
|
80 | 3 | break; |
|
81 | 4 | case '-t': |
|
82 | 4 | case '--timezone': |
|
83 | $options['timezone'] = $value; |
||
84 | break; |
||
85 | 4 | case '-l': |
|
86 | 4 | case '--language': |
|
87 | $options['language'] = $value; |
||
88 | break; |
||
89 | 4 | case '-m': |
|
90 | 4 | case '--mode': |
|
91 | $options['mode'] = $value; |
||
92 | break; |
||
93 | 4 | case '-ae': |
|
94 | 4 | case '--admin_email': |
|
95 | 4 | $options['admin_email'] = $value; |
|
96 | 4 | break; |
|
97 | 4 | case '-ap': |
|
98 | case '--admin_password': |
||
99 | 4 | $options['admin_password'] = $value; |
|
100 | 4 | break; |
|
101 | case '-i': |
||
102 | case '--interactive': |
||
103 | $interactive = true; |
||
104 | break; |
||
105 | } |
||
106 | } |
||
107 | 4 | if ($interactive) { |
|
0 ignored issues
–
show
introduced
by
![]() |
|||
108 | echo "CleverStyle Framework installer, interactive mode\n"; |
||
109 | $required_parameters = [ |
||
110 | 'site_name' => 'Site name', |
||
111 | 'site_url' => 'Site URL', |
||
112 | 'db_name' => 'Database name', |
||
113 | 'db_user' => 'Database user', |
||
114 | 'db_password' => 'Database password', |
||
115 | 'admin_email' => 'Email of administrator', |
||
116 | 'admin_password' => 'Password of administrator' |
||
117 | ]; |
||
118 | foreach ($required_parameters as $parameter => $description) { |
||
119 | if (!isset($options[$parameter])) { |
||
120 | echo "$description: "; |
||
121 | $options[$parameter] = substr(fgets(STDIN), 0, -1); |
||
122 | } |
||
123 | } |
||
124 | } |
||
125 | if ( |
||
126 | 4 | $help || |
|
127 | 4 | $argc == 1 || |
|
128 | !isset( |
||
129 | 4 | $options['site_name'], |
|
130 | 4 | $options['site_url'], |
|
131 | 4 | $options['db_name'], |
|
132 | 4 | $options['db_user'], |
|
133 | 4 | $options['db_password'], |
|
134 | 4 | $options['admin_email'], |
|
135 | 4 | $options['admin_password'] |
|
136 | ) |
||
137 | ) { |
||
138 | echo <<<HELP |
||
139 | CleverStyle Framework installer |
||
140 | Installer is used for installation of CleverStyle Framework and built-in components from distributive. |
||
141 | Usage: php $argv[0] |
||
142 | --site_name <site_name> |
||
143 | --site_url <site_url> |
||
144 | --db_name <db_name> |
||
145 | --db_user <db_user> |
||
146 | --db_password <db_password> |
||
147 | --admin_email <admin_email> |
||
148 | --admin_password <admin_password> |
||
149 | [--help] |
||
150 | [--interactive] |
||
151 | [--db_driver <db_driver>] |
||
152 | [--db_host <db_host>] |
||
153 | [--db_prefix <db_prefix>] |
||
154 | [--timezone <timezone>] |
||
155 | [--language <language>] |
||
156 | -h |
||
157 | --help - This information |
||
158 | -i |
||
159 | --interactive - Interactive mode (can be combined with other options, will ask only required) |
||
160 | -sn |
||
161 | --site_name - Name of future site, in case of few words, do not forget to take into quotes |
||
162 | -su |
||
163 | --site_url - Site url with protocol prefix, without final slash |
||
164 | -de |
||
165 | --db_driver - Database driver, only MySQLi currently supported |
||
166 | -dh |
||
167 | --db_host - Database host |
||
168 | -dn |
||
169 | --db_name - Database name |
||
170 | -du |
||
171 | --db_user - Database user |
||
172 | -dp |
||
173 | --db_password - Database password |
||
174 | -dr |
||
175 | --db_prefix - Is used for prefixing all tables names |
||
176 | -t |
||
177 | --timezone - Timezone, check http://php.net/manual/en/suffixtimezones.php for possible values |
||
178 | -l |
||
179 | --language - Language, currently English, Ukrainian and Russian languages supported |
||
180 | -m |
||
181 | --mode - Mode, 0 for Expert and 1 for Regular user |
||
182 | -ae |
||
183 | --admin_email - Email of first, primary administrator |
||
184 | -ap |
||
185 | --admin_password - Password of first administrator |
||
186 | Examples: |
||
187 | php $argv[0] -sn Web-site -su http://web.site -dn web.site -du web.site -dp pass -ae [email protected] -ap pass |
||
188 | php $argv[0] -i |
||
189 | php $argv[0] -sn Web-site -i |
||
190 | |||
191 | HELP; |
||
192 | return; |
||
193 | } |
||
194 | |||
195 | try { |
||
196 | 4 | Installer::install( |
|
197 | 4 | $phar_path, |
|
198 | 4 | getcwd(), |
|
199 | 4 | $options['site_name'], |
|
200 | 4 | $options['site_url'], |
|
201 | 4 | $options['timezone'], |
|
202 | 4 | $options['db_host'], |
|
203 | 4 | $options['db_driver'], |
|
204 | 4 | $options['db_name'], |
|
205 | 4 | $options['db_user'], |
|
206 | 4 | $options['db_password'], |
|
207 | 4 | $options['db_prefix'], |
|
208 | 4 | $options['language'], |
|
209 | 4 | $options['admin_email'], |
|
210 | 4 | $options['admin_password'], |
|
211 | 4 | $options['mode'] |
|
212 | ); |
||
213 | } catch (\Exception $e) { |
||
214 | echo $e->getMessage(); |
||
215 | exit(1); |
||
216 | } |
||
217 | 4 | $admin_login = strstr($options['admin_email'], '@', true); |
|
218 | 4 | $warning = false; |
|
219 | // Removing of installer file |
||
220 | 4 | $installer = substr($phar_path, strlen('phar://')); |
|
221 | 4 | $unlink_function = $phar_path == __DIR__ ? 'unlink' : ['Phar', 'unlinkArchive']; |
|
222 | try { |
||
223 | 4 | if (!is_writable($installer) || !$unlink_function($installer)) { |
|
224 | 4 | throw new PharException; |
|
225 | } |
||
226 | } catch (PharException $e) { |
||
227 | $warning = "Please, remove installer file $installer for security!\n"; |
||
228 | } |
||
229 | echo <<<SUCCESS |
||
230 | Congratulations! CleverStyle Framework has been installed successfully! |
||
231 | 4 | $warning |
|
232 | 4 | Login: $admin_login |
|
233 | 4 | Password: $options[admin_password] |
|
234 | |||
235 | SUCCESS; |
||
236 |