Add priorities and debug information.

This commit is contained in:
FusionPBX
2021-08-11 17:10:18 -06:00
committed by GitHub
parent 164467aea9
commit 5f801d9501

View File

@@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
Portions created by the Initial Developer are Copyright (C) 2008-2021
the Initial Developer. All Rights Reserved.
Contributor(s):
@@ -49,19 +49,70 @@
spl_autoload_register(array($this, 'loader'));
}
private function loader($class_name) {
//use glob to get classes (note: GLOB_BRACE doesn't work on some systems)
$results_1 = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/resources/classes/".$class_name.".php");
$results_2 = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/resources/classes/".$class_name.".php");
$results = array_merge((array)$results_1,(array)$results_2);
unset($results_1, $results_2);
//set the default value
$class_found = false;
//include the class
foreach ($results as &$class_file) {
if (!class_exists($class_name)) {
include $class_file;
}
//sanitize the class name
$class_name = preg_replace('[^a-zA-Z0-9_]', '', $class_name);
//save the log to the syslog server
if ($_REQUEST['debug'] == 'true') {
openlog("XML CDR", LOG_PID | LOG_PERROR, LOG_LOCAL0);
}
//find the most relevant class name
if (!$class_found && file_exists($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/resources/classes/".$class_name.".php")) {
//first priority
$path = $_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/resources/classes/".$class_name.".php";
$class_found = true;
if ($_REQUEST['debug'] == 'true') {
syslog(LOG_WARNING, "[php][autoloader] name: ".$class_name.", path: ".$path.", line: ".__line__);
}
include $path;
}
elseif (!$class_found && file_exists($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/core/".$class_name."/resources/classes/".$class_name.".php")) {
//second priority
$path = $_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/core/".$class_name."/resources/classes/".$class_name.".php";
$class_found = true;
if ($_REQUEST['debug'] == 'true') {
syslog(LOG_WARNING, "[php][autoloader] name: ".$class_name.", path: ".$path.", line: ".__line__);
}
include $path;
}
elseif (!$class_found && file_exists($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/app/".$class_name."/resources/classes/".$class_name.".php")) {
//third priority
$path = $_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/app/".$class_name."/resources/classes/".$class_name.".php";
$class_found = true;
if ($_REQUEST['debug'] == 'true') {
syslog(LOG_WARNING, "[php][autoloader] name: ".$class_name.", path: ".$path.", line: ".__line__);
}
include $path;
}
//use glob for a more exensive search for the classes (note: GLOB_BRACE doesn't work on some systems)
if (!$class_found && !class_exists($class_name)) {
//fourth priority
$results_1 = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/resources/classes/".$class_name.".php");
$results_2 = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/resources/classes/".$class_name.".php");
$results = array_merge((array)$results_1,(array)$results_2);
unset($results_1, $results_2);
foreach ($results as &$class_file) {
if (!$class_found) {
$class_found = true;
if ($_REQUEST['debug'] == 'true') {
syslog(LOG_WARNING, "[php][autoloader] name: ".$class_name.", path: ".$class_file.", line: ".__line__);
}
include $class_file;
break;
}
}
unset($results);
}
//save the log to the syslog server
if ($_REQUEST['debug'] == 'true') {
closelog();
}
unset($results);
}
}
}