Issues (1358)

install/cli.php (1 issue)

Severity
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
The condition $interactive is always false.
Loading history...
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