/** * Visitor method that adds a initialized class loader to the passed application. * * @param \TechDivision\Application\Interfaces\ApplicationInterface $application The application instance * @param \TechDivision\ApplicationServer\Api\Node\ClassLoaderNodeInterface $configuration The class loader configuration node * * @return void */ public static function visit(ApplicationInterface $application, ClassLoaderNodeInterface $configuration = null) { // load the web application path we want to register the class loader for $webappPath = $application->getWebappPath(); // initialize the class path and the enforcement directories $classPath = array(); $enforcementDirs = array(); // add the possible class path if folder is available foreach ($configuration->getDirectories() as $directory) { if (is_dir($webappPath . $directory->getNodeValue())) { array_push($classPath, $webappPath . $directory->getNodeValue()); if ($directory->isEnforced()) { array_push($enforcementDirs, $webappPath . $directory->getNodeValue()); } } } // initialize the arrays of different omit possibilities $omittedEnforcement = array(); $omittedAutoLoading = array(); // iterate over all namespaces and check if they are omitted in one or the other way foreach ($configuration->getNamespaces() as $namespace) { // is the enforcement omitted for this namespace? if ($namespace->omitEnforcement()) { $omittedEnforcement[] = $namespace->getNodeValue()->__toString(); } // is the autoloading omitted for this namespace? if ($namespace->omitAutoLoading()) { $omittedAutoLoading[] = $namespace->getNodeValue()->__toString(); } } // initialize the class loader configuration $config = new Config(); // set the environment mode we want to use $config->setValue('environment', $configuration->getEnvironment()); // set the cache directory $config->setValue('cache/dir', $application->getCacheDir()); // set the default autoloader values $config->setValue('autoloader/dirs', $classPath); // collect the omitted namespaces (if any) $config->setValue('autoloader/omit', $omittedAutoLoading); $config->setValue('enforcement/omit', $omittedEnforcement); // set the default enforcement configuration values $config->setValue('enforcement/dirs', $enforcementDirs); $config->setValue('enforcement/enforce-default-type-safety', $configuration->getTypeSafety()); $config->setValue('enforcement/processing', $configuration->getProcessing()); $config->setValue('enforcement/level', $configuration->getEnforcementLevel()); $config->setValue('enforcement/logger', $application->getInitialContext()->getSystemLogger()); // create the autoloader instance and fill the structure map $autoLoader = new self($config); // add the class loader instance to the application $application->addClassLoader($autoLoader); }
/** * Clean up the the directories for the webapp, e. g. to delete cached stuff * that has to be recreated after a restart. * * @param \TechDivision\Application\Interfaces\ApplicationInterface $application The application to clean up the directories for * * @return void */ public function cleanUpFolders($application) { // create the directory we want to store the sessions in $cleanUpFolders = array(new \SplFileInfo($application->getCacheDir())); // create the applications temporary directories foreach ($cleanUpFolders as $cleanUpFolder) { $this->cleanUpDir($cleanUpFolder); } }