source: pmb4.2/trunk/fuentes/pmb/classes/editions_state.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: 18.7 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: editions_state.class.php,v 1.5 2015-04-03 11:16:19 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($include_path."/templates/editions_state.tpl.php");
10require_once($class_path."/editions_state_order.class.php");
11require_once($class_path."/editions_datasource.class.php");
12
13class editions_state {
14        public $id = 0;
15        public $name="";
16        public $classement;
17        public $comment = "";
18        public $used_datasource = "";
19        public $datasource;
20        public $state_fields_list = array();   
21        public $state_fields_params = array();
22       
23        public function __construct($id=0){
24                $this->id = $id*1;
25                $this->fetch_data();
26        } 
27
28        protected function fetch_data(){
29                if(!$this->id){
30                        $this->name = "";
31                        $this->classement= 0;
32                        $this->comment = "";
33                        $this->used_datasource = "";                   
34                }else{
35                        $query = "select editions_state_name, editions_state_used_datasource, editions_state_comment, editions_state_num_classement,editions_state_fieldslist, editions_state_fieldsparams from editions_states where id_editions_state = ".$this->id;                 
36                        $result = pmb_mysql_query($query);
37                        if(pmb_mysql_num_rows($result)){
38                                $row = pmb_mysql_fetch_object($result);
39                                $this->name = $row->editions_state_name;
40                                $this->used_datasource = $row->editions_state_used_datasource;
41                                $this->comment = $row->editions_state_comment;
42                                $this->classement = $row->editions_state_num_classement;
43                                $this->state_fields_list = unserialize($row->editions_state_fieldslist);
44                                $this->state_fields_params = unserialize($row->editions_state_fieldsparams);
45//                              $this->datasource = new $this->used_datasource();
46                        }
47                }
48                $this->datasource = new editions_datasource($this->used_datasource);
49                $this->fields = $this->datasource->get_struct_format();
50                $this->get_filter();//Je récupère les valeurs des filtres si besoin
51        }
52       
53        public function save(){
54                if($this->id){
55                        $query = "update editions_states";
56                        $clause= " where id_editions_state = ".$this->id;
57                }else{
58                        $query ="insert into editions_states";
59                        $clause= "";
60                }
61                //On supprimer les informations de paramétrage pour les vues au cas ou on supprime un champ utilisé pour une vue
62                $this->state_fields_params["view"]=array();
63               
64                //on va chercher les infos des filtres, tris, groupements...
65                $query.=" set
66                        editions_state_name = '".addslashes($this->name)."',
67                        editions_state_num_classement = '".addslashes($this->classement)."',
68                        editions_state_used_datasource = '".addslashes($this->used_datasource)."',
69                        editions_state_comment = '".addslashes($this->comment)."',
70                        editions_state_fieldslist = '".addslashes(serialize($this->state_fields_list))."',
71                        editions_state_fieldsparams = '".addslashes(serialize($this->state_fields_params))."'";
72                pmb_mysql_query($query.$clause);
73                if(!$this->id){
74                        $this->id = pmb_mysql_insert_id();
75                }
76        }
77       
78        public function update_param_view($param){
79                if($this->id){
80                        $this->state_fields_params["view"]=$param;
81                        $query = "update editions_states ";
82                        $query.=" set editions_state_fieldsparams = '".addslashes(serialize($this->state_fields_params))."'";
83                        $clause= " where id_editions_state = ".$this->id;
84                        pmb_mysql_query($query.$clause);
85                }
86        }
87       
88        public function delete(){
89                if($this->id){
90                        $query = "delete from editions_states where id_editions_state=".$this->id;
91                        pmb_mysql_query($query);
92                }
93        }
94       
95        public function get_from_form(){
96                global $editions_state_name;
97                global $editions_state_classement;
98                global $editions_state_datasource;
99                global $editions_state_comment;
100                global $editions_state_fields_fields;
101                global $editions_state_fields_content_fields;
102                global $editions_state_filters_fields;
103                global $editions_state_filters_content_fields;
104                global $editions_state_orders_fields;
105                global $editions_state_orders_content_fields;
106                global $class_path;
107                global $partial_submit,$action;
108               
109                $this->name =   stripslashes($editions_state_name);
110                $this->classement =     $editions_state_classement;
111                $this->used_datasource = $editions_state_datasource;
112               
113//              $this->datasource = new $this->used_datasource();
114                $this->datasource = new editions_datasource($this->used_datasource);
115                $this->comment = stripslashes($editions_state_comment);
116                $this->fields = $this->datasource->get_struct_format();
117                if($partial_submit == 1 || $action == "save"){// On vient de déplacer une information pour créer l'état
118                        //Je garde les valeurs
119                        $this->state_fields_list=array(
120                                'fields' => array(
121                                        'fields' => (is_array($editions_state_fields_fields) ? $editions_state_fields_fields : array()),
122                                        'content' => (is_array($editions_state_fields_content_fields) ? $editions_state_fields_content_fields : array()) 
123                                ),
124                                'filters' => array(
125                                        'fields' => (is_array($editions_state_filters_fields) ? $editions_state_filters_fields : array()),
126                                        'content' => (is_array($editions_state_filters_content_fields) ? $editions_state_filters_content_fields : array()),
127                                ),
128                                'orders' => array(
129                                        'fields' => (is_array($editions_state_orders_fields) ? $editions_state_orders_fields : array()),
130                                        'content' => (is_array($editions_state_orders_content_fields) ? $editions_state_orders_content_fields : array()),
131                                )
132                        );
133                        $this->get_filter();
134                       
135                        $this->state_fields_params['orders']=array();//on initialise
136                        foreach($this->state_fields_list['orders']['content'] as $field){
137                                $order = new editions_state_order($this->fields[$field]);
138                                $this->state_fields_params['orders'][$field] = $order->get_params();
139                        }
140               
141                }else{//$partial_submit == 2 On vient de changer la source de données
142                        //Je réinitialise toutes les informations
143                        $this->state_fields_list=array(
144                                'fields' => array(
145                                        'fields' => array(),
146                                        'content' => array() 
147                                ),
148                                'filters' => array(
149                                        'fields' => array(),
150                                        'content' => array(),
151                                ),
152                                'orders' => array(
153                                        'fields' => array(),
154                                        'content' => array(),
155                                )
156                        );
157                }
158        }
159       
160        public function get_form(){
161                global $msg,$charset;
162                global $editions_state_form;
163               
164                $form = str_replace('!!id!!', $this->id, $editions_state_form);
165               
166                //positionnement auto sur le dernier onglet, ca marche tout seul, pas besoin de s'en soucier !
167                global $editionsstate_active_tab;
168                $form = str_replace('!!active_tab!!', htmlentities($editionsstate_active_tab,ENT_QUOTES, $charset), $form);
169               
170                //Titre du formulaire
171                if (!$this->id) $form = str_replace('!!form_title!!', $msg[704], $form);
172                else $form = str_replace('!!form_title!!', $msg["procs_modification"], $form);
173               
174                //nom
175                $form = str_replace('!!name!!', htmlentities($this->name,ENT_QUOTES, $charset), $form);
176                //commentaire
177                $form = str_replace('!!comment!!', htmlentities($this->comment,ENT_QUOTES, $charset), $form);
178                //classement
179                $combo_clas= gen_liste ("SELECT idproc_classement,libproc_classement FROM procs_classements ORDER BY libproc_classement ", "idproc_classement", "libproc_classement", "editions_state_classement", "", $this->classement, 0, $msg[proc_clas_aucun],0, $msg[proc_clas_aucun]) ;
180                $form = str_replace('!!classement!!', $combo_clas, $form);
181               
182                //source de données
183                $datasource_options = "
184                        <option value='0'>".$msg['editions_state_datasource_choice']."</options>";
185                $datasources_list = $this->datasource->get_datasources_list();
186                foreach($datasources_list as $data_key => $label){
187                        $datasource_options.="
188                        <option value='".htmlentities($data_key,ENT_QUOTES,$charset)."' ".($this->used_datasource == $data_key ? "selected='selected'":"").">".htmlentities($label,ENT_QUOTES,$charset)."</option>";
189                }
190//             
191//              $datasource_options.="
192//                      <option value='editions_datasource_loans' ".($this->used_datasource == "editions_datasource_loans" ? "selected='selected'":"").">Prêts</option>";
193                $form = str_replace('!!datasource_options!!', $datasource_options, $form);
194               
195                if(count($this->state_fields_list['filters']['content']) || count($this->state_fields_list['fields']['content'])){
196                        //J'ai commencé à créer un état je ne peux donc pas changer de source
197                        $form = str_replace('!!datasource_readonly!!', "disabled='disabled'", $form);
198                        $form = str_replace('<!--editions_state_datasource-->', "<input type='hidden' name='editions_state_datasource' id='editions_state_datasource' value='".$this->used_datasource."'/>", $form);
199                }else{
200                        $form = str_replace('!!datasource_readonly!!', "", $form);
201                }
202               
203                if(!$this->used_datasource){
204                        $form = str_replace("!!tabs!!","",$form);
205                }else{
206                        $form = str_replace("!!tabs!!",$this->get_tabs_form(),$form);
207                }
208               
209                $del_button = "";
210                if($this->id){
211                        $del_button = "<input type='button' class='bouton' value=' $msg[supprimer] ' onClick='confirm_delete(".$this->id.")' />
212                        <script type='text/javascript'>
213                                function confirm_delete(id){
214                                        if(confirm('".addslashes($msg['editions_state_confirm_delete'])."')){
215                                                document.location='./edit.php?categ=state&action=delete&id='+id;
216                                        }
217                                }
218                        </script>
219                        ";
220                }
221                $form = str_replace("!!del_button!!",$del_button,$form);
222               
223                return $form;
224        }
225       
226        public function get_tabs_form(){
227                global $msg,$charset;
228                global $class_path;
229                global $editions_state_form_tabs;
230               
231                $form = $editions_state_form_tabs;
232               
233                if(count($this->state_fields_list['fields']['fields']) ==0 && count($this->state_fields_list['fields']['content']) == 0){
234                        foreach($this->fields as $id => $field){
235                                $this->state_fields_list['fields']['fields'][] = $id;
236                                $this->state_fields_list['filters']['fields'][] = $id;
237                        }
238                }else{
239                        $nb_champ=count($this->state_fields_list['fields']['fields']) + count($this->state_fields_list['fields']['content']);
240                        if($nb_champ < count($this->fields)){
241                                //On a ajouté des champs dans le fichier datasources.xml
242                                foreach($this->fields as $id => $field){
243                                        if(!in_array($id,$this->state_fields_list['fields']['fields']) && !in_array($id,$this->state_fields_list['fields']['content'])){
244                                                $this->state_fields_list['fields']['fields'][] = $id;
245                                                $this->state_fields_list['filters']['fields'][] = $id;
246                                        }
247                                }
248                        }elseif($nb_champ > count($this->fields)){
249                                //On a enlevé des champs dans le fichier datasources.xml
250                                foreach($this->state_fields_list['fields']['fields'] as $key => $field){
251                                        if(!($this->fields[$field])){
252                                                unset($this->state_fields_list['fields']['fields'][$key]);
253                                                $key_fiters=array_search ($field, $this->state_fields_list['filters']['fields']);
254                                                if( $key_fiters !== false){
255                                                        unset($this->state_fields_list['filters']['fields'][$key_fiters]);
256                                                }
257                                                $key_fiters=array_search ($field, $this->state_fields_list['filters']['content']);
258                                                if( $key_fiters !== false){
259                                                        unset($this->state_fields_list['filters']['content'][$key_fiters]);
260                                                }
261                                        }
262                                }
263                                foreach($this->state_fields_list['fields']['content'] as $key => $field){
264                                        if(!($this->fields[$field])){
265                                                unset($this->state_fields_list['fields']['content'][$key]);
266                                                $key_fiters=array_search ($field, $this->state_fields_list['filters']['fields']);
267                                                if( $key_fiters !== false){
268                                                        unset($this->state_fields_list['filters']['fields'][$key_fiters]);
269                                                }
270                                                $key_fiters=array_search ($field, $this->state_fields_list['filters']['content']);
271                                                if( $key_fiters !== false){
272                                                        unset($this->state_fields_list['filters']['content'][$key_fiters]);
273                                                }
274                                                $key_fiters=array_search ($field, $this->state_fields_list['orders']['fields']);
275                                                if( $key_fiters !== false){
276                                                        unset($this->state_fields_list['orders']['fields'][$key_fiters]);
277                                                }
278                                                $key_fiters=array_search ($field, $this->state_fields_list['orders']['content']);
279                                                if( $key_fiters !== false){
280                                                        unset($this->state_fields_list['orders']['content'][$key_fiters]);
281                                                }
282                                        }
283                                }
284                        }
285                }
286                //contruction de la liste des champs pour l'onglets champs
287                $form = str_replace("!!fields_fields_list!!",$this->gen_tab_list('fields'),$form);
288                $form = str_replace("!!fields_fields_content!!",$this->gen_tab_content('fields'),$form);       
289                //contruction de la liste des champs pour l'onglets filtres
290                $form = str_replace("!!filters_fields_list!!",$this->gen_tab_list('filters'),$form);
291                $form = str_replace("!!filters_fields_content!!",$this->gen_tab_content('filters'),$form);             
292                //contruction de la liste des champs pour l'onglets tri
293                $form = str_replace("!!order_fields_list!!",$this->gen_tab_list('orders'),$form);
294                $form = str_replace("!!order_fields_content!!",$this->gen_tab_content('orders'),$form);         
295                return $form;
296        }
297       
298        public function gen_tab_list($tab){
299                $list = "";
300                foreach($this->state_fields_list[$tab]['fields'] as $field){
301                        switch($tab){
302                                case "fields" :
303                                        $id = $this->fields[$field]['id'];
304                                        break;
305                                case "filters" :
306                                        $id = "filter_".$this->fields[$field]['id'];
307                                        break;
308                                case "orders" :
309                                        $id = "crit_".$this->fields[$field]['id'];
310                                        break;
311                        }
312                        $list.="
313                                                <div id='".$id."' class='row' dragtype='editionsstate".$tab."' draggable='yes'>
314                                                        <input type='hidden' name='editions_state_".$tab."_fields[]' value='".$this->fields[$field]['id']."' />
315                                                        <span style='cursor: pointer;'>".$this->fields[$field]['label']."</span>
316                                                </div>";
317                }
318                return $list;
319        }
320
321        public function gen_tab_content($tab,$draggable=true){
322                global $class_path;
323                global $msg,$charset;
324               
325                $content = "";
326                foreach($this->state_fields_list[$tab]['content'] as $field){
327                        switch($tab){
328                                case "fields" :
329                                        if($draggable){
330                                                $content.= "<div class='row' id='".$tab."_".$field."' draggable='yes' dragtype='editionsstate".$tab."list' style='cursor: pointer;'>";
331                                        }else{
332                                                $content.= "<div class='row' id='".$tab."_".$field."'>";
333                                        }
334                                        $content.= "
335                                                        <input type='hidden' name='editions_state_".$tab."_content_fields[]' value='".$this->fields[$field]['id']."' />
336                                                        ".$this->fields[$field]['label']."
337                                                </div>";
338                                        break;
339                                case "filters" :
340                                        $class = $this->get_filter_class($field);
341                                        require_once($class_path."/".$class.".class.php");
342                                        $filter= new $class($this->fields[$field],$this->state_fields_params['filters'][$field]);
343                                        $content.= "
344                                        <div class='row' id='".$tab."_".$field."'>
345                                                <input type='hidden' name='editions_state_".$tab."_content_fields[]' value='".$this->fields[$field]['id']."' />"; 
346                                        $content.= $filter->get_form($draggable);       
347                                        $content.="
348                                        </div>";
349                                        break;
350                                case "orders" :
351                                        $order = new editions_state_order($this->fields[$field],$this->state_fields_params['orders'][$field]);
352                                        $content.= "
353                                        <div class='row' id='".$tab."_".$field."'>
354                                                <input type='hidden' name='editions_state_".$tab."_content_fields[]' value='".$this->fields[$field]['id']."' />"; 
355                                        $content.= $order->get_form($draggable);
356                                        $content.="
357                                        </div>";
358                                        break;
359                        }
360                }
361                return $content;
362        }
363       
364        public function get_filter_class($field){
365                $this->fields=$this->datasource->redo_values($field);//Je récupère les valeurs pour le cas où le champ est de type liste
366                if($this->fields[$field]['input'] == "list"){
367                        $class = "editions_state_filter_list";
368                }else{
369                        $class = "editions_state_filter_".$this->fields[$field]['type'];
370                }
371                return $class;
372        }
373       
374        /*
375         * Récupération des filtres à partir de la variable global si elle est définit
376         */
377        public function get_filter(){
378                global $class_path;
379                global $editions_state_filters_content_fields;
380                if(is_array($this->state_fields_list['filters']['content']) && count($this->state_fields_list['filters']['content'])){//Si les filtres sont présent dans la variable
381                        foreach($this->state_fields_list['filters']['content'] as $field){
382                                $class = $this->get_filter_class($field);
383                                require_once($class_path."/".$class.".class.php");
384                                $filter= new $class($this->fields[$field]);
385                                if($tmp=$filter->get_params()){
386                                        $this->state_fields_params['filters'][$field] =$tmp;
387                                }
388                        }
389                }
390        }
391       
392        public function show($sub="tab",$elem=""){
393                global $class_path,$base_path;
394                global $charset,$msg;
395                global $edition_state_render;
396                global $edition_state_filter_form;
397               
398       
399                //jouons avec DoJo sur cette partie...
400                //4 onglets : tableaux, TCD, groupement,graph
401                $html = str_replace("!!id!!",$this->id,$edition_state_render);
402
403                $html = str_replace("!!name!!","<a href='".$base_path."/edit.php?categ=state&action=edit&id=".$this->id."'>".htmlentities($this->name,ENT_QUOTES,$charset)."</a>",$html);
404               
405                $filter_form=$this->gen_tab_content("filters",false);
406               
407                if($filter_form){
408                        $html = str_replace("<!-- filter_form_content -->",str_replace(array("<!-- filter_form -->","!!sub!!"),array($filter_form,$sub),$edition_state_filter_form),$html);
409                }
410               
411                $html = str_replace("!!class_".$sub."!!","onglet-perio-selected",$html);
412                switch($sub){
413                        case "tab" :   
414                                $html = str_replace("!!class_tcd!!","onglets-perio",$html);
415                                $html = str_replace("!!class_group!!","onglets-perio",$html);
416                                $html = str_replace("!!class_graph!!","onglets-perio",$html);
417                                $view_class = "editions_state_view";
418                                break;
419                        case "tcd" :
420                                $html = str_replace("!!class_tab!!","onglets-perio",$html);
421                                $html = str_replace("!!class_group!!","onglets-perio",$html);
422                                $html = str_replace("!!class_graph!!","onglets-perio",$html);
423                                $view_class = "editions_state_view_tcd";
424                                break;
425                        case "group" :
426                                $html = str_replace("!!class_tab!!","onglets-perio",$html);
427                                $html = str_replace("!!class_tcd!!","onglets-perio",$html);
428                                $html = str_replace("!!class_graph!!","onglets-perio",$html);
429                                $view_class = "editions_state_view_group";
430                                break;
431                        case "graph" :
432                                $html = str_replace("!!class_tab!!","onglets-perio",$html);
433                                $html = str_replace("!!class_group!!","onglets-perio",$html);
434                                $html = str_replace("!!class_tcd!!","onglets-perio",$html);
435                                $view_class = "editions_state_view_graph";
436                                break;
437                }
438                $datas = $this->datasource->get_datas($this->state_fields_list,$this->state_fields_params);
439               
440                require_once($class_path."/".$view_class.".class.php");
441
442                $view = new $view_class($datas,$this->id,$this->state_fields_params["view"]);
443                $this->update_param_view($view->get_param());
444               
445                $html = str_replace("!!editions_state_render!!",$view->show(),$html);
446                switch($elem){
447                        case "xls" :
448                                $view->render_xls_file("plop");
449                                break;
450                        default : 
451                                return $html;
452                                break;
453                }
454//              return $html;
455        }
456       
457        public function render_file($sub,$elem){
458                global $class_path;
459                $datas = $this->datasource->get_datas($this->state_fields_list,$this->state_fields_params);
460               
461                switch($sub){
462                        case "tab" :
463                                $view_class = "editions_state_view";
464                                break;
465                        case "tcd" :
466                                $view_class = "editions_state_view_tcd";
467                                break;
468                        case "group" :
469                                $view_class = "editions_state_view_group";
470                                break;
471                        case "graph" :
472                                $view_class = "editions_state_view_graph";
473                                break;
474                }
475               
476                require_once($class_path."/".$view_class.".class.php");
477                $view = new $view_class($datas,$this->id);
478                $file_name = convert_diacrit(str_replace(" ","_",$this->name));
479                switch($elem){
480                        case "xls" :
481                                $view->render_xls_file($file_name);
482                                break;
483                        default : 
484                                return $html;
485                                break;
486                }               
487        }
488}
Note: See TracBrowser for help on using the repository browser.