Arquivos
wMind/mind3rd/env/setup/Setup.php
T
Felipe N. Moura 5057551be7 Added friendly message for extra parameter error
Added redirect to setup page when accessing the index before installing it
2012-03-28 18:56:48 -03:00

219 linhas
7.1 KiB
PHP
Arquivo Executável

<?php
/**
* This file is part of TheWebMind 3rd generation.
*
* @author Felipe Nascimento de Moura <felipenmoura@gmail.com>
* @license licenses/mind3rd.license
*/
/**
* Generic instructions to install the system.
*
* This class provides a bunch of methods to interact with the user's OS and
* install the application and its database.
*
* NOTE: There are no nacionalization for this class, which only show messages
* in english.
*
* @abstract
* @author Felipe Nascimento de Moura <felipenmoura@gmail.com>
*/
abstract class Setup {
public static $installationOk = false;
public static $readLlineOk = false;
public static $phpVsOk = false;
public static $sqliteOk = false;
public static $projectsDir = false;
public static $sqliteDir = false;
public static $apiDir = false;
/**
* Returns WIN for Windows or unix for any ther OS.
*
* @return string
*/
public static function getSO()
{
if(strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
return 'WIN';
return 'unix';
}
public static function __getStatic($what)
{
if(isset(self::$what))
return $what;
else return false;
}
/**
* Performs the installation itself.
*
* This method will install the application calling the install method
* from the class developed to each specific Operational System.
*/
public static function install()
{
if (self::getSO() !== 'WIN')
{
require('mind3rd/env/setup/UnixSetup.php');
$_MIND['sys']= 'unix';
UnixSetup::install();
}else{
require('mind3rd/env/setup/WinSetup.php');
$_MIND['sys']= 'win';
WinSetup::install();
}
}
public static function databaseAlreadyExists()
{
return file_exists('mind3rd/SQLite/mind');
}
/**
* Verifies the system requirements.
*
* This method sets its own static properties to true or false according
* to each requirement, returning true if the minimum requirement has been
* reached or false in other case.
*
* @return boolean Whether all the minimum requirements are ok or not.
*/
public static function checkRequirements()
{
$phpVs= explode('-', phpversion());
$phpVs= $phpVs[0];
$phpVs= explode('.', $phpVs);
$phpVsOk= false; /*********/
if($phpVs[0] >5)
$phpVsOk= true;
else{
if($phpVs[0] == 5 && $phpVs[1] >= 3)
$phpVsOk= true;
}
$sqliteOk= false; /*********/
if(class_exists('SQLite3'))
$sqliteOk= true;
$readLlineOk= false; /*********/
if(function_exists('readline'))
$readLlineOk= true;
$runDirOk= false; /*********/
if(self::getSO() == 'WIN')
{
$runDir= str_replace('cmd.exe', '', getenv('COMSPEC'));
if(is_writable($runDir))
$runDirOk= true;
}else{
$runDir= "/bin/mind";
if(is_writable("/bin/mind"))
$runDirOk= true;
}
$projectsDir= false; /*********/
if(is_writable('mind3rd/projects/'))
$projectsDir= true;
$sqliteDir= false;
if(is_writable('mind3rd/SQLite/'))
$sqliteDir= true;
$apiDir= false;
if(is_writable('mind3rd/API/'))
$apiDir= true;
self::$phpVsOk = $phpVsOk;
self::$readLlineOk = $readLlineOk;
self::$sqliteOk = $sqliteOk;
self::$projectsDir = $projectsDir;
self::$sqliteDir = $sqliteDir;
self::$apiDir = $apiDir;
return self::$installationOk= $phpVsOk && $sqliteOk && $projectsDir && $sqliteDir && $apiDir;
}
public static function isInstalled(){
return file_exists('mind3rd/SQLite/mind');
}
/**
* Creates the SQLite DataBase.
*
* This method will create the SQLite database the system will use to work.
* This method also inserts the admin user, as default, with password admin.
*
* @return type
*/
public static function createDatabase(){
GLOBAL $_MIND;
echo " creating database...\n";
$sqlite= class_exists('SQLite3')? 'SQLite3': 'SQLiteDatabase';
$sqliteDDLFile= 'mind3rd/SQLite/ddl.sql';
$sqliteBaseFile= 'mind3rd/SQLite/mind';
if(file_exists($sqliteBaseFile))
{
echo " <[warning] Database already exists! It till NOT be touched>\n";
echo " If you want to re-install the system, remove the following file:\n";
echo " ".str_replace('\\', '/', getcwd()).
"/".$sqliteBaseFile."\n";
}else{
$email= 'mail@domain.com';
$pwd= 'admin';
if(isset($_POST))
{
if(isset($_POST['adminEmail']))
$email= $_POST['adminEmail'];
if(isset($_POST['adminPWD']))
$email= $_POST['adminPWD'];
}
if(class_exists($sqlite) && $db = new SQLite3($sqliteBaseFile))
{
$DDL= file_get_contents($sqliteDDLFile);
if(!$db->exec($DDL))
{
echo " <[ERROR] Failed creating the SQLite database!>\n";
return false;
}
echo " adding the main user...\n";
$db->exec("INSERT into user(
name,
login,
pwd,
status,
type,
email
)VALUES(
'Administrator',
'admin',
'".sha1($pwd)."',
'A',
'A',
'".$email."'
);");
echo " setting database permissions...\n";
if($_MIND['sys']== 'unix')
echo shell_exec('sudo chmod 777 '.getcwd().'/mind3rd/SQLite/mind');
chmod($sqliteBaseFile, 0777);
}else{
echo " <[ERROR] SQLite Database could not be created. ".
" Is your server working properly with SQLite?>\n";
echo " TIP: Remember that, the php.ini for phpcli may be
different from the php.ini for your http server\n";
exit;
}
}
echo " Finished\n";
}
public static function init()
{
GLOBAL $_MIND;
}
}