<?php /////////////////////////////////////////////////////////////////////////////// // // NagiosQL // /////////////////////////////////////////////////////////////////////////////// // // (c) 2005-2018 by Martin Willisegger // // Project : NagiosQL // Component : Installer script - step 2 // Website : https://sourceforge.net/projects/nagiosql/ // Version : 3.4.0 // GIT Repo : https://gitlab.com/wizonet/NagiosQL // /////////////////////////////////////////////////////////////////////////////// // // Prevent this file from direct access // ==================================== if (preg_match('#' . basename(__FILE__) . '#', htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'utf-8'))) { header('Location: install.php'); exit; } // // Define common variables // ======================= $preIncludeContent = $preBasePath.'install/templates/step3.htm.tpl'; $intError = 0; $setQLVersion = ''; $arrUpdate = array(); if (function_exists('date_default_timezone_set') and function_exists('date_default_timezone_get')) { date_default_timezone_set(date_default_timezone_get()); } // // Build content // ============= $arrTemplate['STEP1_BOX'] = $myInstClass->translate('Requirements'); $arrTemplate['STEP2_BOX'] = $myInstClass->translate('Installation'); $arrTemplate['STEP3_BOX'] = $myInstClass->translate('Finish'); $arrTemplate['STEP3_TITLE'] = 'NagiosQL ' .$myInstClass->translate('Installation'). ': ' . $myInstClass->translate('Finishing Setup'); $arrTemplate['INST_VISIBLE'] = 'showfield'; $arrTemplate['STEP4_SUB_TITLE'] = $myInstClass->translate('Deploy NagiosQL settings'); $arrTemplate['STEP3_TEXT_01'] = $myInstClass->translate('Database server connection (privileged user)'); $arrTemplate['STEP3_TEXT_03'] = $myInstClass->translate('Database server version'); $arrTemplate['STEP3_TEXT_05'] = $myInstClass->translate('Database server support'); $arrTemplate['STEP3_TEXT_07'] = $myInstClass->translate('Delete existing NagiosQL database'); $arrTemplate['STEP3_TEXT_09'] = $myInstClass->translate('Creating new database'); $arrTemplate['STEP3_TEXT_11'] = $myInstClass->translate('Installing NagiosQL database tables'); $arrTemplate['STEP3_TEXT_13'] = $myInstClass->translate('Create NagiosQL database user'); $arrTemplate['STEP3_TEXT_15'] = $myInstClass->translate('Set initial NagiosQL Administrator'); $arrTemplate['STEP3_TEXT_17'] = $myInstClass->translate('Database server connection (NagiosQL user)'); $arrTemplate['STEP4_TEXT_01'] = $myInstClass->translate('Writing global settings to database'); $arrTemplate['STEP4_TEXT_03'] = $myInstClass->translate('Writing database configuration to settings.php'); $arrTemplate['STEP4_TEXT_05'] = $myInstClass->translate('Import Nagios sample data'); $arrTemplate['STEP4_TEXT_07'] = $myInstClass->translate('Create and/or store NagiosQL path settings'); $arrTemplate['STEP4_VISIBLE'] = 'hidefield'; $arrTemplate['STEP3_TEXT_02_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_03_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_05_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_07_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_09_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_11_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_13_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_15_SHOW'] = 'hidefield'; $arrTemplate['STEP3_TEXT_17_SHOW'] = 'hidefield'; $arrTemplate['STEP4_TEXT_03_SHOW'] = 'hidefield'; $arrTemplate['STEP4_TEXT_05_SHOW'] = 'hidefield'; $arrTemplate['STEP4_TEXT_07_SHOW'] = 'hidefield'; // // Check any data before installation // ================================== $intInstError = 0; // // Doing installation/upgrade // ========================== if ($_SESSION['install']['mode'] == 'Update') { $arrTemplate['STEP3_SUB_TITLE'] = $myInstClass->translate('Updating existing NagiosQL database'); // // Include database class // ====================== if ($_SESSION['install']['dbtype'] == 'mysqli') { // Initialize mysqli class $myDBClass = new functions\MysqliDbClass; } else { $strErrorMessage .= $myInstClass->translate('Database type not defined!'). ' (' . $_SESSION['install']['dbtype'].")<br>\n"; $strStatusMessage = '<span class="red">' .$myInstClass->translate('failed'). '</span>'; $intError = 1; } // Set DB parameters $myDBClass->arrParams['server'] = $_SESSION['install']['dbserver']; $myDBClass->arrParams['port'] = $_SESSION['install']['dbport']; $myDBClass->arrParams['username'] = $_SESSION['install']['admuser']; $myDBClass->arrParams['password'] = $_SESSION['install']['admpass']; $myDBClass->arrParams['database'] = $_SESSION['install']['dbname']; // Include classes if ($intError == 0) { $myInstClass->myDBClass =& $myDBClass; } // Check database connection if ($intError == 0) { $intError = $myInstClass->openAdmDBSrv($arrTemplate['STEP3_TEXT_02'], $strErrorMessage); } if ($intError == 0) { $intError = $myInstClass->openDatabase($arrTemplate['STEP3_TEXT_02'], $strErrorMessage); } $arrTemplate['STEP3_TEXT_02_SHOW'] = 'showfield'; // Check NagiosQL version if ($intError == 0) { $arrTemplate['STEP3_TEXT_03'] = $myInstClass->translate('Installed NagiosQL version'); $arrTemplate['STEP3_TEXT_03_SHOW'] = 'showfield'; $intError = $myInstClass->checkQLVersion( $arrTemplate['STEP3_TEXT_04'], $strErrorMessage, $arrUpdate, $setQLVersion ); } // Upgrade NagiosQL DB if ($intError == 0) { $arrTemplate['STEP3_TEXT_05'] = $myInstClass->translate('Upgrading from version'). ' ' .$setQLVersion . ' ' . $myInstClass->translate('to'). ' ' .$preNagiosQL_ver; $arrTemplate['STEP3_TEXT_05_SHOW'] = 'showfield'; $intError = $myInstClass->updateQLDB($arrTemplate['STEP3_TEXT_06'], $strErrorMessage, $arrUpdate); } if (($_SESSION['install']['dbtype'] == 'mysql') && (version_compare($setQLVersion, '3.4.0') == -1)) { // Converting database to UTF8 if ($intError == 0) { $arrTemplate['STEP3_TEXT_07'] = $myInstClass->translate('Converting database to utf8 character set'); $arrTemplate['STEP3_TEXT_07_SHOW'] = 'showfield'; $intError = $myInstClass->convQLDB($arrTemplate['STEP3_TEXT_08'], $strErrorMessage); } // Converting database tables to UTF8 if ($intError == 0) { $arrTemplate['STEP3_TEXT_09'] = $myInstClass->translate('Converting database tables to utf8 character ' . 'set'); $arrTemplate['STEP3_TEXT_09_SHOW'] = 'showfield'; $intError = $myInstClass->convQLDBTables($arrTemplate['STEP3_TEXT_10'], $strErrorMessage); } // Converting database fields to UTF8 if ($intError == 0) { $arrTemplate['STEP3_TEXT_11'] = $myInstClass->translate('Converting database fields to utf8 ' . 'character set'); $arrTemplate['STEP3_TEXT_11_SHOW'] = 'showfield'; $intError = $myInstClass->convQLDBFields($arrTemplate['STEP3_TEXT_12'], $strErrorMessage); } } // Reconnect Database with new user if ($intError == 0) { $arrTemplate['STEP3_TEXT_17_SHOW'] = 'showfield'; $intError1 = $myInstClass->openAdmDBSrv($arrTemplate['STEP3_TEXT_18'], $strErrorMessage, 1); $intError2 = $myInstClass->openDatabase($arrTemplate['STEP3_TEXT_18'], $strErrorMessage, 1); $intError = $intError1 + $intError2; } // Deploy NagiosQL database settings if ($intError == 0) { $arrTemplate['STEP4_VISIBLE'] = 'showfield'; $intError = $myInstClass->updateSettingsDB($arrTemplate['STEP4_TEXT_02'], $strErrorMessage); } // Write database settings to file if ($intError == 0) { $arrTemplate['STEP4_TEXT_03_SHOW'] = 'showfield'; $intError = $myInstClass->updateSettingsFile($arrTemplate['STEP4_TEXT_04'], $strErrorMessage); } } else { $arrTemplate['STEP3_SUB_TITLE'] = $myInstClass->translate('Create new NagiosQL database'); // // Include database class // ====================== if ($_SESSION['install']['dbtype'] == 'mysqli') { // Initialize mysqli class $myDBClass = new functions\MysqliDbClass; } else { $strErrorMessage .= $myInstClass->translate('Database type not defined!'). ' (' . $_SESSION['install']['dbtype'].")<br>\n"; $strStatusMessage = '<span class="red">' .$myInstClass->translate('failed'). '</span>'; $intError = 1; } // Set DB parameters $myDBClass->arrParams['server'] = $_SESSION['install']['dbserver']; $myDBClass->arrParams['port'] = $_SESSION['install']['dbport']; $myDBClass->arrParams['username'] = $_SESSION['install']['admuser']; $myDBClass->arrParams['password'] = $_SESSION['install']['admpass']; $myDBClass->arrParams['database'] = $_SESSION['install']['dbname']; // Include classes if ($intError == 0) { $myInstClass->myDBClass =& $myDBClass; } // Check database connection $intOldDBStatus = 0; if ($intError == 0) { $intError = $myInstClass->openAdmDBSrv($arrTemplate['STEP3_TEXT_02'], $strErrorMessage); } // Does the database already exist? if ($intError == 0) { $intOldDBStatus = $myInstClass->openDatabase($strTmpMessage, $strTmpError); $myDBClass->strErrorMessage = ''; if (($intOldDBStatus == 0) && ($_SESSION['install']['dbdrop'] == 0)) { $strErrorMessage .= $myInstClass->translate('Database already exists and drop database was not ' . 'selected, please correct or manage manually'). '<br>'; $arrTemplate['STEP3_TEXT_02'] = '<span class="red">' .$myInstClass->translate('failed'). '</span>'; $intError = 1; } else { $myInstClass->openAdmDBSrv($arrTemplate['STEP3_TEXT_02'], $strErrorMessage); } } $arrTemplate['STEP3_TEXT_02_SHOW'] = 'showfield'; $arrTemplate['STEP3_TEXT_02'] .= ' (' .$_SESSION['install']['dbtype']. ')'; // Check database version if ($intError == 0) { $arrTemplate['STEP3_TEXT_03_SHOW'] = 'showfield'; $arrTemplate['STEP3_TEXT_05_SHOW'] = 'showfield'; $intError = $myInstClass->checkDBVersion($arrTemplate['STEP3_TEXT_06'], $strErrorMessage, $strVersion); if ($strVersion == 'unknown') { $arrTemplate['STEP3_TEXT_04'] = '<span class="red">' .$myInstClass->translate('unknown'). '</span>'; } else { $arrTemplate['STEP3_TEXT_04'] = '<span class="green">' .$strVersion. '</span>'; } } // Drop existing database if (($intError == 0) && ($_SESSION['install']['dbdrop'] == 1) && ($intOldDBStatus == 0)) { $arrTemplate['STEP3_TEXT_07_SHOW'] = 'showfield'; $intError = $myInstClass->dropDB($arrTemplate['STEP3_TEXT_08'], $strErrorMessage); } // Create new database if ($intError == 0) { $arrTemplate['STEP3_TEXT_09_SHOW'] = 'showfield'; $intError = $myInstClass->createDB($arrTemplate['STEP3_TEXT_10'], $strErrorMessage); } // Write initial SQL data to database if ($intError == 0) { $intError = $myInstClass->openDatabase($strTmp, $strErrorMessage); } if ($intError == 0) { $arrTemplate['STEP3_TEXT_11_SHOW'] = 'showfield'; $arrInsert[] = $preSqlNewInstall; $intError = $myInstClass->updateQLDB($arrTemplate['STEP3_TEXT_12'], $strErrorMessage, $arrInsert); } // Grant NagiosQL database user if ($intError == 0) { $arrTemplate['STEP3_TEXT_13_SHOW'] = 'showfield'; $intError = $myInstClass->grantDBUser($arrTemplate['STEP3_TEXT_14'], $strErrorMessage); } // Create NagiosQL admin user if ($intError == 0) { $arrTemplate['STEP3_TEXT_15_SHOW'] = 'showfield'; $intError = $myInstClass->createNQLAdmin($arrTemplate['STEP3_TEXT_16'], $strErrorMessage); } // Reconnect Database with new user if ($intError == 0) { $myDBClass->arrParams['username'] = $_SESSION['install']['dbuser']; $myDBClass->arrParams['password'] = $_SESSION['install']['dbpass']; $arrTemplate['STEP3_TEXT_17_SHOW'] = 'showfield'; if ($intError == 0) { $intError = $myInstClass->openAdmDBSrv($arrTemplate['STEP3_TEXT_18'], $strErrorMessage, 1); } if ($intError == 0) { $intError = $myInstClass->openDatabase($arrTemplate['STEP3_TEXT_18'], $strErrorMessage, 1); } } // Deploy NagiosQL settings if ($intError == 0) { $arrTemplate['STEP4_VISIBLE'] = 'showfield'; $intError = $myInstClass->updateSettingsDB($arrTemplate['STEP4_TEXT_02'], $strErrorMessage); } // Write database settings to file if ($intError == 0) { $arrTemplate['STEP4_TEXT_03_SHOW'] = 'showfield'; $intError = $myInstClass->updateSettingsFile($arrTemplate['STEP4_TEXT_04'], $strErrorMessage); } // Write sample data to database if (($intError == 0) && ($_SESSION['install']['sample'] == 1)) { $arrTemplate['STEP4_TEXT_05_SHOW'] = 'showfield'; $arrSample[] = 'sql/import_nagios_sample.sql'; $intError = $myInstClass->updateQLDB($arrTemplate['STEP4_TEXT_06'], $strErrorMessage, $arrSample); } // Create NagiosQL path and write path settings to the database if ($intError == 0) { $arrTemplate['STEP4_TEXT_07_SHOW'] = 'showfield'; $intError = $myInstClass->updateQLpath($arrTemplate['STEP4_TEXT_08'], $strErrorMessage); } } if ($intError != 0) { $arrTemplate['ERRORMESSAGE'] = '<p style="color:#F00;margin-top:0;font-weight:bold;">' . $strErrorMessage."</p>\n"; $arrTemplate['INFO_TEXT'] = ''; $arrTemplate['BUTTON'] = "<div id=\"install-back\">\n"; $arrTemplate['BUTTON'] .= "<input type='hidden' name='hidStep' id='hidStep' value='2' />\n"; $arrTemplate['BUTTON'] .= "<input type='image' src='images/previous.png' value='Submit' alt='Submit' />" . '<br />' .$myInstClass->translate('Back')."\n"; $arrTemplate['BUTTON'] .= "</div>\n"; } else { $arrTemplate['ERRORMESSAGE'] = ''; $arrTemplate['INST_VISIBLE'] = 'showfield'; $arrTemplate['INFO_TEXT'] = $myInstClass->translate('Please delete the install directory to continue!'); $arrTemplate['BUTTON'] = "<div id=\"install-next\">\n"; $arrTemplate['BUTTON'] .= "<a href='../index.php'><img src='images/next.png' alt='finish' title='finish' " . "border='0' /></a><br />".$myInstClass->translate('Finish')."\n"; $arrTemplate['BUTTON'] .= "</div>\n"; } // // Write content // ============= $strContent = $myInstClass->parseTemplate($arrTemplate, $preIncludeContent); echo $strContent;