source: pmb4.2/trunk/fuentes/pmb/classes/tache.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 60.9 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2012 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: tache.class.php,v 1.9.4.2 2015-09-24 09:12:21 dgoron Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($include_path."/parser.inc.php");
10require_once($include_path."/templates/taches.tpl.php");
11require_once($include_path."/connecteurs_out_common.inc.php");
12require_once($class_path."/tache_calendar.class.php");
13require_once($class_path."/tache_docnum.class.php");
14require_once("$class_path/progress_bar_tache.class.php");
15require_once($class_path."/upload_folder.class.php");
16require_once($class_path."/xml_dom.class.php");
17
18//commands
19define('RESUME','1');
20define('SUSPEND','2');
21define('STOP','3');
22define('RETRY','4');
23define('ABORT','5');
24define('FAIL','6');
25
26//status
27define('WAITING','1');
28define('RUNNING','2');
29define('ENDED','3');
30define('SUSPENDED','4');
31define('STOPPED','5');
32define('FAILED','6');
33define('ABORTED','7');
34               
35class tache {
36        var $id_type=0;                                         // identifiant du type de tâche
37        var $name='';                                           // nom du type de tâche
38        var $comment;                                           // commentaire sur le type de tâche
39        var $states;                                            // listing des états
40        var $commands;                                          // listing des commandes
41        var $dir_upload_boolean;                        // La tâche a-t-elle besoin d'un répertoire d'upload?
42        var $msg;                                                       // Messages propres au type de tâche
43        var $parameters="";                                     // paramètres
44        var $timeout;                                           // Temps limite d'exécution
45        var $histo_day;                                         // Historique de conservation en jour
46        var $histo_number;                                      // Historique de conservation en nombre
47        var $restart_on_failure=0;                      // Replanifier la tâche automatiquement en cas d'échec
48        var $alert_mail_on_failure=0;           // Alerter par mail en cas d'échec ?
49        var $mail_on_failure='';                        // Adresses mails destinataires
50        var $proxy;                                                     // classe contenant les méthodes de l'API
51        var $id_tache=0;                                        //identifiant de la tâche
52        var $report=array();                            // rapport de la tâche
53        var $statut;
54       
55        function tache($atache) {
56                global $base_path, $msg, $sub;
57               
58                $this->id_type = $atache["ID"];
59                $this->name = $atache["NAME"];
60                if(strstr($atache["COMMENT"],"msg:"))
61                        $this->comment = $msg[str_replace("msg:", "", $atache["COMMENT"])];
62                else 
63                        $this->comment = $atache["COMMENT"];
64                if (!$this->id_type || !$this->name)
65                        return false;
66                       
67                $tache_path = $base_path."/admin/planificateur/".$this->name;
68                $this->get_messages($tache_path);
69               
70                //fichier de commandes
71                $xml_commands=file_get_contents($base_path."/admin/planificateur/workflow.xml");
72                $xml_dom_commands = new xml_dom($xml_commands);
73               
74                $filename = $tache_path."/manifest.xml";
75                //fichier manifest spécifique
76                $xml_manifest=file_get_contents($filename);
77                $xml_dom_manifest = new xml_dom($xml_manifest);
78                       
79                $this->states = $this->parse_states($xml_dom_commands, $xml_dom_manifest);
80                $this->commands = $this->parse_commands($xml_dom_commands, $xml_dom_manifest);
81                $this->dir_upload_boolean = $this->parse_dir_upload($xml_dom_manifest);
82        }
83       
84        function get_id_type() {
85                return $this->id_type;
86        }
87       
88        //messages
89        function get_messages($tache_path) {
90                global $lang;
91               
92                if (file_exists($tache_path."/messages/".$lang.".xml")) {
93                        $file_name=$tache_path."/messages/".$lang.".xml";
94                } else if (file_exists($tache_path."/messages/fr_FR.xml")) {
95                        $file_name=$tache_path."/messages/fr_FR.xml";
96                }
97                if ($file_name) {
98                        $xmllist=new XMLlist($file_name);
99                        $xmllist->analyser();
100                        $this->msg=$xmllist->table;
101                }
102        }
103       
104        // listing des états
105        function parse_states($xml_dom_commands, $xml_dom_manifest) {
106                global $base_path;
107
108                $nodes_nostates_manifest = $xml_dom_manifest->get_nodes("manifest/capacities/nostates/state");
109                $nodes_states_manifest = $xml_dom_manifest->get_nodes("manifest/capacities/states/state");
110               
111                $nodes_states = $xml_dom_commands->get_nodes("workflow/states/state");         
112                foreach ($nodes_states as $id=>$node_state) {
113                        $t=array();
114                        $state_impossible = false;
115                        if ($nodes_nostates_manifest) {
116                                foreach ($nodes_nostates_manifest as $node_nostate_manifest) {
117                                        if (($xml_dom_manifest->get_attribute($node_nostate_manifest, "name")) == ($xml_dom_commands->get_attribute($node_state,"name"))){
118                                                $state_impossible = true;
119                                        }
120                                }
121                        }
122                        //etat possible
123                        if (!$state_impossible) {
124                                $t["id"] = $xml_dom_commands->get_attribute($node_state,"id");
125                                $t["name"] = $xml_dom_commands->get_attribute($node_state,"name");
126                                $nodes_next_states = $xml_dom_commands->get_nodes("workflow/states/state[$id]/nextState");
127                                $t2 = array();
128                                if ($nodes_next_states) {
129                                        foreach ($nodes_next_states as $index=>$node_next_state) {
130                                                $command_impossible = false;
131                                                if ($nodes_states_manifest) {
132                                                        foreach ($nodes_states_manifest as $k=>$node_state_manifest) {
133                                                                if (($xml_dom_manifest->get_attribute($node_state_manifest, "name")) == ($xml_dom_commands->get_attribute($node_state,"name"))){
134                                                                        $nodes_nocommands_manifest = $xml_dom_manifest->get_nodes("manifest/capacities/states/state[$k]/nocommand");
135                                                                        if ($nodes_nocommands_manifest) {
136                                                                                foreach ($nodes_nocommands_manifest as $node_nocommand_manifest) {
137                                                                                        if (($xml_dom_manifest->get_attribute($node_nocommand_manifest, "commands")) == ($xml_dom_commands->get_attribute($node_next_state,"commands"))){
138                                                                                                $command_impossible = true;
139                                                                                        }
140                                                                                }
141                                                                        }
142                                                                }
143                                                        }
144                                                }
145                                                if (!$command_impossible) {
146                                                        $t2[$index]["command"] = $xml_dom_commands->get_attribute($node_next_state,"commands");
147                                                        $t2[$index]["dontsend"] = $xml_dom_commands->get_attribute($node_next_state,"dontsend");
148                                                        $t2[$index]["value"] = $xml_dom_commands->get_value("workflow/states/state[$id]/nextState[$index]");
149                                                        $value = $index;
150                                                }
151                                        }
152                                }
153                                if ($nodes_states_manifest) {
154                                        foreach ($nodes_states_manifest as $k=>$node_state_manifest) {
155                                                if (($xml_dom_manifest->get_attribute($node_state_manifest, "name")) == ($xml_dom_commands->get_attribute($node_state,"name"))){
156                                                        $nodes_add_commands_manifest = $xml_dom_manifest->get_nodes("manifest/capacities/states/state[$k]/nextState");
157                                                        if ($nodes_add_commands_manifest) {
158                                                                foreach ($nodes_add_commands_manifest as $node_add_command_manifest) {
159                                                                        //ajout des nouvelles commandes
160                                                                        $value++;
161                                                                        $t2[$value]["command"] = $xml_dom_manifest->get_attribute($node_add_command_manifest, "commands");
162                                                                        $t2[$value]["dontsend"] = $xml_dom_manifest->get_attribute($node_add_command_manifest,"dontsend");
163                                                                        $t2[$value]["value"] = $xml_dom_manifest->get_value("manifest/capacities/states/state[$k]/nextState");
164                                                                }
165                                                        }
166                                                }
167                                        }
168                                }
169                                $t["nextState"] = $t2;
170                                $tab_states[$t["name"]]=$t;
171                        }
172                }
173                return $tab_states;
174        }
175       
176        // listing des commandes
177        function parse_commands($xml_dom_commands, $xml_dom_manifest) {
178                global $base_path, $msg, $lang;
179               
180                $nodes_commands = $xml_dom_commands->get_nodes("workflow/commands/command");
181                if ($nodes_commands) {
182                        foreach ($nodes_commands as $id=>$node_command) {
183                                $t=array();
184                                $t["id"] = $xml_dom_commands->get_attribute($node_command,"id");
185                                $t["name"] = $xml_dom_commands->get_attribute($node_command,"name");
186                                $t["label"] = $msg[str_replace("msg:", "", $xml_dom_commands->get_attribute($node_command,"label"))];
187                               
188                                $tab_commands[$t["name"]]=$t;
189                        }
190                }
191               
192                $nodes_commands_manifest = $xml_dom_manifest->get_nodes("manifest/capacities/commands/command");
193                if ($nodes_commands_manifest) {
194                        foreach ($nodes_commands_manifest as $id=>$node_command_manifest) {
195                                $t=array();
196                                $t["id"] = $xml_dom_manifest->get_attribute($node_command_manifest,"id");
197                                $t["name"] = $xml_dom_manifest->get_attribute($node_command_manifest,"name");
198                                $t["label"] = $this->msg[str_replace("msg:", "", $xml_dom_manifest->get_attribute($node_command_manifest,"label"))];
199                               
200                                $tab_commands[$t["name"]]=$t;
201                        }
202                }
203                return $tab_commands;
204        }
205       
206        // Est-ce une tâche qui demande un répertoire d'upload pour des fichiers générés??
207        function parse_dir_upload($xml_dom_manifest) {
208                $node_directory = $xml_dom_manifest->get_node("manifest/directory_upload");
209                if ($node_directory) {
210                        return $xml_dom_manifest->get_value("manifest/directory_upload");
211                } else {
212                        return "0";
213                }
214        }
215       
216        function setEsProxy($proxy) {
217                $this->proxy = $proxy;
218        }
219       
220        function listen_commande($methode_callback) {
221                global $dbh;
222               
223                $query_commande = "select status, commande, next_state from taches where id_tache=".$this->id_tache;
224                $result = pmb_mysql_query($query_commande, $dbh);
225               
226                if (pmb_mysql_result($result,0,"commande") != '0') {
227                        $cmd = pmb_mysql_result($result,0,"commande");                 
228                        $requete = "update taches set status=".pmb_mysql_result($result,0, "next_state").", commande=0, next_state=0 where id_tache=".$this->id_tache."";
229                        $res = pmb_mysql_query($requete, $dbh);
230                        if ($res) {
231                                $this->statut = pmb_mysql_result($result,0, "next_state");
232                                call_user_func($methode_callback,$cmd); 
233                        }
234                }
235        }
236       
237        // Envoi d'une commande par la tache, changement du statut de la tâche...
238        function send_command($state=''){
239                global $dbh;
240               
241                if ($state != '') {
242                        $this->statut = $state;
243                        pmb_mysql_query("update taches set status=".$this->statut." where id_tache='".$this->id_tache."'", $dbh);
244                }
245//              return $cmd;
246        }
247       
248        function make_serialized_task_params() {
249                global $timeout, $histo_day, $histo_number, $restart_on_failure, $alert_mail_on_failure, $mail_on_failure;
250
251                $t["timeout"] = ($timeout != "0" ? $timeout : "");
252                $t["histo_day"] = ($histo_day != "0" ? $histo_day : "");
253                $t["histo_number"] = ($histo_number != "0" ? $histo_number : "");
254                $t["restart_on_failure"] = ($restart_on_failure ? "1" : "0");
255                $t["alert_mail_on_failure"] = $alert_mail_on_failure.($mail_on_failure ? ",".$mail_on_failure : "");
256
257                return $t;
258        }
259   
260        //Sauvegarde des propriétés générales
261        function save_global_properties() {
262                global $dbh;
263
264                $requete="replace into taches_type (id_type_tache,parameters, timeout, histo_day, histo_number, restart_on_failure, alert_mail_on_failure) values('".$this->get_id_type()."',
265                '".serialize($this->parameters)."','".$this->timeout."','".$this->histo_day."','".$this->histo_number."','".$this->restart_on_failure."','".$this->alert_mail_on_failure."')";
266
267                return pmb_mysql_query($requete, $dbh);
268        }
269       
270        //sauvegarde des données du formulaire,
271        function save_property_form($planificateur_id) {
272                global $dbh, $type_task_id, $charset;
273                global $task_name, $task_desc,$form_users, $task_active;
274                global $id_rep, $path;
275                global $task_perio_heure, $task_perio_min, $chkbx_task_quotidien, $chkbx_task_hebdo, $chkbx_task_mensuel;
276               
277                $params = $this->make_serialized_task_params();
278
279                $task_perio_heure = ($task_perio_heure == '') ? '*' : $task_perio_heure;
280                $task_perio_minute = ($task_perio_min == '') ? '*' : $task_perio_min;
281               
282                //concaténation de la periodicité des jours du mois
283                $task_perio_quotidien = "";
284                if ($chkbx_task_quotidien[0] == '*') {
285                        $task_perio_quotidien.= $chkbx_task_quotidien[0].",";
286                } else {
287                        for ($i=0; $i<sizeof($chkbx_task_quotidien); $i++) {
288                                $task_perio_quotidien.= $chkbx_task_quotidien[$i].",";
289                        }
290                }
291                $task_perio_quotidien = ($task_perio_quotidien != '' ? substr($task_perio_quotidien,0,strlen($task_perio_quotidien)-1) : '*');
292               
293                //concaténation de la periodicité des jours de la semaine
294                $task_perio_hebdo = "";
295                if ($chkbx_task_hebdo[0] == '*') {
296                        $task_perio_hebdo.= $chkbx_task_hebdo[0].",";
297                } else {       
298                        for ($i=0; $i<sizeof($chkbx_task_hebdo); $i++) {
299                                $task_perio_hebdo.= $chkbx_task_hebdo[$i].",";
300                        }       
301                }
302                $task_perio_hebdo = ($task_perio_hebdo != '' ? substr($task_perio_hebdo,0,strlen($task_perio_hebdo)-1) : '*');
303               
304                //concaténation de la periodicité des mois
305                $task_perio_mensuel = "";
306                if ($chkbx_task_mensuel[0] == '*') {
307                        $task_perio_mensuel.= $chkbx_task_mensuel[0].",";
308                } else {
309                        for ($i=0; $i<sizeof($chkbx_task_mensuel); $i++) {
310                                $task_perio_mensuel.= $chkbx_task_mensuel[$i].",";
311                        }
312                }
313                $task_perio_mensuel = ($task_perio_mensuel != '' ? substr($task_perio_mensuel,0,strlen($task_perio_mensuel)-1) : '*');
314               
315                if ($id_rep && $path) {
316                        $up = new upload_folder($id_rep);
317                        $path = stripslashes($path);
318                        $path_name = $up->formate_path_to_save($up->formate_path_to_nom($path));       
319                } else {
320                        $id_rep="";
321                        $path_name = "";       
322                }
323               
324                // est-ce une nouvelle tâche ??
325                if ($planificateur_id == '') {
326                        //Nouvelle planification
327                        $requete="insert into planificateur (num_type_tache, libelle_tache, desc_tache, num_user, param, statut, rep_upload, path_upload, perio_heure,
328                                perio_minute, perio_jour_mois, perio_jour, perio_mois)
329                                values(".$type_task_id.",'".addslashes($task_name)."','".addslashes($task_desc)."',
330                                '".$form_users."','".addslashes($params)."','".$task_active."','".$id_rep."','".$path_name."','".$task_perio_heure."','".$task_perio_minute."',
331                                '".htmlentities($task_perio_quotidien, ENT_QUOTES,$charset)."','".htmlentities($task_perio_hebdo, ENT_QUOTES,$charset)."','".htmlentities($task_perio_mensuel, ENT_QUOTES,$charset)."')";
332                        pmb_mysql_query($requete, $dbh);
333                        $planificateur_id = pmb_mysql_insert_id();
334                } else {
335                        //Mise à jour des informations
336                        $requete="update planificateur
337                                set num_type_tache = '".$type_task_id."',
338                                libelle_tache = '".addslashes($task_name)."',
339                                desc_tache = '".addslashes($task_desc)."',
340                                num_user = '".$form_users."',
341                                param = '".addslashes($params)."',
342                                statut = '".$task_active."',
343                                rep_upload = '".$id_rep."',
344                                path_upload = '".$path_name."',
345                                perio_heure = '".$task_perio_heure."',
346                                perio_minute = '".$task_perio_minute."',
347                                perio_jour_mois = '".htmlentities($task_perio_quotidien, ENT_QUOTES,$charset)."',
348                                perio_jour = '".htmlentities($task_perio_hebdo, ENT_QUOTES,$charset)."',
349                                perio_mois = '".htmlentities($task_perio_mensuel, ENT_QUOTES,$charset)."'
350                                where id_planificateur='".$planificateur_id."'";
351                        pmb_mysql_query($requete, $dbh);
352                }
353               
354                //calcul de la prochaine exécution
355                $this->calcul_execution($planificateur_id);
356                //Vérification des paramètres enregistrés
357                $this->checkParams($planificateur_id);
358                // insertion d'une nouvelle tâche si aucune n'est planifiée
359                $this->insertOfTask($planificateur_id, $task_active);
360        }
361       
362        /* Calcul prochaine execution */
363        function calcul_execution($id_planificateur) {
364                global $dbh;
365               
366                if ($id_planificateur) {
367                        $call_calendar = new tache_calendar($id_planificateur);
368                        $jour = $call_calendar->new_date["JOUR"];
369                        $mois = $call_calendar->new_date["MOIS"];
370                        $annee = $call_calendar->new_date["ANNEE"];
371                        $heure = $call_calendar->new_date["HEURE"];
372                        $minute = $call_calendar->new_date["MINUTE"];
373                        if ($jour != "00") {
374                                $date_exec = $annee."-".$mois."-".$jour;
375                                $heure_exec = $heure.":".$minute;
376                        } else {
377                                $date_exec = "0000-00-00";
378                                $heure_exec = "00:00";
379                        }
380                } else {
381                        $date_exec = "0000-00-00";
382                        $heure_exec = "00:00";
383                }
384                //mise à jour de la prochaine planification
385                $requete = "update planificateur set calc_next_heure_deb='".$heure_exec."', calc_next_date_deb='".$date_exec."'
386                where id_planificateur=".$id_planificateur;
387                pmb_mysql_query($requete, $dbh);
388        }
389       
390        function insertOfTask($num_planificateur, $active ='') {
391                global $dbh;
392
393                if ($active == '') {
394                        //statut de la tâche
395                        $query_state = "select statut from planificateur where id_planificateur=".$num_planificateur;
396                        $result_query_state = pmb_mysql_query($query_state, $dbh);
397                        if (pmb_mysql_num_rows($result_query_state) > 0) {
398                                $active = pmb_mysql_result($result_query_state,0, "statut");                           
399                        }
400                }
401                // on recherche si cette planification possède une tâche en attente ou en cours d'exécution...
402                $query = "select t.id_tache, t.num_planificateur, p.statut
403                        from taches t, planificateur p 
404                        where t.num_planificateur=p.id_planificateur
405                        and t.end_at='0000-00-00 00:00:00' and t.num_planificateur=".$num_planificateur;
406                $result_query = pmb_mysql_query($query, $dbh);
407
408                // nouvelle planification && planification activée
409                if ((pmb_mysql_num_rows($result_query) == 0) && ($active == '1')) {
410                        $insertok=false;
411                        $cmpt=0;//Pour éviter une boucle infini... au cas où
412                        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
413                                $cmpt++;
414                                //valeur maximale d'identifiant de tâche
415                                $reqMaxId = pmb_mysql_query("select max(id_tache) as maxId from taches",$dbh);
416                                $rowMaxId = pmb_mysql_fetch_row($reqMaxId);
417                                $id_tache = $rowMaxId[0] + 1;
418                               
419                                //insertion de la tâche planifiée
420                                $requete="insert into taches (id_tache, num_planificateur, status, commande, indicat_progress,id_process)
421                                        values(".$id_tache.",'".$num_planificateur."',1,0,0,0)";
422                                $insertok = pmb_mysql_query($requete, $dbh);
423                        }
424                // modification planification && planification désactivée
425                } else if ((pmb_mysql_num_rows($result_query) == 1) && ($active == '0')) {
426                        //il faut vérifier que la tâche ne soit pas déjà planifiée, si oui on la supprime       
427                        if (pmb_mysql_num_rows($result_query) >= 1) {
428                                $requete="delete from taches where start_at='0000-00-00 00:00:00' and num_planificateur='".$num_planificateur."'";
429                                pmb_mysql_query($requete, $dbh);
430                        }
431                }
432        }
433       
434        function get_report_datas($id_tache) {
435                global $dbh;
436               
437                $sql = "SELECT t.id_tache, p.num_type_tache, p.libelle_tache, t.start_at, t.end_at, t.status, t.indicat_progress, t.rapport FROM taches t,planificateur p
438                                Where t.num_planificateur = p.id_planificateur
439                                And t.id_tache=".$id_tache."
440                                order by p.calc_next_date_deb DESC
441                                ";
442                $res=pmb_mysql_query($sql, $dbh);
443
444                if (pmb_mysql_num_rows($res)) {
445                                $r = pmb_mysql_fetch_object($res);
446                                $task["id_tache"]=$r->id_tache;
447                                $task["num_planificateur"]=$r->num_planificateur;
448                                $task["libelle_tache"]=$r->libelle_tache;
449                                $task["start_at"]= explode (" ",$r->start_at);
450                                $task["end_at"]= explode (" ",$r->end_at);
451                                $task["status"] = $r->status;
452                                $task["indicat_progress"] = $r->indicat_progress;
453                                $task["rapport"] = unserialize(htmlspecialchars_decode($r->rapport, ENT_QUOTES));
454                } else {
455                        $task["id_tache"]="";
456                        $task["num_planificateur"]="";
457                        $task["libelle_tache"]="";
458                        $task["start_at"]="";
459                        $task["end_at"]="";
460                        $task["status"] = "";
461                        $task["indicat_progress"] = "";
462                        $task["rapport"] = "";
463                }
464                return $task;
465        }
466       
467        function fetch_default_global_values() {
468                $this->parameters="";
469                $this->timeout=5;
470                $this->histo_day=7;
471                $this->histo_number=3;
472                $this->restart_on_failure=0;
473                $this->alert_mail_on_failure=0;
474        }
475       
476        //Propriétes globales d'un type de tache du planificateur (timeout, histo_day, ...)
477        function fetch_global_properties() {
478                global $dbh;
479                global $type_task_id;
480
481                $requete="select parameters, timeout, histo_day, histo_number, restart_on_failure, alert_mail_on_failure from taches_type where id_type_tache='".$type_task_id."'";
482                $resultat=pmb_mysql_query($requete, $dbh);
483                if ($resultat && pmb_mysql_num_rows($resultat)) {
484                        $r=pmb_mysql_fetch_object($resultat);
485                        $this->parameters=unserialize($r->parameters);
486                        $this->timeout=$r->timeout;
487                        $this->histo_day=$r->histo_day;
488                        $this->histo_number=$r->histo_number;
489                        $this->restart_on_failure=$r->restart_on_failure;
490                        $this->alert_mail_on_failure=$r->alert_mail_on_failure;
491                } else {
492                        $this->fetch_default_global_values();
493                }
494        }
495       
496        /*
497         * Exécution de la tâche - Méthode appelée par la classe spécifique
498         * Modification des données de la base
499         */
500        function execute() {
501                global $dbh,$charset;
502                         
503                //initialisation de la tâche planifiée sur la base
504                $this->initialize();
505                //appel de la méthode spécifique
506                $this->task_execution();
507                //finalisation de la tâche planifiée sur la base
508                $this->finalize();
509
510                $result_success = pmb_mysql_query("select num_planificateur from taches where id_tache=".$this->id_tache);
511                //mise à jour de la prochaine exec
512                if (pmb_mysql_num_rows($result_success) == 1) {
513                        //planification d'une nouvelle tâche
514                        $this->calcul_execution(pmb_mysql_result($result_success,0,"num_planificateur"));
515                        $this->insertOfTask(pmb_mysql_result($result_success,0,"num_planificateur"));
516                }
517        }
518       
519        //appelée si show_report non existant classe spécifique fille
520        function show_report($task_rapport) {
521                global $charset;
522               
523                if ($task_rapport != "") {
524                        $report_execution = "<table>";
525                        foreach ($task_rapport as $ligne) {
526                                if (is_array($ligne)) {
527                                        foreach ($ligne as $une_ligne) {
528                                                $report_execution .= html_entity_decode($une_ligne, ENT_QUOTES, $charset)."<br />";
529                                        }
530                                } else {
531                                        $report_execution .= html_entity_decode($ligne, ENT_QUOTES, $charset); 
532                                }
533                        }
534                        $report_execution .= "</table>";
535                }
536
537                return $report_execution;
538        }
539       
540        //vérification de deux paramètres génériques (historique, nb exécution conservées)
541        function checkParams($id_planificateur) {
542                global $dbh;
543               
544                $requete = "select param from planificateur where id_planificateur=".$id_planificateur;
545
546                $resultat=pmb_mysql_query($requete, $dbh);
547                if (pmb_mysql_num_rows($resultat) > 0) {
548                        $r=pmb_mysql_fetch_object($resultat);
549                        $params=unserialize($r->param);
550                        if ($params) {
551                                foreach ($params as $index=>$param) {
552                                        if (($index == "histo_day") && ($param != "") && ($param !="0")) {
553                                                $requete_suppr = "delete from taches where num_planificateur ='".$id_planificateur."'
554                                                        and end_at < DATE_SUB(curdate(), INTERVAL ".$param." DAY)
555                                                        and end_at != '0000-00-00 00:00:00'";
556       
557                                                pmb_mysql_query($requete_suppr, $dbh);
558                                        }
559                                        if (($index == "histo_number") && ($param != "") && ($param !="0")) {
560                                                //check nbre exécution
561                                                $requete_select = "select count(*) as nbre from taches where num_planificateur =".$id_planificateur."
562                                                                and end_at != '0000-00-00 00:00:00'";
563                                                $result = pmb_mysql_query($requete_select, $dbh);
564                                                $nb = pmb_mysql_result($result, 0,"nbre");
565       
566                                                if ($nb > $param) {
567                                                        $nb_r = $nb - $param;
568                                                        $query = "delete from taches
569                                                                where num_planificateur=".$id_planificateur."
570                                                                and end_at != '0000-00-00 00:00:00'
571                                                                order by end_at ASC
572                                                                limit ".$nb_r;
573                                                        pmb_mysql_query($query, $dbh);
574                                                       
575                                                        // il faut aussi effacer les documents numériques...
576                                                        //en base...
577                                                        $query_del_docnum = "delete from taches_docnum where num_tache not in (select id_tache from taches)";
578                                                        pmb_mysql_query($query_del_docnum);
579                                                }                                                       
580                                        }
581                                }
582                        }
583                }
584        }
585       
586        //recherche les informations de la tâche planifiée si elles est existante, dans le cas d'une modif...
587        function get_property_task_bdd($planificateur_id) {
588                global $dbh;
589
590                if (!$planificateur_id) {
591                        $planificateur_id = 0;
592                }
593                $requete="SELECT id_planificateur, num_type_tache, libelle_tache, desc_tache, num_user, param, statut, rep_upload, path_upload, perio_heure, perio_minute,
594                        perio_jour_mois, perio_jour, perio_mois, calc_next_heure_deb, calc_next_date_deb,repertoire_nom, repertoire_path
595                         FROM planificateur left join upload_repertoire on rep_upload=repertoire_id
596                         where id_planificateur=".$planificateur_id;
597                $res=pmb_mysql_query($requete,$dbh);
598
599                if (pmb_mysql_num_rows($res)) {
600                        $r = pmb_mysql_fetch_object($res);
601                        $t["planificateur_id"]=$r->id_planificateur;
602                        $t["num_type_tache"]=$r->num_type_tache;
603                        $t["libelle_tache"]=htmlspecialchars_decode(stripslashes($r->libelle_tache),ENT_QUOTES);
604                        $t["desc_tache"]=htmlspecialchars_decode(stripslashes($r->desc_tache), ENT_QUOTES);
605                        $t["num_user"]=$r->num_user;
606                        $t["param"] = unserialize($r->param);
607                        $t["statut"] = $r->statut;
608                        $t["rep_upload"] = $r->rep_upload;
609                        $t["path_upload"] = $r->path_upload;
610                        $t["perio_heure"] = $r->perio_heure;
611                        $t["perio_minute"] = $r->perio_minute;
612                        $t["perio_jour_mois"] = explode(",",$r->perio_jour_mois);
613                        $t["perio_jour"] = explode(",",$r->perio_jour);
614                        $t["perio_mois"] = explode(",",$r->perio_mois);
615                        $t["calc_next_heure_deb"] = $r->calc_next_heure_deb;
616                        $t["calc_next_date_deb"] = $r->calc_next_date_deb;
617                        $t["repertoire_nom"] = $r->repertoire_nom;
618                        $t["repertoire_path"] = $r->repertoire_path;
619                } else {
620                        $t["planificateur_id"]="";
621                        $t["num_type_tache"]="";
622                        $t["libelle_tache"]="";
623                        $t["desc_tache"]="";
624                        $t["num_user"]="";
625                        $t["param"]["timeout"] = $this->timeout;
626                        $t["param"]["histo_day"] = $this->histo_day;
627                        $t["param"]["histo_number"] = $this->histo_number;
628                        $t["param"]["restart_on_failure"] = $this->restart_on_failure;
629                        $t["param"]["alert_mail_on_failure"] = $this->alert_mail_on_failure;
630                        $t["statut"] = "1";
631                        $t["rep_upload"] = "0";
632                        $t["path_upload"] = "";
633                        $t["perio_heure"] = "*";
634                        $t["perio_minute"] = "01";
635                        $t["perio_jour_mois"] = "";
636                        $t["perio_jour"] = "";
637                        $t["perio_mois"] = "";
638                        $t["calc_next_heure_deb"] = ""; 
639                        $t["calc_next_date_deb"] = ""; 
640                        $t["repertoire_nom"] = "";
641                        $t["repertoire_path"] = ""; 
642                }
643                return $t;
644        }
645       
646        function get_task_params() {
647                $params = "";
648                if ($this->id_tache) {
649                        $result = pmb_mysql_query("select param from planificateur, taches where id_planificateur=num_planificateur and id_tache=".$this->id_tache);
650                        if ($result) $params = unserialize(pmb_mysql_result($result, 0,"param"));
651                }
652                return $params; 
653        } 
654       
655        function initialize() {
656                global $dbh;
657               
658                $this->statut = RUNNING;
659
660                $requete = "update taches set start_at = CURRENT_TIMESTAMP, status = ".$this->statut."
661                        where id_tache='".$this->id_tache."'";
662               
663                pmb_mysql_query($requete,$dbh);
664        }
665
666        function finalize() {
667                global $dbh,$base_path,$charset;
668                                                       
669                $res = pmb_mysql_query("select indicat_progress from taches where id_tache=".$this->id_tache);
670                $progress = pmb_mysql_result($res,0, "indicat_progress");
671               
672                if ($progress == 100) $this->statut=ENDED;
673                else $this->statut = FAILED;
674               
675                //fin de l'exécution, mise à jour sur la base
676                $req = "update taches set end_at = CURRENT_TIMESTAMP, status = ".$this->statut.", commande=0, rapport = '".htmlspecialchars(serialize($this->report), ENT_QUOTES,$charset)."',id_process=0
677                        where id_tache='".$this->id_tache."'";
678                pmb_mysql_query($req,$dbh);
679        }
680       
681        function update_progression($percent) {
682                global $dbh;
683               
684                if ($this->id_tache) {
685                        $requete = "update taches set indicat_progress ='".$percent."' where id_tache=".$this->id_tache;
686                        pmb_mysql_query($requete,$dbh);
687                }
688        }
689       
690        function isUploadValide($id_tache) {
691                global $dbh;
692               
693                $query_sel = "select distinct p.libelle_tache, p.rep_upload, p.path_upload from planificateur p
694                        left join taches t on t.num_planificateur = p.id_planificateur
695                        left join taches_docnum tdn on tdn.tache_docnum_repertoire=p.rep_upload
696                        where t.id_tache=".$id_tache;
697                $res_query = pmb_mysql_query($query_sel, $dbh);
698                if ($res_query) {
699                        $row = pmb_mysql_fetch_object($res_query);
700                       
701                        $up = new upload_folder($row->rep_upload);
702                        $nom_chemin = $up->formate_nom_to_path($up->repertoire_nom.$row->path_upload);
703                        if ((is_dir($nom_chemin)) && (is_writable($nom_chemin)))
704                                return true;
705                }
706                return false;
707        }
708       
709        // que passer à cette fonction datas ou object ?? (objet pdf , contenu xls)
710        function generate_docnum($id_tache, $content, $mimetype="application/pdf", $ext_fichier="pdf") {
711                global $dbh,$msg, $base_path;
712               
713                $tdn = new tache_docnum();
714               
715                $tdn->num_tache = $id_tache;
716               
717                $query_sel = "select distinct p.libelle_tache, p.rep_upload, p.path_upload from planificateur p
718                        left join taches t on t.num_planificateur = p.id_planificateur
719                        left join taches_docnum tdn on tdn.tache_docnum_repertoire=p.rep_upload
720                        where t.id_tache=".$tdn->num_tache;
721                $res_query = pmb_mysql_query($query_sel, $dbh);
722                if ($res_query) {
723                        $row = pmb_mysql_fetch_object($res_query);
724                       
725                        $up = new upload_folder($row->rep_upload);
726                        $nom_chemin = $up->formate_nom_to_path($up->repertoire_nom.$row->path_upload);
727//                      if ((!is_dir($nom_chemin)) || (!is_writable($nom_chemin))) {
728//                              $nom_chemin = $base_path."/temp/";
729//                      }
730                        //appel de fonction pour le calcul de nom de fichier
731                        $date_now = date('Ymd');
732//                      $tdn->tache_docnum_nomfichier = str_replace(" ", "_", $row->libelle_tache)."_".$date_now;
733                        $tdn->tache_docnum_nomfichier = clean_string_to_base($row->libelle_tache)."_".$date_now;
734                        $tdn->tache_docnum_contenu = $content;
735                        $tdn->tache_docnum_extfichier= $ext_fichier;
736                        $tdn->tache_docnum_file = "";
737                        $tdn->tache_docnum_mimetype = $mimetype;
738                        $tdn->tache_docnum_repertoire = $row->rep_upload;
739                        $tdn->tache_docnum_path = $row->path_upload;
740                        $path_absolu = $nom_chemin.$tdn->tache_docnum_nomfichier.".".$tdn->tache_docnum_extfichier;
741                        if (file_exists($path_absolu)) {
742                                $i=2;
743                                while (file_exists($nom_chemin.$tdn->tache_docnum_nomfichier."_".$i.".".$tdn->tache_docnum_extfichier)) {
744                                        $i++;
745                                }
746                                $path_absolu = $nom_chemin.$tdn->tache_docnum_nomfichier."_".$i.".".$tdn->tache_docnum_extfichier;
747                                $tdn->tache_docnum_nomfichier = $tdn->tache_docnum_nomfichier."_".$i;
748                        }
749                        $path_absolu = $up->encoder_chaine($path_absolu);
750                                               
751                        //verifier permissions d'ecriture...
752                        if (is_writable($nom_chemin)) {
753                                switch ($mimetype) {
754                                        case "application/pdf" :
755                                                $content->Output($path_absolu,"F");
756                                                break;
757                                        case "application/ms-excel" :
758                                                file_put_contents($path_absolu, $content);
759                                                break;
760                                }
761//                              if ($mimetype == "application/pdf") {
762//                                      $content->Output($path_absolu,"F");     
763//                              } else if ($mimetype == "application/ms-excel") {
764//                                      file_put_contents($path_absolu, $content);
765//                              }
766                               
767                                $tdn->save();
768                                $this->report[] = "<tr><td>".$msg["planificateur_write_success"]." : <a target='_blank' href='./tache_docnum.php?tache_docnum_id=".$tdn->id_tache_docnum."'>".$tdn->tache_docnum_nomfichier.".".$tdn->tache_docnum_extfichier."</a></td></tr>";
769                                return true;
770                        } else {
771                                $this->report[] = "<tr><td>".sprintf($msg["planificateur_write_error"],$path_absolu)."</td></tr>";
772                                return false;
773                        }               
774                }
775        }
776               
777        function show_form() {
778                // à surcharger
779        }
780}
781
782
783class taches {
784        var $types_taches=array();                                                              // liste des types de tâches
785       
786        function taches() {
787                global $base_path;
788                if (file_exists($base_path."/admin/planificateur/catalog_subst.xml")) {
789                        $filename = $base_path."/admin/planificateur/catalog_subst.xml";
790                } else {
791                        $filename = $base_path."/admin/planificateur/catalog.xml";
792                }
793                $this->parse_catalog($filename);
794        }
795       
796        function parse_catalog($filename) {
797                global $base_path,$type_task_id;
798               
799                $xml=file_get_contents($filename);
800                $param=_parser_text_no_function_($xml,"CATALOG");
801               
802                foreach ($param["ACTION"] as $anitem) {
803                        $this->types_taches[] = new tache($anitem);                             
804                }
805        }
806       
807        //retourne le nombre de tâches associé à un type de tâche
808        function get_nb_tasks($type_task_id) {
809                global $dbh;
810
811                $res = pmb_mysql_query("select * from planificateur where num_type_tache=".$type_task_id,$dbh);
812                $nb = pmb_mysql_num_rows($res);
813
814                return $nb;
815        }
816       
817        //retourne le nombre de tâches associé à un type de tâche
818        function get_nb_docnum($id_tache) {
819                global $dbh;
820
821                $res = pmb_mysql_query("select * from taches t, taches_docnum tdn where t.id_tache=tdn.num_tache and id_tache=".$id_tache,$dbh);
822                $nb = pmb_mysql_num_rows($res);
823
824                return $nb;
825        }
826       
827        //affiche la planification de tâches par type
828        function get_tasks($num_type_tache) {
829                global $dbh;
830
831                $sql = "SELECT id_planificateur, libelle_tache, desc_tache FROM planificateur WHERE num_type_tache = '".$num_type_tache."'";
832                $res = pmb_mysql_query($sql, $dbh);
833                $parity_source= $num_type_tache % 2;
834                if ($res) {
835                        while ($row=pmb_mysql_fetch_object($res)) {
836                            $pair_impair_source = $parity_source++ % 2 ? "even" : "odd";
837                                $tr_javascript_source=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair_source'\" onmousedown=\"if (event) e=event; else e=window.event; if (e.srcElement) target=e.srcElement; else target=e.target; if (target.nodeName!='INPUT') document.location='./admin.php?categ=planificateur&sub=manager&act=task&type_task_id=".$num_type_tache."&planificateur_id=".$row->id_planificateur."';\" ";
838                                        print "<tr style='cursor: pointer' class='$pair_impair_source' $tr_javascript_source>
839                                                <td>".htmlspecialchars_decode(stripslashes($row->libelle_tache),ENT_QUOTES)."</td>
840                                                <td>".htmlspecialchars_decode(stripslashes($row->desc_tache),ENT_QUOTES)."</td>
841                                                <td></td><td></td></tr>";
842                        }
843                }
844        }
845       
846        //documents numériques par tâches en cours ou exécutées
847        function get_docsnum($task_id) {
848                global $dbh;
849
850                $sql = "SELECT id_tache_docnum, tache_docnum_nomfichier, tache_docnum_mimetype,tache_docnum_extfichier, tache_docnum_repertoire FROM taches_docnum WHERE num_tache = '".$task_id."'";
851                $res = pmb_mysql_query($sql, $dbh);
852                $tab_docnum = array();
853                if ($res) {
854                        while ($row=pmb_mysql_fetch_object($res)) {
855                                $t=array();
856                                $t["id_tache_docnum"] = $row->id_tache_docnum;
857                                $t["tache_docnum_nomfichier"] = $row->tache_docnum_nomfichier;
858                                $t["tache_docnum_mimetype"] = $row->tache_docnum_mimetype;
859                                $t["tache_docnum_extfichier"] = $row->tache_docnum_extfichier;
860                                $t["tache_docnum_repertoire"] = $row->tache_docnum_repertoire;
861                               
862                                $tab_docnum[] = $t;
863                        }
864                }
865                $tdn = new tache_docnum();
866
867                print "<tr style='cursor: pointer' >";
868                print $tdn->show_docnum_table($tab_docnum, "");
869                print "</tr>";         
870        }
871       
872        // affichage partie reporting
873        function get_tasks_plan() {
874                global $dbh, $msg,$charset;
875                       
876                $sql = "SELECT t.id_tache, p.num_type_tache, p.libelle_tache, t.start_at, t.end_at, t.status, t.msg_statut, p.calc_next_date_deb, p.calc_next_heure_deb, t.commande, t.indicat_progress
877                                FROM taches t,planificateur p
878                                Where t.num_planificateur = p.id_planificateur
879                                ";
880//              order by start_at DESC
881//              if(start_at='0000-00-00 00:00:00','status',''),
882                $sql_first .= $sql." and start_at = '0000-00-00 00:00:00'";
883                $sql_second .= $sql." and start_at <> '0000-00-00 00:00:00' order by t.start_at DESC";
884               
885                $res = pmb_mysql_query($sql_first, $dbh);
886                $res2 = pmb_mysql_query($sql_second, $dbh);
887
888                $pair_impair=0;
889                $parity=0;
890               
891                print "<table id='table_reporting' >
892                                <tr>
893                                        <th>&nbsp;</th>
894                                        <th width='20%'>".htmlentities($msg["planificateur_task"], ENT_QUOTES, $charset)."</th>
895                                        <th width='15%'>".htmlentities($msg["planificateur_start_exec"], ENT_QUOTES, $charset)."</th>
896                                        <th width='15%'>".htmlentities($msg["planificateur_end_exec"], ENT_QUOTES, $charset)."</th>
897                                        <th width='18%'>".htmlentities($msg["planificateur_next_exec"],ENT_QUOTES,$charset)."</th>
898                                        <th width='12%'>".htmlentities($msg["planificateur_progress_task"], ENT_QUOTES, $charset)."</th>
899                                        <th width='10%'>".htmlentities($msg["planificateur_etat_exec"], ENT_QUOTES, $charset)."</th>
900                                        <th width='10%'>".htmlentities($msg["planificateur_commande_exec"], ENT_QUOTES, $charset)."</th>
901                                </tr>";
902               
903                //taches en attente...
904                if ($res) {
905                        while ($row=pmb_mysql_fetch_object($res)) {
906                                global $pair_impair_source;
907                                $pair_impair_source = $parity_source++ % 2 ? "even" : "odd";
908                                $this->row_planned($row);
909                        }
910                }
911                //taches en cours et terminé
912                if ($res2) {
913                        while ($row2=pmb_mysql_fetch_object($res2)) {
914                                $pair_impair_source = $parity_source++ % 2 ? "even" : "odd";
915                                global $pair_impair_source;
916                                $this->row_planned($row2);
917                        }
918                }
919//                      //recherche du nombre de documents numériques par tâche
920//                      $n_docsnum = $this->get_nb_docnum($row->id_tache);
921//                     
922//                      //comment task
923//                      $comment = "";
924//                      foreach ($this->types_taches as $atache) {
925//                              if ($atache->id_type == $row->num_type_tache) {
926//                                      $comment = $atache->comment;
927//                                      //présence de commandes .. selecteurs ??
928//                                      $show_commands = "";
929//                                      foreach ($atache->states as $aelement) {
930//                                              if ($row->status == $aelement["id"]) {
931//                                                      foreach ($aelement["nextState"] as $state) {
932//                                                              if ($state["command"] != "") {
933//                                                                      //récupère le label de la commande
934//                                                                      foreach($atache->commands as $command) {
935//                                                                              if (($state["command"] == $command["name"]) && ($state["dontsend"] != "yes")) {
936//                                                                                      $show_commands .= "<option id='".$row->id_tache."' value='".$command["id"]."'>".utf8_normalize($command["label"])."</option>";
937//                                                                              }
938//                                                                      }
939//                                                              }
940//                                                      }
941//                                              }
942//                                      }                                       
943//                              }
944//                      }
945//             
946//                      //lien du rapport
947//                      if ($row->end_at == '0000-00-00 00:00:00') {
948//                              $line=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair_source'\" onmousedown=\"if (event) e=event; else e=window.event; \" ";
949//                      } else {
950//                              $line=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair_source'\" onmousedown=\"if (event) e=event; else e=window.event; \" onClick='show_layer(); get_report_content(".$row->id_tache.",".$row->num_type_tache.");' style='cursor: pointer'";
951//                      }
952//                     
953//                      print " <tr class='$pair_impair_source' $line title='".htmlentities($comment,ENT_QUOTES,$charset)." : ".htmlentities(stripslashes($row->libelle_tache),ENT_QUOTES,$charset)."'>
954//                                      <td>".($n_docsnum?"<img src='images/plus.gif' class='img_plus' onClick='if (event) e=event; else e=window.event; e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); show_docsnum(\"tache_".$row->id_tache."\"); '/>":"&nbsp;")."</td>
955//                                      <td>".htmlentities(substr(stripslashes($row->libelle_tache),0,25),ENT_QUOTES,$charset).(strlen($row->libelle_tache) > 25 ? "...":"")."</td>
956//                                      <td>".($row->start_at == '0000-00-00 00:00:00' ? "" : htmlentities(formatdate($row->start_at,ENT_QUOTES,$charset)))."</td>
957//                                      <td>".($row->end_at == '0000-00-00 00:00:00' ? "" : htmlentities(formatdate($row->end_at,ENT_QUOTES,$charset)))."</td>
958//                                      ".$this->command_waiting($row->id_tache)."
959//                                      <td >";
960////                                    $progress_bar=new progress_bar($row->indicat_progress."%",$row->indicat_progress,0);
961//                                      print "
962//                                      <div class='row' id='progress_bar_".$row->id_tache."' style='text-align:center; width:80%; border: 1px solid #000000; padding: 3px; z-index:1;'>
963//                                          <div style='text-align:left; width:100%; height:20px;'>
964//                                              <img id='progress' src='images/jauge.png' style='width:".$row->indicat_progress."%; height:20px'/>
965//                                         
966//                                                  <div style='text-align:center; position:relative; top: -25px; z-index:1'>
967//                                                      <span id='progress_text'></span>".$row->indicat_progress." %
968//                                                      <span id='progress_percent'></span>
969//                                                  </div>
970//                                              </div>
971//                                      </div>";
972//                                      print "</td>
973//                                      <td >".htmlentities($msg['planificateur_state_'.$row->status.''],ENT_QUOTES,$charset)."</td>
974//                                      <td>";
975//                                      if ($show_commands != "") {
976//                                              print "<select id='form_commandes' name='form_commandes' class='saisie-15em' onchange='commande(this.options[this.selectedIndex].id, this.options[this.selectedIndex].value)' onClick='if (event) e=event; else e=window.event; e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation();'>
977//                                              <option value='0' selected>".$msg['planificateur_commande_default']."</option>";
978//                                              print $show_commands;
979//                                              print"</select>";
980//                                      }
981//                                      print "</td></tr>";
982//                                      print "<tr class='$pair_impair_source' style='display:none' id='tache_".$row->id_tache."'><td>&nbsp;</td>
983//                                      <td colspan='8'><table style='border:1px solid; background: #ffffff' class='docnum'>";
984//                                      $this->get_docsnum($row->id_tache);
985//                                  print "</table></td></tr>";
986//              }
987                print "</table>";
988        }
989
990        function row_planned($row) {
991                global $msg, $charset, $pair_impair_source;
992               
993                //recherche du nombre de documents numériques par tâche
994                $n_docsnum = $this->get_nb_docnum($row->id_tache);
995                       
996                //comment task
997                $comment = "";
998                foreach ($this->types_taches as $atache) {
999                        if ($atache->id_type == $row->num_type_tache) {
1000                                $comment = $atache->comment;
1001                                //présence de commandes .. selecteurs ??
1002                                $show_commands = "";
1003                                foreach ($atache->states as $aelement) {
1004                                        if ($row->status == $aelement["id"]) {
1005                                                foreach ($aelement["nextState"] as $state) {
1006                                                        if ($state["command"] != "") {
1007                                                                //récupère le label de la commande
1008                                                                foreach($atache->commands as $command) {
1009                                                                        if (($state["command"] == $command["name"]) && ($state["dontsend"] != "yes")) {
1010                                                                                $show_commands .= "<option id='".$row->id_tache."' value='".$command["id"]."'>".htmlentities($command["label"], ENT_QUOTES, $charset)."</option>";
1011                                                                        }
1012                                                                }
1013                                                        }
1014                                                }
1015                                        }
1016                                }                                       
1017                        }
1018                }
1019               
1020                //lien du rapport
1021                if ($row->end_at == '0000-00-00 00:00:00') {
1022                        $line=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair_source'\" onmousedown=\"if (event) e=event; else e=window.event; \" ";
1023                } else {
1024                        $line=" onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='$pair_impair_source'\" onmousedown=\"if (event) e=event; else e=window.event; \" onClick='show_layer(); get_report_content(".$row->id_tache.",".$row->num_type_tache.");' style='cursor: pointer'";
1025                }
1026                       
1027                print " <tr class='$pair_impair_source' $line title='".htmlentities($comment,ENT_QUOTES,$charset)." : ".htmlentities(stripslashes($row->libelle_tache),ENT_QUOTES,$charset)."'>
1028                                <td>".($n_docsnum?"<img src='images/plus.gif' class='img_plus' onClick='if (event) e=event; else e=window.event; e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); show_docsnum(\"tache_".$row->id_tache."\"); '/>":"&nbsp;")."</td>
1029                                <td>".htmlentities(stripslashes($row->libelle_tache),ENT_QUOTES,$charset)."</td>
1030                                <td>".($row->start_at == '0000-00-00 00:00:00' ? "" : htmlentities(formatdate($row->start_at,ENT_QUOTES,$charset)))."</td>
1031                                <td>".($row->end_at == '0000-00-00 00:00:00' ? "" : htmlentities(formatdate($row->end_at,ENT_QUOTES,$charset)))."</td>
1032                                ".$this->command_waiting($row->id_tache)."
1033                                <td >";
1034                                $progress_bar=new progress_bar_tache($row->indicat_progress);
1035                                print "</td>
1036                                <td >".htmlentities($msg['planificateur_state_'.$row->status.''],ENT_QUOTES,$charset)."</td>
1037                                <td>";
1038                                if ($show_commands != "") {
1039                                        print "<select id='form_commandes' name='form_commandes' class='saisie-15em' onchange='commande(this.options[this.selectedIndex].id, this.options[this.selectedIndex].value)' onClick='if (event) e=event; else e=window.event; e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation();'>
1040                                        <option value='0' selected>".$msg['planificateur_commande_default']."</option>";
1041                                        print $show_commands;
1042                                        print"</select>";
1043                                }
1044                                print "</td></tr>";
1045                                print "<tr class='$pair_impair_source' style='display:none' id='tache_".$row->id_tache."'><td>&nbsp;</td>
1046                                <td colspan='8'><table style='border:1px solid; background: #ffffff' class='docnum'>";
1047                                $this->get_docsnum($row->id_tache);
1048                            print "</table>
1049                        </td>
1050                </tr>";
1051        }
1052       
1053        // Envoi d'une commande pour l'interprétation...
1054        function command_waiting($id_tache,$cmd=''){
1055                global $dbh,$msg;
1056
1057                $requete_sql = "select status, commande from taches where id_tache='".$id_tache."' and end_at='0000-00-00 00:00:00'";
1058                $result = pmb_mysql_query($requete_sql);
1059                if(pmb_mysql_num_rows($result) == "1") {
1060                        $status = pmb_mysql_result($result, 0,"status");
1061                        $commande = pmb_mysql_result($result, 0,"commande");
1062                } else {
1063                        $status = '';
1064                        $commande = 0;
1065                }
1066               
1067                // une commande a déjà été envoyée auparavant...
1068                if ($commande != '0') {
1069                        $cmd = $commande;
1070                } 
1071
1072                if ($cmd != '') {
1073                        //check command - la commande envoyée est vérifié par rapport au status
1074                        foreach($this->types_taches as $type_tache) {
1075                                foreach ($type_tache->states as $state) {
1076                                        if ($state["id"] == $status) {
1077                                                foreach($state["nextState"] as $nextState) {
1078                                                        foreach($type_tache->commands as $command) {
1079                                                                if ($nextState["command"] == $command["name"]) {
1080                                                                        if ($command["id"] == $cmd)
1081                                                                                pmb_mysql_query("update taches set commande=".$cmd.", next_state='".constant($nextState["value"])."' where id_tache=".$id_tache, $dbh);
1082                                                                }
1083                                                        }
1084                                                }
1085                                        }
1086                                }
1087                        }
1088                }
1089               
1090                $rs = pmb_mysql_query("select t.start_at, t.commande, p.calc_next_date_deb, p.calc_next_heure_deb
1091                        from taches t , planificateur p
1092                        where t.num_planificateur = p.id_planificateur
1093                        and id_tache=".$id_tache);
1094                $tpl = "<td id='commande_tache_".$id_tache."'>";
1095                if ($rs) {
1096                        $row = pmb_mysql_fetch_object($rs);
1097                        if($row->start_at == '0000-00-00 00:00:00') {
1098                                $tpl .= htmlentities(formatdate($row->calc_next_date_deb),ENT_QUOTES,$charset)." ".htmlentities($row->calc_next_heure_deb,ENT_QUOTES,$charset); 
1099                        } else if (($row->start_at != '0000-00-00 00:00:00') && ($row->commande != NULL)) {
1100                                $tpl .= utf8_normalize($msg["planificateur_command_$row->commande"]);
1101                        } 
1102                } 
1103                $tpl .= "</td>";
1104               
1105                return $tpl;
1106        }
1107       
1108        //affichage du formulaire global au type de tâche
1109        function show_type_task_form($num_type_task) {
1110                global $base_path,$charset,$msg, $admin_planificateur_global_params;
1111               
1112                foreach ($this->types_taches as $atache) {
1113                        if ($atache->id_type == $num_type_task) {
1114                                $name = $atache->name;
1115                                $comment = $atache->comment;
1116//                              $dir_upload_boolean = $atache->dir_upload_boolean;
1117                        }
1118                }
1119                //Inclusion de la classe spécifique
1120                if (file_exists($base_path."/admin/planificateur/".$name."/".$name.".class.php")) {
1121                        require_once($base_path."/admin/planificateur/".$name."/".$name.".class.php");
1122                        eval("\$type_plan=new ".$name."();");
1123                        $type_plan->fetch_global_properties();
1124//                      $admin_planificateur_global_params=str_replace("!!script_js!!","<script type='text/javascript' src='$base_path/javascript/upload.js'></script>",$admin_planificateur_global_params);
1125                        $admin_planificateur_global_params=str_replace("!!script_js!!","",$admin_planificateur_global_params);                                         
1126                        $admin_planificateur_global_params=str_replace("!!special_form!!","",$admin_planificateur_global_params);
1127                        //Remplacement des valeurs par défaut
1128                        $admin_planificateur_global_params=str_replace("!!id!!",$num_type_task,$admin_planificateur_global_params);
1129                        $admin_planificateur_global_params=str_replace("!!comment!!",htmlentities($comment,ENT_QUOTES,$charset),$admin_planificateur_global_params);
1130                       
1131                        //ce type de tâche nécessite-t-il d'un répertoire d'upload pour les documents numériques?
1132                        $admin_planificateur_global_params=str_replace("!!div_upload!!","",$admin_planificateur_global_params);
1133//                      if ($dir_upload_boolean != "0") {
1134//                              $up = new upload_folder($rep_upload);
1135//                              $nom_chemin = $up->formate_nom_to_path($up->repertoire_nom.$path_upload);
1136//     
1137//                              $admin_planificateur_global_params=str_replace("!!div_upload!!","<div class='row'>
1138//                                      <div class='colonne3'><label for='timeout'/>".$msg["print_numeric_ex_title"]."</label></div>
1139//                                                      <div class='colonne_suite'>
1140//                                                              ".$msg["planificateur_upload"]." :
1141//                                                              <input type='text' name='path' id='path' value='!!path!!' class='saisie-50emr' READONLY />
1142//                                                              <input type='button' id='upload_path' class='bouton' onclick='upload_openFrame(event)' value='...' name='upload_path' />
1143//                                                              <input id='id_rep' type='hidden' value='!!id_rep!!' name='id_rep' />
1144//                                                      </div>
1145//                                      </div>",$admin_planificateur_global_params);
1146//                      } else {
1147//                              $admin_planificateur_global_params=str_replace("!!div_upload!!","",$admin_planificateur_global_params);
1148//                      }
1149               
1150                        $admin_planificateur_global_params=str_replace("!!timeout!!",$type_plan->timeout,$admin_planificateur_global_params);
1151                        $admin_planificateur_global_params=str_replace("!!histo_day!!",$type_plan->histo_day,$admin_planificateur_global_params);
1152                        $admin_planificateur_global_params=str_replace("!!histo_number!!",$type_plan->histo_number,$admin_planificateur_global_params);
1153                        $admin_planificateur_global_params=str_replace("!!restart_on_failure_checked!!",($type_plan->restart_on_failure ? "checked=checked" : ""),$admin_planificateur_global_params);
1154                        $params_alert_mail = explode(",",$type_plan->alert_mail_on_failure);
1155                        $admin_planificateur_global_params=str_replace("!!alert_mail_on_failure_checked!!",($params_alert_mail[0] ? " checked=checked " : ""),$admin_planificateur_global_params);
1156                        $admin_planificateur_global_params=str_replace("!!mail_on_failure!!",$params_alert_mail[1],$admin_planificateur_global_params);
1157                }
1158               
1159                return $admin_planificateur_global_params;
1160        }
1161       
1162        // affichage du formulaire de la tâche
1163        function show_form_task ($planificateur_id="") {
1164        global $charset, $base_path, $msg;
1165        global $planificateur_form, $act, $type_task_id, $subaction;
1166               
1167        foreach($this->types_taches as $type) {
1168                        if ($type->id_type == $type_task_id) {
1169                                $comment = $type->comment;
1170                                $name = $type->name;
1171                                $dir_upload_boolean = $type->dir_upload_boolean;       
1172                        }
1173                }
1174               
1175                // Inclusion de la classe spécifique
1176                if (is_file($base_path.'/admin/planificateur/'.$name.'/'.$name.'.class.php')) {
1177                        require_once ($base_path.'/admin/planificateur/'.$name.'/'.$name.'.class.php');
1178                        eval("\$a_task=new ".$name."();");
1179                       
1180                        //Récupération des données du formulaire
1181                        if ($subaction == "change") {
1182                                global $task_name,$task_desc,$form_users,$task_active, $id_rep,$path;
1183                                global $task_perio_heure, $task_perio_min, $chkbx_task_quotidien, $chkbx_task_hebdo, $chkbx_task_mensuel;
1184                                global $timeout,$radio_histo_day_number,$histo_day, $histo_number,$restart_on_failure,$alert_mail_on_failure,$mail_on_failure;
1185                                $libelle_tache = stripslashes($task_name);
1186                                $desc_tache = stripslashes($task_desc);
1187                                $perio_heure = $task_perio_heure;
1188                                $statut = $task_active;
1189                                $rep_upload = ($id_rep ? $id_rep : "");
1190                                $chemin_upload = ($path ? $path : "");
1191                                $perio_heure = $task_perio_heure;
1192                                $perio_minute = $task_perio_min;
1193                                $perio_jour_mois = $chkbx_task_quotidien;
1194                                $perio_jour = $chkbx_task_hebdo;
1195                                $perio_mois = $chkbx_task_mensuel;
1196                                $param["timeout"] = $timeout;
1197                                $param["histo_day"] = $histo_day;
1198                                $param["histo_number"] = $histo_number;
1199                                $param["restart_on_failure"] = $restart_on_failure;
1200                                $param["alert_mail_on_failure"] = $alert_mail_on_failure.($mail_on_failure ? ",".$mail_on_failure : "");
1201                        } else {
1202                                //Récupération des données de la base
1203                                $a_task->fetch_global_properties();
1204                                $tab_properties = $a_task->get_property_task_bdd($planificateur_id);
1205                                if (isset($tab_properties)) {
1206                                        if (is_array($tab_properties)) {
1207                                                foreach($tab_properties as $atab_properties=>$atab_propertiesv) {
1208//                                                      global $$atab_properties;
1209                                                        $$atab_properties = $atab_propertiesv;
1210                                                }                                       
1211                                        }
1212                                }
1213                        }
1214
1215                        //form spécifique
1216                        $form_specific_task = $a_task->show_form($param);
1217                } else {
1218                        $form_specific_task = "";
1219                }
1220               
1221                $planificateur_form=str_replace("!!script_js!!","
1222                        <script type='text/javascript' src='./javascript/select.js'></script>
1223                        <script type='text/javascript' src='./javascript/upload.js'></script>",$planificateur_form);
1224                $planificateur_form=str_replace("!!submit_action!!","return checkForm();",$planificateur_form);
1225                $planificateur_form=str_replace("!!libelle_type_task!!",$comment,$planificateur_form);
1226        $planificateur_form=str_replace("!!task_name!!",htmlentities($libelle_tache,ENT_QUOTES,$charset),$planificateur_form);
1227                $planificateur_form=str_replace("!!task_desc!!",htmlentities($desc_tache,ENT_QUOTES,$charset),$planificateur_form);
1228               
1229                $rqt_user = pmb_mysql_query("select esuser_id, esuser_username from es_esusers");
1230                $form_users = "<select name='form_users'>";
1231                while ($row = pmb_mysql_fetch_object($rqt_user)) {
1232                        if ($row->esuser_id == $num_user) {
1233                                $form_users .="<option value='".$row->esuser_id."' selected>".$row->esuser_username."</option>";
1234                        } else {
1235                                $form_users .="<option value='".$row->esuser_id."'>".$row->esuser_username."</option>";                         
1236                        }
1237                }
1238                $form_users .= "</select>";
1239                if (pmb_mysql_num_rows($rqt_user) == 0) {
1240                        $form_users .= "* ".$msg["planificateur_task_users_unknown"];
1241                }
1242                $planificateur_form=str_replace("!!task_users!!",$form_users,$planificateur_form);
1243               
1244                $planificateur_form=str_replace("!!task_statut!!","<input type='checkbox' name='task_active' id='task_active' value='".$statut."' ".($statut != "0" ? " checked " : "''" )." onchange='changeStatut();'/>",$planificateur_form);
1245               
1246                //ce type de tâche nécessite-t-il d'un répertoire d'upload pour les documents numériques?
1247                if ($dir_upload_boolean != "0") {
1248                        $up = new upload_folder($rep_upload);
1249                        if ($subaction == 'change') {
1250                                $nom_chemin = $up->formate_path_to_nom($chemin_upload);
1251                        } else {
1252                                $nom_chemin = $up->formate_nom_to_path($up->repertoire_nom.$path_upload);
1253                        }
1254                        $planificateur_form=str_replace("!!div_upload!!","<div class='row'>
1255                                <div class='colonne3'><label for='timeout'/>".$msg["print_numeric_ex_title"]."</label></div>
1256                                                <div class='colonne_suite'>
1257                                                        ".$msg["planificateur_upload"]." :
1258                                                        <input type='text' name='path' id='path' value='!!path!!' class='saisie-50emr' READONLY />
1259                                                        <input type='button' id='upload_path' class='bouton' onclick='upload_openFrame(event)' value='...' name='upload_path' />
1260                                                        <input id='id_rep' type='hidden' value='!!id_rep!!' name='id_rep' />
1261                                                </div>
1262                                </div>",$planificateur_form);
1263                } else {
1264                        $planificateur_form=str_replace("!!div_upload!!","",$planificateur_form);
1265                }
1266                $planificateur_form = str_replace('!!path!!', htmlentities($nom_chemin ,ENT_QUOTES, $charset), $planificateur_form);
1267                $planificateur_form = str_replace('!!id_rep!!', htmlentities($rep_upload ,ENT_QUOTES, $charset), $planificateur_form);
1268               
1269                $planificateur_form=str_replace("!!task_perio_heure!!","<input type='text' id='task_perio_heure' name='task_perio_heure' value='".$perio_heure."' class='saisie-5em'/>",$planificateur_form);
1270                $planificateur_form=str_replace("!!task_perio_min!!","<input type='text' id='task_perio_min' name='task_perio_min' value='".$perio_minute."' class='saisie-5em'/>",$planificateur_form);
1271               
1272                $planificateur_form=str_replace("!!help!!",
1273                        "<a onclick='openPopUp(\"./admin/planificateur/help.php?action_help=configure_time\",\"help\",500,600,-2,-2,\"scrollbars=yes,menubar=0\"); w.focus(); return false;' href='#'>
1274                        <img border='0' align='center' title='Aide...' alt='Aide...' src='".$base_path."/images/aide.gif' /></a>",$planificateur_form);
1275               
1276                $perio_quotidien .= "<input type='checkbox' id='chkbx_task_quotidien_0' name='chkbx_task_quotidien[]'  value='*' ".($perio_jour_mois[0] == '*' ? "checked" : "''" )." onchange='changePerio(\"*\",\"chkbx_task_quotidien\",31);'> ".$msg["planificateur_task_all_days_of_month"]."</input>";
1277                for ($i=1; $i<=31; $i++) {
1278                        $cochee = false;
1279                        for ($j=0; $j<sizeof($perio_jour_mois); $j++) {
1280                                if ($perio_jour_mois[$j] == $i) {
1281                                        $cochee = true;
1282                                }
1283                        }
1284                        $perio_quotidien .= "<input type='checkbox' id='chkbx_task_quotidien_".$i."' name='chkbx_task_quotidien[]'  value='".$i."' ".($cochee == true ? "checked" : "''" )." onchange='changePerio($i,\"chkbx_task_quotidien\",31);'/> ".$i." ";
1285                        if ($i == 15) {
1286                                $perio_quotidien .= "<br />";
1287                        }
1288                }
1289                $planificateur_form=str_replace("!!task_perio_quotidien!!",$perio_quotidien,$planificateur_form);
1290               
1291                $perio_hebdo .= "<input type='checkbox' id='chkbx_task_hebdo_0' name='chkbx_task_hebdo[]'  value='*' ".($perio_jour[0] == '*' ? "checked" : "''" )." onchange='changePerio(\"*\",\"chkbx_task_hebdo\",7);'> ".$msg["planificateur_task_all_days"]."</input>";   
1292                for ($i=1; $i<=7; $i++) {
1293                        $cochee = false;
1294                        for ($j=0; $j<sizeof($perio_jour); $j++) {
1295                                if ($perio_jour[$j] == $i) {
1296                                        $cochee = true;
1297                                } 
1298                        }
1299                        $perio_hebdo .= "<input type='checkbox' id='chkbx_task_hebdo_".$i."' name='chkbx_task_hebdo[]'  value='".$i."' ".($cochee == true ? "checked" : "''" )." onchange='changePerio($i,\"chkbx_task_hebdo\",7);'/> ".$msg["week_days_$i"];                                           
1300                        if ($i == 3) {
1301                                $perio_hebdo .= "<br />";
1302                        }
1303                }
1304                $planificateur_form=str_replace("!!task_perio_hebdo!!",$perio_hebdo,$planificateur_form);
1305               
1306                $perio_mensuel .= "<input type='checkbox' id='chkbx_task_mensuel_0' name='chkbx_task_mensuel[]'  value='*' ".($perio_mois[0] == '*' ? " checked " : "''" )." onchange='changePerio(\"*\",\"chkbx_task_mensuel\",12);'> ".$msg["planificateur_task_all_months"]."</input>";
1307                for ($i=1; $i<=12; $i++) {
1308                        $cochee = false;
1309                        for ($j=0; $j<sizeof($perio_mois); $j++) {
1310                                if ($perio_mois[$j] == $i) {
1311                                        $cochee = true;
1312                                } 
1313                        }
1314                        $perio_mensuel .= "<input type='checkbox' id='chkbx_task_mensuel_".$i."' name='chkbx_task_mensuel[]'  value='".$i."' ".($cochee == true ? "checked" : "''" )." onchange='changePerio($i,\"chkbx_task_mensuel\",12);'> ".ucfirst($msg[$i+1005])."</input>";
1315                        if ($i == 6) {
1316                                $perio_mensuel .= "<br />";
1317                        }
1318                }               
1319                $planificateur_form=str_replace("!!task_perio_mensuel!!",$perio_mensuel,$planificateur_form);
1320
1321                $planificateur_form=str_replace("!!timeout!!",$param["timeout"],$planificateur_form);
1322                $planificateur_form=str_replace("!!histo_day_checked!!",($param["histo_day"] != "" ? " checked " : ""),$planificateur_form);
1323                $planificateur_form=str_replace("!!histo_number_checked!!",($param["histo_number"] != "" ? " checked " : ""),$planificateur_form);
1324                $planificateur_form=str_replace("!!histo_day!!",$param["histo_day"],$planificateur_form);
1325                $planificateur_form=str_replace("!!histo_day_visible!!",($param["histo_day"] == "" ? "disabled" : ""),$planificateur_form);
1326                $planificateur_form=str_replace("!!histo_number!!",$param["histo_number"],$planificateur_form);
1327                $planificateur_form=str_replace("!!histo_number_visible!!",($param["histo_number"] == "" ? "disabled" : ""),$planificateur_form);
1328                $planificateur_form=str_replace("!!restart_on_failure_checked!!",($param["restart_on_failure"] ? " checked " : ""),$planificateur_form);
1329                $params_alert_mail = explode(",",$param["alert_mail_on_failure"]);
1330                $planificateur_form=str_replace("!!alert_mail_on_failure_checked!!",($params_alert_mail[0] ? " checked " : ""),$planificateur_form);
1331                $planificateur_form=str_replace("!!mail_on_failure!!",$params_alert_mail[1],$planificateur_form);
1332               
1333                //Inclusion du formulaire spécifique au type de tâche
1334                $planificateur_form=str_replace("!!specific_form!!",$form_specific_task,$planificateur_form);
1335                if ($act == "task_duplicate") $planificateur_id = 0;
1336                if (!$planificateur_id) {
1337                        $bt_save=$base_path."/admin.php?categ=planificateur&sub=manager&act=task&type_task_id=".$type_task_id;
1338                        $bt_duplicate="";
1339                        $bt_suppr="";
1340                } else {
1341                        $bt_save=$base_path."/admin.php?categ=planificateur&sub=manager&act=task&type_task_id=".$type_task_id."&planificateur_id=".$planificateur_id;
1342                        $bt_duplicate="<input type='button' class='bouton' value='".$msg["tache_duplicate_bouton"]."' onclick='document.location=\"./admin.php?categ=planificateur&sub=manager&act=task_duplicate&type_task_id=".$type_task_id."&planificateur_id=".$planificateur_id."\"' />";
1343                        $bt_suppr="<input type='button' class='bouton' value='".$msg["63"]."' onClick='location.href=\"$base_path/admin.php?categ=planificateur&sub=manager&act=task_del&type_task_id=$type_task_id&planificateur_id=".$planificateur_id."\"'/>";
1344                }
1345                $planificateur_form=str_replace("!!bt_save!!",$bt_save,$planificateur_form);
1346                $planificateur_form=str_replace("!!bt_duplicate!!",$bt_duplicate,$planificateur_form);
1347                $planificateur_form=str_replace("!!bt_supprimer!!",$bt_suppr,$planificateur_form);
1348               
1349                return $planificateur_form;
1350    }
1351       
1352        //Suppression d'une planification de tâche associée à un type de tâche
1353        function del_task($planificateur_id) {
1354                global $dbh, $msg, $base_path;
1355                global $template_result, $type_task_id, $confirm, $disabled;
1356               
1357                $libelle_tache = "";           
1358        foreach($this->types_taches as $type) {
1359                        if ($type->id_type == $type_task_id) {
1360                                $libelle_tache = $type->comment;
1361                        }
1362                }       
1363                //disabled == 1 then statut = 0
1364                if ($disabled == "1") {
1365                        if ($planificateur_id != "") {
1366                                $query = "update planificateur set statut=0 where id_planificateur=".$planificateur_id;
1367                                pmb_mysql_query($query, $dbh);
1368                        }
1369                }
1370               
1371        $template_result=str_replace("!!libelle_type_task!!",$libelle_tache,$template_result);
1372       
1373                //on vérifie tout d'abord que la tâche soit désactivée
1374                $query_active = "select statut from planificateur where id_planificateur=".$planificateur_id;
1375                $result = pmb_mysql_query($query_active, $dbh);
1376                if (pmb_mysql_num_rows($result)) {
1377                        $value_statut = pmb_mysql_result($result, 0, "statut");
1378                } else {
1379                        $value_statut = "";
1380                }
1381                               
1382                if ($value_statut == "0") {
1383                        $body = "<div align=center>".$msg["planificateur_confirm_phrase"]."<br />
1384                                <a href='$base_path/admin.php?categ=planificateur&sub=manager&act=task_del&type_task_id=$type_task_id&planificateur_id=$planificateur_id&confirm=1'>
1385                                ".$msg["40"]."
1386                                </a> - <a href='$base_path/admin.php?categ=planificateur&sub=manager&type_task_id=$type_task_id&planificateur_id=$planificateur_id&confirm=0'>
1387                                ".$msg["39"]."
1388                                </a>   
1389                                </div>
1390                        ";
1391                } else {
1392                        $body = "<div align=center>".$msg["planificateur_error_active"]."<br />
1393                                <a href='$base_path/admin.php?categ=planificateur&sub=manager&act=task_del&type_task_id=$type_task_id&planificateur_id=$planificateur_id&disabled=1'>
1394                                ".$msg["40"]."
1395                                </a> - <a href='$base_path/admin.php?categ=planificateur&sub=manager&type_task_id=$type_task_id&planificateur_id=$planificateur_id&disabled=0'>
1396                                ".$msg["39"]."
1397                                </a>   
1398                                </div>
1399                        ";
1400                }
1401               
1402                $template_result=str_replace("!!BODY!!",$body,$template_result);
1403               
1404                //Confirmation de suppression
1405                if ($confirm == "1") {
1406                        //Vérifie si une tâche est en cours sur cette planification
1407                        $query_check = "select id_tache from taches where num_planificateur=".$planificateur_id." and status <> 3";
1408                        $result = pmb_mysql_query($query_check);               
1409                        if (pmb_mysql_num_rows($result) == '1') {
1410                                // ne pas la supprimer !
1411                                $ident_tache = pmb_mysql_result($result, 0,"id_tache");
1412                        }
1413                        //suppression des tâches à l'exclusion de celle en cours
1414                        $requete="delete from taches where num_planificateur=".$planificateur_id."
1415                                and id_tache <> ".$ident_tache;
1416                        pmb_mysql_query($requete);
1417                        $requete="delete from planificateur where id_planificateur=".$planificateur_id."";
1418                        pmb_mysql_query($requete);
1419                       
1420                        //et les documents numériques qu'en fait-on???
1421                       
1422                        print "<script>document.location.href='$base_path/admin.php?categ=planificateur&sub=manager';</script>";
1423                }
1424                return $template_result;
1425        }
1426}
Note: See TracBrowser for help on using the repository browser.