forked from habari/system
-
Notifications
You must be signed in to change notification settings - Fork 0
/
autoload.php
71 lines (63 loc) · 2.37 KB
/
autoload.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
/**
* Attempt to load the class before PHP fails with an error.
* This method is called automatically in case you are trying to use a class which hasn't been defined yet.
*
* We look for the undefined class in the following folders:
* - /system/classes/*.php
* - /system/handlers/*.php
* - /user/classes/*.php
* - /user/handlers/*.php
* - /user/sites/x.y.z/classes/*.php
* - /user/sites/x.y.z/handlers/*.php
*
* @param string $class_name Class called by the user
*/
function habari_autoload( $class_name )
{
static $files = null;
$success = false;
$class_file = strtolower( $class_name ) . '.php';
if ( empty( $files ) ) {
$files = array();
$dirs = array(
HABARI_PATH . '/system/classes',
HABARI_PATH . '/system/handlers',
HABARI_PATH . '/user/classes',
HABARI_PATH . '/user/handlers',
);
// For each directory, save the available files in the $files array.
foreach ( $dirs as $dir ) {
$glob = glob( $dir . '/*.php' );
if ( $glob === false || empty( $glob ) ) continue;
$fnames = array_map( create_function( '$a', 'return strtolower(basename($a));' ), $glob );
$files = array_merge( $files, array_combine( $fnames, $glob ) );
}
// Load the Site class, a requirement to get files from a multisite directory.
if ( isset( $files['site.php'] ) ) {
require( $files['site.php'] );
}
// Verify if this Habari instance is a multisite.
if ( ( $site_user_dir = Site::get_dir( 'user' ) ) != HABARI_PATH . '/user' ) {
// We are dealing with a site defined in /user/sites/x.y.z
// Add the available files in that directory in the $files array.
$glob_classes = glob( $site_user_dir . '/classes/*.php' );
$glob_handlers = glob( $site_user_dir . '/handlers/*.php' );
$glob = array_merge( $glob_classes, $glob_handlers );
if ( $glob !== false && !empty( $glob ) ) {
$fnames = array_map( create_function( '$a', 'return strtolower(basename($a));' ), $glob );
$files = array_merge( $files, array_combine( $fnames, $glob ) );
}
}
}
// Search in the available files for the undefined class file.
if ( isset( $files[$class_file] ) ) {
require( $files[$class_file] );
// If the class has a static method named __static(), execute it now, on initial load.
if ( class_exists( $class_name, false ) && method_exists( $class_name, '__static' ) ) {
call_user_func( array( $class_name, '__static' ) );
}
$success = true;
}
}
?>