diff --git a/workflow/engine/methods/install/installServer.php b/workflow/engine/methods/install/installServer.php index f5300d289..abd34bf4a 100644 --- a/workflow/engine/methods/install/installServer.php +++ b/workflow/engine/methods/install/installServer.php @@ -201,40 +201,44 @@ else if($action==="install") *5.2 Install plugins * */ - require_once 'Log.php'; - $sp = "/"; - $dir_data = $dataClient->path_data; - //$dir_compiled = $dataClient->path_compiled; - - $dir_data = (substr($dir_data,-1)==$sp)?$dir_data:$dir_data."/"; - $dir_compiled = $dir_data . "compiled/"; //(substr($dir_compiled,-1)==$sp)?$dir_compiled:$dir_compiled."/"; - global $isWindows; - - @mkdir($dir_data."sites",0777,true); - @mkdir($dir_compiled,0777,true); - - $logFile = "{$dir_data}install.log"; - $display = Log::singleton('display', '', 'INSTALLER', array('lineFormat' => "%{message}")); - $file = Log::singleton('file', $logFile, 'INSTALLER'); - - global $logger; - $logger = Log::singleton('composite'); - $logger->addChild($display); - $logger->addChild($file); - - $create_db ="create-db.sql"; - $schema ="schema.sql"; - - G::LoadClass('Installer'); - - /* Create default workspace called workflow */ - $inst = new Installer(); - $siteName="workflow"; - $p1 = (isset($dataClient->ao_admin_pass1))?$dataClient->ao_admin_pass1:'admin'; - $p2 = (isset($dataClient->ao_admin_pass2))?$dataClient->ao_admin_pass2:'admin'; + $report = NULL; try { + + require_once 'Log.php'; + + $sp = "/"; + $dir_data = $dataClient->path_data; + + $dir_data = (substr($dir_data,-1)==$sp)?$dir_data:$dir_data."/"; + $dir_compiled = $dir_data . "compiled/"; + $dir_log = "{$dir_data}logs/"; + global $isWindows; + + @mkdir($dir_data."sites",0777,true); + @mkdir($dir_compiled,0777,true); + @mkdir($dir_log, 0777, true); + + $logFilename = "{$dir_log}install.log"; + $displayLog = Log::singleton('display', '', 'INSTALLER', array('lineFormat' => "%{message}")); + $fileLog = Log::singleton('file', $logFilename, 'INSTALLER'); + + global $logger; + $logger = Log::singleton('composite'); + $logger->addChild($displayLog); + + $create_db ="create-db.sql"; + $schema ="schema.sql"; + + G::LoadClass('Installer'); + + /* Create default workspace called workflow */ + $inst = new Installer(); + $siteName="workflow"; + $p1 = (isset($dataClient->ao_admin_pass1))?$dataClient->ao_admin_pass1:'admin'; + $p2 = (isset($dataClient->ao_admin_pass2))?$dataClient->ao_admin_pass2:'admin'; + $s = $inst->create_site(Array( 'name' =>'workflow', 'path_data'=>$dataClient->path_data, @@ -253,6 +257,14 @@ else if($action==="install") 'password'=>$dataClient->mysqlP ) ),true); + if ($s['created']) + $report = $inst->report; + else + /* On a failed install, $inst->report is blank because the + * installation didnt occured at all. So we use the test report + * instead. + */ + $report = $s['result']; $installError = (!$s['created']); } catch (Exception $e) { $installError = ($e->getMessage() ? $e->getMessage() : true); @@ -264,8 +276,20 @@ else if($action==="install") /* Status is used in the Windows installer, do not change this */ print_r("Status: ".(($installError) ? 'FAILED':'SUCCESS')."\n\n"); - $file->log("Status: ".(($installError) ? 'FAILED':'SUCCESS')); - $display->log("This log is also avaliable in $logFile"); + /* Try to open the file log, if it fails, set it to NULL, so we don't try to + * write to it again afterwards. If it succeeds, add to the logger. + * Only open the log after writing status, otherwise a warning can be issued + * which will affect the Windows installer. + */ + if (!$fileLog->open()) { + $fileLog = NULL; + $displayLog->log("Failed to create file log in $logFilename"); + } else { + $logger->addChild($fileLog); + $fileLog->log(" ** Starting installation ** "); + $fileLog->log("Status: ".(($installError) ? 'FAILED':'SUCCESS')); + $displayLog->log("This log is also avaliable in $logFilename"); + } $installArgs = (array)$dataClient; $hiddenFields = array('mysqlP', 'ao_admin_pass1', 'ao_admin_pass2'); @@ -275,19 +299,15 @@ else if($action==="install") $logger->log("Installation arguments\n" . neat_r(array($installArgs))); - if ($installError !== false && isset($s) && !$s['created']) { - /* On a failed install, $inst->report is blank because the - * installation didnt occured at all. So we use the test report - * instead. - */ - $logger->log("Installation report\n" . neat_r(array($s['result']))); - die(); - } + if (isset($report)) + $logger->log("Installation report\n" . neat_r(array($report))); + else + $logger->log("** No installation report **"); - $logger->log("Installation report\n" . neat_r(array($inst->report))); - - if ($installError) + if ($installError) { + $logger->log("Installation ending with errors"); die(); + } $sh=md5(filemtime(PATH_GULLIVER."/class.g.php")); $h=G::encrypt($dataClient->mysqlH.$sh.$dataClient->mysqlU.$sh.$dataClient->mysqlP.$sh.$inst->cc_status,$sh); @@ -321,6 +341,8 @@ else if($action==="install") if (trim(str_replace("
","",$update)) == "") $update = "Nothing to do."; $logger->log("Plugin AutoInstall => ".str_replace("
","\n",$update)); + + $logger->log("Installation finished successfuly"); } /*