You are here

function _xautoload_register_drupal in X Autoload 7.5

Same name and namespace in other branches
  1. 7.3 xautoload.module \_xautoload_register_drupal()
  2. 7.4 xautoload.module \_xautoload_register_drupal()

Registers Drupal-related namespaces and prefixes in the xautoload loader, and activates the APC (or similar) cache, if enabled.

1 call to _xautoload_register_drupal()
xautoload.module in ./xautoload.module

File

./xautoload.module, line 128

Code

function _xautoload_register_drupal() {

  // Check that this runs only once.
  static $_first_run = TRUE;
  if (!$_first_run) {
    return;
  }
  $_first_run = FALSE;

  // Register the class loader itself.
  require_once __DIR__ . '/xautoload.early.lib.inc';
  _xautoload_register();
  $services = xautoload()
    ->getServiceContainer();
  if ($services->system
    ->variableGet(XAUTOLOAD_VARNAME_REPLACE_CORE)) {

    /**
     * Completely take over.
     *
     * @see _drupal_bootstrap_database()
     * @see drupal_autoload_class()
     * @see drupal_autoload_interface()
     */
    spl_autoload_unregister('drupal_autoload_class');
    spl_autoload_unregister('drupal_autoload_interface');
  }
  $lazy = $services->system
    ->variableGet(XAUTOLOAD_VARNAME_CACHE_LAZY, FALSE);
  $decorated = $lazy ? $services->proxyFinder : $services->proxyFinder
    ->getFinder();

  // Activate a cache, if available and enabled.
  $cache_types = $services->system
    ->variableGet(XAUTOLOAD_VARNAME_CACHE_TYPES, array());
  if (!empty($cache_types['apcu_q']) && extension_loaded('apcu') && function_exists('apcu_store')) {
    $cached_loader = ApcuQueuedCachedClassLoader::create($decorated, $services->cacheManager);
  }
  elseif (!empty($cache_types['apc']) && extension_loaded('apc') && function_exists('apc_store')) {
    $cached_loader = ApcClassLoader::create($decorated, $services->cacheManager);
  }
  elseif (!empty($cache_types['apcu']) && extension_loaded('apcu') && function_exists('apcu_store')) {
    $cached_loader = ApcuClassLoader::create($decorated, $services->cacheManager);
  }
  elseif (!empty($cache_types['wincache']) && extension_loaded('wincache') && function_exists('wincache_ucache_get')) {
    $cached_loader = WinCacheClassLoader::create($decorated, $services->cacheManager);
  }
  elseif (!empty($cache_types['xcache']) && extension_loaded('Xcache') && function_exists('xcache_get')) {
    $cached_loader = XCacheClassLoader::create($decorated, $services->cacheManager);
  }
  elseif (!empty($cache_types['dbcache'])) {
    $cached_loader = DbCacheClassLoader::create($decorated, $services->cacheManager);
  }
  if (isset($cached_loader)) {
    if ($lazy) {
      $decorated
        ->observeFirstCacheMiss(new CacheMissLoaderSetFinder($cached_loader));
    }
    $cached_loader
      ->register();
    $services->finder
      ->unregister();
  }
  else {

    // No cache is active.
    // Initialize the finder, to fire scheduled operations.
    $services->proxyFinder
      ->getFinder();
  }

  // Register prefixes and namespaces for enabled extensions.
  $services->proxyFinder
    ->observeFirstCacheMiss($services->phaseControl);
}