Upgrade phpCAS
[piwik-CASLogin.git] / CAS / CAS / Autoload.php
1 <?php
2
3 /**
4  * Autoloader Class
5  *
6  *  PHP Version 5
7  *
8  * @file      CAS/Autoload.php
9  * @category  Authentication
10  * @package   SimpleCAS
11  * @author    Brett Bieber <brett.bieber@gmail.com>
12  * @copyright 2008 Regents of the University of Nebraska
13  * @license   http://www1.unl.edu/wdn/wiki/Software_License BSD License
14  * @link      http://code.google.com/p/simplecas/
15  **/
16
17 /**
18  * Autoload a class
19  *
20  * @param string $class Classname to load
21  *
22  * @return bool
23  */
24 function CAS_autoload($class)
25 {
26     // Static to hold the Include Path to CAS
27     static $include_path;
28     // Setup the include path if it's not already set from a previous call
29     if (!$include_path) {
30         $include_path = dirname(dirname(__FILE__));
31     }
32     if (substr($class, 0, 4) !== 'CAS_') {
33         return false;
34     }
35     // Declare local variable to store the expected full path to the file
36     $file_path = $include_path . '/' . str_replace('_', '/', $class) . '.php';
37
38     $fp = @fopen($file_path, 'r', true);
39     if ($fp) {
40         fclose($fp);
41         include $file_path;
42         if (!class_exists($class, false) && !interface_exists($class, false)) {
43             die(
44                 new Exception(
45                     'Class ' . $class . ' was not present in ' .
46                     $file_path .
47                     ' [CAS_autoload]'
48                 )
49             );
50         }
51         return true;
52     }
53     $e = new Exception(
54         'Class ' . $class . ' could not be loaded from ' .
55         $file_path . ', file does not exist (Path="'
56         . $include_path .'") [CAS_autoload]'
57     );
58     $trace = $e->getTrace();
59     if (isset($trace[2]) && isset($trace[2]['function'])
60         && in_array($trace[2]['function'], array('class_exists', 'interface_exists'))
61     ) {
62         return false;
63     }
64     if (isset($trace[1]) && isset($trace[1]['function'])
65         && in_array($trace[1]['function'], array('class_exists', 'interface_exists'))
66     ) {
67         return false;
68     }
69     die ((string) $e);
70 }
71
72 // set up __autoload
73 if (function_exists('spl_autoload_register')) {
74     if (!(spl_autoload_functions()) || !in_array('CAS_autoload', spl_autoload_functions())) {
75         spl_autoload_register('CAS_autoload');
76         if (function_exists('__autoload') && !in_array('__autoload', spl_autoload_functions())) {
77             // __autoload() was being used, but now would be ignored, add
78             // it to the autoload stack
79             spl_autoload_register('__autoload');
80         }
81     }
82 } elseif (!function_exists('__autoload')) {
83
84     /**
85      * Autoload a class
86      *
87      * @param string $class Class name
88      *
89      * @return bool
90      */
91     function __autoload($class)
92     {
93         return CAS_autoload($class);
94     }
95 }
96
97 ?>