source: pmb4.2/trunk/fuentes/pmb/classes/dashboard/dashboard.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: 10.3 KB
Line 
1<?php
2// +-------------------------------------------------+
3// | 2002-2007 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: dashboard.class.php,v 1.2 2015-01-21 11:16:13 mbertin Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($include_path."/templates/dashboard.tpl.php");
10require_once($class_path."/autoloader.class.php");
11$autoload = new autoloader();
12
13class dashboard {
14        private $dashboard_modules = array();
15        private $dashboards;
16        private $dasboard_to_print = array();
17       
18        public function __construct($dashboard_modules=array()){
19                $this->dashboard_modules = $dashboard_modules;
20                if(!count($this->dashboard_modules)){
21                        $this->load_all_modules();
22                }
23                $this->check_authorization();
24        }
25
26        public function render(){
27                //On a la liste des modules... On récupère les tableaux de bord...
28                $this->dashboards =array();
29                foreach($this->dashboard_modules as $module_name){
30                        $dashboard_classname = "dashboard_module_".$module_name;
31                        $this->dashboards[] = new $dashboard_classname();
32                }
33               
34                //les différents tableaux
35                $this->dasboard_to_print = $context = array();
36                foreach($this->dashboards as $dashboard){
37                        if ($dashboard->module == "dashboard"){
38                                $context['quick_actions'] = $dashboard->get_quick_params_form();
39                        }
40                        $this->dasboard_to_print = array_merge($this->dasboard_to_print,$dashboard->render_infos());
41                }       
42       
43                //on charge le layout !
44                $template = $this->load_layout();
45                $context['dashboards'] = $this->dasboard_to_print;
46                return h2o($template)->render($context); 
47        }
48       
49        private function render_alerts(){
50                foreach($this->dashboards as $dashboard){
51                       
52                }
53        }
54
55        private function check_authorization(){
56                global $class_path;
57                $authorized_modules = array();
58                foreach($this->dashboard_modules as $module){
59                        switch($module){
60                                case "fichier" :
61                                        global $fiches_active;
62                                        if(SESSrights & DEMANDES_AUTH && $fiches_active && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
63                                        break;                         
64                                case "demandes" :
65                                        global $demandes_active;
66                                        if(SESSrights & DEMANDES_AUTH && $demandes_active && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
67                                        break;                         
68                                case "acquisition" :
69                                        global $acquisition_active;
70                                        if(SESSrights & ACQUISITION_AUTH && $acquisition_active && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
71                                        break;                         
72                                case "catalog" :
73                                        if(SESSrights & CATALOGAGE_AUTH && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
74                                        break;                         
75                                case "circ" :
76                                        if(SESSrights & CIRCULATION_AUTH && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
77                                        break;
78                                case "dashboard" :
79                                        if(file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module; 
80                                        break;
81                                case "autorites" :
82                                        if(SESSrights & AUTORITES_AUTH && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
83                                        break; 
84                                case "cms" :
85                                        global $cms_active;
86                                        if(SESSrights & CMS_AUTH && $cms_active && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
87                                        break;
88                                case "dsi" :
89                                        global $dsi_active;
90                                        if(SESSrights & DSI_AUTH && $dsi_active && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
91                                        break; 
92                                case "edit" :
93                                        if(SESSrights & EDIT_AUTH && file_exists($class_path."/dashboard/dashboard_module_".$module.".class.php")) $authorized_modules[] = $module;
94                                        break;
95                        }
96                }
97                $this->dashboard_modules = $authorized_modules;
98        }
99       
100        private function load_all_modules(){
101                        $this->dashboard_modules = array();
102                        $this->dashboard_modules[] = "dashboard";
103                        $this->dashboard_modules[] = "circ";
104                        $this->dashboard_modules[] = "catalog";
105                        $this->dashboard_modules[] = "admin";
106                        $this->dashboard_modules[] = "demandes";
107                        $this->dashboard_modules[] = "acquisition";
108                        $this->dashboard_modules[] = "fichier";
109                        $this->dashboard_modules[] = "edit";
110                        $this->dashboard_modules[] = "cms";     
111                        $this->dashboard_modules[] = "dsi";
112                        $this->dashboard_modules[] = "autorites";
113        }
114       
115        private function choose_layout(){
116                $nb_elem = count($this->dasboard_to_print);
117                switch ($nb_elem){
118                        case 1 :
119                                $this->layout ="layout";
120                                break;
121                        case 2 :
122                                $this->layout ="layout2";
123                                break; 
124                        default :
125                                if($nb_elem>=10 || $nb_elem%4 == 0){
126                                        $this->layout= "layout4";
127                                }else if ($nb_elem%3 == 0){
128                                        $this->layout= "layout3";
129                                }else if($nb_elem%4 >= $nb_elem%3){
130                                        $this->layout= "layout4";
131                                }else{
132                                        $this->layout= "layout3";
133                                }
134                                break;                         
135                }
136//              $this->layout = "layout3";
137        }
138       
139        private function load_layout(){
140                global $include_path;
141                global $lang;
142       
143                $this->choose_layout();
144                $filepath = $include_path."/dashboard/layouts/".$this->layout;
145                if(file_exists($filepath."_subst.xml")){
146                        $filepath.="_subst";
147                }       
148                $template = "";
149                if(file_exists($filepath.".xml")){
150                        @ini_set("zend.ze1_compatibility_mode", "0");
151                        $xml = new DOMDocument();
152                        $xml->load($filepath.".xml");
153                        //langue de référence
154                        $default_lang = "";
155                        $xml_template = $xml->getElementsByTagName("template")->item(0);
156                               
157                        if($xml_template->hasAttributes()){
158                                $attributes = $xml_template->attributes;
159                                for($i=0 ; $i<$attributes->length ; $i++){
160                                        if($attributes->item($i)->nodeName == "default_lang"){
161                                                //dom retourne de l'utf-8 à tous les coups...
162                                                $default_lang = $this->charset_normalize($attributes->item($i)->nodeValue,"utf-8");
163                                                break;
164                                        }
165                                }
166                        }
167                        //on cherche le template qui va bien...
168                        $html_templates = $xml_template->getElementsByTagName("content");
169                        for($i=0 ; $i<$html_templates->length ; $i++){
170                                if($i == 0 || $html_templates->length == 1){
171                                        $template = $this->charset_normalize($html_templates->item($i)->nodeValue,"utf-8");
172                                }
173                                $attributes = $html_templates->item($i)->attributes;
174                                for($j=0 ; $j<$attributes->length ; $j++){
175                                        if($attributes->item($j)->nodeName == "lang"){
176                                                $current_lang = $this->charset_normalize($attributes->item($j)->nodeValue,"utf-8");
177                                                if($current_lang == $lang){
178                                                        $template = $this->charset_normalize($html_templates->item($i)->nodeValue,"utf-8");
179                                                        break(2);
180                                                }
181                                        }
182                                        if($attributes->item($j)->nodeName == "default_lang"){
183                                                $current_lang = $this->charset_normalize($attributes->item($j)->nodeValue,"utf-8");
184                                                if($current_lang == $lang){
185                                                        $template = $this->charset_normalize($html_templates->item($i)->nodeValue,"utf-8");
186                                                        break;
187                                                }
188                                        }
189                                }
190                        }
191                        @ini_set("zend.ze1_compatibility_mode", "1");
192                }
193                return $template;
194        }
195        protected static function charset_normalize($elem,$input_charset){
196                global $charset;
197                if(is_array($elem)){
198                        foreach ($elem as $key =>$value){
199                                $elem[$key] = self::charset_normalize($value,$input_charset);
200                        }
201                }else{
202                        //PMB dans un autre charset, on converti la chaine...
203                        $elem = self::clean_cp1252($elem, $input_charset);
204                        if($charset != $input_charset){
205                                $elem = iconv($input_charset,$charset,$elem);
206                        }
207                }
208                return $elem;
209        }
210        protected static function clean_cp1252($str,$charset){
211                switch($charset){
212                        case "utf-8" :
213                                $cp1252_map = array(
214                                "\x80" => "EUR", /* EURO SIGN */
215                                "\x82" => "\xab", /* SINGLE LOW-9 QUOTATION MARK */
216                                "\x83" => "\x66",     /* LATIN SMALL LETTER F WITH HOOK */
217                                "\x84" => "\xab", /* DOUBLE LOW-9 QUOTATION MARK */
218                                "\x85" => "...", /* HORIZONTAL ELLIPSIS */
219                                "\x86" => "?", /* DAGGER */
220                                "\x87" => "?", /* DOUBLE DAGGER */
221                                "\x88" => "?",     /* MODIFIER LETTER CIRCUMFLEX ACCENT */
222                                "\x89" => "?", /* PER MILLE SIGN */
223                                "\x8a" => "S",   /* LATIN CAPITAL LETTER S WITH CARON */
224                                "\x8b" => "\x3c", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
225                                "\x8c" => "OE",   /* LATIN CAPITAL LIGATURE OE */
226                                "\x8e" => "Z",   /* LATIN CAPITAL LETTER Z WITH CARON */
227                                "\xe2\x80\x98" => "\x27", /* LEFT SINGLE QUOTATION MARK */
228                                "\xe2\x80\x99" => "\x27", /* RIGHT SINGLE QUOTATION MARK */
229                                "\x93" => "\x22", /* LEFT DOUBLE QUOTATION MARK */
230                                "\x94" => "\x22", /* RIGHT DOUBLE QUOTATION MARK */
231                                "\x95" => "\b7", /* BULLET */
232                                "\x96" => "\x20", /* EN DASH */
233                                "\x97" => "\x20\x20", /* EM DASH */
234                                "\x98" => "\x7e",   /* SMALL TILDE */
235                                "\x99" => "?", /* TRADE MARK SIGN */
236                                "\x9a" => "S",   /* LATIN SMALL LETTER S WITH CARON */
237                                "\x9b" => "\x3e;", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
238                                "\x9c" => "oe",   /* LATIN SMALL LIGATURE OE */
239                                "\x9e" => "Z",   /* LATIN SMALL LETTER Z WITH CARON */
240                                "\x9f" => "Y"    /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
241                                );
242                                break;
243                        case "iso8859-1" :
244                                $cp1252_map = array(
245                                "\x80" => "EUR", /* EURO SIGN */
246                                "\x82" => "\xab", /* SINGLE LOW-9 QUOTATION MARK */
247                                "\x83" => "\x66",     /* LATIN SMALL LETTER F WITH HOOK */
248                                "\x84" => "\xab", /* DOUBLE LOW-9 QUOTATION MARK */
249                                "\x85" => "...", /* HORIZONTAL ELLIPSIS */
250                                "\x86" => "?", /* DAGGER */
251                                "\x87" => "?", /* DOUBLE DAGGER */
252                                "\x88" => "?",     /* MODIFIER LETTER CIRCUMFLEX ACCENT */
253                                "\x89" => "?", /* PER MILLE SIGN */
254                                "\x8a" => "S",   /* LATIN CAPITAL LETTER S WITH CARON */
255                                "\x8b" => "\x3c", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
256                                "\x8c" => "OE",   /* LATIN CAPITAL LIGATURE OE */
257                                "\x8e" => "Z",   /* LATIN CAPITAL LETTER Z WITH CARON */
258                                "\x91" => "\x27", /* LEFT SINGLE QUOTATION MARK */
259                                "\x92" => "\x27", /* RIGHT SINGLE QUOTATION MARK */
260                                "\x93" => "\x22", /* LEFT DOUBLE QUOTATION MARK */
261                                "\x94" => "\x22", /* RIGHT DOUBLE QUOTATION MARK */
262                                "\x95" => "\b7", /* BULLET */
263                                "\x96" => "\x20", /* EN DASH */
264                                "\x97" => "\x20\x20", /* EM DASH */
265                                "\x98" => "\x7e",   /* SMALL TILDE */
266                                "\x99" => "?", /* TRADE MARK SIGN */
267                                "\x9a" => "S",   /* LATIN SMALL LETTER S WITH CARON */
268                                "\x9b" => "\x3e;", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
269                                "\x9c" => "oe",   /* LATIN SMALL LIGATURE OE */
270                                "\x9e" => "Z",   /* LATIN SMALL LETTER Z WITH CARON */
271                                "\x9f" => "Y"    /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
272                                );
273                                break;
274                }
275                return strtr($str, $cp1252_map);
276        }
277}
Note: See TracBrowser for help on using the repository browser.