source: pmb4.2/trunk/fuentes/pmb/classes/autoloader.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: 5.2 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: autoloader.class.php,v 1.6 2015-03-05 09:10:17 arenou Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9/*
10 * Classe d'inclusion automatique
11 */
12class autoloader{
13        protected $debug = false;
14
15        public function __construct($set_classic=true,$debug = false){
16                $this->debug = $debug;
17                if($set_classic){
18                        //on ajoute dans le registe d'appel automatique, la méthode de chargement classique...
19                        $this->add_register();
20                }
21        }
22       
23        /*
24         * On empile dans le registe automatique un nouvelle méthode d'appel (qui peut être mis en tête de la pile)
25         * à partir de php 5.3
26         */
27        public function add_register($type="classic",$first = false){
28                if(substr(phpversion(),2,1) >= 3){
29                        spl_autoload_register(array($this, $type),true,$first);
30                }else{
31                        spl_autoload_register(array($this, $type),true);
32                }
33        }
34       
35        /*
36         * On empile dans le registe automatique un nouvelle méthode d'appel (qui peut être mis en tête de la pile)
37         */
38        public function del_register($type="classic"){
39                spl_autoload_unregister(array($this, $type));
40        }
41       
42        /*
43         *
44         */
45        public function set_clean_pile(){
46                $functions = spl_autoload_functions();
47                foreach($functions as $func){
48                        spl_autoload_unregister(array($this,$func[1]));
49                }
50        }
51       
52        public function list_pile(){
53                return spl_autoload_functions();       
54        }
55       
56        private function load($file){
57                global $base_path;
58                global $class_path;
59                global $include_path;
60                global $javascript_path;
61                global $styles_path;   
62                global $msg,$charset;
63                if(file_exists($file)){
64                        require_once($file);
65                        if($this->debug){
66                                print "Load success<br>";
67                        }
68                }else{
69                        if($this->debug){
70                                print "File ".$file." can't find<br>";
71                        }
72                        return false;
73                }
74                return true;
75        }
76
77        /*
78         * Inclusion classique...
79         * Les classes sont dans le répertoire classes/ ou un sous-répertoire...,
80         * Eventuellement un template dans includes/templates/ ou un sous-répertoire...
81         */
82        private function classic($class_name) {
83                global $class_path;
84                global $include_path;
85                if($this->debug){
86                        print '<br>Trying to load '. $class_name. ' via '. __METHOD__. "()<br>";
87                }
88                //fichier de la classe
89                $class_file = $class_path."/".$class_name.".class.php";
90                $success = $this->load($class_file);
91                if($success){
92                        //fichier de template associé à la classe
93                        $tpl_file = $include_path."/templates/".$class_name.".tpl.php";
94                        $this->load($tpl_file); 
95                }else{
96                        $class_file = "";
97                        $subfolder = substr($class_name,0,strpos($class_name,"_"));
98                        if($subfolder != ""){
99                                //fichier de la classe
100                                $class_file = $class_path."/".$subfolder."/".$class_name.".class.php";
101                                $success = $this->load($class_file);
102                                if($success){
103                                        //fichier de template associé à la classe
104                                        $tpl_file = $include_path."/templates/".$subfolder."/".$class_name.".tpl.php";
105                                        $this->load($tpl_file);
106                                }
107                        }
108                }
109        }       
110
111        /*
112         * Inclusion pour les classes modules du portail
113         */
114        private function cms_modules($class_name) {
115                global $base_path;
116                if($this->debug){
117                        echo '<br>Trying to load ', $class_name, ' via ', __METHOD__, "()<br>";
118                }
119                //inclusion de la classe d'un module...
120                if(!class_exists($class_name)){
121                        $module = str_replace("cms_module_","",$class_name);
122                        $class_file = $base_path."/cms/modules/".$module."/".$class_name.".class.php";
123                        $success = $this->load($class_file);
124                        if(!$success){
125                                $module = $class_file = "";
126                                $var = str_replace("cms_module_","",$class_name);
127                                $module = substr($var,0,strpos($var,"_"));
128                                $element = substr($var,strpos($var,"_")+1);
129                                if(strpos($element,"_") !== false){
130                                        $element = substr($element,0,strpos($element,"_"));
131                                        $class_file = $base_path."/cms/modules/".$module."/".$element."s/".$class_name.".class.php";
132                                }else{
133                                        $class_file = $base_path."/cms/modules/".$module."/".$element."s/".$class_name.".class.php";
134                                }
135                                $this->load($class_file);       
136                        }
137                }else if($this->debug){
138                        echo "Already loaded<br>";
139                }
140        }
141
142        private function onto_class($class_name){
143                global $class_path;
144               
145                if($this->debug){
146                        echo '<br>Trying to load ', $class_name, ' via ', __METHOD__, "()<br>";
147                }
148                //inclusion de la classe d'un module...
149                if(!class_exists($class_name)){
150                        $class_file = $class_path."/onto/".$class_name.".class.php";
151                        $success = $this->load($class_file);
152                        if(!$success){
153                                $module = $class_file = "";
154                                $var = str_replace("onto_","",$class_name);
155                                $module = substr($var,0,strpos($var,"_"));
156                                $element = substr($element,0,strpos($element,"_"));
157                                $class_file = $class_path."/onto/".$module."/".$class_name.".class.php";
158                                $this->load($class_file);
159                        }
160                }else if($this->debug){
161                        echo "Already loaded<br>";
162                }               
163        }
164       
165        /*
166         * Inclusion pour les classes modules du portail
167         */
168        private function docwatch($class_name) {
169                global $class_path;
170                if($this->debug){
171                        echo '<br>Trying to load ', $class_name, ' via ', __METHOD__, "()<br>";
172                }
173                //inclusion de la classe d'un module...
174                if(!class_exists($class_name)){
175                        $elements = explode("_",$class_name);
176                       
177                        $class_file = $class_path."/".$elements[0]."/".$elements[1]."s/".$class_name.".class.php";
178                        $this->load($class_file);
179                }else if($this->debug){
180                        echo "Already loaded<br>";
181                }
182        }
183}
Note: See TracBrowser for help on using the repository browser.