/**
  * Find the file for a class that in PSR-0 or PEAR would be in
  * $psr_0_root . '/' . $path_fragment . $path_suffix
  *
  * @param InjectedApiInterface $api
  * @param string $logical_base_path
  * @param string $relative_path
  *
  * @return bool|null
  *   TRUE, if the file was found.
  *   FALSE or NULL, otherwise.
  */
 function findFile($api, $logical_base_path, $relative_path) {
   // Prevent recursion if this is called from libraries_info().
   foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $call) {
     if ('libraries_info' === $call['function']) {
       return FALSE;
     }
   }
   $this->finder->getNamespaceMap()->unregisterDeepPath('', '');
   $this->finder->getPrefixMap()->unregisterDeepPath('', '');
   $this->registerAllLibraries();
   return $this->finder->apiFindFile($api, $api->getClass());
 }
 /**
  * @param DrupalSystemInterface $system
  * @param ExtendedClassFinderInterface $finder
  */
 function __construct(DrupalSystemInterface $system, ExtendedClassFinderInterface $finder)
 {
     $this->system = $system;
     $this->finder = $finder;
     $this->namespaceMap = $finder->getNamespaceMap();
     $this->prefixMap = $finder->getPrefixMap();
     foreach (array('module', 'theme') as $extension_type) {
         $this->namespaceBehaviors[$extension_type] = new DrupalExtensionNamespaceFinderPlugin($extension_type, $this->namespaceMap, $this->prefixMap, $this->system);
         $this->prefixBehaviors[$extension_type] = new DrupalExtensionUnderscoreFinderPlugin($extension_type, $this->namespaceMap, $this->prefixMap, $this->system);
     }
     $this->defaultBehavior = new DefaultDirectoryBehavior();
 }
 /**
  * Register lazy plugins for enabled Drupal modules and themes, assuming that
  * we don't know yet whether they use PSR-0, PEAR-Flat, or none of these.
  *
  * @param string[] $extensions
  *   An array where the keys are extension names, and the values are extension
  *   types like 'module' or 'theme'.
  */
 private function _registerLazyExtensionPlugins(array $extensions)
 {
     $namespaceBehaviors = array();
     $prefixBehaviors = array();
     foreach (array('module', 'theme') as $extension_type) {
         $namespaceBehaviors[$extension_type] = new DrupalExtensionNamespaceFinderPlugin($extension_type, $this->finder->getNamespaceMap(), $this->finder->getPrefixMap(), $this->system);
         $prefixBehaviors[$extension_type] = new DrupalExtensionUnderscoreFinderPlugin($extension_type, $this->finder->getNamespaceMap(), $this->finder->getPrefixMap(), $this->system);
     }
     $prefix_map = array();
     $namespace_map = array();
     foreach ($extensions as $name => $type) {
         if (empty($namespaceBehaviors[$type])) {
             // Unsupported extension type, e.g. "theme_engine".
             // This can happen if a site was upgraded from Drupal 6.
             // See https://drupal.org/comment/8503979#comment-8503979
             continue;
         }
         if (!empty($this->registered[$name])) {
             // The extension has already been processed.
             continue;
         }
         $namespace_map['Drupal/' . $name . '/'][$name] = $namespaceBehaviors[$type];
         $prefix_map[str_replace('_', '/', $name) . '/'][$name] = $prefixBehaviors[$type];
         $this->registered[$name] = TRUE;
     }
     $this->finder->getNamespaceMap()->registerDeepPaths($namespace_map);
     $this->finder->getPrefixMap()->registerDeepPaths($prefix_map);
 }
 /**
  * Wake up after a cache fail.
  *
  * @param ExtendedClassFinderInterface $finder
  *   The class finder object, with any cache decorator peeled off.
  * @param string[] $extensions
  *   Currently enabled extensions. Extension type by extension name.
  */
 public function wakeUp(ExtendedClassFinderInterface $finder, array $extensions)
 {
     $plugin = new DrupalCoreRegistryPlugin(DRUPAL_ROOT . '/');
     $finder->getNamespaceMap()->registerDeepPath('', 'registry', $plugin);
     $finder->getPrefixMap()->registerDeepPath('', 'registry', $plugin);
 }
 /**
  * {@inheritdoc}
  */
 function addClassMap(array $classMap)
 {
     $this->finder->registerClasses($classMap);
 }
 /**
  * {@inheritdoc}
  */
 function apiFindFile($api, $class)
 {
     $this->initFinder();
     return $this->finder->apiFindFile($api, $class);
 }
Example #7
0
 /**
  * Legacy: Plugins were called "Handler" before.
  *
  * @deprecated
  *
  * @param string $namespace
  * @param xautoload_FinderPlugin_Interface $plugin
  *
  * @return string
  *   The key under which the plugin was registered. This can later be used to
  *   unregister the plugin again.
  */
 function namespaceHandler($namespace, $plugin)
 {
     $key = Util::randomString();
     $this->finder->registerNamespaceDeep($namespace, $key, $plugin);
     return $key;
 }
 /**
  * Registers all libraries that have an "xautoload" setting.
  */
 private function registerLibrariesFinderPlugin()
 {
     $plugin = new LibrariesFinderPlugin($this->finder, $this->system);
     $this->finder->getPrefixMap()->registerDeepPath('', '', $plugin);
     $this->finder->getNamespaceMap()->registerDeepPath('', '', $plugin);
 }