2017-05-22 11:24:21 +02:00
< ? php
///////////////////////////////////////////////////////////////////////////////
//
// NagiosQL
//
///////////////////////////////////////////////////////////////////////////////
//
2017-10-20 15:00:08 +02:00
// (c) 2005-2017 by Martin Willisegger
2017-05-22 11:24:21 +02:00
//
// Project : NagiosQL
// Component : Installer main script
// Website : http://www.nagiosql.org
2017-10-20 15:00:08 +02:00
// Date : $LastChangedDate: 2017-06-22 09:29:35 +0200 (Thu, 22 Jun 2017) $
2017-05-22 11:24:21 +02:00
// Author : $LastChangedBy: martin $
2017-10-20 15:00:08 +02:00
// Version : 3.3.0
// Revision : $LastChangedRevision: 2 $
2017-05-22 11:24:21 +02:00
//
///////////////////////////////////////////////////////////////////////////////
//
// Define common variables
// =======================
$preContent = " templates/index.tpl.htm " ;
$preEncode = 'utf-8' ;
$preLocale = " ../config/locale " ;
$filConfig = " ../config/settings.php " ;
$preDBType = " mysql " ;
$strLangOpt = " " ;
2017-10-20 15:00:08 +02:00
$strVersion = " 3.3.0 " ;
2017-05-22 11:24:21 +02:00
$intUpdate = 0 ;
2017-10-20 15:00:08 +02:00
$intError = 0 ;
2017-05-22 11:24:21 +02:00
//
// Include preprocessing file
// ==========================
require ( " functions/prepend_install.php " );
//
// Restart session
// ===============
session_destroy ();
2017-10-20 15:00:08 +02:00
session_start ([ 'name' => 'nagiosql_install' ]);
2017-05-22 11:24:21 +02:00
//
// POST parameters
// ===============
$arrLocale = array ( " zh_CN " , " de_DE " , " da_DK " , " en_GB " , " fr_FR " , " it_IT " , " ja_JP " , " nl_NL " , " pl_PL " , " pt_BR " , " ru_RU " , " es_ES " );
$chkLocale = ( isset ( $_POST [ 'selLanguage' ]) && in_array ( $_POST [ 'selLanguage' ], $arrLocale )) ? $_POST [ 'selLanguage' ] : " no " ;
//
// Language settings
// =================
if ( extension_loaded ( 'gettext' )) {
if ( $chkLocale == " no " ) {
if ( substr ( $_SERVER [ 'HTTP_ACCEPT_LANGUAGE' ], 0 , 2 ) == " de " ) {
$chkLocale = 'de_DE' ;
} else {
$chkLocale = 'en_GB' ;
}
}
putenv ( " LC_ALL= " . $chkLocale . " . " . $preEncode );
putenv ( " LANG= " . $chkLocale . " . " . $preEncode );
// GETTEXT domain
setlocale ( LC_ALL , $chkLocale . " . " . $preEncode );
bindtextdomain ( $chkLocale , $preLocale );
bind_textdomain_codeset ( $chkLocale , $preEncode );
textdomain ( $chkLocale );
2017-10-20 15:00:08 +02:00
$arrTemplate [ 'NAGIOS_FAQ' ] = $myInstClass -> translate ( " Online Documentation " );
2017-05-22 11:24:21 +02:00
// Language selection field
2017-10-20 15:00:08 +02:00
$arrTemplate [ 'LANGUAGE' ] = $myInstClass -> translate ( " Language " );
foreach ( $myInstClass -> getLangData () AS $key => $elem ) {
$strLangOpt .= " <option value=' " . $key . " ' { sel}> " . $myInstClass -> getLangNameFromCode ( $key , false ) . " </option> \n " ;
2017-05-22 11:24:21 +02:00
if ( $key != $chkLocale ) { $strLangOpt = str_replace ( " { sel} " , " " , $strLangOpt ); } else { $strLangOpt = str_replace ( " { sel} " , " selected " , $strLangOpt ); }
}
$arrTemplate [ 'LANG_OPTION' ] = $strLangOpt ;
} else {
$intError = 1 ;
$strErrorMessage .= " Installation cannot continue, please make sure you have the php-gettext extension loaded! " ;
}
//
// Checking current installation
// =============================
// Does the settings file exist?
if ( file_exists ( $filConfig ) && is_readable ( $filConfig )) {
$preSettings = parse_ini_file ( $filConfig , true );
// Are there any connection data?
if ( isset ( $preSettings [ 'db' ]) && isset ( $preSettings [ 'db' ][ 'server' ]) && isset ( $preSettings [ 'db' ][ 'port' ]) &&
isset ( $preSettings [ 'db' ][ 'database' ]) && isset ( $preSettings [ 'db' ][ 'username' ]) && isset ( $preSettings [ 'db' ][ 'password' ])) {
// Copy settings to session
$_SESSION [ 'SETS' ] = $preSettings ;
// Existing postgres database?
if ( isset ( $preSettings [ 'db' ][ 'dbtype' ]) && ( $preSettings [ 'db' ][ 'dbtype' ] == " postgres " )) {
$preDBType = " pgsql " ;
$_SESSION [ 'install' ][ 'dbtype' ] = $preDBType ;
}
2017-10-20 15:00:08 +02:00
// Select database
$intDBFallback = 0 ;
if ( isset ( $preSettings [ 'db' ][ 'type' ])) {
if ( $preSettings [ 'db' ][ 'type' ] == " mysqli " ) {
if ( extension_loaded ( 'mysqli' )) {
// Include mysqli class
include ( " ../functions/mysqli_class.php " );
// Initialize mysqli class
$myDBClass = new mysqlidb ;
2017-05-22 11:24:21 +02:00
} else {
2017-10-20 15:00:08 +02:00
$intDBFallback = 1 ;
2017-05-22 11:24:21 +02:00
}
2017-10-20 15:00:08 +02:00
$_SESSION [ 'install' ][ 'dbtype' ] = 'mysqli' ;
2017-05-22 11:24:21 +02:00
} else {
2017-10-20 15:00:08 +02:00
$intDBFallback = 1 ;
2017-05-22 11:24:21 +02:00
}
2017-10-20 15:00:08 +02:00
} else {
if ( extension_loaded ( 'mysqli' )) {
// Include mysql class
include ( " ../functions/mysqli_class.php " );
// Initialize mysql class
$myDBClass = new mysqldb ;
2017-05-22 11:24:21 +02:00
} else {
2017-10-20 15:00:08 +02:00
$intDBFallback = 1 ;
}
$_SESSION [ 'install' ][ 'dbtype' ] = 'mysqli' ;
$preSettings [ 'db' ][ 'type' ] = 'mysqli' ;
}
// Set DB parameters
$myDBClass -> arrParams [ 'server' ] = $preSettings [ 'db' ][ 'server' ];
$myDBClass -> arrParams [ 'port' ] = $preSettings [ 'db' ][ 'port' ];
$myDBClass -> arrParams [ 'username' ] = $preSettings [ 'db' ][ 'username' ];
$myDBClass -> arrParams [ 'password' ] = $preSettings [ 'db' ][ 'password' ];
$myDBClass -> arrParams [ 'database' ] = $preSettings [ 'db' ][ 'database' ];
$myDBClass -> getdatabase ();
// DB failure
if ( $intDBFallback == 1 ) {
$_SESSION [ 'install' ][ 'dbtype' ] = 'mysqli' ;
$preSettings [ 'db' ][ 'type' ] = 'mysqli' ;
$intUpdate = 0 ;
2017-05-22 11:24:21 +02:00
} else {
2017-10-20 15:00:08 +02:00
if ( $myDBClass -> error == true ) {
$strErrorMessage .= $myInstClass -> translate ( " Database connection failed. Upgrade not available! " ) . " <br> " ;
$strErrorMessage .= str_replace ( " :: " , " <br> " , $myDBClass -> strErrorMessage ) . " <br> " ;
} else {
$strSQL = " SELECT category,name,value FROM tbl_settings " ;
$booReturn = $myDBClass -> getDataArray ( $strSQL , $arrDataLines , $intDataCount );
if ( $booReturn == false ) {
$strErrorMessage .= $myInstClass -> translate ( " Settings table not available or wrong. Upgrade not available! " ) . " <br> " ;
$strErrorMessage .= str_replace ( " :: " , " <br> " , $myDBClass -> strErrorMessage ) . " <br> " ;
} else if ( $intDataCount != 0 ) {
foreach ( $arrDataLines AS $elem ) {
$preSettings [ $elem [ 'category' ]][ $elem [ 'name' ]] = $elem [ 'value' ];
}
$intUpdate = 1 ;
}
}
2017-05-22 11:24:21 +02:00
}
} else {
2017-10-20 15:00:08 +02:00
$strErrorMessage .= $myInstClass -> translate ( " Database values in settings file are missing (config/settings.php). Upgrade not available! " );
2017-05-22 11:24:21 +02:00
}
} else {
2017-10-20 15:00:08 +02:00
$strErrorMessage .= $myInstClass -> translate ( " Settings file not found or not readable (config/settings.php). Upgrade not available! " );
2017-05-22 11:24:21 +02:00
}
//
// Initial settings (new installation)
// ===================================
$filInit = " functions/initial_settings.php " ;
if ( file_exists ( $filInit ) && is_readable ( $filInit )) {
$preInit = parse_ini_file ( $filInit , true );
$_SESSION [ 'init_settings' ] = $preInit ;
} else {
2017-10-20 15:00:08 +02:00
$strErrorMessage .= $myInstClass -> translate ( " Default values file is not available or not readable (install/functions/initial_settings.php). Installation possible, but without predefined data! " );
2017-05-22 11:24:21 +02:00
}
//
// Build content
// =============
2017-10-20 15:00:08 +02:00
$arrTemplate [ 'PAGETITLE' ] = " [NagiosQL] " . $myInstClass -> translate ( " Installation wizard " );
$arrTemplate [ 'MAIN_TITLE' ] = $myInstClass -> translate ( " Welcome to the NagiosQL installation wizard " );
$arrTemplate [ 'TEXT_PART_1' ] = $myInstClass -> translate ( " This wizard will help you to install and configure NagiosQL. " );
$arrTemplate [ 'TEXT_PART_2' ] = $myInstClass -> translate ( " For questions please visit " ) . " : " ;
$arrTemplate [ 'TEXT_PART_3' ] = $myInstClass -> translate ( " First let's check your local environment and find out if everything NagiosQL needs is available. " );
$arrTemplate [ 'TEXT_PART_4' ] = $myInstClass -> translate ( " The basic requirements are: " );
$arrTemplate [ 'TEXT_PART_5' ] = $myInstClass -> translate ( " PHP 5.2.0 or greater including: " );
$arrTemplate [ 'TEXT_PHP_REQ_1' ] = $myInstClass -> translate ( " PHP database module: " ) . " " .
$myInstClass -> translate ( " supported types are " ) . " <b>mysqli</b> " ;
$arrTemplate [ 'TEXT_PHP_REQ_2' ] = $myInstClass -> translate ( " PHP module: " ) . " <b>session</b> " ;
$arrTemplate [ 'TEXT_PHP_REQ_3' ] = $myInstClass -> translate ( " PHP module: " ) . " <b>gettext</b> " ;
$arrTemplate [ 'TEXT_PHP_REQ_6' ] = $myInstClass -> translate ( " PHP module: " ) . " <b>filter</b> " ;
$arrTemplate [ 'TEXT_PHP_REQ_8' ] = $myInstClass -> translate ( " PHP module: " ) . " <b>FTP</b> " . $myInstClass -> translate ( " (optional) " );
$arrTemplate [ 'TEXT_PHP_REQ_10' ] = $myInstClass -> translate ( " PECL extension: " ) . " <b>SSH</b> " . $myInstClass -> translate ( " (optional) " );
$arrTemplate [ 'TEXT_PART_6' ] = $myInstClass -> translate ( " php.ini options " ) . " : " ;
$arrTemplate [ 'TEXT_INI_REQ_1' ] = $myInstClass -> translate ( " file_uploads on (for upload features) " );
$arrTemplate [ 'TEXT_INI_REQ_2' ] = $myInstClass -> translate ( " session.auto_start needs to be off " );
$arrTemplate [ 'TEXT_PART_7' ] = $myInstClass -> translate ( " A database server " );
$arrTemplate [ 'TEXT_PART_8' ] = $myInstClass -> translate ( " Nagios 2.x/3.x/4.x " );
$arrTemplate [ 'TEXT_PART_9' ] = $myInstClass -> translate ( " NagiosQL version " ) . " " . $strVersion ;
2017-05-22 11:24:21 +02:00
$arrTemplate [ 'LOCALE' ] = $chkLocale ;
2017-10-20 15:00:08 +02:00
$arrTemplate [ 'ONLINE_DOC' ] = $myInstClass -> translate ( " Online documentation " );
2017-05-22 11:24:21 +02:00
//
// New installation or upgrade
// ===========================
2017-10-20 15:00:08 +02:00
$arrTemplate [ 'NEW_INSTALLATION' ] = $myInstClass -> translate ( " START INSTALLATION " );
$arrTemplate [ 'UPDATE' ] = $myInstClass -> translate ( " START UPDATE " );
2017-05-22 11:24:21 +02:00
$arrTemplate [ 'DISABLE_NEW' ] = " " ;
$arrTemplate [ 'UPDATE_ERROR' ] = " <font style= \" color:red; \" > " . $strErrorMessage . " </font> " ;
if ( $intUpdate == 1 ) {
$arrTemplate [ 'DISABLE_UPDATE' ] = " " ;
} else {
$arrTemplate [ 'DISABLE_UPDATE' ] = " disabled= \ disabled \" " ;
}
if ( $intError == 1 ) {
$arrTemplate [ 'DISABLE_NEW' ] = " disabled= \ disabled \" " ;
$arrTemplate [ 'DISABLE_UPDATE' ] = " disabled= \ disabled \" " ;
}
//
// Write content
// =============
$strContent = $myInstClass -> parseTemplate ( $arrTemplate , $preContent );
echo $strContent ;
?>