'install',
'module_title' => 'INSTALL',
'module_filename' => substr(basename(__FILE__), 0, -strlen($phpEx)-1),
'module_order' => 10,
'module_subs' => '',
'module_stages' => array('INTRO', 'REQUIREMENTS', 'BASIC', 'CONFIG_FILE', 'ADVANCED', 'FINAL'),
'module_reqs' => ''
);
return;
}
class install_install extends module
{
function install_install(&$p_master)
{
$this->p_master = &$p_master;
}
function main($mode, $sub)
{
global $lang, $template;
switch($sub)
{
case 'intro' :
$this->page_title = $lang['SUB_INTRO'];
$template->assign_vars(array(
'TITLE' => $lang['INSTALL_INTRO'],
'BODY' => $lang['INSTALL_INTRO_BODY'],
'L_SUBMIT' => $lang['NEXT'],
'U_ACTION' => $this->p_master->module_url . "?mode=$mode&sub=requirements",
));
break;
case 'requirements' :
$this->check_server_requirements($mode, $sub);
break;
}
$this->tpl_name = 'install_install';
}
/**
* Checks that the server we are installing on meets the requirements for running phpBB
*/
function check_server_requirements($mode, $sub)
{
global $lang, $template, $phpbb_root_path, $phpEx;
$this->page_title = $lang['STAGE_REQUIREMENTS'];
$template->assign_vars(array(
'TITLE' => $lang['REQUIREMENTS_TITLE'],
'BODY' => $lang['REQUIREMENTS_EXPLAIN'],
));
$passed = array('php' => false, 'db' => false, 'files' => false);
// Test for basic PHP settings
$template->assign_block_vars('checks', array(
'S_LEGEND' => true,
'S_FIRST_ROW' => true,
'LEGEND' => $lang['PHP_SETTINGS'],
'LEGEND_EXPLAIN' => $lang['PHP_SETTINGS_EXPLAIN'],
));
// Test the minimum PHP version
$php_version = phpversion();
if (version_compare($php_version, '4.3.3') < 0)
{
$result = '' . $lang['NO'] . '';
}
else
{
$passed['php'] = true;
// We also give feedback on whether we're running in safe mode
$result = '' . $lang['YES'];
if (@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'on')
{
$result .= ', ' . $lang['PHP_SAFE_MODE'];
}
$result .= '';
}
$template->assign_block_vars('checks', array(
'TITLE' => $lang['PHP_VERSION_REQD'],
'RESULT' => $result,
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
// Check for register_globals being enabled
if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on')
{
$result = '' . $lang['NO'] . '';
}
else
{
$result = '' . $lang['YES'] . '';
}
$template->assign_block_vars('checks', array(
'TITLE' => $lang['PHP_REGISTER_GLOBALS'],
'TITLE_EXPLAIN' => $lang['PHP_REGISTER_GLOBALS_EXPLAIN'],
'RESULT' => $result,
'S_EXPLAIN' => true,
'S_LEGEND' => false,
));
// Test for available database modules
$template->assign_block_vars('checks', array(
'S_LEGEND' => true,
'S_FIRST_ROW' => false,
'LEGEND' => $lang['PHP_SUPPORTED_DB'],
'LEGEND_EXPLAIN' => $lang['PHP_SUPPORTED_DB_EXPLAIN'],
));
$dlls_db = array();
$passed['db'] = false;
foreach ($this->available_dbms as $db_name => $db_ary)
{
$dll = $db_ary['MODULE'];
if (!extension_loaded($dll))
{
if (!$this->can_load_dll($dll))
{
$template->assign_block_vars('checks', array(
'TITLE' => $lang['DLL_' . strtoupper($db_name)],
'RESULT' => '' . $lang['UNAVAILABLE'] . '',
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
continue;
}
}
$template->assign_block_vars('checks', array(
'TITLE' => $lang['DLL_' . strtoupper($db_name)],
'RESULT' => '' . $lang['AVAILABLE'] . '',
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
$passed['db'] = true;
}
// Test for other modules
$template->assign_block_vars('checks', array(
'S_LEGEND' => true,
'S_FIRST_ROW' => false,
'LEGEND' => $lang['PHP_OPTIONAL_MODULE'],
'LEGEND_EXPLAIN' => $lang['PHP_OPTIONAL_MODULE_EXPLAIN'],
));
foreach ($this->php_dlls_other as $dll)
{
if (!extension_loaded($dll))
{
if (!$this->can_load_dll($dll))
{
$template->assign_block_vars('checks', array(
'TITLE' => $lang['DLL_' . strtoupper($dll)],
'RESULT' => '' . $lang['UNAVAILABLE'] . '',
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
continue;
}
}
$template->assign_block_vars('checks', array(
'TITLE' => $lang['DLL_' . strtoupper($dll)],
'RESULT' => '' . $lang['AVAILABLE'] . '',
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
}
// Can we find Imagemagick anywhere on the system?
$exe = ((defined('PHP_OS')) && (preg_match('#win#i', PHP_OS))) ? '.exe' : '';
$magic_home = getenv('MAGICK_HOME');
$img_imagick = '';
if (empty($magic_home))
{
$locations = array('C:/WINDOWS/', 'C:/WINNT/', 'C:/WINDOWS/SYSTEM/', 'C:/WINNT/SYSTEM/', 'C:/WINDOWS/SYSTEM32/', 'C:/WINNT/SYSTEM32/', '/usr/bin/', '/usr/sbin/', '/usr/local/bin/', '/usr/local/sbin/', '/opt/', '/usr/imagemagick/', '/usr/bin/imagemagick/');
$path_locations = str_replace('\\', '/', (explode(($exe) ? ';' : ':', getenv('PATH'))));
$locations = array_merge($path_locations, $locations);
foreach ($locations as $location)
{
// The path might not end properly, fudge it
if (substr($location, -1, 1) !== '/')
{
$location .= '/';
}
if (@is_readable($location . 'mogrify' . $exe) && @filesize($location . 'mogrify' . $exe) > 3000)
{
$img_imagick = str_replace('\\', '/', $location);
continue;
}
}
}
else
{
$img_imagick = str_replace('\\', '/', $magic_home);
}
$template->assign_block_vars('checks', array(
'TITLE' => $lang['APP_MAGICK'],
'RESULT' => ($img_imagick) ? '' . $lang['AVAILABLE'] . ', ' . $img_imagick . '' : '' . $lang['NO_LOCATION'] . '',
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
// Check permissions on files/directories we need access to
$template->assign_block_vars('checks', array(
'S_LEGEND' => true,
'S_FIRST_ROW' => false,
'LEGEND' => $lang['FILES_REQUIRED'],
'LEGEND_EXPLAIN' => $lang['FILES_REQUIRED_EXPLAIN'],
));
$directories = array('cache/', 'files/', 'store/');
umask(0);
$passed['files'] = true;
foreach ($directories as $dir)
{
$write = $exists = true;
if (file_exists($phpbb_root_path . $dir))
{
if (!is_writeable($phpbb_root_path . $dir))
{
$write = (@chmod($phpbb_root_path . $dir, 0777)) ? true : false;
}
}
else
{
$write = $exists = (@mkdir($phpbb_root_path . $dir, 0777)) ? true : false;
}
$passed['files'] = ($exists && $write && $passed['files']) ? true : false;
$exists = ($exists) ? '' . $lang['FILE_FOUND'] . '' : '' . $lang['FILE_NOT_FOUND'] . '';
$write = ($write) ? ', ' . $lang['FILE_WRITEABLE'] . '' : (($exists) ? ', ' . $lang['FILE_UNWRITEABLE'] . '' : '');
$template->assign_block_vars('checks', array(
'TITLE' => $dir,
'RESULT' => $exists . $write,
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
}
// Check permissions on files/directories it would be useful access to
$template->assign_block_vars('checks', array(
'S_LEGEND' => true,
'S_FIRST_ROW' => false,
'LEGEND' => $lang['FILES_OPTIONAL'],
'LEGEND_EXPLAIN' => $lang['FILES_OPTIONAL_EXPLAIN'],
));
// config.php ... let's just warn the user it's not writeable
$dir = 'config.'.$phpEx;
$write = $exists = true;
if (file_exists($phpbb_root_path . $dir))
{
if (!is_writeable($phpbb_root_path . $dir))
{
$write = false;
}
}
else
{
$write = $exists = false;
}
$exists = ($exists) ? '' . $lang['FILE_FOUND'] . '' : '' . $lang['FILE_NOT_FOUND'] . '';
$write = ($write) ? ', ' . $lang['FILE_WRITEABLE'] . '' : (($exists) ? ', ' . $lang['FILE_UNWRITEABLE'] . '' : '');
$template->assign_block_vars('checks', array(
'TITLE' => $dir,
'RESULT' => $exists . $write,
'S_EXPLAIN' => false,
'S_LEGEND' => false,
));
// And finally where do we want to go next (well today is taken isn't it :P)
$s_hidden_fields = ($img_imagick) ? '' : '';
// $url = ($passed['php'] && $passed['db'] && $passed['files']) ? $this->p_master->module_url . "?mode=$mode&sub=database" : $this->p_master->module_url . "?mode=$mode&sub=requirements";
// The road ahead is still under construction, follow the diversion back to the olod installer..... ;)
$url = ($passed['php'] && $passed['db'] && $passed['files']) ? "install.$phpEx?stage=1" : $this->p_master->module_url . "?mode=$mode&sub=requirements";
$submit = ($passed['php'] && $passed['db'] && $passed['files']) ? $lang['INSTALL_START'] : $lang['INSTALL_TEST'];
$template->assign_vars(array(
'L_SUBMIT' => $submit,
'S_HIDDEN' => $s_hidden_fields,
'U_ACTION' => $url,
));
}
function can_load_dll($dll)
{
global $suffix;
return ((@ini_get('enable_dl') || strtolower(@ini_get('enable_dl')) == 'on') && (!@ini_get('safe_mode') || strtolower(@ini_get('safe_mode')) == 'off') && @dl($dll . ".$suffix")) ? true : false;
}
/**
* Specific PHP modules we may require for certain optional or extended features
*/
var $php_dlls_other = array('zlib', 'ftp', 'xml');
/**
* Details of the database management systems supported
*/
var $available_dbms = array(
'firebird' => array(
'LABEL' => 'FireBird',
'SCHEMA' => 'firebird',
'MODULE' => 'interbase',
'DELIM' => ';;',
'COMMENTS' => 'remove_remarks'
),
'mysql' => array(
'LABEL' => 'MySQL',
'SCHEMA' => 'mysql',
'MODULE' => 'mysql',
'DELIM' => ';',
'COMMENTS' => 'remove_remarks'
),
'mysqli' => array(
'LABEL' => 'MySQL 4.1.x/5.x (MySQLi)',
'SCHEMA' => 'mysql',
'MODULE' => 'mysqli',
'DELIM' => ';',
'COMMENTS' => 'remove_remarks'
),
'mysql4' => array(
'LABEL' => 'MySQL 4.x/5.x',
'SCHEMA' => 'mysql',
'MODULE' => 'mysql',
'DELIM' => ';',
'COMMENTS' => 'remove_remarks'
),
'mssql' => array(
'LABEL' => 'MS SQL Server 7/2000',
'SCHEMA' => 'mssql',
'MODULE' => 'mssql',
'DELIM' => 'GO',
'COMMENTS' => 'remove_comments'
),
'mssql_odbc'=> array(
'LABEL' => 'MS SQL Server [ ODBC ]',
'SCHEMA' => 'mssql',
'MODULE' => 'odbc',
'DELIM' => 'GO',
'COMMENTS' => 'remove_comments'
),
'oracle' => array(
'LABEL' => 'Oracle',
'SCHEMA' => 'oracle',
'MODULE' => 'oci8',
'DELIM' => '/',
'COMMENTS' => 'remove_comments'
),
'postgres' => array(
'LABEL' => 'PostgreSQL 7.x',
'SCHEMA' => 'postgres',
'MODULE' => 'pgsql',
'DELIM' => ';',
'COMMENTS' => 'remove_comments'
),
'sqlite' => array(
'LABEL' => 'SQLite',
'SCHEMA' => 'sqlite',
'MODULE' => 'sqlite',
'DELIM' => ';',
'COMMENTS' => 'remove_remarks'
),
);
}
?>