Пример #1
0
/**
 * Class autoloader
 *
 * Include classes automatically when they are instantiated.
 * @param string
 */
function __autoload($strClassName)
{
    $objCache = FileCache::getInstance('autoload');
    // Try to load the class name from the session cache
    if (!$GLOBALS['TL_CONFIG']['debugMode'] && isset($objCache->{$strClassName})) {
        if (@(include_once TL_ROOT . '/' . $objCache->{$strClassName})) {
            return;
            // The class could be loaded
        } else {
            unset($objCache->{$strClassName});
            // The class has been removed
        }
    }
    $strLibrary = TL_ROOT . '/system/libraries/' . $strClassName . '.php';
    // Check for libraries first
    if (file_exists($strLibrary)) {
        include_once $strLibrary;
        $objCache->{$strClassName} = 'system/libraries/' . $strClassName . '.php';
        return;
    }
    // Then check the modules folder
    foreach (scan(TL_ROOT . '/system/modules/') as $strFolder) {
        if (substr($strFolder, 0, 1) == '.') {
            continue;
        }
        $strModule = TL_ROOT . '/system/modules/' . $strFolder . '/' . $strClassName . '.php';
        if (file_exists($strModule)) {
            include_once $strModule;
            $objCache->{$strClassName} = 'system/modules/' . $strFolder . '/' . $strClassName . '.php';
            return;
        }
    }
    // HOOK: include Swift classes
    if (class_exists('Swift', false)) {
        Swift::autoload($strClassName);
        return;
    }
    // HOOK: include DOMPDF classes
    if (function_exists('DOMPDF_autoload')) {
        DOMPDF_autoload($strClassName);
        return;
    }
    trigger_error(sprintf('Could not load class %s', $strClassName), E_USER_ERROR);
}
Пример #2
0
 /**
  * Update the file cache if a template is deleted
  * @return string
  */
 public function deleteFromTemplateCache($strFile)
 {
     $objCache = FileCache::getInstance('templates');
     $strKey = preg_replace('/^.*\\/([^\\/]+)\\.[a-z0-9]{3,5}$/i', '$1', $strFile);
     unset($objCache->{$strKey});
 }
Пример #3
0
 /**
  * Find a particular template file and return its path
  * @param string
  * @param string
  * @return string
  * @throws Exception
  */
 protected function getTemplate($strTemplate, $strFormat = 'html5', $blnFailIfNotFound = false)
 {
     $strTemplate = basename($strTemplate);
     // Contao 3.X only.
     if (version_compare(VERSION, '3.0', '>=')) {
         // Check for a theme folder
         if (TL_MODE == 'FE') {
             global $objPage;
             $strCustom = str_replace('../', '', $objPage->templateGroup);
             if ($strCustom != '') {
                 return \TemplateLoader::getPath($strTemplate, $strFormat, $strCustom);
             }
         }
         return \TemplateLoader::getPath($strTemplate, $strFormat);
     }
     // Contao 2.X from here on.
     $strKey = $strFilename = $strTemplate . '.' . $strFormat;
     // Check for a theme folder
     if (TL_MODE == 'FE') {
         global $objPage;
         $strTemplateGroup = str_replace(array('../', 'templates/'), '', $objPage->templateGroup);
         if ($strTemplateGroup != '') {
             $strKey = $strTemplateGroup . '/' . $strKey;
         }
     }
     $objCache = FileCache::getInstance('templates');
     // Try to load the template path from the cache
     if (!$GLOBALS['TL_CONFIG']['debugMode'] && isset($objCache->{$strKey})) {
         if (file_exists(TL_ROOT . '/' . $objCache->{$strKey})) {
             return TL_ROOT . '/' . $objCache->{$strKey};
         } else {
             unset($objCache->{$strKey});
         }
     }
     $strPath = TL_ROOT . '/templates';
     // Check the theme folder first
     if (TL_MODE == 'FE' && $strTemplateGroup != '') {
         $strFile = $strPath . '/' . $strTemplateGroup . '/' . $strFilename;
         if (file_exists($strFile)) {
             $objCache->{$strKey} = 'templates/' . $strTemplateGroup . '/' . $strFilename;
             return $strFile;
         }
     }
     // Then check the global templates directory
     $strFile = $strPath . '/' . $strFilename;
     if (file_exists($strFile)) {
         $objCache->{$strKey} = 'templates/' . $strFilename;
         return $strFile;
     }
     // At last browse all module folders in reverse order
     foreach (array_reverse(Config::getInstance()->getActiveModules()) as $strModule) {
         $strFile = TL_ROOT . '/system/modules/' . $strModule . '/templates/' . $strFilename;
         if (file_exists($strFile)) {
             $objCache->{$strKey} = 'system/modules/' . $strModule . '/templates/' . $strFilename;
             return $strFile;
         }
     }
     if ($blnFailIfNotFound) {
         throw new Exception('Could not find template file "' . $strFilename . '"');
     }
 }
