Source for file file_prefs.php
Documentation is available at file_prefs.php
* This contains functions for manipulating user preferences in files
* @copyright 1999-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: file_prefs.php 14845 2020-01-07 08:09:34Z pdontthink $
* Check the preferences into the session cache.
* @param string $data_dir
* @param string $username
global $prefs_are_cached, $prefs_cache;
if ( isset
($prefs_are_cached) &&
$prefs_are_cached) {
// sm_print_r($prefs_cache);
/* Calculate the filename for the user's preference file */
$filename =
getHashedFile($username, $data_dir, "$username.pref");
/* A call to checkForPrefs here should take eliminate the need for */
/* this to be called throughout the rest of the SquirrelMail code. */
/* Make sure that the preference file now DOES exist. */
logout_error( sprintf( _("Preference file, %s, does not exist. Log out, and log back in to create a default preference file."), $filename) );
/* Open the file, or else display an error to the user. */
if(!$file =
@fopen($filename, 'r'))
logout_error( sprintf( _("Preference file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename) );
/* Read in the preferences. */
/* keep reading a pref until we reach an eol (\n (or \r for macs)) */
while($read =
fgets($file, 1024))
$equalsAt =
strpos($pref, '=');
$key =
substr($pref, 0, $equalsAt);
$value =
substr($pref, $equalsAt +
1);
//FIXME: this code is not in db_prefs.php that I can see
/* this is to 'rescue' old-style highlighting rules. */
if (substr($key, 0, 9) ==
'highlight') {
$key =
'highlight' .
$highlight_num;
//FIXME: this code is not in db_prefs.php that I can see
$prefs_cache[$key] =
$value;
$prefs_are_cached =
TRUE;
* Return the value for the desired preference.
* @param string $data_dir data directory
* @param string $username user name
* @param string $pref_name preference name
* @param string $default (since 1.2.0) default preference value
function getPref($data_dir, $username, $pref_name, $default =
'') {
$temp =
array(&$username, &$pref_name);
$result =
do_hook('get_pref_override', $temp);
if (isset
($prefs_cache[$pref_name])) {
$result =
$prefs_cache[$pref_name];
//FIXME: is there a justification for having two prefs hooks so close? who uses them?
$temp =
array(&$username, &$pref_name);
$result =
do_hook('get_pref', $temp);
* Save the preferences for this user.
* @param string $data_dir data directory
* @param string $username user name
$filename =
getHashedFile($username, $data_dir, "$username.pref");
/* Open the file for writing, or else display an error to the user. */
if(!$file =
@fopen($filename.
'.tmp', 'w'))
logout_error( sprintf( _("Preference file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename.
'.tmp') );
foreach ($prefs_cache as $Key =>
$Value) {
if ( sq_fwrite($file, $Key .
'=' .
$Value .
"\n") ===
FALSE ) {
logout_error( sprintf( _("Preference file, %s, could not be written. Contact your system administrator to resolve this issue.") , $filename .
'.tmp') );
if (! @copy($filename .
'.tmp',$filename) ) {
logout_error( sprintf( _("Preference file, %s, could not be copied from temporary file, %s. Contact your system administrator to resolve this issue."), $filename, $filename .
'.tmp') );
* Remove a preference for the current user.
* @param string $data_dir data directory
* @param string $username user name
* @param string $pref_name preference name
function removePref($data_dir, $username, $pref_name) {
if (isset
($prefs_cache[$pref_name])) {
unset
($prefs_cache[$pref_name]);
* Set the desired preference setting ($pref_name)
* to whatever is in $value.
* @param string $data_dir data directory
* @param string $username user name
* @param string $pref_name preference name
* @param mixed $value preference value
function setPref($data_dir, $username, $pref_name, $value) {
if (isset
($prefs_cache[$pref_name]) &&
($prefs_cache[$pref_name] ==
$value)) {
$prefs_cache[$pref_name] =
$value;
* Check for a preferences file. If one can not be found, create it.
* @param string $data_dir data directory
* @param string $username user name
* @param string $filename (since 1.2.0) preference file name.
* (OPTIONAL; default is an empty string,
* in which case the file name is
* automatically detected)
/* First, make sure we have the filename. */
$filename =
getHashedFile($username, $data_dir, "$username.pref");
/* Then, check if the file exists. */
/* If it does not exist, check for default_prefs */
/* First, check legacy locations: data dir */
if(substr($data_dir,-
1) !=
'/') {
$default_pref =
$data_dir .
'default_pref';
/* or legacy location: internal data dir */
$default_pref =
SM_PATH .
'data/default_pref';
/* If no legacies, check where we'd expect it to be located:
$default_pref =
SM_PATH .
'config/default_pref';
/* If a default_pref file found, try to copy it, if none found,
* try to create an empty one. If that fails, report an error.
$uid =
'that the web server is running as';
$uid =
$user_data['name'];
$errTitle =
_("Could not create initial preference file!");
$errString =
$errTitle .
"\n" .
sprintf( _("%s should be writable by the user %s."), $data_dir, $uid ) .
"\n" .
_("Please contact your system administrator and report this error.") ;
* Write the User Signature.
* @param string $data_dir data directory
* @param string $username user name
* @param integer $number (since 1.2.5) identity number.
* (before 1.2.5., this parameter
* was used for the signature value)
* @param string $value (since 1.2.5) signature value
function setSig($data_dir, $username, $number, $value) {
// Limit signature size to 64KB (database BLOB limit)
$filename =
getHashedFile($username, $data_dir, "$username.si$number");
/* Open the file for writing, or else display an error to the user. */
if(!$file =
@fopen("$filename.tmp", 'w')) {
logout_error( sprintf( _("Signature file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename .
'.tmp') );
logout_error( sprintf( _("Signature file, %s, could not be written. Contact your system administrator to resolve this issue.") , $filename .
'.tmp'));
if (! @copy($filename .
'.tmp',$filename) ) {
logout_error( sprintf( _("Signature file, %s, could not be copied from temporary file, %s. Contact your system administrator to resolve this issue."), $filename, $filename .
'.tmp') );
* @param string $data_dir data directory
* @param string $username user name
* @param integer $number (since 1.2.5) identity number
* @return string signature
function getSig($data_dir, $username, $number) {
$filename =
getHashedFile($username, $data_dir, "$username.si$number");
/* Open the file, or else display an error to the user. */
if(!$file =
@fopen($filename, 'r'))
logout_error( sprintf( _("Signature file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename) );
$sig .=
fgets($file, 1024);
Documentation generated on Mon, 13 Jan 2020 04:22:28 +0100 by phpDocumentor 1.4.3