1<?php
2
3//this script may only be included - so its better to die if called directly.
4if (strpos($_SERVER["SCRIPT_NAME"],basename(__FILE__)) !== false) {
5  header("location: index.php");
6  exit;
7}
8
9
10/*
11This file is part of J4PHP - Ensembles de propriétés et méthodes permettant le developpment rapide d'application web modulaire
12Copyright (c) 2002-2004 @PICNet
13
14This program is free software; you can redistribute it and/or
15modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE
16as published by the Free Software Foundation.
17
18This program is distributed in the hope that it will be useful,
19but WITHOUT ANY WARRANTY; without even the implied warranty of
20MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21GNU LESSER GENERAL PUBLIC LICENSE for more details.
22
23You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
24along with this program; if not, write to the Free Software
25Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26*/
27
28APIClass::import("org.apicnet.xml.Xml");
29
30/**
31* Classe principal d'APICFrameWorks ; Elle premet d'importer n'import quelle autre class
32* Ce code est tirer du projet jphp lib qui est malheureusement clos.
33*
34* Cette class ne s'instancie pas elle s'utilise de maniere static de cette facon :
35*
36*	1.	require_once("conf/config.inc.php");
37*	2.	$secure = APIC::loadClass(chemin de la class);
38*	3.	$secure->methode();
39* 	ou
40* 	1.	require_once("conf/config.inc.php");
41*	2.	APIC::import(chemin de la class);
42*
43*
44* @update $Date: 2005-05-18 11:01:22 $
45* @version 1.0
46* @author diogène MOULRON <logiciel@apicnet.net>
47* @package core
48*/
49class APIC extends APICObject {
50
51	/**
52	* Méthode static d'importation de class;
53	*
54	* @param string $class nom de la class a importer ; espace de nommage identique a celle utilisée en java (sous la forme org.apicnet.maclass).
55	* @param string $module nom du module ou trouver la class a charger
56 	* @access public
57	* @since 1.1
58	* @update 06/06/2002
59	*/
60	function import($class, $module=NULL){
61		$class = preg_split('/,/', preg_replace('/\s{1,}/', '', $class));
62		$len = count($class);
63		for ($i =0; $i<$len; $i++){
64			APIClass::import($class[$i], $module);
65		}
66	}
67
68
69	/**
70	 * APIC::importData()
71	 *
72	 * @param $class
73	 * @param unknown $module
74	 * @return
75	 **/
76	function importData($class, $module=NULL){
77		$packagename = APIClassRegistry::extractPackageName($class);
78		$path        = APIClassRegistry::convertToPath($class, $module);
79		if (APIClassRegistry::isClass($class)){// extracting class name
80			$classname = APIClassRegistry::extractClassName($class);
81			// loadclass
82			$path .= '.php';
83			if (isset($path) && is_file($path)){// register
84				APIClassRegistry::register($packagename, $classname);
85				include($path);
86			}
87		}
88	}
89
90	/**
91	*
92	*
93	* @access private
94	* @since 1.1
95	* @update 06/06/2002
96	*/
97	function _debug(){
98		APIClassRegistry::_debug();
99	} // end func
100
101	/**
102	*
103	*
104	* @access private
105	* @since 1.1
106	* @update 06/06/2002
107	*/
108	function isRegistered($class){
109		return APIClassRegistry::isRegistered($class);
110	} // end func
111
112	/**
113	*
114	* Méthode static d'instanciation de class / object;
115	*
116	*
117	*
118	* @param string  $class nom de class à charger et à instancier ; espace de nommage identique a celle utilisée en java.
119	* @param array   $parameters parametres de la class s'il y en a.
120	* @param boolean $new_class indique si, lorsque la class est déjà dans le registre, on doit en instancier une nouvelle.
121	* @return object un pointeur sur la class instancié
122	* @access public
123	* @since 1.1
124	* @update 06/06/2002
125	*/
126	function &loadClass($class, $parameters=NULL, $new_class=FALSE, $module=NULL){
127
128		APIC::import("org.apicnet.io.File");
129
130		if ($new_class){
131		//	echo(" OK <br>");
132			$classname = APIClassRegistry::extractClassName($class);
133			if (!APIClassRegistry::isClass($class) || !APIClassRegistry::isRegistered($class)){
134				$path = new File(APIClassRegistry::convertToPath($class, $module).'.php');
135		//		echo($path->getFilePath()."<br>");
136				if ($path->exists()){
137					APIC::import($class, $module);
138				} else{
139					die("Class ".$class." cannot be found");
140				}
141			}
142
143			$params = '';
144			if ($parameters!=NULL && is_array($parameters)){
145				$plen = count($parameters);
146				if ($plen>0){
147					for ($i=0; $i < $plen; $i++){
148						$params .= '$parameters['.$i.']';
149						if ($i<($plen-1)){
150							$params .= ', ';
151						}
152					}
153				}
154			}
155			$obj = NULL;
156			eval('$obj = new '.$classname.'('.$params.');');
157			APIClassRegistry::registerClass($class, $obj);
158			return $obj;
159
160		} else { // fin du if New_class
161		//	APIC::_debug();
162			if (APIClassRegistry::isRegistered($class)) {
163		//		echo($class." loaded ...");
164				return APIClassRegistry::loadClass($class, $parameters);
165			} else {
166				if (!APIClassRegistry::isClass($class) || !APIClassRegistry::isRegistered($class)){
167					$path = new File(APIClassRegistry::convertToPath($class, $module).'.php');
168		//			echo($path->getFilePath()."<br>");
169					if ($path->exists()){
170		//				echo($class." instanciate ...");
171						APIC::import($class, $module);
172						return APIC::loadClass($class, $parameters, TRUE, $module);
173					} else {
174						die("Class ".$class." cannot be found");
175					}
176				}
177			}
178		}
179	} // end func
180
181	/**
182	*
183	*
184	*
185	* @access private
186	* @since 1.1
187	* @update 06/06/2002
188	*/
189	function _display_core_package(){
190		print("<font style='font-family: Courier New; font-size: 9pt; color:#ff3300'>");
191		print("<ol><li><strong>core</strong>");
192		print("<ol>");
193		APIC::listDir(JPHP_CORE_DIR);
194		print("</ol>");
195		print("</li></ol>");
196		print("</font>");
197	} // end func
198
199	/**
200	*
201	*
202	*
203	* @access private
204	* @since 1.1
205	* @update 06/06/2002
206	*/
207	function _display_packages(){
208		print("<font style='font-family: Courier New; font-size: 9pt; color:#006600'>");
209		APIC::listDir(JPHP_LIBRARY_PATH);
210		print("</font>");
211	} // end func
212
213	/**
214	*
215	*
216	*
217	* @param string $path chemin du répertoire à lister.
218	* @access public
219	* @since 1.1
220	* @update 06/06/2002
221	*/
222	function listDir($path){
223		if (file_exists($path) && is_dir($path)){
224			print("<ol>");
225			$handle=opendir($path);
226			while ($file = readdir($handle)) {
227				if ($file!='.' && $file!='..'){
228					$fullpath = $path . '/' . $file;
229					if (is_dir($fullpath)){
230						print("<li><strong>".$file."</strong>");
231						print("<ol>");
232						APIC::listDir($fullpath);
233						print("</ol>");
234					} else if (preg_match('/(\.php)$/i', $file)>0){
235						print("<li>".str_replace('.php','',$file)."</li>");
236					}
237				}
238			}
239			print("</ol>");
240		} else {
241			print("<li>classes library directory cannot be found</li>");
242		}
243	} // end func
244}// end class
245