Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
   1  <?php
   2  
   3  /*
   4   * This file is part of Mustache.php.
   5   *
   6   * (c) 2010-2017 Justin Hileman
   7   *
   8   * For the full copyright and license information, please view the LICENSE
   9   * file that was distributed with this source code.
  10   */
  11  
  12  /**
  13   * Mustache class autoloader.
  14   */
  15  class Mustache_Autoloader
  16  {
  17      private $baseDir;
  18  
  19      /**
  20       * An array where the key is the baseDir and the key is an instance of this
  21       * class.
  22       *
  23       * @var array
  24       */
  25      private static $instances;
  26  
  27      /**
  28       * Autoloader constructor.
  29       *
  30       * @param string $baseDir Mustache library base directory (default: dirname(__FILE__).'/..')
  31       */
  32      public function __construct($baseDir = null)
  33      {
  34          if ($baseDir === null) {
  35              $baseDir = dirname(__FILE__) . '/..';
  36          }
  37  
  38          // realpath doesn't always work, for example, with stream URIs
  39          $realDir = realpath($baseDir);
  40          if (is_dir($realDir)) {
  41              $this->baseDir = $realDir;
  42          } else {
  43              $this->baseDir = $baseDir;
  44          }
  45      }
  46  
  47      /**
  48       * Register a new instance as an SPL autoloader.
  49       *
  50       * @param string $baseDir Mustache library base directory (default: dirname(__FILE__).'/..')
  51       *
  52       * @return Mustache_Autoloader Registered Autoloader instance
  53       */
  54      public static function register($baseDir = null)
  55      {
  56          $key = $baseDir ? $baseDir : 0;
  57  
  58          if (!isset(self::$instances[$key])) {
  59              self::$instances[$key] = new self($baseDir);
  60          }
  61  
  62          $loader = self::$instances[$key];
  63          spl_autoload_register(array($loader, 'autoload'));
  64  
  65          return $loader;
  66      }
  67  
  68      /**
  69       * Autoload Mustache classes.
  70       *
  71       * @param string $class
  72       */
  73      public function autoload($class)
  74      {
  75          if ($class[0] === '\\') {
  76              $class = substr($class, 1);
  77          }
  78  
  79          if (strpos($class, 'Mustache') !== 0) {
  80              return;
  81          }
  82  
  83          $file = sprintf('%s/%s.php', $this->baseDir, str_replace('_', '/', $class));
  84          if (is_file($file)) {
  85              require $file;
  86          }
  87      }
  88  }