123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?php
- /**
- * Elgg autoloader
- * Facilities for class/interface/trait autoloading.
- *
- * @package Elgg.Core
- * @subpackage Autoloader
- */
- /**
- * @return \Elgg\Di\ServiceProvider
- * @access private
- */
- function _elgg_services() {
- static $provider;
- if (null === $provider) {
- $provider = _elgg_create_service_provider();
- }
- return $provider;
- }
- /**
- * Sets up autoloading and creates the service provider (DIC)
- *
- * Setup global class map and loader instances and add the core classes to the map.
- * We can't load this from dataroot because we don't know it yet, and we'll need
- * several classes before we can find out!
- *
- * @throws RuntimeException
- * @access private
- */
- function _elgg_create_service_provider() {
- $loader = new \Elgg\ClassLoader(new \Elgg\ClassMap());
- // until the cache can be loaded, just setup PSR-0 autoloading
- // out of the classes directory. No need to build a full map.
- $loader->register();
- $manager = new \Elgg\AutoloadManager($loader);
- return new \Elgg\Di\ServiceProvider($manager);
- }
- /**
- * Load cached data into the autoload system
- *
- * Note this has to wait until Elgg's data path is known.
- *
- * @access private
- */
- function _elgg_load_autoload_cache() {
- $manager = _elgg_services()->autoloadManager;
- $manager->setStorage(elgg_get_system_cache());
- if (! $manager->loadCache()) {
- $manager->addClasses(dirname(dirname(__FILE__)) . '/classes');
- }
- }
- /**
- * Save the autoload system cache
- *
- * @access private
- */
- function _elgg_save_autoload_cache() {
- _elgg_services()->autoloadManager->saveCache();
- }
- /**
- * Delete the autoload system cache
- *
- * @access private
- */
- function _elgg_delete_autoload_cache() {
- _elgg_services()->autoloadManager->deleteCache();
- }
- /**
- * Get Elgg's class loader
- *
- * @return \Elgg\ClassLoader
- */
- function elgg_get_class_loader() {
- return _elgg_services()->autoloadManager->getLoader();
- }
- /**
- * Register a directory tree for autoloading classes/interfaces/traits.
- *
- * For BC with 1.8, all .php files in the top-level directory are scanned
- * and added to the class map (only on the first request), then lower-level
- * directories are registered for standard PSR-0 autoloading.
- *
- * @param string $dir The dir to look in
- *
- * @return void
- * @since 1.8.0
- */
- function elgg_register_classes($dir) {
- _elgg_services()->autoloadManager->addClasses($dir);
- }
- /**
- * Register a classname to a file.
- *
- * @param string $class The name of the class
- * @param string $location The location of the file
- *
- * @return bool true
- * @since 1.8.0
- */
- function elgg_register_class($class, $location) {
- _elgg_services()->autoloadManager->setClassPath($class, $location);
- return true;
- }
- return function(\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) {
- $events->registerHandler('shutdown', 'system', '_elgg_save_autoload_cache', 1000);
- $events->registerHandler('upgrade', 'all', '_elgg_delete_autoload_cache');
- };
|