diff --git a/api/panel/bootstrap.php b/api/panel/bootstrap.php index 4c374fc8..30c7b25a 100644 --- a/api/panel/bootstrap.php +++ b/api/panel/bootstrap.php @@ -21,7 +21,6 @@ $root=ALTERNC_PANEL."/"; require_once($root."class/db_mysql.php"); require_once($root."class/functions.php"); -require_once($root."class/variables.php"); global $L_MYSQL_HOST,$L_MYSQL_DATABASE,$L_MYSQL_LOGIN,$L_MYSQL_PWD; @@ -71,6 +70,7 @@ closedir($c); /* Language */ //include_once("../../class/lang_env.php"); +$variables=new m_variables(); $mem=new m_mem(); $err=new m_err(); $authip=new m_authip(); diff --git a/api/panel/index.php b/api/panel/index.php index 1f33884f..f8e89685 100644 --- a/api/panel/index.php +++ b/api/panel/index.php @@ -30,7 +30,72 @@ define("API_CALL_POST", 2 ); define("API_CALL_POST_REST", 3 ); define("API_CALL_GET_REST", 4 ); -// TODO : __autoload of classes ? +/** + * Attempts to load a class in multiple path, the PSR-0 or old style way + * + * @staticvar array $srcPathList + * @staticvar boolean $init + * @param string $class_name + * @return boolean + */ + +function __autoload($class_name) +{ + // Contains (Namespace) => directory + static $srcPathList = array(); + static $init=null; + + // Attempts to set include path and directories once + if( is_null( $init )){ + + // Sets init flag + $init = true; + + // Sets a contextual directory + $srcPathList["standard"] = "/usr/share/php"; + + // Updates include_path according to this list + $includePathList = explode(PATH_SEPARATOR, get_include_path()); + + foreach($srcPathList as $path){ + if ( !in_array($path, $includePathList)){ + $includePathList[] = $path; + } + } + // Reverses the path for search efficiency + $finalIncludePathList = array_reverse($includePathList); + + // Sets the updated include_path + set_include_path(implode(PATH_SEPARATOR, $finalIncludePathList)); + + } + + // Accepts old Foo_Bar namespacing + if(preg_match("/_/", $class_name)){ + $file_name = str_replace('_', DIRECTORY_SEPARATOR, $class_name) . '.php'; + + // Accepts 5.3 Foo\Bar PSR-0 namespacing + } else if(preg_match("/\\/", $class_name)){ + $file_name = str_replace('\\', DIRECTORY_SEPARATOR, ltrim($class_name,'\\')) . '.php'; + + // Accepts non namespaced classes + } else { + $file_name = $class_name . '.php'; + } + + // Attempts to find file in namespace + foreach($srcPathList as $namespace => $path ){ + $file_path = $path.DIRECTORY_SEPARATOR.$file_name; + if(is_file($file_path) && is_readable($file_path)){ + require $file_path; + return true; + } + } + + // Failed to find file + return false; +} + function apicall($data,$token,$mode) { global $dbh; @@ -85,7 +150,7 @@ function apiauth($data,$mode) { // Authentication -if (preg_match("#^/api/auth/([^/]*)/?#$",$_SERVER["REQUEST_URI"],$mat)) { +if (preg_match("#^/api/auth/([^/\?]*)[/\?]?#",$_SERVER["REQUEST_URI"],$mat)) { if ($_SERVER["REQUEST_METHOD"]=="POST") { $data=array("options" => $_POST, "method" => $mat[1]); @@ -121,7 +186,7 @@ if ($_SERVER["REQUEST_URI"]=="/api/post") { } } -if (preg_match("#^/api/rest/([^/]*)/([^/]*)/?#$",$_SERVER["REQUEST_URI"],$mat)) { +if (preg_match("#^/api/rest/([^/]*)/([^/\?]*)[/\?]?$#",$_SERVER["REQUEST_URI"],$mat)) { if ($_SERVER["REQUEST_METHOD"]=="POST") { $data=array("options" => $_POST, "object" => $mat[1],