X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fprefs.php;h=aaa263b2aa4550a3407b37f5c3c37eed44757dd1;hb=786923816699d76b81fed432d200878de17438c4;hp=dc4599263eb104feb89beda44fb3093c93e244f1;hpb=245a6892bf5c780904ef9677f24d624ea17e0749;p=squirrelmail.git diff --git a/functions/prefs.php b/functions/prefs.php index dc459926..aaa263b2 100644 --- a/functions/prefs.php +++ b/functions/prefs.php @@ -7,111 +7,104 @@ ** $Id$ **/ - $prefs_php = true; - + if (defined('prefs_php')) + return; + define('prefs_php', true); + + global $prefs_are_cached, $prefs_cache; + $prefs_are_cached = false; + $prefs_cache = array(); + + 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); + + $prefs_are_cached = true; + } + + /** returns the value for $string **/ function getPref($data_dir, $username, $string) { - $filename = "$data_dir$username.pref"; - if (!file_exists($filename)) { - printf (_("Preference file %s not found. Exiting abnormally"), $filename); - exit; - } - - $file = fopen($filename, "r"); - - /** read in all the preferences **/ - for ($i=0; !feof($file); $i++) { - $pref = fgets($file, 1024); - if (substr($pref, 0, strpos($pref, "=")) == $string) { - fclose($file); - return trim(substr($pref, strpos($pref, "=")+1)); - } - } - fclose($file); - return ""; + global $prefs_cache; + + cachePrefValues($data_dir, $username); + + if (isset($prefs_cache[$string])) + return $prefs_cache[$string]; + return ''; } - function removePref($data_dir, $username, $string) { - $filename = "$data_dir$username.pref"; - $found = false; - if (!file_exists($filename)) { - printf (_("Preference file, %s, does not exist. Log out, and log back in to create a default preference file."), $filename); - echo "
\n"; - exit; - } - $file = fopen($filename, "r"); - for ($i=0; !feof($file); $i++) { - $pref[$i] = fgets($file, 1024); - if (substr($pref[$i], 0, strpos($pref[$i], "=")) == $string) { - $i--; - } + 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); + } - for ($i=0,$j=0; $i < count($pref); $i++) { - if (substr($pref[$i], 0, 9) == "highlight") { - $hlt[$j] = substr($pref[$i], strpos($pref[$i], "=")+1); - $j++; - } - } - $file = fopen($filename, "w"); - for ($i=0; $i < count($pref); $i++) { - if (substr($pref[$i], 0, 9) != "highlight") { - fwrite($file, "$pref[$i]", 1024); - } - } - for ($i=0; $i < count($hlt); $i++) { - fwrite($file, "highlight$i=$hlt[$i]"); - } - - 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) { - $filename = "$data_dir$username.pref"; - $found = false; - if (!file_exists($filename)) { - printf (_("Preference file, %s, does not exist. Log out, and log back in to create a default preference file."), $filename); - echo "\n
\n"; - exit; - } - $file = fopen($filename, "r"); - - /** read in all the preferences **/ - for ($i=0; !feof($file); $i++) { - $pref[$i] = fgets($file, 1024); - if (substr($pref[$i], 0, strpos($pref[$i], "=")) == $string) { - $found = true; - $pos = $i; - } - } - fclose($file); - - $file = fopen($filename, "w"); - if ($found == true) { - for ($i=0; $i < count($pref); $i++) { - if ($i == $pos) { - fwrite($file, "$string=$set_to\n", 1024); - } else { - fwrite($file, "$pref[$i]", 1024); - } - } - } else { - for ($i=0; $i < count($pref); $i++) { - fwrite($file, "$pref[$i]", 1024); - } - fwrite($file, "$string=$set_to\n", 1024); - } + global $prefs_cache; + + cachePrefValues($data_dir, $username); + + $prefs_cache[$string] = $set_to; - fclose($file); + 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) { @@ -125,7 +118,6 @@ } - /** Writes the Signature **/ function setSig($data_dir, $username, $string) { $filename = "$data_dir$username.sig"; @@ -139,9 +131,9 @@ /** Gets the signature **/ function getSig($data_dir, $username) { $filename = "$data_dir$username.sig"; + $sig = ""; if (file_exists($filename)) { $file = fopen($filename, "r"); - $sig = ""; while (!feof($file)) { $sig .= fgets($file, 1024); }