<?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;
}