- function cachePrefValues($data_dir, $username) {
- global $prefs_are_cached, $prefs_cache;
-
- if ($prefs_are_cached)
- return;
-
- $filename = $data_dir . $username . '.pref';
-
- if (!file_exists($filename)) {
- printf (_("Preference file, %s, does not exist. Log out, and log back in to create a default preference file."), $filename);
- exit;
- }
-
- $file = fopen($filename, 'r');
-
- /** read in all the preferences **/
- $highlight_num = 0;
- while (! feof($file)) {
- $pref = trim(fgets($file, 1024));
- $equalsAt = strpos($pref, '=');
- if ($equalsAt > 0) {
- $Key = substr($pref, 0, $equalsAt);
- $Value = substr($pref, $equalsAt + 1);
- if (substr($Key, 0, 9) == 'highlight') {
- $Key = 'highlight' . $highlight_num;
- $highlight_num ++;
- }
-
- if ($Value != '') {
- $prefs_cache[$Key] = $Value;
- }
- }
- }
- fclose($file);
-
- session_unregister('prefs_cache');
- session_register('prefs_cache');
-
- $prefs_are_cached = true;
- session_unregister('prefs_are_cached');
- session_register('prefs_are_cached');
- }
-
-
- /** returns the value for $string **/
- function getPref($data_dir, $username, $string, $default = '') {
- global $prefs_cache;
-
- cachePrefValues($data_dir, $username);
-
- if (isset($prefs_cache[$string]))
- return $prefs_cache[$string];
- else
- return $default;
- }
-
-
- 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");
- }
- }
- fclose($file);
- }
-
-
- function removePref($data_dir, $username, $string) {
- global $prefs_cache;
-
- cachePrefValues($data_dir, $username);
-
- if (isset($prefs_cache[$string])) {
- unset($prefs_cache[$string]);
- }
-
- savePrefValues($data_dir, $username);
- }
-
- /** sets the pref, $string, to $set_to **/
- function setPref($data_dir, $username, $string, $set_to) {
- global $prefs_cache;
-
- cachePrefValues($data_dir, $username);
- if (isset($prefs_cache[$string]) && $prefs_cache[$string] == $set_to)
- return;
- if ($set_to === '') {
- removePref($data_dir, $username, $string);
- return;
- }
- $prefs_cache[$string] = $set_to;
- savePrefValues($data_dir, $username);
- }
-
-
- /** This checks if there is a pref file, if there isn't, it will
- create it. **/
- function checkForPrefs($data_dir, $username) {
- $filename = $data_dir . $username . '.pref';
- if (!file_exists($filename) ) {
- if (!copy($data_dir . 'default_pref', $filename)) {
- echo _("Error opening ") . $filename;
- exit;
- }
- }
- }
-
-
- /** Writes the Signature **/
- function setSig($data_dir, $username, $string) {
- $file = fopen($data_dir . $username . '.sig', 'w');
- fwrite($file, $string);
- fclose($file);
- }
-
-
-
- /** Gets the signature **/
- function getSig($data_dir, $username) {
- $filename = $data_dir . $username . '.sig';
- $sig = '';
- if (file_exists($filename)) {
- $file = fopen($filename, 'r');
- while (!feof($file)) {
- $sig .= fgets($file, 1024);
- }
- fclose($file);
- }
- return $sig;
- }
-
-?>
+/**
+ * Helper function for getHashDir which does the actual hash calculation.
+ *
+ * @param string username the username to calculate the hash dir for
+ * @return array a list of hash dirs for this username
+ * @since 1.2.0
+ */
+function computeHashDirs($username) {
+ /* Compute the hash for this user and extract the hash directories. */
+ /* Note that the crc32() function result will be different on 32 and */
+ /* 64 bit systems, thus the hack below. */
+ $crc = crc32($username);
+ if ($crc & 0x80000000) {
+ $crc ^= 0xffffffff;
+ $crc += 1;
+ }
+ $hash = base_convert($crc, 10, 16);
+ $hash_dirs = array();
+ for ($h = 0; $h < 4; ++ $h) {
+ $hash_dirs[] = substr($hash, $h, 1);
+ }
+
+ /* Return our array of hash directories. */
+ return ($hash_dirs);
+}