Install.class.php
Rama main · réplica de lectura del repositorio original.
<?php
class Install {
const DEFAULT_TABLES_PREFIX = 'leed__';
const CONSTANT_FILE = 'constant.php';
public $finished = false;
private $logger;
public $logs = array(
'errors' => array(),
'notices' => array()
);
public $options = array(
'user' => array(
'login' => "",
'password' => ""
),
'db' => array(
'mysqlBase' => "",
'mysqlHost' => "",
'mysqlLogin' => "",
'mysqlMdp' => "",
'mysqlPrefix' => self::DEFAULT_TABLES_PREFIX
)
);
protected $salt;
public function __construct() {
require_once('Logger.class.php');
$this->logger = new Logger('install');
}
protected function overrideDefaultValues($_) {
foreach ($this->options as $type => $options) {
foreach ($options as $var => $defaultValue) {
$val = $type === 'db' ? str_replace("'", "\'", $_[$var]) : Functions::secure($_[$var]);
$this->options[$type][$var] = $val;
}
}
}
public function launch($_, $installActionName) {
if (!$this->checkFunctionsExists()) {
return false;
}
if(!isset($_[$installActionName])) {
return false;
}
$this->overrideDefaultValues($_);
$this->checkLoginPassword();
$this->checkdb();
if(!$this->hasErrors()) {
$this->createConstantFile();
require_once('constant.php');
require_once('MysqlEntity.class.php');
class_exists('Update') or require_once('Update.class.php');
Update::ExecutePatch(true);
require_once('Feed.class.php');
require_once('Event.class.php');
require_once('User.class.php');
require_once('Folder.class.php');
require_once('Configuration.class.php');
$this->createConfig();
$this->createUser();
$this->setFinished(true);
$this->logger->destroy();
}
}
public function getDefaultRoot() {
$urlParts = explode('/', $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
array_pop($urlParts);
return implode('/', $urlParts);
}
protected function createConstantFile() {
$constant = "<?php
//Host de Mysql, le plus souvent localhost ou 127.0.0.1
define('MYSQL_HOST','{$this->options['db']['mysqlHost']}');
//Identifiant MySQL
define('MYSQL_LOGIN','{$this->options['db']['mysqlLogin']}');
//mot de passe MySQL
define('MYSQL_MDP','{$this->options['db']['mysqlMdp']}');
//Nom de la base MySQL ou se trouvera leed
define('MYSQL_BDD','{$this->options['db']['mysqlBase']}');
//Prefix des noms des tables leed pour les bases de données uniques
define('MYSQL_PREFIX','{$this->options['db']['mysqlPrefix']}');
?>";
file_put_contents(self::CONSTANT_FILE, $constant);
if (!is_readable(self::CONSTANT_FILE))
die('"'.self::CONSTANT_FILE.'" not found!');
}
protected function createConfig() {
$configurationManager = new Configuration();
if ($configurationManager->tableExists()) {
$configurationManager->truncate();
}
$configurationManager->create();
$configurationManager->setDefaults();
$this->salt = $configurationManager->get('cryptographicSalt');
}
protected function createUser() {
$userManager = new User();
if ($userManager->tableExists()) {
$userManager->truncate();
}
$userManager->create();
$userManager->add($this->options['user']['login'], $this->options['user']['password'], $this->salt, $this->logger);
$_SESSION['currentUser'] = serialize($userManager->get($this->options['user']['login']));
}
protected function checkLoginPassword() {
if(
empty($this->options['user']['password'])
|| empty($this->options['user']['login'])
) {
$this->logs['errors'][] = _t('INSTALL_ERROR_USERPWD');
return false;
}
return true;
}
protected function checkDb() {
if(
empty($this->options['db']['mysqlHost'])
|| empty($this->options['db']['mysqlLogin'])
|| empty($this->options['db']['mysqlBase'])
) {
$this->logs['errors'][] = _t('INSTALL_ERROR_DB_INFOS');
return false;
}
if (!Functions::testDb(
$this->options['db']['mysqlHost'], $this->options['db']['mysqlLogin'], $this->options['db']['mysqlMdp'], $this->options['db']['mysqlBase']
)) {
$this->logs['errors'][] = _t('INSTALL_ERROR_CONNEXION');
} else {
$this->logs['notices'][] = _t('INSTALL_INFO_CONNEXION');
}
return true;
}
public function hasErrors() {
return count($this->logs['errors']) > 0;
}
public function checkFunctionsExists() {
if(!is_writable('./')){
$this->logs['errors'][] = _t('INSTALL_ERROR_RIGHT', array(str_replace(basename(__FILE__),'',__FILE__)));
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_RIGHT');
}
if (!@function_exists('simplexml_load_file')){
$this->logs['errors'][] = _t('INSTALL_ERROR_PHPXML');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_PHPXML');
}
if (!@function_exists('mysqli_connect')){
$this->logs['errors'][] = _t('INSTALL_ERROR_MYSQLICONNECT');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_MYSQLICONNECT');
}
if (!@function_exists('file_get_contents')){
$this->logs['errors'][] = _t('INSTALL_ERROR_FILEGET');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_FILEGET');
}
if (!@function_exists('file_put_contents')){
$this->logs['errors'][] = _t('INSTALL_ERROR_FILEPUT');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_FILEPUT');
}
if (!@function_exists('curl_exec')){
$this->logs['errors'][] = _t('INSTALL_ERROR_CURL');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_CURL');
}
if (!@function_exists('gd_info')){
$this->logs['errors'][] = _t('INSTALL_ERROR_GD');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_GD');
}
if (!@class_exists('ZipArchive')){
$this->logs['errors'][] = _t('INSTALL_ERROR_ZIP_ARCHIVE');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_ZIP_ARCHIVE');
}
if (!@function_exists('mb_internal_encoding')){
$this->logs['errors'][] = _t('INSTALL_ERROR_MB');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_MB');
}
if (@version_compare(PHP_VERSION, '7.2', '<')){
$this->logs['errors'][] = _t('INSTALL_ERROR_PHPV', array(PHP_VERSION));
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_PHPV', array(PHP_VERSION));
}
if(ini_get('safe_mode') && ini_get('max_execution_time')!=0){
$this->logs['errors'][] = _t('INSTALL_ERROR_SAFEMODE');
}else{
$this->logs['notices'][] = _t('INSTALL_INFO_SAFEMODE');
}
return empty($this->logs['errors']);
}
public function setFinished($finished) {
$this->finished = $finished;
}
public function getFinished() {
return $this->finished;
}
}