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