Пример #4
0
 /**
  * Return true if a class file exists
  * @param string
  * @param boolean
  */
 protected function classFileExists($strClass, $blnNoCache = false)
 {
     if ($strClass == '') {
         return false;
     }
     // Try to load from cache
     if (!$blnNoCache) {
         // Handle multiple requests for the same class
         if (isset($this->arrCache[$strClass])) {
             return $this->arrCache[$strClass];
         }
         $objCache = FileCache::getInstance('classes');
         // Check the file cache
         if (isset($objCache->{$strClass})) {
             $this->arrCache[$strClass] = $objCache->{$strClass};
             return $objCache->{$strClass};
         } else {
             unset($objCache->{$strClass});
         }
     }
     $this->import('Config');
     // see ticket #152
     $this->arrCache[$strClass] = false;
     // Browse all modules
     foreach ($this->Config->getActiveModules() as $strModule) {
         $strFile = 'system/modules/' . $strModule . '/' . $strClass . '.php';
         if (file_exists(TL_ROOT . '/' . $strFile)) {
             // Also store the result in the autoloader cache, so the
             // function does not have to browse the module folders again
             $objAutoload = FileCache::getInstance('autoload');
             $objAutoload->{$strClass} = $strFile;
             $this->arrCache[$strClass] = true;
             break;
         }
     }
     // Remember the result
     if (!$blnNoCache) {
         $objCache->{$strClass} = $this->arrCache[$strClass];
     }
     return $this->arrCache[$strClass];
 }
        scanTwigCacheDirectories('system/cache/twig');
    }
} else {
    /**
     * Maintenance
     */
    $GLOBALS['TL_MAINTENANCE'][] = 'PurgeTwigCache';
}
if (!file_exists(TL_ROOT . '/system/cache/twig')) {
    mkdir(TL_ROOT . '/system/cache/twig', 0777, true);
}
/**
 * Content elements
 */
$GLOBALS['TL_CTE']['texts']['twig'] = 'ContentTwig';
/**
 * Front end modules
 */
$GLOBALS['FE_MOD']['miscellaneous']['twig'] = 'ModuleTwig';
if (version_compare(VERSION, '3', '<')) {
    spl_autoload_unregister('__autoload');
    require_once TL_ROOT . '/system/modules/twig/classes/vendor/autoload.php';
    spl_autoload_register('__autoload');
    $classes = array('TwigHybrid', 'ContaoTwig', 'TwigModule', 'ModuleTwig', 'ContaoTwigExtension', 'ContaoTwigRefererAccessObject', 'ContaoTwigEnvironmentAccessObject', 'TwigFrontendTemplate', 'TwigBackendModule', 'PurgeTwigCache', 'TwigHelper', 'ContaoTwigGlobalAccessObject', 'TwigTemplate', 'TwigBackendTemplate', 'TwigCustomPagination', 'TwigSimpleHybrid', 'TwigPagination', 'ContentTwig', 'TwigContentElement');
    $cache = FileCache::getInstance('classes');
    foreach ($classes as $class) {
        if (!$cache->{$class}) {
            $cache->{$class} = true;
        }
    }
}
Пример #6
0
	/**
	 * Return true if a class file exists
	 * @param string
	 * @param boolean
	 * @return boolean
	 */
	protected function classFileExists($strClass, $blnNoCache=false)
	{
		if ($strClass == '')
		{
			return false;
		}

		$this->import('Cache');
		$strKey = __METHOD__ . '-' . $strClass;

		// Try to load from cache
		if (!$blnNoCache)
		{
			// Handle multiple requests for the same class
			if (isset($this->Cache->$strKey))
			{
				return $this->Cache->$strKey;
			}

			$objCache = FileCache::getInstance('classes');

			// Check the file cache
			if (!$GLOBALS['TL_CONFIG']['debugMode'] && isset($objCache->$strClass))
			{
				$this->Cache->$strKey = $objCache->$strClass;
				return $objCache->$strClass;
			}
		}

		$this->import('Config'); // see ticket #152
		$this->Cache->$strKey = false;

		// Browse all modules
		foreach ($this->Config->getActiveModules() as $strModule)
		{
			$strFile = 'system/modules/' . $strModule . '/' . $strClass . '.php';

			if (file_exists(TL_ROOT . '/' . $strFile))
			{
				// Also store the result in the autoloader cache, so the
				// function does not have to browse the module folders again
				$objAutoload = FileCache::getInstance('autoload');
				$objAutoload->$strClass = $strFile;

				$this->Cache->$strKey = true;
				break;
			}
		}

		// Remember the result
		if (!$blnNoCache)
		{
			$objCache->$strClass = $this->Cache->$strKey;
		}

		return $this->Cache->$strKey;
	}