From 91195fda89a1ad08a4de3edeb751b80622bf6cca Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Wed, 19 Sep 2018 11:15:03 +0200 Subject: [PATCH] check for all needed php extensions and mysqldump tool in setup process, fixes #569 Signed-off-by: Michael Kaufmann --- install/lib/class.FroxlorInstall.php | 127 +++++++++++++-------------- install/lng/english.lng.php | 5 ++ install/lng/german.lng.php | 5 ++ 3 files changed, 70 insertions(+), 67 deletions(-) diff --git a/install/lib/class.FroxlorInstall.php b/install/lib/class.FroxlorInstall.php index 598bf66a..1430b33d 100644 --- a/install/lib/class.FroxlorInstall.php +++ b/install/lib/class.FroxlorInstall.php @@ -964,84 +964,39 @@ class FroxlorInstall } else { $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); } - + + // check for session-extension + $this->_requirementCheckFor($content, $_die, 'session', false, 'phpsession'); + + // check for ctype-extension + $this->_requirementCheckFor($content, $_die, 'ctype', false, 'phpctype'); + + // check for SimpleXML-extension + $this->_requirementCheckFor($content, $_die, 'simplexml', false, 'phpsimplexml'); + // check for xml-extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpxml']); - - if (! extension_loaded('xml')) { - $content .= $this->_status_message('red', $this->_lng['requirements']['notinstalled']); - $_die = true; - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } + $this->_requirementCheckFor($content, $_die, 'xml', false, 'phpxml'); // check for filter-extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpfilter']); - - if (! extension_loaded('filter')) { - $content .= $this->_status_message('red', $this->_lng['requirements']['notinstalled']); - $_die = true; - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } + $this->_requirementCheckFor($content, $_die, 'filter', false, 'phpfilter'); // check for posix-extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpposix']); - - if (! extension_loaded('posix')) { - $content .= $this->_status_message('red', $this->_lng['requirements']['notinstalled']); - $_die = true; - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } - - // check for bstring-extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpmbstring']); - - if (! extension_loaded('mbstring')) { - $content .= $this->_status_message('red', $this->_lng['requirements']['notinstalled']); - $_die = true; - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } + $this->_requirementCheckFor($content, $_die, 'posix', false, 'phpposix'); + + // check for mbstring-extension + $this->_requirementCheckFor($content, $_die, 'mbstring', false, 'phpmbstring'); // check for curl extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpcurl']); - - if (! extension_loaded('curl')) { - $content .= $this->_status_message('red', $this->_lng['requirements']['notinstalled']); - $_die = true; - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } - - // check for json extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpjson']); + $this->_requirementCheckFor($content, $_die, 'curl', false, 'phpcurl'); - if (! extension_loaded('json')) { - $content .= $this->_status_message('red', $this->_lng['requirements']['notinstalled']); - $_die = true; - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } + // check for json extension + $this->_requirementCheckFor($content, $_die, 'json', false, 'phpjson'); // check for bcmath extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpbcmath']); - - if (! extension_loaded('bcmath')) { - $content .= $this->_status_message('orange', $this->_lng['requirements']['notinstalled'] . "
" . $this->_lng['requirements']['bcmathdescription']); - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } + $this->_requirementCheckFor($content, $_die, 'bcmath', true, 'phpbcmath', 'bcmathdescription'); // check for zip extension - $content .= $this->_status_message('begin', $this->_lng['requirements']['phpzip']); - - if (! extension_loaded('zip')) { - $content .= $this->_status_message('orange', $this->_lng['requirements']['notinstalled'] . "
" . $this->_lng['requirements']['zipdescription']); - } else { - $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); - } + $this->_requirementCheckFor($content, $_die, 'zip', true, 'phpzip', 'zipdescription'); // check for open_basedir $content .= $this->_status_message('begin', $this->_lng['requirements']['openbasedir']); @@ -1051,6 +1006,16 @@ class FroxlorInstall } else { $content .= $this->_status_message('green', 'off'); } + + // check for mysqldump binary in order to backup existing database + $content .= $this->_status_message('begin', $this->_lng['requirements']['mysqldump']); + + if (file_exists("/usr/bin/mysqldump") || file_exists("/usr/local/bin/mysqldump")) { + $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); + } else { + $content .= $this->_status_message('orange', $this->_lng['requirements']['notinstalled'] . "
" . $this->_lng['requirements']['mysqldumpmissing']); + } + $content .= ""; // check if we have unrecoverable errors @@ -1073,6 +1038,22 @@ class FroxlorInstall 'pagenavigation' => $navigation ); } + + private function _requirementCheckFor(&$content, &$_die, $ext = '', $optional = false, $lng_txt = "", $lng_desc = "") + { + $content .= $this->_status_message('begin', $this->_lng['requirements'][$lng_txt]); + + if (! extension_loaded($ext)) { + if (!$optional) { + $content .= $this->_status_message('red', $this->_lng['requirements']['notinstalled']); + $_die = true; + } else { + $content .= $this->_status_message('orange', $this->_lng['requirements']['notinstalled'] . "
" . $this->_lng['requirements'][$lng_desc]); + } + } else { + $content .= $this->_status_message('green', $this->_lng['requirements']['installed']); + } + } /** * send no-caching headers and set the default timezone @@ -1141,12 +1122,24 @@ class FroxlorInstall } } - $lngfile = $this->_basepath . '/install/lng/' . $this->_activelng . '.lng.php'; + // require english base language as fallback + $lngfile = $this->_basepath . '/install/lng/english.lng.php'; if (file_exists($lngfile)) { // includes file /lng/$language.lng.php if it exists require $lngfile; $this->_lng = $lng; } + + // require chosen language if not english + if ($this->_activelng != 'english') + { + $lngfile = $this->_basepath . '/install/lng/' . $this->_activelng . '.lng.php'; + if (file_exists($lngfile)) { + // includes file /lng/$language.lng.php if it exists + require $lngfile; + $this->_lng = $lng; + } + } } /** diff --git a/install/lng/english.lng.php b/install/lng/english.lng.php index a4cea2dc..c1020569 100644 --- a/install/lng/english.lng.php +++ b/install/lng/english.lng.php @@ -28,6 +28,9 @@ $lng['requirements']['newerphpprefered'] = 'Good, but php-5.6 is prefered.'; $lng['requirements']['phpmagic_quotes_runtime'] = 'magic_quotes_runtime...'; $lng['requirements']['phpmagic_quotes_runtime_description'] = 'PHP setting "magic_quotes_runtime" must be set to "Off". We have disabled it temporary for now please fix the coresponding php.ini.'; $lng['requirements']['phppdo'] = 'PHP PDO extension and PDO-MySQL driver...'; +$lng['requirements']['phpsession'] = 'PHP session-extension...'; +$lng['requirements']['phpctype'] = 'PHP ctype-extension...'; +$lng['requirements']['phpsimplexml'] = 'PHP SimpleXML-extension...'; $lng['requirements']['phpxml'] = 'PHP XML-extension...'; $lng['requirements']['phpfilter'] = 'PHP filter-extension...'; $lng['requirements']['phpposix'] = 'PHP posix-extension...'; @@ -40,6 +43,8 @@ $lng['requirements']['bcmathdescription'] = 'Traffic-calculation related functio $lng['requirements']['zipdescription'] = 'The auto-update feature requires the zip extension.'; $lng['requirements']['openbasedir'] = 'open_basedir...'; $lng['requirements']['openbasedirenabled'] = 'Froxlor will not work properly with open_basedir enabled. Please disable open_basedir for Froxlor in the coresponding php.ini'; +$lng['requirements']['mysqldump'] = 'MySQL dump tool'; +$lng['requirements']['mysqldumpmissing'] = 'Automatic backup of possible existing database is not possible. Please install mysql-client tools'; $lng['requirements']['diedbecauseofrequirements'] = 'Cannot install Froxlor without these requirements! Try to fix them and retry.'; $lng['requirements']['froxlor_succ_checks'] = 'All requirements are satisfied'; diff --git a/install/lng/german.lng.php b/install/lng/german.lng.php index 4e4638db..49998936 100644 --- a/install/lng/german.lng.php +++ b/install/lng/german.lng.php @@ -28,6 +28,9 @@ $lng['requirements']['newerphpprefered'] = 'Passt, aber php-5.6 wird bevorzugt.' $lng['requirements']['phpmagic_quotes_runtime'] = 'magic_quotes_runtime'; $lng['requirements']['phpmagic_quotes_runtime_description'] = 'Die PHP Einstellung "magic_quotes_runtime" muss deaktiviert sein ("Off"). Die Einstellung wurde temporär deaktiviert, bitte ändern Sie diese in der entsprechenden php.ini.'; $lng['requirements']['phppdo'] = 'PHP PDO Erweiterung und PDO-MySQL Treiber...'; +$lng['requirements']['phpsession'] = 'PHP session-Erweiterung...'; +$lng['requirements']['phpctype'] = 'PHP ctype-Erweiterung...'; +$lng['requirements']['phpsimplexml'] = 'PHP SimpleXML-Erweiterung...'; $lng['requirements']['phpxml'] = 'PHP XML-Erweiterung...'; $lng['requirements']['phpfilter'] = 'PHP filter-Erweiterung...'; $lng['requirements']['phpposix'] = 'PHP posix-Erweiterung...'; @@ -40,6 +43,8 @@ $lng['requirements']['bcmathdescription'] = 'Traffic-Berechnungs bezogene Funkti $lng['requirements']['zipdescription'] = 'Die Auto-Update Funktion benötigt die zip Erweiterung.'; $lng['requirements']['openbasedir'] = 'open_basedir genutzt wird...'; $lng['requirements']['openbasedirenabled'] = 'Froxlor wird mit aktiviertem open_basedir nicht vollständig funktionieren. Bitte deaktivieren Sie open_basedir für Froxlor in der entsprechenden php.ini'; +$lng['requirements']['mysqldump'] = 'MySQL dump Tool'; +$lng['requirements']['mysqldumpmissing'] = 'Ein automatisches Backup einer möglicherweise schon existierenden Datenbank nicht möglich. Bitte mysql-client installieren'; $lng['requirements']['diedbecauseofrequirements'] = 'Kann Froxlor ohne diese Voraussetzungen nicht installieren! Beheben Sie die angezeigten Probleme und versuchen Sie es erneut.'; $lng['requirements']['froxlor_succ_checks'] = 'Alle Vorraussetzungen sind erfüllt';