<?php /* ---------------------------------------------------------------------- MyOOS [Dumper] http://www.oos-shop.de/ Copyright (c) 2013 - 2022 by the MyOOS Development Team. ---------------------------------------------------------------------- Based on: MySqlDumper http://www.mysqldumper.de Copyright (C)2004-2011 Daniel Schlichtholz (admin@mysqldumper.de) ---------------------------------------------------------------------- Released under the GNU General Public License ---------------------------------------------------------------------- */ define('OOS_VALID_MOD', true); if (!@ob_start('ob_gzhandler')) { @ob_start(); } $install_ftp_server = $install_ftp_user_name = $install_ftp_user_pass = $install_ftp_path = ''; $dbhost = $dbuser = $dbpass = $dbport = $dbsocket = $manual_db = ''; foreach ($_GET as $getvar => $getval) { ${$getvar} = $getval; } foreach ($_POST as $postvar => $postval) { ${$postvar} = $postval; } include_once './inc/functions.php'; include_once './inc/mysqli.php'; include_once './inc/runtime.php'; if (!isset($language)) { $language = 'en'; } $config['language'] = $language; include './language/lang_list.php'; include 'language/'.$language.'/lang_install.php'; include 'language/'.$language.'/lang_main.php'; include 'language/'.$language.'/lang_config_overview.php'; // Passing the parameters via FORM if (isset($_POST['dbhost'])) { $config['dbhost'] = $dbhost; $config['dbuser'] = $dbuser; $config['dbpass'] = $dbpass; $config['dbport'] = $dbport; $config['dbsocket'] = $dbsocket; $config['manual_db'] = $manual_db; } else { // If connection string exists -> read connection data from connstr if (isset($connstr) && !empty($connstr)) { $p = explode('|', $connstr); $dbhost = $config['dbhost'] = $p[0]; $dbuser = $config['dbuser'] = $p[1]; $dbpass = $config['dbpass'] = $p[2]; $dbport = $config['dbport'] = $p[3]; $dbsocket = $config['dbsocket'] = $p[4]; $manual_db = $config['manual_db'] = $p[5]; } else { $connstr = ''; } } //Variabeln $phase = (isset($phase)) ? $phase : 0; if (isset($_POST['manual_db'])) { $manual_db = trim($_POST['manual_db']); } $connstr = "$dbhost|$dbuser|$dbpass|$dbport|$dbsocket|$manual_db"; $connection = ''; $delfiles = []; $config['files']['iconpath'] = './css/mod/icons/'; $img_ok = '<img src="'.$config['files']['iconpath'].'ok.gif" width="16" height="16" alt="ok">'; $img_failed = '<img src="'.$config['files']['iconpath'].'notok.gif" width="16" height="16" alt="failed">'; $href = "install.php?language=$language&phase=$phase&connstr=$connstr"; header('content-type: text/html; charset=utf-8'); ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="robots" content="noindex,nofollow"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="cache-control" content="must-revalidate"> <title>MyOOS [Dumper] - Installation</title> <link rel="stylesheet" type="text/css" href="css/mod/style.css"> <script src="js/script.js" type="text/javascript"></script> <style type="text/css" media="screen"> td { border: 1px solid #ddd; } td table td { border: 0; } </style> </head> <body class="content"> <script> function hide_tooldivs() { <?php foreach ($lang['languages'] as $key) { echo 'document.getElementById("'.$key.'").style.display = \'none\';'."\n"; } ?> } function show_tooldivs(lab) { hide_tooldivs(); switch(lab) { <?php foreach ($lang['languages'] as $key) { echo 'case "'.$key.'":'."\n".'document.getElementById("'.$key.'").style.display = \'block\';'."\n".'break;'."\n"; } ?> } } </script> <?php if ($phase < 10) { if (0 == $phase) { $content = $lang['L_INSTALL'].' - '.$lang['L_INSTALLMENU']; } else { $content = $lang['L_INSTALL'].' - '.$lang['L_STEP'].' '.($phase); } } elseif ($phase > 9 && $phase < 12) { $content = $lang['L_INSTALL'].' - '.$lang['L_STEP'].' '.($phase - 7); } elseif ($phase > 19 && $phase < 100) { $content = $lang['L_TOOLS']; } else { $content = $lang['L_UNINSTALL'].' - '.$lang['L_STEP'].' '.($phase - 99); } echo '<img src="css/mod/pics/h1_logo.gif" alt="'.$lang['L_INSTALL_TOMENU'].'">'; echo '<div id="pagetitle"><p> '.$content.' </p></div>'; echo '<div id="content" align="center"><p class="small"><strong>Version '.MOD_VERSION.'</strong><br></p>'; switch ($phase) { case 0: // Anfang - Sprachauswahl // da viele ja nicht in die Anleitung schauen -> versuchen die Perldateien automatisch richtig zu chmodden @chmod('./mod_cron/crondump.pl', 0755); @chmod('./mod_cron/perltest.pl', 0755); @chmod('./mod_cron/simpletest.pl', 0755); echo '<form action="install.php" method="get"><input type="hidden" name="phase" value="1">'; echo '<table class="bdr"><tr class="thead"><th>Language</th><th>Tools</th></tr>'; echo '<tr><td valign="top" width="300"><table>'; echo GetLanguageCombo('radio', 'radio', 'language', '<tr><td>', '</td></tr>'); echo '</table></td><td valign="top">'; foreach ($lang['languages'] as $key) { echo "\n<div id=\"".$key.'"><a href="install.php?language='.$key.'&phase=100">'.$lang['L_TOOLS1'][$key].'</a><br><br>'; echo '</div>'; } echo "\n</td></tr><tr><td colspan=\"2\" style=\"padding: 4px\"><input type=\"submit\" name=\"submit\" value=\"Installation\" class=\"Formbutton\"></td></tr></table></form>"; echo '<script>show_tooldivs("'.$language.'");</script>'; break; case 1: // checken @chmod('config.php', 0666); echo '<h6>'.$lang['L_DBPARAMETER'].'</h6>'; if (!is_writable('config.php')) { echo '<p class="warning">'.$lang['L_CONFIGNOTWRITABLE'].'</p>'; echo '<a href="'.$href.'">'.$lang['L_TRYAGAIN'].'</a>'; echo ' <a href="install.php">'.$lang['L_INSTALL_TOMENU'].'</a>'; } else { $tmp = file('config.php'); $stored = 0; if (!isset($_POST['dbconnect'])) { // Erstaufruf - Daten aus config.php auslesen for ($i = 0; $i < count($tmp); ++$i) { if ('$config[\'dbhost\']' == substr($tmp[$i], 0, 17)) { $config['dbhost'] = extractValue($tmp[$i]); $dbhost = $config['dbhost']; ++$stored; } if ('$config[\'dbport\']' == substr($tmp[$i], 0, 17)) { $config['dbport'] = extractValue($tmp[$i]); $dbport = $config['dbport']; ++$stored; } if ('$config[\'dbsocket\']' == substr($tmp[$i], 0, 19)) { $config['dbsocket'] = extractValue($tmp[$i]); $dbsocket = $config['dbsocket']; ++$stored; } if ('$config[\'dbuser\']' == substr($tmp[$i], 0, 17)) { $config['dbuser'] = extractValue($tmp[$i]); $dbuser = $config['dbuser']; ++$stored; } if ('$config[\'dbpass\']' == substr($tmp[$i], 0, 17)) { $config['dbpass'] = extractValue($tmp[$i]); $dbpass = $config['dbpass']; ++$stored; } if ('$config[\'language\']' == substr($tmp[$i], 0, 19)) { $config['language'] = extractValue($tmp[$i]); ++$stored; } if (6 == $stored) { break; } } } if (!isset($config['dbport'])) { $config['dbport'] = ''; } if (!isset($config['dbsocket'])) { $config['dbsocket'] = ''; } echo '<form action="install.php?language='.$language.'&phase='.$phase.'" method="post">'; echo '<table class="bdr" style="width:700px;">'; echo '<tr><td>'.$lang['L_DB_HOST'].':</td><td><input type="text" name="dbhost" value="'.$dbhost.'" size="60" maxlength="100"></td></tr>'; echo '<tr><td>'.$lang['L_DB_USER'].':</td><td><input type="text" name="dbuser" value="'.$dbuser.'" size="60" maxlength="100"></td></tr>'; echo '<tr><td>'.$lang['L_DB_PASS'].':</td><td><input type="password" name="dbpass" value="'.$dbpass.'" size="60" maxlength="100"></td></tr>'; echo '<tr><td>* '.$lang['L_DB'].':<p class="small">('.$lang['L_ENTER_DB_INFO'].')</p></td><td><input type="text" name="manual_db" value="'.$manual_db.'" size="60" maxlength="100"></td></tr>'; echo '<tr><td>'; echo $lang['L_PORT'].':</td><td><input type="text" name="dbport" value="'.$dbport.'" size="5" maxlength="5"> '.$lang['L_INSTALL_HELP_PORT'].'</td></tr>'; echo '<tr><td>'.$lang['L_SOCKET'].':</td><td><input type="text" name="dbsocket" value="'.$dbsocket.'" size="30" maxlength="255"> '.$lang['L_INSTALL_HELP_SOCKET'].'</td></tr>'; echo '<tr><td>'.$lang['L_TESTCONNECTION'].':</td><td><input type="submit" name="dbconnect" value="'.$lang['L_CONNECTTOMYSQL'].'" class="Formbutton"></td></tr>'; if (isset($_POST['dbconnect'])) { echo '<tr class="thead"><th colspan="2">'.$lang['L_DBCONNECTION'].'</th></tr>'; echo '<tr><td colspan="2">'; $connection = mod_mysqli_connect(); if (false === $connection) { echo '<p class="error">'.$lang['L_CONNECTIONERROR'].'</p><span> '; } else { $databases = []; echo '<p class="success">'.$lang['L_CONNECTION_OK'].'</p><span class="ssmall">'; $connection = 'ok'; $connstr = "$dbhost|$dbuser|$dbpass|$dbport|$dbsocket|$manual_db"; echo '<input type="hidden" name="connstr" value="'.$connstr.'">'; if ($manual_db > '') { SearchDatabases(1, $manual_db); } else { SearchDatabases(1); } if (!isset($databases['Name']) || !in_array($manual_db, $databases['Name'])) { // conect to manual db was not successful $connstr = substr($connstr, 0, strlen($connstr) - strlen($manual_db)); $manual_db = ''; } } echo '</span></td></tr>'; } echo '</table></form><br>'; if ('ok' == $connection) { if (!isset($databases['Name'][0])) { echo '<br>'.$lang['L_NO_DB_FOUND_INFO']; } echo '<form action="install.php?language='.$language.'&phase='.($phase + 1).'" method="post">'; echo '<input type="hidden" name="dbhost" value="'.$config['dbhost'].'"> <input type="hidden" name="dbuser" value="'.$config['dbuser'].'"> <input type="hidden" name="dbpass" value="'.$config['dbpass'].'"> <input type="hidden" name="manual_db" value="'.$manual_db.'"> <input type="hidden" name="dbport" value="'.$config['dbport'].'"> <input type="hidden" name="dbsocket" value="'.$config['dbsocket'].'"> <input type="hidden" name="connstr" value="'.$connstr.'">'; echo '<input type="submit" name="submit" value=" '.$lang['L_SAVEANDCONTINUE'].' " class="Formbutton"></form>'; } } break; case 2: echo '<h6>MyOOS [Dumper] - '.$lang['L_CONFBASIC'].'</h6>'; $tmp = @file('config.php'); $stored = 0; for ($i = 0; $i < count($tmp); ++$i) { if ('$config[\'dbhost\']' == substr($tmp[$i], 0, 17)) { $tmp[$i] = '$config[\'dbhost\'] = \''.$dbhost.'\';'."\n"; ++$stored; } if ('$config[\'dbport\']' == substr($tmp[$i], 0, 17)) { $tmp[$i] = '$config[\'dbport\'] = \''.$dbport.'\';'."\n"; ++$stored; } if ('$config[\'dbsocket\']' == substr($tmp[$i], 0, 19)) { $tmp[$i] = '$config[\'dbsocket\'] = \''.$dbsocket.'\';'."\n"; ++$stored; } if ('$config[\'dbuser\']' == substr($tmp[$i], 0, 17)) { $tmp[$i] = '$config[\'dbuser\'] = \''.$dbuser.'\';'."\n"; ++$stored; } if ('$config[\'dbpass\']' == substr($tmp[$i], 0, 17)) { $tmp[$i] = '$config[\'dbpass\'] = \''.$dbpass.'\';'."\n"; ++$stored; } if (6 == $stored) { break; } } $ret = true; if ($fp = fopen('config.php', 'wb')) { if (!fwrite($fp, implode('', $tmp))) { $ret = false; } @chmod('config.php', 0644); } if (!$ret) { echo '<p class="warnung">'.$lang['L_SAVE_ERROR'].'</p>'; } else { echo $lang['L_INSTALL_STEP2FINISHED']; echo '<p> </p>'; echo '<form action="install.php?language='.$language.'&phase='.($phase + 2).'" method="post" name="continue"><input type="hidden" name="connstr" value="'.$connstr.'"><input class="Formbutton" style="width:360px;" type="submit" name="continue2" value=" '.$lang['L_INSTALL_STEP2_1'].' "></form>'; echo '<script>'; echo 'document.forms["continue"].submit();'; echo '</script>'; } break; case 4: //Verzeichnisse if (isset($_POST['submit'])) { $ret = true; if ($fp = fopen('config.php', 'wb')) { if (!fwrite($fp, stripslashes(stripslashes($_POST['configfile'])))) { $ret = false; } if (!fclose($fp)) { $ret = false; } } else { $ret = false; } if (false == $ret) { echo '<br><strong>'.$lang['L_ERRORMAN'].' config.php '.$lang['L_MANUELL'].'.'; exit(); } } echo '<h6>'.$lang['L_CREATEDIRS'].'</h6>'; $check_dirs = [ 'work/', 'work/config/', 'work/log/', 'work/backup/', 'work/cache/', 'work/temp/' ]; $msg = ''; foreach ($check_dirs as $d) { $success = SetFileRechte($d, 1, 0777); if (1 != $success) { $msg .= $success.'<br>'; } } if ($msg > '') { echo '<b>'.$msg.'</b>'; } $iw[0] = IsWritable('work'); $iw[1] = IsWritable('work/config'); $iw[2] = IsWritable('work/log'); $iw[3] = IsWritable('work/backup'); $iw[4] = IsWritable('work/cache'); $iw[5] = IsWritable('work/temp'); if ($iw[0] && $iw[1] && $iw[2] && $iw[3] && $iw[4] && $iw[5]) { echo '<script>'; echo 'self.location.href=\'install.php?language='.$language.'&phase=5&connstr='.$connstr.'\''; echo '</script>'; } echo '<form action="install.php?language='.$language.'&phase=4" method="post"><table class="bdr"><tr class="thead">'; echo '<th>'.$lang['L_DIR'].'</th><th>'.$lang['L_RECHTE'].'</th><th>'.$lang['L_STATUS'].'</th></tr>'; echo '<tr><td><strong>work</strong></td><td>'.Rechte('work').'</td><td>'.(($iw[0]) ? $img_ok : $img_failed).'</td></tr>'; echo '<tr><td><strong>work/config</strong></td><td>'.Rechte('work/config').'</td><td>'.(($iw[1]) ? $img_ok : $img_failed).'</td></tr>'; echo '<tr><td><strong>work/log</strong></td><td>'.Rechte('work/log').'</td><td>'.(($iw[2]) ? $img_ok : $img_failed).'</td></tr>'; echo '<tr><td><strong>work/backup</strong></td><td>'.Rechte('work/backup').'</td><td>'.(($iw[3]) ? $img_ok : $img_failed).'</td></tr>'; echo '<tr><td><strong>work/cache</strong></td><td>'.Rechte('work/cache').'</td><td>'.(($iw[4]) ? $img_ok : $img_failed).'</td></tr>'; echo '<tr><td><strong>work/temp</strong></td><td>'.Rechte('work/temp').'</td><td>'.(($iw[5]) ? $img_ok : $img_failed).'</td></tr>'; echo '<tr><td colspan="3" align="right"><input type="hidden" name="connstr" value="'.$connstr.'"><input class="Formbutton" type="submit" name="dir_check" value=" '.$lang['L_CHECK_DIRS'].' "></td></tr>'; if ($iw[0] && $iw[1] && $iw[2] && $iw[3] && $iw[4] && $iw[5]) { echo '<tr><td colspan="2">'.$lang['L_DIRS_CREATED'].'<br><br><input class="Formbutton" type="Button" value=" '.$lang['L_INSTALL_CONTINUE'].' " onclick="location.href=\'install.php?language='.$language.'&phase=5&connstr='.$connstr.'\'"></td></tr>'; } echo '</table></form>'; break; case 5: echo '<h6>'.$lang['L_LASTSTEP'].'</h6>'; echo '<br><h4>'.$lang['L_INSTALLFINISHED'].'</h4>'; SetDefault(1); include 'language/'.$language.'/lang_install.php'; // direkt zum Start des Dumeprs echo '<script>self.location.href=\'index.php\';</script>'; break; case 100: //uninstall echo '<h6>'.$lang['L_UI1'].'</h6>'; echo '<h6>'.$lang['L_UI2'].'</h6>'; echo '<a href="install.php">'.$lang['L_UI3'].'</a> '; echo '<a href="install.php?language='.$language.'&phase=101">'.$lang['L_UI4'].'</a>'; break; case 101: echo '<h6>'.$lang['L_UI5'].'</h6>'; $paths = []; $w = substr($config['paths']['work'], 0, strlen($config['paths']['work']) - 1); if (is_dir($w)) { $res = rec_rmdir($w); } else { $res = 0; } // wurde das Verzeichnis korrekt gelöscht if (0 == $res) { // das Verzeichnis wurde korrekt gelöscht echo '<p>'.$lang['L_UI6'].'</p>'; echo $lang['L_UI7'].'<br>"'.Realpfad('./').'"<br> '.$lang['L_MANUELL'].'.<br><br>'; echo '<a href="../">'.$lang['L_UI8'].'</a>'; } else { echo '<p class="Warnung">'.$lang['L_UI9'].'"'.$paths[count($paths) - 1].'"'; } break; } ?> </div> </body> </html> <?php //eigene Funktionen // rec_rmdir - loesche ein Verzeichnis rekursiv // Rueckgabewerte: // 0 - alles ok // -1 - kein Verzeichnis // -2 - Fehler beim Loeschen // -3 - Ein Eintrag eines Verzeichnisses war keine Datei und kein Verzeichnis und // kein Link function rec_rmdir($path) { global $paths; $paths[] = $path; // schau' nach, ob das ueberhaupt ein Verzeichnis ist if (!is_dir($path)) { return -1; } // oeffne das Verzeichnis $dir = @opendir($path); // Fehler? if (!$dir) { return -2; } // gehe durch das Verzeichnis while ($entry = @readdir($dir)) { // wenn der Eintrag das aktuelle Verzeichnis oder das Elternverzeichnis // ist, ignoriere es if ('.' == $entry || '..' == $entry) { continue; } // wenn der Eintrag ein Verzeichnis ist, dann if (is_dir($path.'/'.$entry)) { // rufe mich selbst auf $res = rec_rmdir($path.'/'.$entry); // wenn ein Fehler aufgetreten ist if (-1 == $res) { // dies duerfte gar nicht passieren @closedir($dir); // Verzeichnis schliessen return -2; // normalen Fehler melden } elseif (-2 == $res) { // Fehler? @closedir($dir); // Verzeichnis schliessen return -2; // Fehler weitergeben } elseif (-3 == $res) { // nicht unterstuetzer Dateityp? @closedir($dir); // Verzeichnis schliessen return -3; // Fehler weitergeben } elseif (0 != $res) { // das duerfe auch nicht passieren... @closedir($dir); // Verzeichnis schliessen return -2; // Fehler zurueck } } elseif (is_file($path.'/'.$entry) || is_link($path.'/'.$entry)) { // ansonsten loesche diese Datei / diesen Link $res = @unlink($path.'/'.$entry); // Fehler? if (!$res) { @closedir($dir); // Verzeichnis schliessen return -2; // melde ihn } } else { // ein nicht unterstuetzer Dateityp @closedir($dir); // Verzeichnis schliessen return -3; // tut mir schrecklich leid... } } // schliesse nun das Verzeichnis @closedir($dir); // versuche nun, das Verzeichnis zu loeschen $res = @rmdir($path); // gab's einen Fehler? if (!$res) { return -2; // melde ihn } // alles ok return 0; } function Rechte($file) { clearstatcache(); return @substr(decoct(fileperms($file)), -3); } function extractValue($s) { $r = trim(substr($s, strpos($s, '=') + 1)); $r = substr($r, 0, strlen($r) - 1); if ("'" == substr($r, -1) || '"' == substr($r, -1)) { $r = substr($r, 0, strlen($r) - 1); } if ("'" == substr($r, 0, 1) || '"' == substr($r, 0, 1)) { $r = substr($r, 1); } return $r; } ob_end_flush(); exit();