summaryrefslogtreecommitdiff
blob: 15782bd0b319278212678e033a14ed0b976e7fb3 (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
75
76
77
78
79
80
81
#!/usr/bin/php
<?php
require_once(dirname(__FILE__).'/shared/include/includes.php'); // USE __DIR__ in 5.3.0
function echo_and_query($q) {
	global $pdo;
	echo $q."\n";
	return $pdo->query($q);
}
$interactive=posix_isatty(STDIN);
$opts=getopt('R');
$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($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);
//	if (substr($class, 0, 4) != 'sql_') continue; // TODO FIXME BAD! Replace with real checks to avoid abstract classes in 5.3.0
	$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());
}
foreach (get_pkgdirs() as $dir) {
	echo 'Creating profile for '.$conf['pkgdir_root'].'/'.$dir.'...';
	$profile=new sql_gentoo_profile();
	$profile->pkgdir=$dir;
	echo "done\n";
	echo 'Loading data from '.$conf['pkgdir_root'].'/'.$dir.'/Packages...';
	$profile->read_Packages();
	echo "done\n";
}
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();
?>