Location: PHPKode > projects > MUSPA > muspa/install.php
<?php
/*******************************************************************************
* MUSPA
*
* Copyright (C) 2004 MUSPA Project
*
* Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
* sob os termos da Licença Pública Geral GNU conforme publicada pela Free
* Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
* qualquer versão posterior.
*
* Este programa é distribuído na expectativa de que seja útil, porém, SEM
* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do
* GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto com
* este programa; se não, escreva para a Free Software Foundation, Inc., no
* endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*
*******************************************************************************/

/**
*	Instalador do muspa
*/

require 'include/patTemplate.php';
require 'include/util.php';

define('INSTALLER', true);
require 'conf_auto.php';


if (isset($installed))
{
	echo 'A instalação ja foi feita em '.$installed.'.';
	exit;
}

define('OK', '<span class="ok">Ok</span>');
define('FAIL', '<span class="fail">Falhou!</span>');

// total de passos checados
define('TOTAL', 10);

$tmpl = new PatTemplate;
$tmpl->readTemplatesFromFile('sys/templates/installer.htm');
$tmpl->readTemplatesFromFile('sys/templates/tip.htm');

$pass = 0;

$aVars = array();

// Info do servidor
$aVars['SERVER_SOFTWARE'] = $_SERVER['SERVER_SOFTWARE'];
$aVars['SERVER_ADDRES'] = $_SERVER['SERVER_ADDR'].':'.$_SERVER['SERVER_PORT'];

// Permissões dos arquivos
$perm = fileperms('conf_auto.php') & 0xFFF;
$aVars['PERMS_CONF_AUTO'] = sprintf("%o", $perm);
if (($perm & 0x6) != 0x6)
	$aVars['PERMS_CONF_AUTO_STATUS'] =  Fail('Este arquivo precisa ter CHMOD 666');
else
{
	$aVars['PERMS_CONF_AUTO_STATUS'] = OK;
	$pass++;
}

$perm = fileperms('conf_modules.php') & 0xFFF;
$aVars['PERMS_CONF_MODULES'] = sprintf("%o", $perm);
if (($perm & 0x6) != 0x6)
	$aVars['PERMS_CONF_MODULES_STATUS'] =  Fail('Este arquivo precisa ter CHMOD 666');
else
{
	$aVars['PERMS_CONF_MODULES_STATUS'] = OK;
	$pass++;
}

$perm = fileperms('tmp') & 0xFFF;
$aVars['PERMS_TMP'] = sprintf("%o", $perm);
if (($perm & 0x7) != 0x7)
	$aVars['PERMS_TMP_STATUS'] =  Fail('Esta pasta precisa ter CHMOD 777');
else
{
	$aVars['PERMS_TMP_STATUS'] = OK;
	$pass++;
}

$perm = fileperms('modules/noticia/imagens') & 0xFFF;
$aVars['PERMS_IMAGENS'] = sprintf("%o", $perm);
if (($perm & 0x7) != 0x7)
	$aVars['PERMS_IMAGENS_STATUS'] =  Fail('Esta pasta precisa ter CHMOD 777');
else
{
	$aVars['PERMS_IMAGENS_STATUS'] = OK;
	$pass++;
}


// Checa versão do PHP
$aVars['PHP_VERSION'] = phpversion();
$ok = version_compare(phpversion(), '4.3.0');
if ($ok > 0)
{
	$aVars['PHP_VERSION_STATUS'] = OK;
	$pass++;
}
else
	$aVars['PHP_VERSION_STATUS'] = Fail('Seu PHP precisa ser uma versão maior ou igual a 4.3');


// Checa dados de conexão com MySQL
$mysql_host = isset($_POST['mysql_host']) ? $_POST['mysql_host'] : '';;
$mysql_port = isset($_POST['mysql_port']) ? $_POST['mysql_port'] : '';;
$mysql_user = isset($_POST['mysql_user']) ? $_POST['mysql_user'] : '';;
$mysql_pwd = isset($_POST['mysql_pwd']) ? $_POST['mysql_pwd'] : '';;
if ($mysql_host && $mysql_port && $mysql_user)
{
	$link = @mysql_connect($mysql_host, $mysql_user, $mysql_pwd, $mysql_port);
	if ($link)
	{
		$aVars['MYSQL_HOST_STATUS'] = OK;
		$pass++;
	}
	else
		$aVars['MYSQL_HOST_STATUS'] = Fail(mysql_errno().': '.mysql_error());
}
$aVars['MYSQL_HOST'] = TextField('mysql_host', $mysql_host);
$aVars['MYSQL_PORT'] = TextField('mysql_port', $mysql_port ? $mysql_port : '3306');
$aVars['MYSQL_USER'] = TextField('mysql_user', $mysql_user);
$aVars['MYSQL_PWD'] = TextField('mysql_pwd', $mysql_pwd);

