_registered = FALSE; } /** * Registers this instance as an autoloader. * * @param Boolean $prepend Whether to prepend the autoloader or not * * @api */ function register($prepend = FALSE) { if ($this->_registered) { return; } // we do this to prevent a autoloader errors with joomla / 3rd party packages // use absolute path since we dont know the content of include_path as yet // CRM-11304 // since HTML Purifier could potentially be loaded / used by other modules / components // lets check it its already loaded // we also check if the bootstrap file exists since during install of a drupal distro profile // the files might not exists, in which case we skip loading the file // if you change the below, please test on Joomla and also PCP pages $includeHTMLPurifier = TRUE; $htmlPurifierPath = dirname(__FILE__) . '/../../packages/IDS/vendors/htmlpurifier/HTMLPurifier/Bootstrap.php'; if ( class_exists('HTMLPurifier_Bootstrap') || !file_exists($htmlPurifierPath) ) { $includeHTMLPurifier = FALSE; } else { require_once $htmlPurifierPath; } if (version_compare(PHP_VERSION, '5.3.0') >= 0) { spl_autoload_register(array($this, 'loadClass'), TRUE, $prepend); if ($includeHTMLPurifier) { spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload'), TRUE, $prepend); } } else { // http://www.php.net/manual/de/function.spl-autoload-register.php#107362 // "when specifying the third parameter (prepend), the function will fail badly in PHP 5.2" spl_autoload_register(array($this, 'loadClass'), TRUE); if ($includeHTMLPurifier) { spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload'), TRUE); } } $this->_registered = TRUE; } function loadClass($class) { if ( // Only load classes that clearly belong to CiviCRM. 0 === strncmp($class, 'CRM_', 4) && // Do not load PHP 5.3 namespaced classes. // (in a future version, maybe) FALSE === strpos($class, '\\') ) { $file = strtr($class, '_', '/') . '.php'; // There is some question about the best way to do this. // "require_once" is nice because it's simple and throws // intelligible errors. The down side is that autoloaders // down the chain cannot try to find the file if we fail. require_once ($file); } } }