/** * Clear the contents of the supplied cache, and remove it from disk * * @param string $CacheName name of cache library * @return void */ public static function ClearCache($CacheName) { if (!array_key_exists($CacheName, Gdn_LibraryMap::$_Caches)) { return Gdn_LibraryMap::PrepareCache($CacheName); } Gdn_LibraryMap::$_Caches[$CacheName]['cache'] = array(); @unlink(PATH_CACHE . DS . Gdn_LibraryMap::$_Caches[$CacheName]['ondisk']); }
/** * Searches in the specified mapping cache for $LibraryName. If a mapping is * found, it returns it. If not, it searches through the application * directories $Depth levels deep looking for $LibraryName. Returns FALSE * if not found. * * @param string $MappingsFileName The name of the mappings file to look in for library mappings. These * files are contained in the application's /cache folder. * @param string $SourceFolders The path to the folders that should be considered the "root" of this search. * @param mixed $FolderWhiteList A white-list array of sub-folders within $SourceFolder in which the * search can be performed. If FALSE is specified instead, the search will * only be performed in $SourceFolders. * @param string $LibraryName The name of the library to search for. This is a valid file name. * ie. "class.database.php" */ public static function FindByMapping($MappingCacheName, $SourceFolders, $FolderWhiteList, $LibraryName) { // If the application folder was provided, it will be the only entry in the whitelist, so prepend it. if (is_array($FolderWhiteList) && count($FolderWhiteList) == 1) { $LibraryName = CombinePaths(array($FolderWhiteList[0], $LibraryName)); } $LibraryKey = str_replace('.', '__', $LibraryName); Gdn_LibraryMap::PrepareCache($MappingCacheName); $LibraryPath = Gdn_LibraryMap::GetCache($MappingCacheName, $LibraryKey); if ($LibraryPath === NULL) { // $LibraryName wasn't contained in the mappings array. // I need to look through the folders in this application for the requested file. // Once I find it, I need to save the mapping so we don't have to search for it again. // Attempt to find the file directly off the root (if the app folder was provided in the querystring) if ($FolderWhiteList !== FALSE && count($FolderWhiteList) == 1) { $LibraryPath = self::Find($SourceFolders, $LibraryName); } else { $LibraryPath = self::Find($SourceFolders, $LibraryName, $FolderWhiteList); } // If the controller was found if ($LibraryPath !== FALSE) { Gdn_LibraryMap::Cache($MappingCacheName, $LibraryKey, $LibraryPath); } } return $LibraryPath; }
public function GetLocaleSources($LocaleName, $ApplicationWhiteList, $PluginWhiteList, $ForceRemapping = FALSE) { $SafeLocaleName = preg_replace('/([^\\w\\d_-])/', '', $LocaleName); // Removes everything from the string except letters, numbers, dashes, and underscores $LocaleSources = array(); if (!is_array($ApplicationWhiteList)) { $ApplicationWhiteList = array(); } if (!is_array($PluginWhiteList)) { $PluginWhiteList = array(); } Gdn_LibraryMap::PrepareCache('locale', NULL, 'tree'); $LocaleSources = Gdn_LibraryMap::GetCache('locale', $SafeLocaleName); if ($ForceRemapping === TRUE || !Gdn_LibraryMap::CacheReady('locale') || $LocaleSources === NULL) { $LocaleSources = array(); // Get application-based locale definition files $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName . '.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); } $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); } // Get locale-based locale definition files. $EnabledLocales = C('EnabledLocales'); if (is_array($EnabledLocales)) { foreach ($EnabledLocales as $Key => $Locale) { if ($Locale != $LocaleName) { continue; } // skip locales that aren't in effect. // Grab all of the files in the locale's folder. $Paths = SafeGlob(PATH_ROOT . "/locales/{$Key}/*.php"); if (is_array($Paths)) { foreach ($Paths as $Path) { $LocaleSources[] = $Path; } } } } // Get plugin-based locale definition files $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName . '.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); } $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); } // Get theme-based locale definition files. $Theme = C('Garden.Theme'); if ($Theme) { $ThemeLocalePath = PATH_THEMES . "/{$Theme}/locale/{$LocaleName}.php"; if (file_exists($ThemeLocalePath)) { $LocaleSources[] = $ThemeLocalePath; } } // Save the mappings $FileContents = array(); $Count = count($LocaleSources); for ($i = 0; $i < $Count; ++$i) { $FileContents[$SafeLocaleName][] = Gdn_Format::ArrayValueForPhp($LocaleSources[$i]); } // Look for a global locale. $ConfigLocale = PATH_CONF . '/locale.php'; if (file_exists($ConfigLocale)) { $FileContents[$SafeLocaleName][] = $ConfigLocale; } // Look for a config locale that is locale-specific. $ConfigLocale = PATH_CONF . "/locale-{$LocaleName}.php"; if (file_exists($ConfigLocale)) { $FileContents[$SafeLocaleName][] = $ConfigLocale; } Gdn_LibraryMap::PrepareCache('locale', $FileContents); } return $LocaleSources; }
/** * Defines and loads the locale. * * @param string $LocaleName The name of the locale to load. Locale definitions are kept in each * application's locale folder. For example: * /dashboard/locale/$LocaleName.php * /vanilla/locale/$LocaleName.php * @param array $ApplicationWhiteList An array of application folders that are safe to examine for locale * definitions. * @param array $PluginWhiteList An array of plugin folders that are safe to examine for locale * definitions. * @param bool $ForceRemapping For speed purposes, the application folders are crawled for locale * sources. Once sources are found, they are saved in the * cache/locale_mapppings.php file. If ForceRemapping is true, this file will * be ignored and the folders will be recrawled and the mapping file will be * re-generated. You can also simply delete the file and it will * automatically force a remapping. */ public function Set($LocaleName, $ApplicationWhiteList, $PluginWhiteList, $ForceRemapping = FALSE) { $SafeLocaleName = preg_replace('/([^\\w\\d_-])/', '', $LocaleName); // Removes everything from the string except letters, numbers, dashes, and underscores $LocaleSources = array(); if (!is_array($ApplicationWhiteList)) { $ApplicationWhiteList = array(); } if (!is_array($PluginWhiteList)) { $PluginWhiteList = array(); } Gdn_LibraryMap::PrepareCache('locale'); if ($ForceRemapping === TRUE || !Gdn_LibraryMap::CacheReady('locale')) { $LocaleSources = array(); // Get application-based locale definition files $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) { $LocaleSources = $ApplicationLocaleSources; } // Get plugin-based locale definition files $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) { $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); } // Get theme-based locale definition files. $Theme = C('Garden.Theme'); if ($Theme) { $ThemeLocalePath = PATH_THEMES . "/{$Theme}/locale/{$LocaleName}.php"; if (file_exists($ThemeLocalePath)) { $LocaleSources[] = $ThemeLocalePath; } } // Save the mappings $FileContents = array(); $Count = count($LocaleSources); for ($i = 0; $i < $Count; ++$i) { $FileContents[$SafeLocaleName][] = Gdn_Format::ArrayValueForPhp($LocaleSources[$i]); } // Add the config locale if it exists $ConfigLocale = PATH_CONF . DS . 'locale.php'; if (file_exists($ConfigLocale)) { $FileContents[$SafeLocaleName][] = $ConfigLocale; } Gdn_LibraryMap::Import('locale', $FileContents); } // Set up defaults $Definition = array(); $this->_Definition = array(); // Now set the locale name and import all of the sources. $this->_Locale = $LocaleName; $LocaleSources = Gdn_LibraryMap::GetCache('locale', $SafeLocaleName); if (is_null($SafeLocaleName)) { $LocaleSources = array(); } $ConfLocaleOverride = PATH_CONF . DS . 'locale.php'; $Count = count($LocaleSources); for ($i = 0; $i < $Count; ++$i) { if ($ConfLocaleOverride != $LocaleSources[$i] && file_exists($LocaleSources[$i])) { // Don't double include the conf override file... and make sure it comes last include_once $LocaleSources[$i]; } } // Also load any custom defined definitions from the conf directory if (file_exists($ConfLocaleOverride)) { include_once $ConfLocaleOverride; } // All of the included files should have contained // $Definition['Code'] = 'Definition'; assignments. The overwrote each // other in the order they were included. Now assign the $Definition array // to the local private _Definition property. $this->_Definition = $Definition; }
/** * Defines and loads the locale. * * @param string $LocaleName The name of the locale to load. Locale definitions are kept in each * application's locale folder. For example: * /dashboard/locale/$LocaleName.php * /vanilla/locale/$LocaleName.php * @param array $ApplicationWhiteList An array of application folders that are safe to examine for locale * definitions. * @param array $PluginWhiteList An array of plugin folders that are safe to examine for locale * definitions. * @param bool $ForceRemapping For speed purposes, the application folders are crawled for locale * sources. Once sources are found, they are saved in the * cache/locale_mapppings.php file. If ForceRemapping is true, this file will * be ignored and the folders will be recrawled and the mapping file will be * re-generated. You can also simply delete the file and it will * automatically force a remapping. */ public function Set($LocaleName, $ApplicationWhiteList, $PluginWhiteList, $ForceRemapping = FALSE) { $SafeLocaleName = preg_replace('/([^\w\d_-])/', '', $LocaleName); // Removes everything from the string except letters, numbers, dashes, and underscores $LocaleSources = array(); if(!is_array($ApplicationWhiteList)) $ApplicationWhiteList = array(); if(!is_array($PluginWhiteList)) $PluginWhiteList = array(); Gdn_LibraryMap::PrepareCache('locale', NULL, 'tree'); $LocaleSources = Gdn_LibraryMap::GetCache('locale',$SafeLocaleName); if ($ForceRemapping === TRUE || !Gdn_LibraryMap::CacheReady('locale') || $LocaleSources === NULL) { $LocaleSources = array(); // Get application-based locale definition files $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName.'.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); $ApplicationLocaleSources = Gdn_FileSystem::FindAll(PATH_APPLICATIONS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $ApplicationWhiteList); if ($ApplicationLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $ApplicationLocaleSources); // Get plugin-based locale definition files $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName.'.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); $PluginLocaleSources = Gdn_FileSystem::FindAll(PATH_PLUGINS, CombinePaths(array('locale', $LocaleName, 'definitions.php')), $PluginWhiteList); if ($PluginLocaleSources !== FALSE) $LocaleSources = array_merge($LocaleSources, $PluginLocaleSources); // Get theme-based locale definition files. $Theme = C('Garden.Theme'); if($Theme) { $ThemeLocalePath = PATH_THEMES."/$Theme/locale/$LocaleName.php"; if(file_exists($ThemeLocalePath)) $LocaleSources[] = $ThemeLocalePath; } // Get locale-based locale definition files. $EnabledLocales = C('EnabledLocales'); if (is_array($EnabledLocales)) { foreach ($EnabledLocales as $Key => $Locale) { if ($Locale != $LocaleName) continue; // skip locales that aren't in effect. // Grab all of the files in the locale's folder. $Paths = SafeGlob(PATH_ROOT."/locales/$Key/*.php"); if (is_array($Paths)) { foreach($Paths as $Path) { $LocaleSources[] = $Path; } } } } // Save the mappings $FileContents = array(); $Count = count($LocaleSources); for($i = 0; $i < $Count; ++$i) { $FileContents[$SafeLocaleName][] = Gdn_Format::ArrayValueForPhp($LocaleSources[$i]); } // Look for a global locale. $ConfigLocale = PATH_LOCAL_CONF.'/locale.php'; if (file_exists($ConfigLocale)) $FileContents[$SafeLocaleName][] = $ConfigLocale; // Look for a config locale that is locale-specific. $ConfigLocale = PATH_LOCAL_CONF."/locale-$LocaleName.php"; if (file_exists($ConfigLocale)) $FileContents[$SafeLocaleName][] = $ConfigLocale; Gdn_LibraryMap::PrepareCache('locale', $FileContents); } // Set up defaults $Definition = array(); $this->_Definition = array(); // Now set the locale name and import all of the sources. $this->_Locale = $LocaleName; $LocaleSources = Gdn_LibraryMap::GetCache('locale', $SafeLocaleName); if (is_null($SafeLocaleName)) $LocaleSources = array(); $ConfLocaleOverride = PATH_LOCAL_CONF . DS . 'locale.php'; $Count = count($LocaleSources); for($i = 0; $i < $Count; ++$i) { if ($ConfLocaleOverride != $LocaleSources[$i] && file_exists($LocaleSources[$i])) // Don't double include the conf override file... and make sure it comes last include($LocaleSources[$i]); } // Also load any custom defined definitions from the conf directory if (file_exists($ConfLocaleOverride)) include($ConfLocaleOverride); // All of the included files should have contained // $Definition['Code'] = 'Definition'; assignments. The overwrote each // other in the order they were included. Now assign the $Definition array // to the local private _Definition property. $this->_Definition = $Definition; }
/** * This method is deprecated, but since cache files call it there will be low-level crashes without it. */ public static function PrepareCache($CacheName, $ExistingCacheArray = NULL) { Gdn_LibraryMap::PrepareCache($CacheName, $ExistingCacheArray); }