// Versão do MySQL
$mysql_version = @mysql_get_server_info();
$aVars['MYSQL_VERSION'] = $mysql_version;
if (!isset($link))
	$aVars['MYSQL_VERSION_STATUS'] = '';
elseif (version_compare($mysql_version, '4') < 0)
	$aVars['MYSQL_VERSION_STATUS'] = Fail('A versão do MySQL precisa ser a 4.0 ou mais recente.');
else
{
	$aVars['MYSQL_VERSION_STATUS'] = OK;
	$pass++;
}
// Checa database do MySQL
$mysql_db = isset($_POST['mysql_db']) ? $_POST['mysql_db'] : '';
if ($mysql_db)
{
	$ok = @mysql_select_db($mysql_db);
	if ($ok)
	{
		$aVars['MYSQL_DB_STATUS'] = OK;
		$pass++;
	}
	else
		$aVars['MYSQL_DB_STATUS'] = Fail(mysql_errno().': '.mysql_error());
}
$aVars['MYSQL_DB'] = TextField('mysql_db', $mysql_db);

// Checa prefixo da tabela
$mysql_prefix = isset($_POST['mysql_prefix']) ? $_POST['mysql_prefix'] : '';
if ($mysql_prefix)
{
	$res = mysql_query('SHOW TABLES');
	$ok = true;
	while ($table = mysql_fetch_row($res))
	{
		if (strpos($table[0], $mysql_prefix) === 0)
		{
			$ok = false;
			break;
		}
	}
	if ($ok)
	{
		$aVars['MYSQL_PREFIX_STATUS'] = OK;
		$pass++;
	}
	else
		$aVars['MYSQL_PREFIX_STATUS'] = Fail('Já existe uma ou mais tabelas com este prefixo.');
}
$aVars['MYSQL_PREFIX'] = TextField('mysql_prefix', $mysql_prefix);

// Checa email do admin
$admin_mail = isset($_POST['admin_mail']) ? $_POST['admin_mail'] : '';
if ($admin_mail)
{
	$aVars['ADMIN_MAIL_STATUS'] = OK;
	$pass++;
}
else
	$aVars['ADMIN_MAIL_STATUS'] = Fail('Você precisa preencher o email do administrador.');
$aVars['ADMIN_MAIL'] = TextField('admin_mail', $admin_mail);


$aVars['PASS'] = $pass;
$aVars['TOTAL'] = TOTAL;

if ($_SERVER['QUERY_STRING'] == 'install' && $pass == TOTAL)
	Install();
else
{
	$aVars['ACTION'] = $pass < TOTAL ? 'Verificar configuração' : 'Instalar!';
	$aVars['FORMACTION'] = $pass < TOTAL ? 'install.php' : 'install.php?install';

	$tmpl->addVars('main', $aVars);
	$tmpl->displayParsedTemplate('main');
}


function Fail($msg)
{
	return '<span style="cursor: pointer; cursor: hand;" onmouseover="DisplayTip(\''.addcslashes($msg, "\"\'\r\n\t").'\');" onmouseout="HideTip();">'.FAIL.'</span>';
}

function TextField($name, $value = '')
{
	return '<input type="text" name="'.$name.'" value="'.$value.'" size="40" />';
}


function install()
{
	// Cria arquivo de configuração
	$cfg = fopen('conf_auto.php', "w");
	$port = $_POST['mysql_port'] != '3306' ? ':'.$_POST['mysql_port'] : '';

	$installdir = basename(dirname(__FILE__));
	$date = date('d/m/Y H:i:s');

	$text = <<<EOT
/**
*	Arquivo de configuração gerado automaticamente pelo instalador do
*	muspa às $date.
*/

/**
*	Email do administrador, alguns módulos podem usar este email
*	para enviar informações ou mensagens de erro.
*/
define('ADMIN_MAIL', '$_POST[admin_mail]');

/*	Pasta onde esta instalado o muspa	*/
define('INSTALL_DIR', '$installdir');

/*	Dados do MySQL	*/
define('DB_HOST','$_POST[mysql_host]$port');
define('DB_USER','$_POST[mysql_user]');
define('DB_PWD','$_POST[mysql_pwd]');
define('DB_DB','$_POST[mysql_db]');

/*	Prefixo do nome das tabelas	*/
define('PRE_TABLE','$_POST[mysql_prefix]_');

\$installed = '$date';

EOT;

	fwrite($cfg, "<?php\n".$text);
	fclose($cfg);

	// Executa queries SQL
	$file = file('muspa.sql');
	$buffer = "";
	foreach($file as $line)
	{
		if ($line[0] == '#' || $line[0] == '\n')
			continue;
		$buffer .= str_replace('{PREFIX}', $_POST['mysql_prefix'].'_', $line);
		if (strpos($line, ';') === false)
			continue;
		// executando querie
		mysql_query($buffer);
		$buffer = "";
	}

	header('Location: ./');
	exit;
}
Return current item: MUSPA