| 
							- <?php
 - 
 - /**
 -  * Load all internal libraries and setup class autoloader
 -  *
 -  * @author Andreas Gohr <andi@splitbrain.org>
 -  */
 - 
 - namespace dokuwiki;
 - 
 - use dokuwiki\Extension\PluginController;
 - 
 - return new class {
 -     /** @var string[] Common libraries that are always loaded */
 -     protected array $commonLibs = [
 -         'defines.php',
 -         'actions.php',
 -         'changelog.php',
 -         'common.php',
 -         'confutils.php',
 -         'pluginutils.php',
 -         'form.php',
 -         'fulltext.php',
 -         'html.php',
 -         'httputils.php',
 -         'indexer.php',
 -         'infoutils.php',
 -         'io.php',
 -         'mail.php',
 -         'media.php',
 -         'pageutils.php',
 -         'parserutils.php',
 -         'search.php',
 -         'template.php',
 -         'toolbar.php',
 -         'utf8.php',
 -         'auth.php',
 -         'compatibility.php',
 -         'deprecated.php',
 -         'legacy.php',
 -     ];
 - 
 -     /** @var string[] Classname to file mappings */
 -     protected array $fixedClassNames = [
 -         'Diff' => 'DifferenceEngine.php',
 -         'UnifiedDiffFormatter' => 'DifferenceEngine.php',
 -         'TableDiffFormatter' => 'DifferenceEngine.php',
 -         'cache' => 'cache.php',
 -         'cache_parser' => 'cache.php',
 -         'cache_instructions' => 'cache.php',
 -         'cache_renderer' => 'cache.php',
 -         'Input' => 'Input.class.php',
 -         'JpegMeta' => 'JpegMeta.php',
 -         'SimplePie' => 'SimplePie.php',
 -         'FeedParser' => 'FeedParser.php',
 -         'SafeFN' => 'SafeFN.class.php',
 -         'Mailer' => 'Mailer.class.php',
 -         'Doku_Handler' => 'parser/handler.php',
 -         'Doku_Renderer' => 'parser/renderer.php',
 -         'Doku_Renderer_xhtml' => 'parser/xhtml.php',
 -         'Doku_Renderer_code' => 'parser/code.php',
 -         'Doku_Renderer_xhtmlsummary' => 'parser/xhtmlsummary.php',
 -         'Doku_Renderer_metadata' => 'parser/metadata.php'
 -     ];
 - 
 -     /**
 -      * Load common libs and register autoloader
 -      */
 -     public function __construct()
 -     {
 -         require_once(DOKU_INC . 'vendor/autoload.php');
 -         spl_autoload_register([$this, 'autoload']);
 -         $this->loadCommonLibs();
 -     }
 - 
 -     /**
 -      * require all the common libraries
 -      *
 -      * @return true
 -      */
 -     public function loadCommonLibs()
 -     {
 -         foreach ($this->commonLibs as $lib) {
 -             require_once(DOKU_INC . 'inc/' . $lib);
 -         }
 -         return true;
 -     }
 - 
 -     /**
 -      * spl_autoload_register callback
 -      *
 -      * @param string $className
 -      * @return bool
 -      */
 -     public function autoload($className)
 -     {
 -         // namespace to directory conversion
 -         $classPath = str_replace('\\', '/', $className);
 - 
 -         return $this->autoloadFixedClass($className)
 -             || $this->autoloadTestMockClass($classPath)
 -             || $this->autoloadTestClass($classPath)
 -             || $this->autoloadPluginClass($classPath)
 -             || $this->autoloadTemplateClass($classPath)
 -             || $this->autoloadCoreClass($classPath)
 -             || $this->autoloadNamedPluginClass($className);
 -     }
 - 
 -     /**
 -      * Check if the class is one of the fixed names
 -      *
 -      * @param string $className
 -      * @return bool true if the class was loaded, false otherwise
 -      */
 -     protected function autoloadFixedClass($className)
 -     {
 -         if (isset($this->fixedClassNames[$className])) {
 -             require($this->fixedClassNames[$className]);
 -             return true;
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      * Check if the class is a test mock class
 -      *
 -      * @param string $classPath The class name using forward slashes as namespace separators
 -      * @return bool true if the class was loaded, false otherwise
 -      */
 -     protected function autoloadTestMockClass($classPath)
 -     {
 -         if ($this->prefixStrip($classPath, 'dokuwiki/test/mock/')) {
 -             $file = DOKU_INC . '_test/mock/' . $classPath . '.php';
 -             if (file_exists($file)) {
 -                 require $file;
 -                 return true;
 -             }
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      * Check if the class is a test mock class
 -      *
 -      * @param string $classPath The class name using forward slashes as namespace separators
 -      * @return bool true if the class was loaded, false otherwise
 -      */
 -     protected function autoloadTestClass($classPath)
 -     {
 -         if ($this->prefixStrip($classPath, 'dokuwiki/test/')) {
 -             $file = DOKU_INC . '_test/tests/' . $classPath . '.php';
 -             if (file_exists($file)) {
 -                 require $file;
 -                 return true;
 -             }
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      * Check if the class is a namespaced plugin class
 -      *
 -      * @param string $classPath The class name using forward slashes as namespace separators
 -      * @return bool true if the class was loaded, false otherwise
 -      */
 -     protected function autoloadPluginClass($classPath)
 -     {
 -         global $plugin_controller;
 - 
 -         if ($this->prefixStrip($classPath, 'dokuwiki/plugin/')) {
 -             $classPath = str_replace('/test/', '/_test/', $classPath); // no underscore in test namespace
 -             $file = DOKU_PLUGIN . $classPath . '.php';
 -             if (file_exists($file)) {
 -                 $plugin = substr($classPath, 0, strpos($classPath, '/'));
 -                 // don't load disabled plugin classes (only if plugin controller is available)
 -                 if (!defined('DOKU_UNITTEST') && $plugin_controller && plugin_isdisabled($plugin)) return false;
 - 
 -                 try {
 -                     require $file;
 -                 } catch (\Throwable $e) {
 -                     ErrorHandler::showExceptionMsg($e, "Error loading plugin $plugin");
 -                 }
 -                 return true;
 -             }
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      * Check if the class is a namespaced template class
 -      *
 -      * @param string $classPath The class name using forward slashes as namespace separators
 -      * @return bool true if the class was loaded, false otherwise
 -      */
 -     protected function autoloadTemplateClass($classPath)
 -     {
 -         // template namespace
 -         if ($this->prefixStrip($classPath, 'dokuwiki/template/')) {
 -             $classPath = str_replace('/test/', '/_test/', $classPath); // no underscore in test namespace
 -             $file = DOKU_INC . 'lib/tpl/' . $classPath . '.php';
 -             if (file_exists($file)) {
 -                 $template = substr($classPath, 0, strpos($classPath, '/'));
 - 
 -                 try {
 -                     require $file;
 -                 } catch (\Throwable $e) {
 -                     ErrorHandler::showExceptionMsg($e, "Error loading template $template");
 -                 }
 -                 return true;
 -             }
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      * Check if the class is a namespaced DokuWiki core class
 -      *
 -      * @param string $classPath The class name using forward slashes as namespace separators
 -      * @return bool true if the class was loaded, false otherwise
 -      */
 -     protected function autoloadCoreClass($classPath)
 -     {
 -         if ($this->prefixStrip($classPath, 'dokuwiki/')) {
 -             $file = DOKU_INC . 'inc/' . $classPath . '.php';
 -             if (file_exists($file)) {
 -                 require $file;
 -                 return true;
 -             }
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      * Check if the class is a un-namespaced plugin class following our naming scheme
 -      *
 -      * @param string $className
 -      * @return bool true if the class was loaded, false otherwise
 -      */
 -     protected function autoloadNamedPluginClass($className)
 -     {
 -         global $plugin_controller;
 - 
 -         if (
 -             preg_match(
 -                 '/^(' . implode('|', PluginController::PLUGIN_TYPES) . ')_plugin_(' .
 -                 DOKU_PLUGIN_NAME_REGEX .
 -                 ')(?:_([^_]+))?$/',
 -                 $className,
 -                 $m
 -             )
 -         ) {
 -             $c = ((count($m) === 4) ? "/{$m[3]}" : '');
 -             $plg = DOKU_PLUGIN . "{$m[2]}/{$m[1]}$c.php";
 -             if (file_exists($plg)) {
 -                 // don't load disabled plugin classes (only if plugin controller is available)
 -                 if (!defined('DOKU_UNITTEST') && $plugin_controller && plugin_isdisabled($m[2])) return false;
 -                 try {
 -                     require $plg;
 -                 } catch (\Throwable $e) {
 -                     ErrorHandler::showExceptionMsg($e, "Error loading plugin {$m[2]}");
 -                 }
 -             }
 -             return true;
 -         }
 -         return false;
 -     }
 - 
 -     /**
 -      * Check if the given string starts with the given prefix and strip it
 -      *
 -      * @param string $string
 -      * @param string $prefix
 -      * @return bool true if the prefix was found and stripped, false otherwise
 -      */
 -     protected function prefixStrip(&$string, $prefix)
 -     {
 -         if (str_starts_with($string, $prefix)) {
 -             $string = substr($string, strlen($prefix));
 -             return true;
 -         }
 -         return false;
 -     }
 - };
 
 
  |