Updated install

Added Form manager
Added session messages display

Signed-off-by: Gregory PLANCHAT <g.planchat@gmail.com>
This commit is contained in:
Gregory PLANCHAT 2011-11-18 08:05:42 +01:00
commit 5acde87794
220 changed files with 1962 additions and 1134 deletions

View file

@ -34,8 +34,8 @@ define('IN_INSTALL', true);
define('STEP_SYSTEM', 1);
define('STEP_DATABASE', 2);
define('STEP_PROFILE', 3);
define('STEP_UNIVERSE', 4);
define('STEP_UNIVERSE', 3);
define('STEP_PROFILE', 4);
define('STEP_CONFIG', 5);
require_once dirname(dirname(__FILE__)) .'/application/bootstrap.php';
@ -80,8 +80,7 @@ case 'intro':
break;
case 'install':
$session->addError('Test %s', 'Hello world!');
if ($step != $session->getData('step')) {
if ($step > $session->getData('step')) {
$session->setData('step', 0);
$response->setRedirect("?mode=intro", Wootook_Core_Controller_Response_Http::REDIRECT_TEMPORARY);
$response->sendHeaders();
@ -92,26 +91,52 @@ case 'install':
case STEP_SYSTEM:
if ($request->isPost()) {
$form = new Wootook_Core_Form($session, array(
'url_path' => 'text'
'url_path' => 'text',
'timezone' => 'text'
));
$form->addField('url_path');
$form->setRequest($request);
$form->populate();
if (!$form->validate()) {
$session->setData('step', $step);
$session->setData('step', STEP_SYSTEM);
$session->setFormData($form->getData());
var_dump($session);
$response->setRedirect("?mode=install&step={$step}");
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_SYSTEM)));
$response->sendHeaders();
exit(0);
}
$layout->getMessagesblock()->prepareMessages('install');
$session->setBaseUrl($request->getPost('url_path'));
$session->setStep(STEP_DATABASE);
$response->setRedirect("?mode=install&step={$nextStep}");
$config = array(
'global' => array(
'storyline' => array(
'universe' => 'legacies',
'episode' => 'default',
),
'web' => array(
'base_url' => $request->getPost('url_path')
),
'date' => array(
'timezone' => $request->getPost('timezone')
),
'layout' => array(
'page' => 'page.php',
'admin' => 'admin.php',
'empire' => 'empire.php'
),
'locales' => array(
'fr' => 'fr_FR',
'fr_FR' => 'fr_FR',
'en' => 'en_US',
'en_US' => 'en_US'
)
),
);
Wootook::writeConfig($config);
$session->setData('step', STEP_DATABASE);
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_DATABASE)));
$response->sendHeaders();
exit(0);
}
@ -133,43 +158,209 @@ case 'install':
$form->populate();
if (!$form->validate()) {
$session->setData('step', $step);
$session->setFormData($request->getPost());
$response->setRedirect("?mode=install&step={$step}");
$session->setData('step', STEP_DATABASE);
$session->setFormData($request->getData());
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_DATABASE)));
$response->sendHeaders();
exit(0);
}
if ($request->getPost('test')) {
$data = array(
'status' => 'pending',
'message' => ''
);
try {
$hostname = $request->getPost('host');
$username = $request->getPost('user');
$password = $request->getPost('password');
$database = $request->getPost('dbname');
$port = $request->getPost('port');
$connection = new Wootook_Database("mysql:dbname={$database};host={$hostname};port={$port}", $username, $password);
$data['status'] = 'success';
} catch (PDOException $e) {
$data['status'] = 'error';
$data['message'] = $e->getMessage();
}
Wootook_Core_ErrorProfiler::unregister(true);
$response->setHeader('Content-Type', 'application/json');
$response->setBody(json_encode($data));
$response->sendHeaders();
echo $response->sendBody();
exit(0);
}
$layout->getMessagesblock()->prepareMessages('install');
$session->setStep(STEP_PROFILE);
$response->setRedirect("?mode=install&step={$nextStep}");
$config = Wootook::getConfig();
$config['database'] = array(
'core_setup' => array(
'engine' => 'mysql',
'options' => array(
),
'params' => array(
'hostname' => $request->getPost('host'),
'username' => $request->getPost('user'),
'password' => $request->getPost('password'),
'database' => $request->getPost('dbname'),
'port' => $request->getPost('port')
),
'table_prefix' => $request->getPost('prefix'),
),
'core_read' => array(
'engine' => 'mysql',
'options' => array(
),
'params' => array(
'hostname' => $request->getPost('host'),
'username' => $request->getPost('user'),
'password' => $request->getPost('password'),
'database' => $request->getPost('dbname'),
'port' => $request->getPost('port')
),
'table_prefix' => $request->getPost('prefix'),
),
'core_write' => array(
'engine' => 'mysql',
'options' => array(
),
'params' => array(
'hostname' => $request->getPost('host'),
'username' => $request->getPost('user'),
'password' => $request->getPost('password'),
'database' => $request->getPost('dbname'),
'port' => $request->getPost('port')
),
'table_prefix' => $request->getPost('prefix'),
),
);
Wootook::writeConfig($config);
$session->setData('step', STEP_UNIVERSE);
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_UNIVERSE)));
$response->sendHeaders();
exit(0);
}
$layout->load('install.database');
break;
case STEP_PROFILE:
if (empty($_POST)) {
$session->setData('step', $step);
$response->setRedirect("?mode=install&step={$nextStep}");
$response->sendHeaders();
exit(0);
}
$layout->load('install.profile');
$layout->load('install.step.database');
break;
case STEP_UNIVERSE:
if (empty($_POST)) {
$session->setData('step', $step);
$response->setRedirect("?mode=install&step={$nextStep}");
if ($request->isPost()) {
$form = new Wootook_Core_Form($session, array(
'galaxies' => 'text',
'systems' => 'text',
'positions' => 'text',
'allow_spy_drone_attacks' => 'text',
'use_large_numbers' => 'text'
));
$form->setRequest($request);
$form->populate();
if (!$form->validate()) {
$session->setData('step', STEP_UNIVERSE);
$session->setFormData($request->getData());
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_PROFILE)));
$response->sendHeaders();
exit(0);
}
$config = Wootook::getConfig();
$config['default'] = array(
'engine' => array(
'core' => array(
'use_large_numbers' => (bool) $request->getPost('use_large_numbers')
),
'universe' => array(
'galaxies' => $request->getPost('galaxies'),
'systems' => $request->getPost('systems'),
'positions' => $request->getPost('positions')
),
'combat' => array(
'allow_spy_drone_attacks' => (bool) $request->getPost('allow_spy_drone_attacks')
)
),
);
Wootook::writeConfig($config);
$scriptPath = APPLICATION_PATH . 'code' . DIRECTORY_SEPARATOR . 'core'
. 'Wootook' . DIRECTORY_SEPARATOR . 'Core' . DIRECTORY_SEPARATOR
. 'install' . DIRECTORY_SEPARATOR . 'mysql5';
$queue = new Wootook_Core_Setup_Model_Updater_ScriptQueue($scriptPath);
try {
$updater = new Wootook_Core_Setup_Model_Updater();
foreach ($queue as $installScript) {
$updater->run($installScript);
}
} catch (Exception $e) {
$session->addSuccess(Wootook::__('An error occured durong game data initialization.'));
$session->setData('step', STEP_SYSTEM);
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_SYSTEM)));
$response->sendHeaders();
exit(0);
}
$session->addSuccess(Wootook::__('Game data successfully initialized.'));
}
$layout->load('install.step.universe');
break;
case STEP_PROFILE:
if ($request->isPost()) {
$form = new Wootook_Core_Form($session, array(
'username' => 'text',
'email' => 'text',
'email_confirm' => 'text',
'password' => 'text',
'password_confirm' => 'text',
));
$form->setRequest($request);
$form->populate();
if (!$form->validate()) {
$session->setData('step', STEP_PROFILE);
$session->setFormData($request->getData());
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_PROFILE)));
$response->sendHeaders();
exit(0);
}
if ($request->getPost('password') != $request->getPost('password_confirm')) {
$session->setData('step', STEP_PROFILE);
$session->setFormData($request->getData());
$session->addError(Wootook::__('Passwords does not match.'));
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_PROFILE)));
$response->sendHeaders();
exit(0);
}
if ($request->getPost('email') != $request->getPost('email_confirm')) {
$session->setData('step', STEP_PROFILE);
$session->setFormData($request->getData());
$session->addError(Wootook::__('e-mails does not match.'));
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_PROFILE)));
$response->sendHeaders();
exit(0);
}
Wootook_Empire_Model_User::register($request->getPost('username'), $request->getPost('email'), $request->getPost('password'));
$session->setData('step', STEP_UNIVERSE);
$response->setRedirect(Wootook::getUrl('install/index.php', array('mode' => 'install', 'step' => STEP_UNIVERSE)));
$response->sendHeaders();
exit(0);
}
$layout->load('install.universe');
$layout->load('install.step.profile');
break;
case STEP_CONFIG:
@ -367,96 +558,10 @@ EOF;
$QryAddAdmGlx .= "`id_planet` = '1'; ";
doquery($QryAddAdmGlx, 'galaxy');
doquery("UPDATE {{table}} SET `config_value` = '1' WHERE `config_name` = 'LastSettedGalaxyPos';", 'config');
doquery("UPDATE {{table}} SET `config_value` = '1' WHERE `config_name` = 'LastSettedSystemPos';", 'config');
doquery("UPDATE {{table}} SET `config_value` = '1' WHERE `config_name` = 'LastSettedPlanetPos';", 'config');
doquery("UPDATE {{table}} SET `config_value` = `config_value` + '1' WHERE `config_name` = 'users_amount' LIMIT 1;", 'config');
$subTpl = gettemplate ('install/ins_acc_done');
$bloc = $lang;
$bloc['dpath'] = $dpath;
$frame = parsetemplate ( $subTpl, $bloc );
$frame = parsetemplate ( $subTpl, $lang );
}
break;
case 'goto':
if ($page == 1) {
$subTpl = gettemplate ('install/ins_goto_intro');
$bloc = $lang;
$bloc['dpath'] = $dpath;
$frame = parsetemplate ( $subTpl, $bloc );
} elseif ($page == 2) {
if ($_GET['error'] == 1) {
adminMessage ($lang['ins_error1'], $lang['ins_error']);
}
elseif ($_GET['error'] == 2) {
adminMessage ($lang['ins_error2'], $lang['ins_error']);
}
$subTpl = gettemplate ('install/ins_goto_form');
$bloc = $lang;
$bloc['dpath'] = $dpath;
$frame = parsetemplate ( $subTpl, $bloc );
} elseif ($page == 3) {
$host = $_POST['host'];
$user = $_POST['user'];
$pass = $_POST['passwort'];
$prefix = $_POST['prefix'];
$db = $_POST['db'];
if (!mysql_connect($host, $user, $pass)) {
header("Location: ?mode=goto&page=2&error=1");
exit();
}
if (!mysql_select_db($db)) {
header("Location: ?mode=goto&page=2&error=1");
exit();
}
$dz = fopen("../config.php", "w");
if (!$dz) {
header("Location: ?mode=ins&page=1&error=2");
exit();
}
$fileData =<<<EOF
<?php return array(
'global' => array(
'database' => array(
'engine' => 'mysql',
'options' => array(
'hostname' => '{$host}',
'username' => '{$user}',
'password' => '{$pass}',
'database' => '{$db}'
),
'table_prefix' => '{$prefix}',
)
)
);
EOF;
fwrite($dz, $fileData);
fclose($dz);
foreach ($QryMigrate as $query) {
doquery($query, $prefix);
}
$subTpl = gettemplate('install/ins_goto_done');
$bloc = $lang;
$bloc['dpath'] = $dpath;
$frame = parsetemplate($subTpl, $bloc);
}
break;
case 'bye':
header("Location: ../");
break;
default:
header('Location: ?mode=intro');
die();
}
echo $layout->render();