Skip to content
Snippets Groups Projects
Commit b459eeb6 authored by Simon Leblanc's avatar Simon Leblanc Committed by Olivier PEREZ
Browse files

First implementation of the installer

(cherry picked from commit 16da5370)

Conflicts:
	app/inc/constants.php.template
	app/inc/init.php
parent 05702c6c
No related branches found
No related tags found
No related merge requests found
......@@ -20,9 +20,6 @@
// FRAMADATE version
const VERSION = 0.9;
// Server name
const STUDS_URL = '<www.mydomain.com>';
// Application name
const NOMAPPLICATION = '<Application name>';
......
......@@ -30,8 +30,8 @@ if (ini_get('date.timezone') == '') {
date_default_timezone_set('Europe/Paris');
}
include_once __DIR__ . '/constants.php';
include_once __DIR__ . '/i18n.php';
require_once __DIR__ . '/constants.php';
require_once __DIR__ . '/i18n.php';
// Smarty
require_once __DIR__ . '/../../vendor/smarty/smarty/libs/Smarty.class.php';
......
CREATE TABLE IF NOT EXISTS `comments` (`id_comment` int(11) unsigned NOT NULL AUTO_INCREMENT, `id_sondage` char(16) NOT NULL, `comment` text NOT NULL, `usercomment` text, PRIMARY KEY (`id_comment`), KEY `id_sondage` (`id_sondage`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `sondage` (`id_sondage` char(16) NOT NULL, `commentaires` text, `mail_admin` varchar(128) DEFAULT NULL, `nom_admin` varchar(64) DEFAULT NULL, `titre` text, `id_sondage_admin` char(24) DEFAULT NULL, `date_creation` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `date_fin` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `format` varchar(2) DEFAULT NULL, `mailsonde` tinyint(1) DEFAULT '0', `statut` int(11) NOT NULL DEFAULT '1' COMMENT '1 = actif ; 0 = inactif ; ', UNIQUE KEY `id_sondage` (`id_sondage`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `sujet_studs` (`id_sondage` char(16) NOT NULL, `sujet` text, KEY `id_sondage` (`id_sondage`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `user_studs` (`id_users` int(11) unsigned NOT NULL AUTO_INCREMENT, `nom` varchar(64) NOT NULL, `id_sondage` char(16) NOT NULL, `reponses` text NOT NULL, PRIMARY KEY (`id_users`), KEY `id_sondage` (`id_sondage`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
INSERT INTO `sondage` (`id_sondage`, `commentaires`, `mail_admin`, `nom_admin`, `titre`, `id_sondage_admin`, `date_fin`, `format`) VALUES ('aqg259dth55iuhwm','Repas de Noel du service','Stephanie@retaillard.com','Stephanie', 'Repas de Noel','aqg259dth55iuhwmy9d8jlwk', FROM_UNIXTIME('1627100361'),'D+');
INSERT INTO `sujet_studs` (`id_sondage`, `sujet`) VALUES ('aqg259dth55iuhwm','1225839600@12h,1225839600@19h,1226012400@12h,1226012400@19h,1226876400@12h,1226876400@19h,1227049200@12h,1227049200@19h,1227826800@12h,1227826800@19h');
INSERT INTO `user_studs` (`nom`, `id_sondage`, `reponses`, `id_users`) VALUES ('marcel','aqg259dth55iuhwm','0110111101','933'), ('paul','aqg259dth55iuhwm','1011010111','935'), ('sophie','aqg259dth55iuhwm','1110110000','945'), ('barack','aqg259dth55iuhwm','0110000','948'), ('takashi','aqg259dth55iuhwm','0000110100','951'), ('albert','aqg259dth55iuhwm','1010110','975'), ('alfred','aqg259dth55iuhwm','0110010','1135'), ('marcs','aqg259dth55iuhwm','0100001010','1143'), ('laure','aqg259dth55iuhwm','0011000','1347'), ('benda','aqg259dth55iuhwm','1101101100','1667'), ('Albert','aqg259dth55iuhwm','1111110011','1668');
<?php
$configuration_file = __DIR__.'/app/inc/constants.php';
if (file_exists($configuration_file) === true) {
header('Location: index.php');
exit;
}
if (isset($_POST['install']) === true) {
ini_set('max_execution_time', 0);
ob_start();
// Composer exist ?
$locations = array(
__DIR__.'/composer.phar',
//'/usr/bin/composer',
'/usr/bin/composer.phar',
//'/usr/local/bin/composer',
'/usr/local/bin/composer.phar',
);
$composer = null;
foreach ($locations as $location) {
if (file_exists($location) === true) {
$composer = $location;
break;
}
}
// If composer not found, download it !
if (null === $composer) {
if (!file_put_contents(__DIR__.'/composer.phar', file_get_contents('https://getcomposer.org/composer.phar'))) {
die('Installation impossible : impossible to find composer !');
}
$composer = __DIR__.'/composer.phar';
}
try {
echo "Utilisation de ".$composer.'<br />';
ob_flush();
flush();
require_once 'phar://'.$composer.'/src/bootstrap.php';
ob_flush();
flush();
$composer_home = getenv('COMPOSER_HOME');
$personal_home = getenv('HOME');
if (empty($composer_home) === true && empty($personal_home) === true) {
putenv('COMPOSER_HOME='.sys_get_temp_dir());
}
$application = new \Composer\Console\Application();
$application->setAutoExit(false);
$command = $application->find('install');
$input = new \Symfony\Component\Console\Input\ArrayInput(array(
'command' => 'install',
'-d' => __DIR__,
'-vvv',
'--optimize-autoloader',
));
$fhandle = fopen('php://output', 'wb');
$output = new \Symfony\Component\Console\Output\StreamOutput($fhandle);
$application->run($input, $output);
fclose($fhandle);
ob_flush();
flush();
// Save configuration
$configuration = file_get_contents($configuration_file.'.template');
if (false === $configuration) {
throw new \Exception('Impossible to read template configuration');
}
$configuration = str_replace(
array(
'\'<Application name>\'',
'\'<email address>\'',
'\'<no-reply@mydomain.com>\'',
'\'<database name>\'',
'\'<database user>\'',
'\'<database password>\'',
'\'<database server>\'',
'\'<database type>\'',
),
array(
var_export($_POST['title'], true),
var_export($_POST['email'], true),
var_export($_POST['no-reply-email'], true),
var_export($_POST['db-name'], true),
var_export($_POST['db-user'], true),
var_export($_POST['db-pass'], true),
var_export($_POST['db-host'], true),
var_export($_POST['db-type'], true),
),
$configuration
);
if (file_put_contents($configuration_file, $configuration) === false) {
throw new \Exception('Impossible to save configuration');
}
// Inject database
require_once __DIR__.'/app/inc/init.php';
$sqls = explode("\n", file_get_contents(__DIR__.'/install.mysql.auto.sql'));
foreach ($sqls as $sql) {
$sql = trim($sql);
if (empty($sql) === true) {
continue;
}
$query = $connect->Prepare($sql);
$cleaning = $connect->Execute($query);
}
ob_flush();
flush();
ob_end_clean();
} catch (Exception $e) {
echo '<br /><b>'.$e->getMessage().'</b><br />';
echo "<pre>".$e->getTraceAsString()."</pre>";
die('installation failed');
}
}
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>OpenSondage Installation</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>OpenSondage Installation</h1>
<form action="" method="post" role="form">
<fieldset>
<legend>General</legend>
<div class="form-group">
<label for="title">Title</label>
<input type="text" class="form-control" id="title" name="title" placeholder="Application name" required>
</div>
<div class="form-group">
<label for="email">Administrator email</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Email of the administrator" required>
</div>
<div class="form-group">
<label for="no-reply-email">No-reply email</label>
<input type="email" class="form-control" id="no-reply-email" name="no-reply-email" placeholder="Email for automatic responses" required>
</div>
</fieldset>
<fieldset>
<legend>Database</legend>
<div class="form-group">
<label for="db-type">Type</label>
<select name="db-type" id="db-type" required>
<option value="pdo">PDO - MySQL</option>
<option value="mysql">MySQL</option>
</select>
</div>
<div class="form-group">
<label for="db-host">Host</label>
<input type="text" class="form-control" id="db-host" name="db-host" value="localhost" required>
</div>
<div class="form-group">
<label for="db-name">Database name</label>
<input type="text" class="form-control" id="db-name" name="db-name" value="opensondage" required>
</div>
<div class="form-group">
<label for="db-user">Username</label>
<input type="text" class="form-control" id="db-user" name="db-user" value="root" required>
</div>
<div class="form-group">
<label for="db-pass">Password</label>
<input type="password" class="form-control" id="db-pass" name="db-pass" value="">
</div>
</fieldset>
<input type="submit" class="btn btn-default" name="install" value="Install">
</form>
</div>
</body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment