diff --git a/htdocs/admin/tools/purge.php b/htdocs/admin/tools/purge.php index 1bc3fea3909..170c37a79bf 100644 --- a/htdocs/admin/tools/purge.php +++ b/htdocs/admin/tools/purge.php @@ -50,10 +50,9 @@ if ($action=='purge' && ! preg_match('/^confirm/i',$choice) && ($choice != 'allf { require_once DOL_DOCUMENT_ROOT.'/core/class/utils.class.php'; $utils = new Utils($db); - $count = $utils->purgeFiles($choice); - - if ($count) $mesg=$langs->trans("PurgeNDirectoriesDeleted", $count); - else $mesg=$langs->trans("PurgeNothingToDelete"); + $result = $utils->purgeFiles($choice); + + $mesg = $utils->output; setEventMessages($mesg, null, 'mesgs'); } diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index 3132423d614..4cd7b84f150 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -44,11 +44,11 @@ class Utils * Purge files into directory of data files. * * @param string $choice Choice of purge mode ('tempfiles', 'tempfilesold' to purge temp older than 24h, 'allfiles', 'logfiles') - * @return int Nb of files deleted + * @return int 0 if OK, < 0 if KO (this function is used also by cron so only 0 is OK) */ function purgeFiles($choice='tempfilesold') { - global $conf, $dolibarr_main_data_root; + global $conf, $langs, $dolibarr_main_data_root; dol_syslog("Utils::purgeFiles choice=".$choice, LOG_DEBUG); require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; @@ -123,7 +123,11 @@ class Utils $result = $ecmdirstatic->refreshcachenboffile(1); } } - - return $count; + + if ($count > 0) $this->output=$langs->trans("PurgeNDirectoriesDeleted", $count); + else $this->output=$langs->trans("PurgeNothingToDelete"); + + //return $count; + return 0; // This function can be called by cron so must return 0 if OK } } diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 29e86fac636..18c87b6796e 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1176,6 +1176,8 @@ function dol_delete_file($file,$disableglob=0,$nophperrors=0,$nohook=0,$object=n else $ok=unlink($filename); if ($ok) dol_syslog("Removed file ".$filename, LOG_DEBUG); else dol_syslog("Failed to remove file ".$filename, LOG_WARNING); + // TODO Failure to remove can be because file was already removed or because of permission + // If error because of not exists, we must can return true but we should return false if this is a permission problem } } else dol_syslog("No files to delete found", LOG_WARNING); @@ -1186,7 +1188,7 @@ function dol_delete_file($file,$disableglob=0,$nophperrors=0,$nohook=0,$object=n if ($nophperrors) $ok=@unlink($file_osencoded); else $ok=unlink($file_osencoded); if ($ok) dol_syslog("Removed file ".$file_osencoded, LOG_DEBUG); - else dol_syslog("Failed to remove file ".$file_osencoded, LOG_WARNING); + else dol_syslog("Failed to remove file ".$file_osencoded, LOG_WARNING); } return $ok; diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php index a22b4aa21c0..18713622476 100644 --- a/htdocs/cron/class/cronjob.class.php +++ b/htdocs/cron/class/cronjob.class.php @@ -829,10 +829,10 @@ class Cronjob extends CommonObject /** * Run a job. - * Once job is finished, status and nb of of run is updated. + * Once job is finished, status and nb of run is updated. * This function does not plan the next run. This is done by function ->reprogram_jobs * - * @param string $userlogin User login + * @param string $userlogin User login * @return int <0 if KO, >0 if OK */ function run_jobs($userlogin) @@ -947,17 +947,19 @@ class Cronjob extends CommonObject $result = call_user_func_array(array($object, $this->methodename), $params_arr); } - if ($result===false) + if ($result===false || $result != 0) { - dol_syslog(get_class($this)."::run_jobs ".$object->error, LOG_ERR); - $this->lastoutput = $object->error; - $this->lastresult = -1; + $langs->load("errors"); + dol_syslog(get_class($this)."::run_jobs result=".$result." error=".$object->error, LOG_ERR); + $this->error = $object->error?$object->error:$langs->trans('ErrorUnknown'); + $this->lastoutput = $this->error; + $this->lastresult = is_numeric($result)?$result:-1; $retval = $this->lastresult; $error++; } else { - $this->lastoutput='NA'; + $this->lastoutput=$object->output; $this->lastresult=var_export($result,true); $retval = $this->lastresult; } @@ -993,13 +995,15 @@ class Cronjob extends CommonObject $result = call_user_func_array($this->methodename, $params_arr); } - if ($result === false) + if ($result === false || $result != 0) { - dol_syslog(get_class($this) . "::run_jobs " . $object->error, LOG_ERR); - - $this->lastoutput = $object->error; - $this->lastresult = -1; - $retval = $this->lastresult; + $langs->load("errors"); + dol_syslog(get_class($this)."::run_jobs result=".$result, LOG_ERR); + $this->error = $langs->trans('ErrorUnknown'); + $this->lastoutput = $this->error; + $this->lastresult = is_numeric($result)?$result:-1; + $retval = $this->lastresult; + $error++; } else { @@ -1024,6 +1028,16 @@ class Cronjob extends CommonObject if ($execmethod == 1) { exec($command, $output_arr, $retval); + if ($retval != 0) + { + $langs->load("errors"); + dol_syslog(get_class($this)."::run_jobs retval=".$retval, LOG_ERR); + $this->error = 'Error '.$retval; + $this->lastoutput = ''; // Will be filled later + $this->lastresult = $retval; + $retval = $this->lastresult; + $error++; + } } if ($execmethod == 2) { @@ -1046,7 +1060,7 @@ class Cronjob extends CommonObject } } - dol_syslog(get_class($this)."::run_jobs output_arr:".var_export($output_arr,true), LOG_DEBUG); + dol_syslog(get_class($this)."::run_jobs output_arr:".var_export($output_arr,true)." lastoutput=".$this->lastoutput." lastresult=".$this->lastresult, LOG_DEBUG); // Update with result if (is_array($output_arr) && count($output_arr)>0) diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 3ff7e974408..41b08acbdd5 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -99,7 +99,7 @@ if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->ex $now = dol_now(); // Date we start - $resrunjob = $object->run_jobs($user->login); + $resrunjob = $object->run_jobs($user->login); // Return -1 if KO, 1 if OK if ($resrunjob < 0) { setEventMessages($object->error, $object->errors, 'errors'); } @@ -110,8 +110,8 @@ if ($action == 'confirm_execute' && $confirm == "yes" && $user->rights->cron->ex { if ($resrunjob >= 0) // We add result of reprogram ony if no error message already reported { - if ($object->lastresult > 0) setEventMessages($langs->trans("JobFinished"), null, 'warnings'); - else setEventMessages($langs->trans("JobFinished"), null, 'mesgs'); + if ($object->lastresult >= 0) setEventMessages($langs->trans("JobFinished"), null, 'mesgs'); + else setEventMessages($langs->trans("JobFinished"), null, 'errors'); } $action=''; } @@ -252,15 +252,15 @@ if ($num > 0) $texttoshow.=$langs->trans('CronClass').': '. $line->classesname.'
'; $texttoshow.=$langs->trans('CronObject').': '. $line->objectname.'
'; $texttoshow.=$langs->trans('CronMethod').': '. $line->methodename; - $texttoshow.='
'.$langs->trans('CronArgs').':'. $line->params; - $texttoshow.='
'.$langs->trans('Comment').':'. $line->note; + $texttoshow.='
'.$langs->trans('CronArgs').': '. $line->params; + $texttoshow.='
'.$langs->trans('Comment').': '. $langs->trans($line->note); } elseif ($line->jobtype=='command') { $text=$langs->trans('CronCommand'); $texttoshow=$langs->trans('CronCommand').': '.dol_trunc($line->command); - $texttoshow.='
'.$langs->trans('CronArgs').':'. $line->params; - $texttoshow.='
'.$langs->trans('Comment').':'. $line->note; + $texttoshow.='
'.$langs->trans('CronArgs').': '. $line->params; + $texttoshow.='
'.$langs->trans('Comment').': '. $langs->trans($line->note); } print $form->textwithpicto($text, $texttoshow, 1); print '';