source: pmb4.2/trunk/fuentes/pmb/classes/workflow.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: 6.1 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2005 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: workflow.class.php,v 1.3 2014-04-01 10:09:29 abacarisse Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($include_path.'/parser.inc.php');
10
11class workflow {
12       
13       
14        var $states_com = array();
15        var $object = array();
16        var $object_states = array();
17        var $object_states_by_id = array();     
18        var $object_types = array();
19        var $object_types_by_id = array();
20        var $object_name = '';
21        var $object_workflow = array();
22        var $object_startstate = array();
23        var $object_transitions = array();
24       
25        /*
26         * Constructeur
27         */
28        function workflow($obj_name,$workflow_name=''){
29               
30                global $include_path;
31               
32                $this->object_name = $obj_name;
33               
34                $file = $include_path."/demandes/workflow.xml";
35                $file_subst = $include_path."/demandes/workflow_subst.xml";
36               
37                if (file_exists($file_subst)) {
38                        $xml=file_get_contents($file_subst,"r");               
39                } else $xml=file_get_contents($file,"r") or die("Can't find XML file $file");
40               
41                //Parse le fichier dans un tableau     
42                $param=_parser_text_no_function_($xml,"STRUCTURE");
43               
44                //Liste des états généraux (nom=>libellé)
45                for($i=0;$i<count($param['STATES'][0]['STATE']);$i++){
46                        $this->states_com[$param['STATES'][0]['STATE'][$i]['NAME']] = $param['STATES'][0]['STATE'][$i]['COMMENT'];
47                }
48
49                //Chargement de l'objet
50                for($i=0;$i<count($param['OBJECTS']);$i++){
51                        for($j=0;$j<count($param['OBJECTS'][$i]['OBJECT']);$j++){
52                                $nom = $param['OBJECTS'][$i]['OBJECT'][$j]['NAME'];
53                                if($nom == $this->object_name){
54                                        $this->object = $param['OBJECTS'][$i]['OBJECT'][$j];
55                                }       
56                        }
57                }
58               
59                //Chargement des attributs de l'objet
60               
61                //Etats
62                for($i=0;$i<count($this->object['STATES'][0]['STATE']);$i++){
63                        $this->object_states_by_id[$this->object['STATES'][0]['STATE'][$i]['ID']] = $this->object['STATES'][0]['STATE'][$i]['NAME'];
64                        $this->object_states[$this->object['STATES'][0]['STATE'][$i]['NAME']]['ID'] = $this->object['STATES'][0]['STATE'][$i]['ID'];
65                        $this->object_states[$this->object['STATES'][0]['STATE'][$i]['NAME']]['DEFAULT'] = $this->object['STATES'][0]['STATE'][$i]['DEFAULT'];
66                        $this->object_states[$this->object['STATES'][0]['STATE'][$i]['NAME']]['IMAGE'] = $this->object['STATES'][0]['STATE'][$i]['IMAGE'];
67                        $this->object_states[$this->object['STATES'][0]['STATE'][$i]['NAME']]['COMMENT'] = $this->getStateCommentById($this->object['STATES'][0]['STATE'][$i]['ID']);
68                }       
69                //Types
70                for($i=0;$i<count($this->object['TYPES'][0]['TYPE']);$i++){
71                        $this->object_types_by_id[$this->object['TYPES'][0]['TYPE'][$i]['ID']] = $this->object['TYPES'][0]['TYPE'][$i]['NAME'];
72                        $this->object_types[$this->object['TYPES'][0]['TYPE'][$i]['NAME']]['ID'] = $this->object['TYPES'][0]['TYPE'][$i]['ID'];
73                        $this->object_types[$this->object['TYPES'][0]['TYPE'][$i]['NAME']]['DEFAULT'] = $this->object['TYPES'][0]['TYPE'][$i]['DEFAULT'];
74                        $this->object_types[$this->object['TYPES'][0]['TYPE'][$i]['NAME']]['IMAGE'] = $this->object['TYPES'][0]['TYPE'][$i]['IMAGE'];
75                        $this->object_types[$this->object['TYPES'][0]['TYPE'][$i]['NAME']]['COMMENT']= $this->object['TYPES'][0]['TYPE'][$i]['COMMENT'];
76                }       
77                //Workflow
78                for($i=0;$i<count($this->object['WORKFLOW']);$i++){
79                        if($this->object['WORKFLOW'][$i]['NAME'] == $workflow_name)
80                                $this->object_workflow = $this->object['WORKFLOW'][$i];
81                }
82                //Transitions possibles
83                for($i=0;$i<count($this->object_workflow['SOURCE']);$i++) {
84                        $cibles=array();
85                       
86                        for($j=0;$j<count($this->object_workflow['SOURCE'][$i]['TARGET']); $j++) {
87                                $cibles[] = $this->object_workflow['SOURCE'][$i]['TARGET'][$j]['NAME'];
88                        }
89                        $this->object_transitions[$this->object_workflow['SOURCE'][$i]['NAME']]=$cibles;
90
91                }
92        }
93       
94        /*
95         * Retourne le nom d'un état en fonction de son id
96         */
97        function getStatesById($state_id){
98                return $this->object_states_by_id[$state_id];
99        }
100       
101        /*
102         * Retourne le libellé associé à un état
103         */
104        function getStateCommentById($state_id){
105                global $msg;
106               
107                $message = explode(':',$this->states_com[$this->object_states_by_id[$state_id]]);
108                return $msg[$message[1]];
109        }
110       
111        /*
112         * Retourne le libellé associé à un type
113         */
114        function getTypeCommentById($type_id){
115               
116                global $msg;
117               
118                $message = explode(":",$this->object_types[$this->object_types_by_id[$type_id]]['COMMENT']);
119               
120                return $msg[$message[1]];
121        }
122       
123        /*
124         * Retourne la liste des états joignables depuis un autre état
125         */
126        function getStateList($state_id=-1){
127               
128                $state_list = array();
129               
130                if($state_id == -1){
131                        $i=0;
132                        foreach($this->object_states as $key=>$value){
133                                $i++;
134                                $state_list[$i]['id'] = $value['ID'];
135                                if($value['DEFAULT']){
136                                        $state_list[$i]['default'] = $value['DEFAULT'];
137                                }
138                                if($value['IMAGE']){
139                                        $state_list[$i]['image'] = $value['image'];
140                                }
141                                $state_list[$i]['comment'] = $value['COMMENT'];
142                        }
143                } else {
144                        $nom = $this->getStatesById($state_id);
145                        for($i=0;$i<count($this->object_transitions[$nom]);$i++){
146                                $state_list[$i]['id'] = $this->object_states[$this->object_transitions[$nom][$i]]['ID'];
147                                if( $this->object_states[$this->object_transitions[$nom][$i]]['DEFAULT']){
148                                        $state_list[$i]['default'] = $this->object_states[$this->object_transitions[$nom][$i]]['DEFAULT'];
149                                }
150                                if( $this->object_states[$this->object_transitions[$nom][$i]]['IMAGE']){
151                                        $state_list[$i]['image'] = $this->object_states[$this->object_transitions[$nom][$i]]['IMAGE'];
152                                }
153                                $state_list[$i]['comment'] = $this->getStateCommentById($this->object_states[$this->object_transitions[$nom][$i]]['ID']);
154                        }
155                }
156               
157                return $state_list;
158        }
159       
160        /*
161         * Retourne la liste des types d'un objet
162         */
163        function getTypeList(){
164                global $msg;
165               
166                $type_list = array();
167                $i=0;
168               
169                foreach($this->object_types as $key=>$value){
170                        $i++;
171                        $type_list[$i]['id'] = $value['ID'];
172                        if( $value['DEFAULT']){
173                                $type_list[$i]['default'] = $value['DEFAULT'];
174                        }
175                        if( $value['IMAGE']){
176                                $type_list[$i]['image'] = $value['IMAGE'];
177                        }
178                        $message = explode(':',$value['COMMENT']);
179                        $type_list[$i]['comment'] = $msg[$message[1]];
180                }
181               
182                return $type_list;
183        }
184       
185       
186       
187       
188}
189?>
Note: See TracBrowser for help on using the repository browser.