'session', 'Gettext' => 'gettext', 'Filter' => 'filter' ); $arrOptionalExt = array( 'FTP' => 'ftp', 'SSH2' => 'ssh2' ); $arrSupportedDBs = array( 'MySQLi' => 'mysqli' ); $arrIniCheck = array( 'file_uploads' => 1, 'session.auto_start' => 0, 'suhosin.session.encrypt' => 0, 'date.timezone' => '-NOTEMPTY-' ); $arrSourceURLs = array( 'Sockets' => 'https://www.php.net/manual/en/book.sockets.php', 'Session' => 'https://www.php.net/manual/en/book.session.php', 'PCRE' => 'https://www.php.net/manual/en/book.pcre.php', 'FileInfo' => 'https://www.php.net/manual/en/book.fileinfo.php', 'Mcrypt' => 'https://www.php.net/manual/en/book.mcrypt.php', 'OpenSSL' => 'https://www.php.net/manual/en/book.openssl.php', 'JSON' => 'https://www.php.net/manual/en/book.json.php', 'DOM' => 'https://www.php.net/manual/en/book.dom.php', 'Intl' => 'https://www.php.net/manual/en/book.intl.php', 'gettext' => 'https://www.php.net/manual/en/book.gettext.php', 'curl' => 'https://www.php.net/manual/en/book.curl.php', 'Filter' => 'https://www.php.net/manual/en/book.filter.php', 'XML' => 'https://www.php.net/manual/en/book.xml.php', 'SimpleXML' => 'https://www.php.net/manual/en/book.simplexml.php', 'FTP' => 'https://www.php.net/manual/en/book.ftp.php', 'MySQL' => 'https://php.net/manual/de/book.mysqli.php', 'PEAR' => 'https://pear.php.net', 'date.timezone' => 'https://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone', 'SSH2' => 'https://pecl.php.net/package/ssh2' ); /* Build content */ $arrTemplate['STEP1_BOX'] = $myInstClass->translate('Requirements'); $arrTemplate['STEP2_BOX'] = $myInstClass->translate('Installation'); $arrTemplate['STEP3_BOX'] = $myInstClass->translate('Finish'); $arrTemplate['STEP1_TITLE'] = 'NagiosQL ' . $myInstClass->translate('Installation') . ': ' . $myInstClass->translate('Checking requirements'); $arrTemplate['STEP1_SUBTITLE1'] = $myInstClass->translate('Checking Client'); $arrTemplate['STEP1_SUBTITLE2'] = $myInstClass->translate('Checking PHP version'); $arrTemplate['STEP1_SUBTITLE3'] = $myInstClass->translate('Checking PHP extensions'); $arrTemplate['STEP1_SUBTITLE4'] = $myInstClass->translate('Checking available database interfaces'); $arrTemplate['STEP1_SUBTITLE5'] = $myInstClass->translate('Checking php.ini/.htaccess settings'); $arrTemplate['STEP1_SUBTITLE6'] = $myInstClass->translate('Checking System Permission'); $arrTemplate['STEP1_TEXT3_1'] = $myInstClass->translate('The following modules/extensions are required to run NagiosQL'); $arrTemplate['STEP1_TEXT3_2'] = $myInstClass->translate('The next couple of extensions are optional but recommended'); $arrTemplate['STEP1_TEXT4_1'] = $myInstClass->translate('Check which of the supported extensions are installed. At least one of them is required.'); $arrTemplate['STEP1_TEXT5_1'] = $myInstClass->translate('The following settings are required to run NagiosQL'); /* Conditional checks */ $strHTMLPart1 = 'valid '; $strHTMLPart2 = 'invalid '; $strHTMLPart3 = 'warning '; $strHTMLPart4 = ': '; $strHTMLPart5 = ': '; $strHTMLPart6 = ': '; $strHTMLPart7 = 'online help'; /* Javascript check */ if ($_SESSION['install']['jscript'] === 'yes') { $arrTemplate['CHECK_1_PIC'] = 'valid'; $arrTemplate['CHECK_1_CLASS'] = 'green'; $arrTemplate['CHECK_1_VALUE'] = $myInstClass->translate('ENABLED'); $arrTemplate['CHECK_1_INFO'] = ''; } else { $arrTemplate['CHECK_1_PIC'] = 'invalid'; $arrTemplate['CHECK_1_CLASS'] = 'green'; $arrTemplate['CHECK_1_VALUE'] = $myInstClass->translate('NOT ENABLED'); $arrTemplate['CHECK_1_INFO'] = '(' . $myInstClass->translate('After enabling Javascript, the page must be updated ' . 'twice so that the status changes') . ')'; } /* PHP version check */ $strMinPHPVersion = '7.2.0'; $arrTemplate['CHECK_2_TEXT'] = $myInstClass->translate('Version'); if (version_compare(PHP_VERSION, $strMinPHPVersion, '>=')) { $arrTemplate['CHECK_2_PIC'] = 'valid'; $arrTemplate['CHECK_2_CLASS'] = 'green'; $arrTemplate['CHECK_2_VALUE'] = $myInstClass->translate('OK'); $arrTemplate['CHECK_2_INFO'] = '(PHP ' . PHP_VERSION . ' ' . $myInstClass->translate('detected') . ')'; } else { $arrTemplate['CHECK_2_PIC'] = 'invalid'; $arrTemplate['CHECK_2_CLASS'] = 'green'; $arrTemplate['CHECK_2_VALUE'] = 'PHP ' . PHP_VERSION . ' ' . $myInstClass->translate('detected'); $arrTemplate['CHECK_2_INFO'] = '(PHP ' . $strMinPHPVersion . ' ' . $myInstClass->translate('or greater is ' . 'required') . ')'; $intError = 1; } /* PHP modules / extensions */ $strExtPath = ini_get('extension_dir'); $strPrefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : ''; $strHTML1 = ''; /* Check for pear */ $intErrorReporting = error_reporting(); error_reporting(0); include_once 'System.php'; error_reporting($intErrorReporting); $intPearResult = 0; if (class_exists('System')) { $intPearResult = 1; } if ($intPearResult === 1) { $strHTML1 .= $strHTMLPart1 . 'PEAR' . $strHTMLPart4 . $myInstClass->translate('OK') . "\n"; } else { $strMsg = '' . $strHTMLPart7 . ''; $strHTML1 .= $strHTMLPart2 . 'PEAR' . $strHTMLPart5 . $myInstClass->translate('NOT AVAILABLE') . ' (' . $strMsg . ')' . "\n"; $intError = 1; } $strHTML1 .= "
\n"; foreach ($arrRequiredExt as $key => $elem) { if (extension_loaded($elem)) { $strHTML1 .= $strHTMLPart1 . $key . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } else { $strPath = $strExtPath . '/' . $strPrefix . $elem . '.' . PHP_SHLIB_SUFFIX; $strMsg = is_readable($strPath) ? $myInstClass->translate('Could be loaded. Please add in php.ini') : '' . $strHTMLPart7 . ''; $strHTML1 .= $strHTMLPart2 . $key . $strHTMLPart5 . $myInstClass->translate('NOT AVAILABLE') . ' (' . $strMsg . ')' . "\n"; $intError = 1; } $strHTML1 .= "
\n"; } $arrTemplate['CHECK_3_CONTENT_1'] = $strHTML1; $strHTML2 = ''; foreach ($arrOptionalExt as $key => $elem) { if (extension_loaded($elem)) { $strHTML2 .= $strHTMLPart1 . $key . $strHTMLPart4 . $myInstClass->translate('OK') . "\n"; } else { $strPath = $strExtPath . '/' . $strPrefix . $elem . '.' . PHP_SHLIB_SUFFIX; $strMsg = is_readable($strPath) ? $myInstClass->translate('Could be loaded. Please add in php.ini') : '' . $strHTMLPart7 . ''; $strHTML2 .= $strHTMLPart3 . $key . $strHTMLPart6 . $myInstClass->translate('NOT AVAILABLE') . ' (' . $strMsg . ')' . "\n"; //$intError = 1; } $strHTML2 .= "
\n"; } $arrTemplate['CHECK_3_CONTENT_2'] = $strHTML2; // PHP database interfaces $strHTML3 = ''; $intTemp = 0; $_SESSION['install']['dbtype_available'] = array(); foreach ($arrSupportedDBs as $key => $elem) { if (extension_loaded($elem)) { $strNewInstallOnly = ''; if (isset($_SESSION['install']['dbtype']) && ($_SESSION['install']['mode'] === 'Update') && ($_SESSION['install']['dbtype'] !== $elem) && (0 !== strpos($_SESSION['install']['dbtype'], substr($elem, 0, 5)))) { $strNewInstallOnly = ' (' . $myInstClass->translate('New installation only - updates are only supported ' . 'using the same database interface!') . ')'; } $strHTML3 .= $strHTMLPart1 . $key . $strHTMLPart4 . $myInstClass->translate('OK') . " $strNewInstallOnly\n"; if ($strNewInstallOnly === '') { $_SESSION['install']['dbtype_available'][] = $elem; } $intTemp++; } else { $strPath = $strExtPath . '/' . $strPrefix . $elem . '.' . PHP_SHLIB_SUFFIX; $strMsg = is_readable($strPath) ? $myInstClass->translate('Could be loaded. Please add in php.ini') : '' . $strHTMLPart7 . ''; $strHTML3 .= $strHTMLPart2 . $key . $strHTMLPart5 . $myInstClass->translate('NOT AVAILABLE') . ' (' . $strMsg . ')' . "\n"; } $strHTML3 .= "
\n"; } $arrTemplate['CHECK_4_CONTENT_1'] = $strHTML3; if ($intTemp === 0) { $intError = 1; } /* PHP ini checks */ $strHTML4 = ''; foreach ($arrIniCheck as $key => $elem) { $strStatus = ini_get($key); if ($elem === '-NOTEMPTY-') { if (empty($strStatus)) { $strHTML4 .= $strHTMLPart2 . $key . $strHTMLPart5 . $myInstClass->translate('NOT AVAILABLE') . ' (' . $myInstClass->translate('cannot be empty and needs to be set') . ")\n"; $intError = 1; } else { $strHTML4 .= $strHTMLPart1 . $key . $strHTMLPart4 . $myInstClass->translate('OK') . "\n"; } } else if (($strStatus === $elem) || ((int)$strStatus === $elem)) { $strHTML4 .= $strHTMLPart1 . $key . $strHTMLPart4 . $myInstClass->translate('OK') . "\n"; } else { $strHTML4 .= $strHTMLPart2 . $key . $strHTMLPart5 . $strStatus . ' (' . $myInstClass->translate('should be') . ' ' . $elem . ")\n"; $intError = 1; } $strHTML4 .= "
\n"; } $arrTemplate['CHECK_5_CONTENT_1'] = $strHTML4; /* File access checks */ $strConfigFile = '../config/settings.php'; if (file_exists($strConfigFile) && is_readable($strConfigFile)) { $arrTemplate['CHECK_6_CONTENT_1'] = $strHTMLPart1 . $myInstClass->translate('Read test on settings file ' . '(config/settings.php)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } elseif (file_exists($strConfigFile) && !is_readable($strConfigFile)) { $arrTemplate['CHECK_6_CONTENT_1'] = $strHTMLPart2 . $myInstClass->translate('Read test on settings file ' . '(config/settings.php)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; } elseif (!file_exists($strConfigFile)) { $arrTemplate['CHECK_6_CONTENT_1'] = $strHTMLPart3 . $myInstClass->translate('Settings file does not exists ' . '(config/settings.php)') . $strHTMLPart6 . $myInstClass->translate('will be created') . "
\n"; } if (file_exists($strConfigFile) && is_writable($strConfigFile)) { $arrTemplate['CHECK_6_CONTENT_2'] = $strHTMLPart1 . $myInstClass->translate('Write test on settings file ' . '(config/settings.php)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } elseif (is_writable('../config') && !file_exists($strConfigFile)) { $arrTemplate['CHECK_6_CONTENT_2'] = $strHTMLPart1 . $myInstClass->translate('Write test on settings directory ' . '(config/)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } elseif (file_exists($strConfigFile) && !is_writable($strConfigFile)) { $arrTemplate['CHECK_6_CONTENT_2'] = $strHTMLPart2 . $myInstClass->translate('Write test on settings file ' . '(config/settings.php)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } else { $arrTemplate['CHECK_6_CONTENT_2'] = $strHTMLPart2 . $myInstClass->translate('Write test on settings directory ' . '(config/)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } $strClassFile = '../functions/NagVisualClass.php'; if (file_exists($strClassFile) && is_readable($strClassFile)) { $arrTemplate['CHECK_6_CONTENT_3'] = $strHTMLPart1 . $myInstClass->translate('Read test on one class file ' . '(functions/NagVisualClass.php)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } else { $arrTemplate['CHECK_6_CONTENT_3'] = $strHTMLPart2 . $myInstClass->translate('Read test on one class file ' . '(functions/NagVisualClass.php)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } $strFile1 = '../admin.php'; if (file_exists($strFile1) && is_readable($strFile1)) { $arrTemplate['CHECK_6_CONTENT_4'] = $strHTMLPart1 . $myInstClass->translate('Read test on home page file ' . '(admin.php)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } else { $arrTemplate['CHECK_6_CONTENT_4'] = $strHTMLPart2 . $myInstClass->translate('Read test on home page file ' . '(admin.php)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } $strFile2 = '../templates/index.htm.tpl'; if (file_exists($strFile2) && is_readable($strFile2)) { $arrTemplate['CHECK_6_CONTENT_5'] = $strHTMLPart1 . $myInstClass->translate('Read test on one template file ' . '(templates/index.tpl.htm)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } else { $arrTemplate['CHECK_6_CONTENT_5'] = $strHTMLPart2 . $myInstClass->translate('Read test on one template file ' . '(templates/index.tpl.htm)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } $strFile3 = '../templates/admin/datalist.htm.tpl'; if (file_exists($strFile3) && is_readable($strFile3)) { $arrTemplate['CHECK_6_CONTENT_6'] = $strHTMLPart1 . $myInstClass->translate('Read test on one admin template file ' . '(templates/admin/datalist.htm.tpl)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } else { $arrTemplate['CHECK_6_CONTENT_6'] = $strHTMLPart2 . $myInstClass->translate('Read test on one admin template file ' . '(templates/admin/datalist.htm.tpl)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } $strFile4 = '../templates/files/contacts.tpl.dat'; if (file_exists($strFile4) && is_readable($strFile4)) { $arrTemplate['CHECK_6_CONTENT_7'] = $strHTMLPart1 . $myInstClass->translate('Read test on one file template ' . '(templates/files/contacts.tpl.dat)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } else { $arrTemplate['CHECK_6_CONTENT_7'] = $strHTMLPart2 . $myInstClass->translate('Read test on one file template ' . '(templates/files/contacts.tpl.dat)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } $strFile5 = '../images/pixel.gif'; if (file_exists($strFile5) && is_readable($strFile5)) { $arrTemplate['CHECK_6_CONTENT_8'] = $strHTMLPart1 . $myInstClass->translate('Read test on one image file ' . '(images/pixel.gif)') . $strHTMLPart4 . $myInstClass->translate('OK') . "
\n"; } else { $arrTemplate['CHECK_6_CONTENT_8'] = $strHTMLPart2 . $myInstClass->translate('Read test on one image file ' . '(images/pixel.gif)') . $strHTMLPart5 . $myInstClass->translate('failed') . "
\n"; $intError = 1; } if ($intError !== 0) { $arrTemplate['MESSAGE'] = '' . $myInstClass->translate('There are some errors - please ' . 'check your system settings and read the requirements of NagiosQL!') . "

\n"; $arrTemplate['MESSAGE'] .= $myInstClass->translate('Read the INSTALLATION file in the NagiosQL doc directory ' . 'or the installation PDF file on our'); $arrTemplate['MESSAGE'] .= ' '; $arrTemplate['MESSAGE'] .= $myInstClass->translate('online documentation') . '
' . $myInstClass->translate('site to find out, how to fix them.') . "
\n"; $arrTemplate['MESSAGE'] .= $myInstClass->translate('After that - refresh this page to proceed') . "...
\n"; $arrTemplate['DIV_ID'] = 'install-center'; $arrTemplate['FORM_CONTENT'] = '
'; $arrTemplate['FORM_CONTENT'] .= $myInstClass->translate('Refresh') . "\n"; } else { $arrTemplate['MESSAGE'] = '' . $myInstClass->translate('Environment test completed ' . 'successfully') . "

\n"; $arrTemplate['DIV_ID'] = 'install-next'; $arrTemplate['FORM_CONTENT'] = "\n"; $arrTemplate['FORM_CONTENT'] .= '
' . $myInstClass->translate('Next') . "\n"; } /* Write content */ $strContent = $myInstClass->parseTemplate($arrTemplate, $preIncludeContent); echo $strContent;