<?php /* Do Away With This If I Dont Need It */ global $LOADER_FILE_DIR; $LOADER_FILE_DIR = dirname ( __FILE__ ); class Sphere_Loader { protected static $includeCache = array (); protected static $includePathCache = array (); /** * Static function to resolve the qualified php filename to absolute path * * @global <String> $LOADER_FILE_DIR * @param <String> $qualifiedName * @return <String> Absolute File Name */ static function resolveNameToPath($qualifiedName, $fileExtension = 'php') { global $LOADER_FILE_DIR; $allowedExtensions = array ( 'php', 'js', 'css', 'less' ); $file = ''; if (! in_array ( $fileExtension, $allowedExtensions )) { return ''; } // TO handle loading vtiger files if (strpos ( $qualifiedName, '~~' ) === 0) { $file = str_replace ( '~~', '', $qualifiedName ); $file = $LOADER_FILE_DIR . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . $file; } else if (strpos ( $qualifiedName, '~' ) === 0) { $file = str_replace ( '~', '', $qualifiedName ); //$file = $LOADER_FILE_DIR . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . $file; $file = "." . $file; } else { $file = str_replace ( '.', DIRECTORY_SEPARATOR, $qualifiedName ) . '.' . $fileExtension; //$file = $LOADER_FILE_DIR . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . $file; } return $file; } /** * Function to include a given php file through qualified file name * * @param <String> $qualifiedName * @param <Boolean> $supressWarning * @return <Boolean> */ static function includeOnce($qualifiedName, $supressWarning = false) { if (isset ( self::$includeCache [$qualifiedName] )) { return true; } $file = self::resolveNameToPath ( $qualifiedName ); if (! file_exists ( $file )) { return false; } // Check file inclusion before including it // check the file access is made within web root directory and whether it is not from unsafe directories //checkFileAccessForInclusion ( $file ); $status = - 1; if ($supressWarning) { $status = @include_once $file; } else { $status = include_once $file; } $success = ($status === 0) ? false : true; if ($success) { self::$includeCache [$qualifiedName] = $file; } return $success; } static function includePath($qualifiedName) { // Already included? if (isset ( self::$includePathCache [$qualifiedName] )) { return true; } $path = realpath ( self::resolveNameToPath ( $qualifiedName ) ); self::$includePathCache [$qualifiedName] = $path; // TODO Check if resolvedPath is already part of include path. set_include_path ( $path . PATH_SEPARATOR . get_include_path () ); return true; } /** * Function to get the class name of a given Component, of given Type, for a given Module * * @param <String> $componentType * @param <String> $componentName * @param <String> $moduleName * @return <String> Required Class Name * @throws AppException */ public static function getComponentClassName($componentType, $componentName, $moduleName = 'Sphere') { print "[" . $componentType . "-" . $componentName . "-" . $moduleName . "]<br />\n"; // Change component type from view to views, action to actions to navigate to the right path. $componentTypeDirectory = strtolower ( $componentType ) . 's'; // Fall Back Directory & Fall Back Class $fallBackModuleDir = $fallBackModuleClassPath = 'Sphere'; // Intermediate Fall Back Directories & Classes, before relying on final fall back $firstFallBackModuleDir = $firstFallBackModuleClassPath = ''; $secondFallBackDir = $secondFallBackClassPath = ''; // Default module directory & class name $moduleDir = $moduleClassPath = $moduleName; // Change the Module directory & class, along with intermediate fall back directory and class, if module names has submodule as well if (strpos ( $moduleName, ':' ) > 0) { $moduleHierarchyParts = explode ( ':', $moduleName ); $moduleDir = str_replace ( ':', '.', $moduleName ); $moduleClassPath = str_replace ( ':', '_', $moduleName ); $actualModule = $moduleHierarchyParts [count ( $moduleHierarchyParts ) - 1]; $secondFallBackModuleDir = $secondFallBackModuleClassPath = $actualModule; print "[" . $actualModule . "]<br />\n"; if ($actualModule != 'Users') { $baseModule = $moduleHierarchyParts [0]; if ($baseModule == 'Settings') $baseModule = 'Settings:Sphere'; $firstFallBackDir = str_replace ( ':', '.', $baseModule ); $firstFallBackClassPath = str_replace ( ':', '_', $baseModule ); } } // Build module specific file path and class name print "[" . 'modules.' . $moduleDir . '.' . $componentTypeDirectory . '.' . $componentName . "]<br />\n"; $moduleSpecificComponentFilePath = Sphere_Loader::resolveNameToPath ( 'modules.' . $moduleDir . '.' . $componentTypeDirectory . '.' . $componentName ); $moduleSpecificComponentClassName = $moduleClassPath . '_' . $componentName . '_' . $componentType; print "(" . $moduleSpecificComponentFilePath . ")"; if (file_exists ( $moduleSpecificComponentFilePath )) { return $moduleSpecificComponentClassName; } // Build first intermediate fall back file path and class name if (! empty ( $firstFallBackDir ) && ! empty ( $firstFallBackClassPath )) { $fallBackComponentFilePath = Sphere_Loader::resolveNameToPath ( 'modules.' . $firstFallBackDir . '.' . $componentTypeDirectory . '.' . $componentName ); $fallBackComponentClassName = $firstFallBackClassPath . '_' . $componentName . '_' . $componentType; print "(" . $fallBackComponentFilePath . ")"; if (file_exists ( $fallBackComponentFilePath )) { return $fallBackComponentClassName; } } // Build intermediate fall back file path and class name if (! empty ( $secondFallBackModuleDir ) && ! empty ( $secondFallBackModuleClassPath )) { $fallBackComponentFilePath = Sphere_Loader::resolveNameToPath ( 'modules.' . $secondFallBackModuleDir . '.' . $componentTypeDirectory . '.' . $componentName ); $fallBackComponentClassName = $secondFallBackModuleClassPath . '_' . $componentName . '_' . $componentType; print "(" . $fallBackComponentFilePath . ")"; if (file_exists ( $fallBackComponentFilePath )) { return $fallBackComponentClassName; } } // Build fall back file path and class name $fallBackComponentFilePath = Sphere_Loader::resolveNameToPath ( 'modules.' . $fallBackModuleDir . '.' . $componentTypeDirectory . '.' . $componentName ); $fallBackComponentClassName = $fallBackModuleClassPath . '_' . $componentName . '_' . $componentType; print "(" . $fallBackComponentFilePath . ")"; if (file_exists ( $fallBackComponentFilePath )) { return $fallBackComponentClassName; } throw new AppException ( 'Handler not found.' ); } /** * Function to auto load the required class files matching the directory pattern modules/xyz/types/Abc.php for class xyz_Abc_Type * * @param <String> $className * @return <Boolean> */ public static function autoLoad($className) { $parts = explode ( '_', $className ); $noOfParts = count ( $parts ); if ($noOfParts > 2) { $filePath = 'modules.'; // Append modules and sub modules names to the path for($i = 0; $i < ($noOfParts - 2); ++ $i) { $filePath .= $parts [$i] . '.'; } $fileName = $parts [$noOfParts - 2]; $fileComponentName = strtolower ( $parts [$noOfParts - 1] ) . 's'; $filePath .= $fileComponentName . '.' . $fileName; return Sphere_Loader::includeOnce ( $filePath ); } return false; } } function sphere_import($qualifiedName) { return Sphere_Loader::includeOnce ( $qualifiedName ); } function sphere_import_try($qualifiedName) { return Sphere_Loader::includeOnce ( $qualifiedName, true ); } function sphere_import_path($qualifiedName) { return Sphere_Loader::includePath ( $qualifiedName ); } spl_autoload_register('Sphere_Loader::autoLoad'); ?>