'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' => 'http://www.php.net/manual/en/book.sockets.php', 'Session' => 'http://www.php.net/manual/en/book.session.php', 'PCRE' => 'http://www.php.net/manual/en/book.pcre.php', 'FileInfo' => 'http://www.php.net/manual/en/book.fileinfo.php', 'Mcrypt' => 'http://www.php.net/manual/en/book.mcrypt.php', 'OpenSSL' => 'http://www.php.net/manual/en/book.openssl.php', 'JSON' => 'http://www.php.net/manual/en/book.json.php', 'DOM' => 'http://www.php.net/manual/en/book.dom.php', 'Intl' => 'http://www.php.net/manual/en/book.intl.php', 'gettext' => 'http://www.php.net/manual/en/book.gettext.php', 'curl' => 'http://www.php.net/manual/en/book.curl.php', 'Filter' => 'http://www.php.net/manual/en/book.filter.php', 'XML' => 'http://www.php.net/manual/en/book.xml.php', 'SimpleXML' => 'http://www.php.net/manual/en/book.simplexml.php', 'FTP' => 'http://www.php.net/manual/en/book.ftp.php', 'MySQL' => 'http://php.net/manual/de/book.mysqli.php', 'PEAR' => 'http://pear.php.net', 'date.timezone' => 'http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone', 'SSH2' => 'http://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 = '5.5.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 = ''; 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) { $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_9'] = $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;