summaryrefslogtreecommitdiff
blob: fc4e001d74f51461b4528bb4acbd54f92b0e51a1 (plain)
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
#!/usr/bin/php
<?php
require_once(dirname(__FILE__).'/shared/include/includes.php'); // USE __DIR__ in 5.3.0
function echo_and_query($q) {
	global $S;
	echo $q."\n";
	return $S['pdo']->query($q);
}
$interactive=posix_isatty(STDIN);
$opts=getopt('R');
$S['pdo']=new PDO('mysql:host='.$conf['sqlhost'], $conf['sqluser'], $conf['sqlpass']);
if (isset($opts['R'])) {
	echo_and_query('DROP DATABASE IF EXISTS `'.$conf['sqldb'].'`');
}
echo_and_query('CREATE DATABASE IF NOT EXISTS `'.$conf['sqldb'].'`'); // We can add charset and collate here if we want
echo_and_query('USE `'.$conf['sqldb'].'`');
sql_row_obj::set_pdo_obj($S['pdo']);
foreach (get_declared_classes() as $class) {
	if (!is_subclass_of($class, 'sql_row_obj')) {
		continue;
	}
	$r=new ReflectionClass($class);
	if (!$r->isInstantiable()) continue;
	unset($r);
	$o=new $class(); // TODO this will be static once 5.3.0 is out	
	if (isset($opts['R'])) {
		echo_and_query($o->drop_table());
	}
	echo_and_query($o->create_table());
}
do {
	if ($user->email) {
		echo 'Invalid entry: '.$user->email."\n";
	}
	echo 'Admin email address: ';
	$user=new sql_user();
	$user->email=trim(fgets(STDIN));
	if (!$interactive) {
		echo "\n";
	}
} while (!Validate::email($user->email));
do {
	if ($user->name) {
		echo 'Invalid entry: '.$user->name."\n";
	}
	echo 'Admin display name: ';
	$user->name=trim(fgets(STDIN));
	if (!$interactive) {
		echo "\n";
	}
} while (!Validate::username($user->name));
if ($interactive) {
	system('stty -echo');
}
do {
	if ($pass && $passconfirm) {
		echo "Entered passwords did not match.  Try again.\n";
	}
	echo 'Admin password: ';
	$pass=trim(fgets(STDIN));
	echo "\nRepeat password: ";
	$passconfirm=trim(fgets(STDIN));
	echo "\n";
} while (!$pass || $pass != $passconfirm);
if ($interactive) {
	system('stty echo');
}
$user->passhash=substr($pass, 0, 5)=='sha1:'?substr($pass, 5):sha1($pass);
$user->flags='a'; // Admin
$user->write();
foreach (glob(dirname(__FILE__).'/*_setup.php') as $file) { // __DIR__ 5.3.0
	require($file);
}
?>