2015-08-31 08:56:26 +02:00
|
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* This software is governed by the CeCILL-B license. If a copy of this license
|
|
|
|
|
* is not distributed with this file, you can obtain one at
|
|
|
|
|
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
|
|
|
|
|
*
|
2016-05-04 01:27:51 +02:00
|
|
|
|
* Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Rapha<EFBFBD>l DROZ
|
2016-08-04 22:26:37 +02:00
|
|
|
|
* Authors of Framadate/OpenSondage: Framasoft (https://github.com/framasoft)
|
2015-08-31 08:56:26 +02:00
|
|
|
|
*
|
|
|
|
|
* =============================
|
|
|
|
|
*
|
2016-05-04 01:27:51 +02:00
|
|
|
|
* Ce logiciel est r<EFBFBD>gi par la licence CeCILL-B. Si une copie de cette licence
|
2015-08-31 08:56:26 +02:00
|
|
|
|
* ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
|
|
|
|
|
* http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
|
|
|
|
|
*
|
2016-05-04 01:27:51 +02:00
|
|
|
|
* Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Rapha<EFBFBD>l DROZ
|
2015-08-31 08:56:26 +02:00
|
|
|
|
* Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
|
|
|
|
|
*/
|
|
|
|
|
namespace Framadate\Services;
|
2018-04-18 16:16:22 +02:00
|
|
|
|
use Doctrine\DBAL\Configuration;
|
|
|
|
|
use Doctrine\DBAL\DBALException;
|
|
|
|
|
use Doctrine\DBAL\DriverManager;
|
2015-08-31 08:56:26 +02:00
|
|
|
|
use Framadate\Utils;
|
|
|
|
|
use Smarty;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This class helps to clean all inputs from the users or external services.
|
|
|
|
|
*/
|
|
|
|
|
class InstallService {
|
2018-02-19 00:18:43 +01:00
|
|
|
|
private $fields = [
|
2015-09-07 16:34:24 +02:00
|
|
|
|
// General
|
|
|
|
|
'appName' => 'Framadate',
|
|
|
|
|
'appMail' => '',
|
|
|
|
|
'responseMail' => '',
|
|
|
|
|
'defaultLanguage' => 'fr',
|
|
|
|
|
'cleanUrl' => true,
|
|
|
|
|
|
|
|
|
|
// Database configuration
|
2018-04-18 16:16:22 +02:00
|
|
|
|
'dbName' => 'framadate',
|
|
|
|
|
'dbPort' => 3306,
|
|
|
|
|
'dbHost' => 'localhost',
|
2015-09-07 16:34:24 +02:00
|
|
|
|
'dbUser' => 'root',
|
|
|
|
|
'dbPassword' => '',
|
|
|
|
|
'dbPrefix' => 'fd_',
|
|
|
|
|
'migrationTable' => 'framadate_migration'
|
2018-02-19 00:18:43 +01:00
|
|
|
|
];
|
2015-08-31 08:56:26 +02:00
|
|
|
|
|
|
|
|
|
function __construct() {}
|
|
|
|
|
|
2015-09-07 16:34:24 +02:00
|
|
|
|
public function updateFields($data) {
|
|
|
|
|
foreach ($data as $field => $value) {
|
|
|
|
|
$this->fields[$field] = $value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function install(Smarty &$smarty) {
|
2015-08-31 08:56:26 +02:00
|
|
|
|
// Check values are present
|
2018-04-18 16:16:22 +02:00
|
|
|
|
if (empty($this->fields['appName']) || empty($this->fields['appMail']) || empty($this->fields['defaultLanguage']) || empty($this->fields['dbName']) || empty($this->fields['dbHost']) || empty($this->fields['dbPort']) || empty($this->fields['dbUser'])) {
|
2015-08-31 08:56:26 +02:00
|
|
|
|
return $this->error('MISSING_VALUES');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Connect to database
|
2018-08-03 14:06:23 +02:00
|
|
|
|
try {
|
2018-08-14 14:26:15 +02:00
|
|
|
|
$connect = $this->connectTo($this->fields);
|
|
|
|
|
} catch(\Doctrine\DBAL\DBALException $e) {
|
2018-08-03 14:06:23 +02:00
|
|
|
|
return $this->error('CANT_CONNECT_TO_DATABASE', $e->getMessage());
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Write configuration to conf.php file
|
2016-05-04 01:27:51 +02:00
|
|
|
|
if ($this->writeConfiguration($smarty) === false) {
|
|
|
|
|
return $this->error(__f('Error', "Can't create the config.php file in '%s'.", CONF_FILENAME));
|
|
|
|
|
}
|
2015-08-31 08:56:26 +02:00
|
|
|
|
|
|
|
|
|
return $this->ok();
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-18 16:16:22 +02:00
|
|
|
|
/**
|
|
|
|
|
* @param $fields
|
|
|
|
|
* @return \Doctrine\DBAL\Connection|null
|
|
|
|
|
*/
|
|
|
|
|
function connectTo($fields) {
|
|
|
|
|
$doctrineConfig = new Configuration();
|
|
|
|
|
$connectionParams = [
|
|
|
|
|
'dbname' => $fields['dbName'],
|
|
|
|
|
'user' => $fields['dbUser'],
|
|
|
|
|
'password' => $fields['dbPassword'],
|
|
|
|
|
'host' => $fields['dbHost'],
|
|
|
|
|
'driver' => $fields['dbDriver'],
|
|
|
|
|
'charset' => $fields['dbDriver'] === 'pdo_mysql' ? 'utf8mb4' : 'utf8',
|
|
|
|
|
];
|
2018-08-14 14:26:15 +02:00
|
|
|
|
return DriverManager::getConnection($connectionParams, $doctrineConfig);
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
2015-09-07 16:34:24 +02:00
|
|
|
|
function writeConfiguration(Smarty &$smarty) {
|
|
|
|
|
foreach($this->fields as $field=>$value) {
|
|
|
|
|
$smarty->assign($field, $value);
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$content = $smarty->fetch('admin/config.tpl');
|
|
|
|
|
|
2016-05-04 01:27:51 +02:00
|
|
|
|
return $this->writeToFile($content);
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $content
|
2018-04-18 16:16:22 +02:00
|
|
|
|
* @return bool|int
|
2015-08-31 08:56:26 +02:00
|
|
|
|
*/
|
|
|
|
|
function writeToFile($content) {
|
2016-05-04 01:27:51 +02:00
|
|
|
|
return @file_put_contents(CONF_FILENAME, $content);
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
function ok() {
|
2018-02-19 00:18:43 +01:00
|
|
|
|
return [
|
2015-08-31 08:56:26 +02:00
|
|
|
|
'status' => 'OK',
|
|
|
|
|
'msg' => __f('Installation', 'Ended', Utils::get_server_name())
|
2018-02-19 00:18:43 +01:00
|
|
|
|
];
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $msg
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2018-08-03 14:06:23 +02:00
|
|
|
|
function error($msg, $details = '') {
|
2018-02-19 00:18:43 +01:00
|
|
|
|
return [
|
2015-08-31 08:56:26 +02:00
|
|
|
|
'status' => 'ERROR',
|
2018-08-03 14:06:23 +02:00
|
|
|
|
'code' => $msg,
|
|
|
|
|
'details' => $details,
|
2018-02-19 00:18:43 +01:00
|
|
|
|
];
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
2015-09-07 12:24:55 +02:00
|
|
|
|
public function getFields() {
|
|
|
|
|
return $this->fields;
|
|
|
|
|
}
|
2015-08-31 08:56:26 +02:00
|
|
|
|
}
|