";
}
$template_result=str_replace("!!BODY!!",$body,$template_result);
//Confirmation de suppression
if ($confirm == "1") {
//Vérifie si une tâche est en cours sur cette planification
$query_check = "select id_tache from taches where num_planificateur=".$this->id." and status <> 3";
$result = pmb_mysql_query($query_check);
if (pmb_mysql_num_rows($result) == '1') {
// ne pas la supprimer !
$ident_tache = pmb_mysql_result($result, 0,"id_tache");
}
//suppression des tâches à l'exclusion de celle en cours
$query="select id_tache from taches where num_planificateur=".$this->id."
and id_tache <> ".$ident_tache;
$result = pmb_mysql_query($query);
$tasks_ids = array();
while ($row = pmb_mysql_fetch_object($result)) {
scheduler_log::delete('scheduler_'.scheduler_tasks::get_catalog_element($this->id_type, 'NAME').'_task_'.$row->id_tache.'.log');
$tasks_ids[] = $row->id_tache;
}
if(count($tasks_ids)) {
$query = "delete from taches
where id_tache IN (".implode(',', $tasks_ids).")";
pmb_mysql_query($query);
}
$requete="delete from planificateur where id_planificateur=".$this->id."";
pmb_mysql_query($requete);
//et les documents numériques qu'en fait-on???
print "";
}
return $template_result;
}
/* Calcul prochaine execution */
public function calcul_execution() {
if ($this->id) {
$call_calendar = new scheduler_task_calendar($this->id);
$jour = $call_calendar->new_date["JOUR"];
$mois = $call_calendar->new_date["MOIS"];
$annee = $call_calendar->new_date["ANNEE"];
$heure = $call_calendar->new_date["HEURE"];
$minute = $call_calendar->new_date["MINUTE"];
if ($jour != "00") {
$date_exec = $annee."-".$mois."-".$jour;
$heure_exec = $heure.":".$minute;
} else {
$date_exec = "0000-00-00";
$heure_exec = "00:00";
}
} else {
$date_exec = "0000-00-00";
$heure_exec = "00:00";
}
//mise à jour de la prochaine planification
$query = "update planificateur set calc_next_heure_deb='".$heure_exec."', calc_next_date_deb='".$date_exec."'
where id_planificateur=".$this->id;
pmb_mysql_query($query);
}
//vérification de deux paramètres génériques (historique, nb exécution conservées)
public function checkParams() {
$requete = "select param, num_type_tache from planificateur where id_planificateur=".$this->id;
$resultat=pmb_mysql_query($requete);
if (pmb_mysql_num_rows($resultat) > 0) {
$r=pmb_mysql_fetch_object($resultat);
$params=unserialize($r->param);
$this->id_type=$r->num_type_tache;
if ($params) {
foreach ($params as $index=>$param) {
if (($index == "histo_day") && ($param != "") && ($param !="0")) {
$query = "select id_tache from taches where num_planificateur ='".$this->id."'
and end_at < DATE_SUB(curdate(), INTERVAL ".$param." DAY)
and end_at != '0000-00-00 00:00:00'";
$result = pmb_mysql_query($query);
$tasks_ids = array();
while ($row = pmb_mysql_fetch_object($result)) {
scheduler_log::delete('scheduler_'.scheduler_tasks::get_catalog_element($this->id_type, 'NAME').'_task_'.$row->id_tache.'.log');
$tasks_ids[] = $row->id_tache;
}
if(count($tasks_ids)) {
$query = "delete from taches
where id_tache IN (".implode(',', $tasks_ids).")";
pmb_mysql_query($query);
}
}
if (($index == "histo_number") && ($param != "") && ($param !="0")) {
//check nbre exécution
$requete_select = "select count(*) as nbre from taches where num_planificateur =".$this->id."
and end_at != '0000-00-00 00:00:00'";
$result = pmb_mysql_query($requete_select);
$nb = pmb_mysql_result($result, 0,"nbre");
if ($nb > $param) {
$nb_r = $nb - $param;
$query = "select id_tache from taches where num_planificateur=".$this->id."
and end_at != '0000-00-00 00:00:00'
order by end_at ASC
limit ".$nb_r;
$result = pmb_mysql_query($query);
$tasks_ids = array();
while ($row = pmb_mysql_fetch_object($result)) {
scheduler_log::delete('scheduler_'.scheduler_tasks::get_catalog_element($this->id_type, 'NAME').'_task_'.$row->id_tache.'.log');
$tasks_ids[] = $row->id_tache;
}
if(count($tasks_ids)) {
$query = "delete from taches
where id_tache IN (".implode(',', $tasks_ids).")";
pmb_mysql_query($query);
}
// il faut aussi effacer les documents numériques...
//en base...
$query_del_docnum = "delete from taches_docnum where num_tache not in (select id_tache from taches)";
pmb_mysql_query($query_del_docnum);
}
}
}
}
}
}
public function insertOfTask($active ='') {
if ($active == '') {
//statut de la tâche
$query_state = "select statut from planificateur where id_planificateur=".$this->id;
$result_query_state = pmb_mysql_query($query_state);
if (pmb_mysql_num_rows($result_query_state) > 0) {
$active = pmb_mysql_result($result_query_state,0, "statut");
}
}
// on recherche si cette planification possède une tâche en attente ou en cours d'exécution...
$query = "select t.id_tache, t.num_planificateur, p.statut
from taches t, planificateur p
where t.num_planificateur=p.id_planificateur
and t.end_at='0000-00-00 00:00:00' and t.num_planificateur=".$this->id;
$result_query = pmb_mysql_query($query);
// nouvelle planification && planification activée
if ((pmb_mysql_num_rows($result_query) == 0) && ($active == '1')) {
$insertok=false;
$cmpt=0;//Pour éviter une boucle infini... au cas où
while ((!$insertok) && ($cmpt < 10000)){//MB: Comme des tâches peuvent être executées en parallèle et que id_tache est unique on peut tenter d'insérer avec le même id
$cmpt++;
//valeur maximale d'identifiant de tâche
$reqMaxId = pmb_mysql_query("select max(id_tache) as maxId from taches");
$rowMaxId = pmb_mysql_fetch_row($reqMaxId);
$id_tache = $rowMaxId[0] + 1;
//insertion de la tâche planifiée
$requete="insert into taches (id_tache, num_planificateur, status, commande, indicat_progress,id_process)
values(".$id_tache.",'".$this->id."',1,0,0,0)";
$insertok = pmb_mysql_query($requete);
}
// modification planification && planification désactivée
} else if ((pmb_mysql_num_rows($result_query) == 1) && ($active == '0')) {
//il faut vérifier que la tâche ne soit pas déjà planifiée, si oui on la supprime
if (pmb_mysql_num_rows($result_query) >= 1) {
$requete="delete from taches where start_at='0000-00-00 00:00:00' and num_planificateur='".$this->id."'";
pmb_mysql_query($requete);
}
}
}
public function set_id_type($id_type=0) {
$this->id_type = $id_type+0;
}
}