From 7964bb12ce147ee6c7a61cdff6a9f0b3993f27e8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 27 May 2019 18:13:33 +0200 Subject: [PATCH] FIX Use of cron with multicompany --- scripts/cron/cron_run_jobs.php | 48 +++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/scripts/cron/cron_run_jobs.php b/scripts/cron/cron_run_jobs.php index a3b7d83684d..635c128a89f 100755 --- a/scripts/cron/cron_run_jobs.php +++ b/scripts/cron/cron_run_jobs.php @@ -28,7 +28,6 @@ if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); if (! defined('NOLOGIN')) define('NOLOGIN','1'); -//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); $sapi_type = php_sapi_name(); @@ -64,13 +63,14 @@ $userlogin=$argv[2]; $version=DOL_VERSION; $error=0; +// Language Management +$langs->loadLangs(array('main', 'admin', 'cron', 'dict')); /* * Main */ -$langs->loadLangs(array('main', 'dict')); // current date $now=dol_now(); @@ -159,7 +159,7 @@ $result = $object->fetch_all('ASC,ASC,ASC','t.priority,t.entity,t.rowid', 0, 0, if ($result<0) { echo "Error: ".$object->error; - dol_syslog("cron_run_jobs.php:: fetch Error ".$object->error, LOG_ERR); + dol_syslog("cron_run_jobs.php fetch Error ".$object->error, LOG_ERR); exit(-1); } @@ -171,21 +171,55 @@ foreach($object->lines as $val) $qualifiedjobs[] = $val; } -// TODO Duplicate. This sequence of code must be shared with code into public/cron/cron_run_jobs.php php page. +// TODO Duplicate code. This sequence of code must be shared with code into public/cron/cron_run_jobs.php php page. +// current date $nbofjobs=count($qualifiedjobs); $nbofjobslaunchedok=0; $nbofjobslaunchedko=0; if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0)) { + $savconf = dol_clone($conf); + // Loop over job foreach($qualifiedjobs as $line) { dol_syslog("cron_run_jobs.php cronjobid: ".$line->id." priority=".$line->priority." entity=".$line->entity." label=".$line->label, LOG_DEBUG); - echo "cron_run_jobs.php cronjobid: ".$line->id." priority=".$line->priority." entity=".$line->entity." label=".$line->label; + // Force reload of setup for the current entity + if ($line->entity != $conf->entity) + { + dol_syslog("cron_run_jobs.php we work on another entity so we reload user and conf", LOG_DEBUG); + echo " -> we change entity so we reload user and conf"; + + $conf->entity = (empty($line->entity)?1:$line->entity); + $conf->setValues($db); // This make also the $mc->setValues($conf); that reload $mc->sharings + + // Force recheck that user is ok for the entity to process and reload permission for entity + if ($conf->entity != $user->entity && $user->entity != 0) + { + $result=$user->fetch('', $userlogin, '', 0, $conf->entity); + if ($result < 0) + { + echo "\nUser Error: ".$user->error."\n"; + dol_syslog("cron_run_jobs.php:: User Error:".$user->error, LOG_ERR); + exit(-1); + } + else + { + if ($result == 0) + { + echo "\nUser login: ".$userlogin." does not exists for entity ".$conf->entity."\n"; + dol_syslog("User login:".$userlogin." does not exists", LOG_ERR); + exit(-1); + } + } + $user->getrights(); + } + } + //If date_next_jobs is less of current date, execute the program, and store the execution time of the next execution in database if (($line->datenextrun < $now) && (empty($line->datestart) || $line->datestart <= $now) && (empty($line->dateend) || $line->dateend >= $now)) { @@ -219,7 +253,7 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0)) echo " - result of run_jobs = ".$result; - // we re-program the next execution and stores the last execution time for this job + // We re-program the next execution and stores the last execution time for this job $result=$cronjob->reprogram_jobs($userlogin, $now); if ($result<0) { @@ -238,6 +272,8 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0)) dol_syslog("cron_run_jobs.php job not qualified line->datenextrun:".dol_print_date($line->datenextrun,'dayhourrfc')." line->datestart:".dol_print_date($line->datestart,'dayhourrfc')." line->dateend:".dol_print_date($line->dateend,'dayhourrfc')." now:".dol_print_date($now,'dayhourrfc')); } } + + $conf = $savconf; } else {