- return ($result);
-}
-
-/**
- * Save the preferences for this user.
- */
-function savePrefValues($data_dir, $username) {
- global $prefs_cache;
-
- $file = fopen($data_dir . $username . '.pref', 'w');
- foreach ($prefs_cache as $Key => $Value) {
- if (isset($Value)) {
- fwrite($file, $Key . '=' . $Value . "\n");
+ /* Compute the hash for this user and extract the hash directories. */
+ $hash_dirs = computeHashDirs($username);
+
+ /* First, get and make sure the full hash directory exists. */
+ $real_hash_dir = getHashedDir($username, $dir, $hash_dirs);
+
+ /* Set the value of our real data file, after we've removed unwanted characters. */
+ $datafile = str_replace('/', '_', $datafile);
+ $result = "$real_hash_dir/$datafile";
+
+ /* Check for this file in the real hash directory. */
+ if ($hash_search && !@file_exists($result)) {
+ /* First check the base directory, the most common location. */
+ if (@file_exists("$dir/$datafile")) {
+ rename("$dir/$datafile", $result);
+
+ /* Then check the full range of possible hash directories. */
+ } else {
+ $check_hash_dir = $dir;
+ for ($h = 0; $h < 4; ++$h) {
+ $check_hash_dir .= '/' . $hash_dirs[$h];
+ if (@is_readable("$check_hash_dir/$datafile")) {
+ rename("$check_hash_dir/$datafile", $result);
+ break;
+ }
+ }