Файл: Space race/install/index.php
Строк: 429
<?php
/**
* Installs the PHP Login & User Management database
*
*/
include_once("header.php");
$install = new Install();
class Install {
private $error;
private $link;
private $options = array();
public static $dbh;
function __construct() {
$this->checkInstall($hideError = true);
if( !empty($_POST) ) :
foreach ($_POST as $key => $value)
$this->options[$key] = $value;
$this->validate();
endif;
if(!empty($this->error))
echo $this->error;
}
// Run any ol' query passed into this function
public function query($query, $params = array()) {
$stmt = self::$dbh->prepare($query);
$stmt->execute($params);
return $stmt;
}
// Check for all form fields to be filled out
private function validate() {
if(strlen($this->options['adminPass']) < 5)
$this->error = '<div class="alert alert-danger">'._('Password must be at least 5 characters.').'</div>';
else
$this->options['adminPass'] = md5($this->options['adminPass']);
if( empty($this->options['dbHost']) || empty($this->options['dbUser']) || empty($this->options['dbName']) || empty($this->options['scriptPath']) || empty($this->options['email']) || empty($this->options['adminUser']) || empty($this->options['adminPass'] ))
$this->error = '<div class="alert alert-danger">'._('Fill out all the details please').'</div>';
if(substr($this->options['scriptPath'], -1) != '/')
$this->options['scriptPath'] = $this->options['scriptPath'] . '/';
// Check the database connection
$this->dbLink();
}
// See if I can connect to the mysql server
private function dbLink() {
if(!empty($this->error)) return false;
try {
self::$dbh = new PDO("mysql:host=" . $this->options['dbHost'] . ";dbname=" . $this->options['dbName'], $this->options['dbUser'], $this->options['dbPass']);
self::$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (PDOException $e) {
$this->error = '<div class="alert alert-danger">'._('Database error: '). $e->getMessage() . '</div>';
}
$this->existingTables();
}
// Check for an existing install
private function existingTables() {
if(empty($this->error)) :
$this->insertSQL();
$this->writeFile();
$this->checkInstall();
endif;
}
// Begin inserting our SQL goodies
private function insertSQL() {
if(empty($this->error)) {
$this->query("SET NAMES utf8;");
$this->query("
CREATE TABLE IF NOT EXISTS `login_confirm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`key` varchar(255) NOT NULL,
`type` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$this->query("
CREATE TABLE IF NOT EXISTS `login_integration` (
`user_id` int(255) NOT NULL,
`facebook` varchar(255) NOT NULL,
`twitter` varchar(255) NOT NULL,
`google` varchar(255) NOT NULL,
`yahoo` varchar(255) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$this->query("
CREATE TABLE IF NOT EXISTS `login_levels` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`level_name` varchar(255) NOT NULL,
`level_level` int(1) NOT NULL,
`level_disabled` tinyint(1) NOT NULL DEFAULT '0',
`redirect` varchar(255) DEFAULT NULL,
`welcome_email` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `level_level` (`level_level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$this->query("
INSERT INTO `login_levels` (`id`, `level_name`, `level_level`, `level_disabled`, `redirect`, `welcome_email`) VALUES
(1, 'Администраторы', 1, 0, '', 0),
(3, 'Пользователи', 3, 0, '', 0);
");
$this->query("
CREATE TABLE IF NOT EXISTS `login_profiles` (
`p_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`pfield_id` int(255) unsigned NOT NULL,
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`profile_value` longtext,
PRIMARY KEY (`p_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$this->query("
CREATE TABLE IF NOT EXISTS `login_settings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`option_name` varchar(255) NOT NULL,
`option_value` longtext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `option_name` (`option_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$params = array(
':site_address' => $this->options['scriptPath'],
':admin_email' => $this->options['email'],
':guest_redirect' => $this->options['scriptPath'] . 'login.php?e=1',
':new_user_redirect' => $this->options['scriptPath'] . 'profile.php'
);
$this->query("
INSERT IGNORE INTO `login_settings` (`id`, `option_name`, `option_value`) VALUES
(1, 'site_address', :site_address),
(2, 'default_session', '0'),
(3, 'admin_email', :admin_email),
(4, 'block-msg-enable', '1'),
(5, 'block-msg', '<h1>УПС.</h1>rnrn<p>Мы обнаружили, что, у Вас не хватает уровня доступа к этой странице.</p>rnrn<p>Если Вы считаете, что это ошибка - свяжитесь с администрацией.</p>'),
(6, 'block-msg-out', 'Для доступа необходимо зарегистрироваться или войти на сайт под своим логином или паролем'),
(7, 'block-msg-out-enable', '1'),
(8, 'email-welcome-msg', 'Привет, {{full_name}} !rnrnБлагодарим за регистрацию на сайте {{site_address}}. rnrnВот Ваши учетные данные:rnrnИмя: {{full_name}}rnЛогин: {{username}}rnEmail: {{email}}rnПароль: *hidden*rnrnДля активации Вашей учетной записи пройдите по ссылке:rnrn{{activate}}'),
(9, 'email-activate-msg', 'Привет, {{full_name}} !rnrnВаша учетная запись на сайте {{site_address}} была активирована :). rnrnЕсли Вы вдруг забыли, то Ваш логин <strong>{{username}}</strong>. rnrnУдачи в гонка!'),
(10, 'email-activate-subj', 'Учетная запись активирована'),
(11, 'email-activate-resend-subj', 'Ссылка активации'),
(12, 'email-activate-resend-msg', 'Привет, {{full_name}}. rnrnСсылка для активации учетной записи:rn{{activate}}rnrnПерейдите по этой ссылке, что бы включить Вашу учетную запись :)'),
(13, 'email-welcome-subj', 'Добро пожаловать в Star Race 3D'),
(14, 'email-forgot-success-subj', 'Ваш пароль был изменен'),
(15, 'email-forgot-success-msg', 'Привет, {{full_name}} !rnrnВаш пароль на сайте {{site_address}} был успешно сменен. rnrnПостарайтесь его больше не забывать, но если вдруг забудете снова - мы напомним !rnrnУдачи в гонках!'),
(16, 'email-forgot-subj', 'Восстановление пароля'),
(17, 'email-forgot-msg', 'Привет, {{full_name}},rnrnКто то запросил восстановление пароля в Star Race 3D для логина <strong>{{username}}</strong>.rnrnЕсли это Вы - просто перейдите по ссылке:rn{{reset}}rnrnЕсли Вы не запрашивали восстановление пароля, просто проигнорируйте это сообщение!'),
(18, 'email-add-user-subj', 'Вы зарегистрированы в Star Race 3D'),
(19, 'email-add-user-msg', 'Привет, {{full_name}} !rnrnВы зарегистрированы на сайте {{site_address}}. rnrnВот Ваши учетные данные:rnrnИмя: {{full_name}}rnЛогин: {{username}}rnEmail: {{email}}rnПароль: {{password}}'),
(20, 'pw-encrypt-force-enable', '0'),
(21, 'pw-encryption', 'MD5'),
(22, 'phplogin_db_version', '1212300'),
(23, 'email-acct-update-subj', 'Смена учетных данных'),
(24, 'email-acct-update-msg', 'Привет, {{full_name}} !rnrnВы ( {{username}} ) изменили учетные данные в игре Star Race 3D. Перейдите по ссылке, что бы подтвердить смену данных.rnrn{{confirm}}rnrnУдачи в гонках!rn{{site_address}}'),
(25, 'email-acct-update-success-subj', 'Ваш аккаунт был обновлен'),
(26, 'email-acct-update-success-msg', 'Привет, {{full_name}},rnrnВаши данные на сайте {{site_address}} были обновлены.rnrnЛогин: {{username}}rnrnУдачи в гонках!'),
(27, 'guest-redirect', :guest_redirect),
(28, 'signout-redirect-referrer-enable', 1),
(29, 'signin-redirect-referrer-enable', 1),
(30, 'default-level', 'a:1:{i:0;s:1:"3";}'),
(31, 'new-user-redirect', :new_user_redirect),
(32, 'user-activation-enable', '1'),
(33, 'email-new-user-subj', 'Новый пользователь зарегистрирован !'),
(34, 'email-new-user-msg', 'Привет,rnrnНовый пользователь зарегистрировался на сайте <a href="{{site_address}}">Star Race 3D</a>.rnrnВот детали его учетной записи:rnrnИмя: {{full_name}}rnЛогин: {{username}}rnEmail: {{email}}');
", $params);
$this->query("
CREATE TABLE IF NOT EXISTS `login_users` (
`user_id` int(8) NOT NULL AUTO_INCREMENT,
`user_level` longtext NOT NULL,
`restricted` int(1) NOT NULL DEFAULT '0',
`username` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(128) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`score` varchar(10) NOT NULL DEFAULT '0',
`bonus` float NOT NULL DEFAULT '1',
`speed` int(11) NOT NULL DEFAULT '7',
`maxspeed` float NOT NULL DEFAULT '7',
`bspeed` float NOT NULL DEFAULT '0.35' COMMENT 'Ускорение',
`maxbspeed` float NOT NULL DEFAULT '0.35' COMMENT 'Максимальное ускорение',
`airbrake` float NOT NULL DEFAULT '0.025' COMMENT 'Тормоза',
`maxairbrake` float NOT NULL DEFAULT '0.025' COMMENT 'Макс. тормоза',
`shielddamage` float NOT NULL DEFAULT '0.06' COMMENT 'Разрушение',
`maxshielddamage` float NOT NULL DEFAULT '0.06' COMMENT 'Минимальное повреждение',
`angularspeed` float NOT NULL DEFAULT '0.02' COMMENT 'Угловая скорость',
`maxangularspeed` float NOT NULL DEFAULT '0.02' COMMENT 'Максимальное угловое ускорение',
`thrust` float NOT NULL DEFAULT '0.02' COMMENT 'Ускорение с места',
`maxthrust` float NOT NULL DEFAULT '0.02' COMMENT ' Максимальное ускорение с места',
`godmode` int(1) NOT NULL DEFAULT '0' COMMENT 'Неузявимость',
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_id` (`user_id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
");
$this->query("
CREATE TABLE IF NOT EXISTS `login_profile_fields` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`section` varchar(255) NOT NULL,
`type` varchar(25) NOT NULL,
`label` varchar(255) NOT NULL,
`public` tinyint(4) NOT NULL,
`signup` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
");
$this->query("
CREATE TABLE IF NOT EXISTS `login_timestamps` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`ip` varchar(255) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$params = array(
':admin_user' => $this->options['adminUser'],
':admin_email' => $this->options['email'],
':admin_pass' => $this->options['adminPass']
);
$this->query("
INSERT IGNORE INTO `login_users` (`user_id`, `user_level`, `restricted`, `username`, `name`, `email`, `password`) VALUES
(1, 'a:3:{i:0;s:1:"3";i:1;s:1:"1";i:2;s:1:"2";}', 0, :admin_user, 'Demo Admin', :admin_email, :admin_pass);
", $params);
} else $this->error = 'Your tables already exist! I won't insert anything.';
}
private function writeFile() {
if($this->error == '') {
/** Write config.php if it doesn't exist */
$fp = @fopen("../classes/config.php", "w");
if( !$fp ) :
echo '<div class="alert alert-warning">'._('Не получается создать файл конфигурации <code>/classes/config.php</code>. Проверьте права доступа.').'</div>';
return false;
endif;
fwrite($fp, '<?php
////////////////////
// Important ! These must be filled in correctly.
// Database details are required to use this script.
$host = "'.$this->options['dbHost'].'"; // If you don't know what your host is, it's safe to leave it localhost
$dbName = "'.$this->options['dbName'].'"; // Database name
$dbUser = "'.$this->options['dbUser'].'"; // Username
$dbPass = "'.$this->options['dbPass'].'"; // Password
$db = mysql_connect($host, $dbUser, $dbPass);
mysql_select_db($dbName, $db);
?>');
fclose($fp);
}
}
private function checkInstall($hideError = false) {
if (file_exists('../classes/config.php')) : ?>
<div class="row">
<div class="col-md-12">
<div class="alert alert-success">Вуаля ! Установка завершена! </div>
<p><span class='label label-danger'>ВАЖНО!</span> УДАЛИТЕ ПАПКУ install С СЕРВЕРА</p>
</div>
</div> <?php
include('footer.php');
exit();
else :
if (!$hideError) $this->error = '<div class="alert alert-danger">'._('ОШИБКА УСТАНОВКИ.').'</div>';
endif;
}
}
?>
<div class="row">
<div class="col-md-9">
<form class="" method="post" action="index.php">
<fieldset>
<legend>Доступ к БД</legend>
<div class="form-group">
<label class="control-label" for="dbHost">Хост</label>
<div class="controls">
<input type="text" class="form-control input-xlarge" id="dbHost" name="dbHost" value="<?php if(isset($_POST['dbHost'])) echo $_POST['dbHost']; else echo 'localhost'; ?>" >
</div>
</div>
<div class="form-group">
<label class="control-label" for="dbName">Имя базы</label>
<div class="controls">
<input type="text" class="form-control input-xlarge" id="dbName" name="dbName" value="<?php if(isset($_POST['dbName'])) echo $_POST['dbName']; else _e('database_name'); ?>">
</div>
</div>
<div class="form-group">
<label class="control-label" for="dbUser">Логин</label>
<div class="controls">
<input type="text" class="form-control input-xlarge" id="dbUser" name="dbUser" value="<?php if(isset($_POST['dbUser'])) echo $_POST['dbUser']; else _e('db username'); ?>">
</div>
</div>
<div class="form-group">
<label class="control-label" for="dbPass">Пароль</label>
<div class="controls">
<input type="password" class="form-control input-xlarge" id="dbPass" name="dbPass" value="<?php if(isset($_POST['dbPass'])) echo $_POST['dbPass']; else _e('db password'); ?>">
</div>
</div>
</fieldset>
<fieldset>
<legend>Настройки сайта</legend>
<div class="form-group">
<label class="control-label" for="scriptPath">Адрес сайта</label>
<div class="controls">
<input type="url" class="form-control input-xlarge" id="scriptPath" name="scriptPath" value="<?php if(isset($_POST['scriptPath'])) echo $_POST['scriptPath']; else echo "http://".$_SERVER['HTTP_HOST'].str_replace("install/index.php","",str_replace("functions","",str_replace("\","/",$_SERVER['SCRIPT_NAME']))); ?>">
<p class="help-block"></p>
</div>
</div>
<div class="form-group">
<label class="control-label" for="email">Email администратора</label>
<div class="controls">
<input type="email" class="form-control input-xlarge" id="email" name="email" value="<?php if(isset($_POST['email'])) echo $_POST['email']; else echo 'no-reply@'.$_SERVER['HTTP_HOST']; ?>">
<p class="help-block"></p>
</div>
</div>
</fieldset>
<fieldset>
<legend>Аккаунт администратора</legend>
<div class="form-group">
<label class="control-label" for="adminUser">Логин</label>
<div class="controls">
<input type="text" class="form-control input-xlarge" id="adminUser" name="adminUser" value="<?php if(isset($_POST['adminUser'])) echo $_POST['adminUser']; else _e('admin'); ?>">
</div>
</div>
<div class="form-group">
<label class="control-label" for="adminPass">Пароль</label>
<div class="controls">
<input type="password" class="form-control input-xlarge" id="adminPass" name="adminPass" value="<?php if(isset($_POST['adminPass'])) echo $_POST['adminPass']; else _e('admin'); ?>">
</div>
</div>
</fieldset>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Начать установку</button>
</div>
</form>
</div>
</div>
<?php include_once("footer.php"); ?>