Source for file file_prefs.php

Documentation is available at file_prefs.php

  1. <?php
  2.  
  3. /**
  4.  * file_prefs.php
  5.  *
  6.  * This contains functions for manipulating user preferences in files
  7.  *
  8.  * @copyright 1999-2020 The SquirrelMail Project Team
  9.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  10.  * @version $Id: file_prefs.php 14840 2020-01-07 07:42:38Z pdontthink $
  11.  * @package squirrelmail
  12.  * @subpackage prefs
  13.  * @since 1.2.5
  14.  */
  15.  
  16. /**
  17.  * Check the preferences into the session cache.
  18.  */
  19. function cachePrefValues($data_dir$username{
  20.     global $prefs_are_cached$prefs_cache;
  21.  
  22.     sqgetGlobalVar('prefs_are_cached'$prefs_are_cachedSQ_SESSION );
  23.     if isset($prefs_are_cached&& $prefs_are_cached{
  24.         sqgetGlobalVar('prefs_cache'$prefs_cacheSQ_SESSION );
  25.         return;
  26.     }
  27.  
  28.     sqsession_unregister('prefs_cache');
  29.     sqsession_unregister('prefs_are_cached');
  30.  
  31.     /* Calculate the filename for the user's preference file */
  32.     $filename getHashedFile($username$data_dir"$username.pref");
  33.  
  34.     /* A call to checkForPrefs here should take eliminate the need for */
  35.     /* this to be called throughout the rest of the SquirrelMail code. */
  36.     checkForPrefs($data_dir$username$filename);
  37.  
  38.     /* Make sure that the preference file now DOES exist. */
  39.     if (!file_exists($filename)) {
  40.         logout_errorsprintf_("Preference file, %s, does not exist. Log out, and log back in to create a default preference file.")$filename)  );
  41.         exit;
  42.     }
  43.  
  44.     /* Open the file, or else display an error to the user. */
  45.     if(!$file @fopen($filename'r'))
  46.     {
  47.         logout_errorsprintf_("Preference file, %s, could not be opened. Contact your system administrator to resolve this issue.")$filename) );
  48.         exit;
  49.     }
  50.  
  51.     /* Read in the preferences. */
  52.     $highlight_num 0;
  53.     while (feof($file)) {
  54.         $pref '';
  55.         /* keep reading a pref until we reach an eol (\n (or \r for macs)) */
  56.         while($read fgets($file1024))
  57.         {
  58.                 $pref .= $read;
  59.                 if(strpos($read,"\n"|| strpos($read,"\r"))
  60.                         break;
  61.         }
  62.         $pref trim($pref);
  63.         $equalsAt strpos($pref'=');
  64.         if ($equalsAt 0{
  65.             $key substr($pref0$equalsAt);
  66.             $value substr($pref$equalsAt 1);
  67.             /* this is to 'rescue' old-style highlighting rules. */
  68.             if (substr($key09== 'highlight'{
  69.                 $key 'highlight' $highlight_num;
  70.                 $highlight_num ++;
  71.             }
  72.  
  73.             if ($value != ''{
  74.                 $prefs_cache[$key$value;
  75.             }
  76.         }
  77.     }
  78.     fclose($file);
  79.  
  80.     $prefs_are_cached TRUE;
  81.  
  82.     sqsession_register($prefs_cache'prefs_cache');
  83.     sqsession_register($prefs_are_cached'prefs_are_cached');
  84. }
  85.  
  86. /**
  87.  * Return the value for the preference given by $string.
  88.  */
  89. function getPref($data_dir$username$string$default ''{
  90.     global $prefs_cache;
  91.  
  92.     $result NULL;
  93.     $result do_hook_function('get_pref_override',array($username$string$default$data_dir));
  94. // FIXME: ideally, we'd have a better way to determine if the return value from the hook above should be respected, even if it is NULL, but this is as good as it gets for now... previously the test was more weak: if (!$result)
  95.     if (is_null($result)) {
  96.         cachePrefValues($data_dir$username);
  97.         if (isset($prefs_cache[$string])) {
  98.             $result $prefs_cache[$string];
  99.         else {
  100. //FIXME: is there justification for having these TWO hooks so close together?  who uses these?
  101.             $result do_hook_function('get_pref'array($username$string));
  102. //FIXME: testing below for !$result means that a plugin cannot fetch its own pref value of 0, '0', '', FALSE, or anything else that evaluates to boolean FALSE.
  103.             if (!$result{
  104.                 $result $default;
  105.             }
  106.         }
  107.     }
  108.     return ($result);
  109. }
  110.  
  111. /**
  112.  * Save the preferences for this user.
  113.  */
  114. function savePrefValues($data_dir$username{
  115.     global $prefs_cache;
  116.  
  117.     $filename getHashedFile($username$data_dir"$username.pref");
  118.  
  119.     /* Open the file for writing, or else display an error to the user. */
  120.     if(!$file @fopen($filename.'.tmp''w'))
  121.     {
  122.         logout_errorsprintf_("Preference file, %s, could not be opened. Contact your system administrator to resolve this issue.")$filename.'.tmp') );
  123.         exit;
  124.     }
  125.     foreach ($prefs_cache as $Key => $Value{
  126.         if (isset($Value)) {
  127.             if sq_fwrite($file$Key '=' $Value "\n"=== FALSE {
  128.                logout_errorsprintf_("Preference file, %s, could not be written. Contact your system administrator to resolve this issue."$filename '.tmp') );
  129.                exit;
  130.             }
  131.         }
  132.     }
  133.     fclose($file);
  134.     if (@copy($filename '.tmp',$filename) ) {
  135.         logout_errorsprintf_("Preference file, %s, could not be copied from temporary file, %s. Contact your system administrator to resolve this issue.")$filename$filename '.tmp') );
  136.         exit;
  137.     }
  138.     @unlink($filename '.tmp');
  139.     @chmod($filename0600);
  140.     sqsession_register($prefs_cache 'prefs_cache');
  141. }
  142.  
  143. /**
  144.  * Remove a preference for the current user.
  145.  */
  146. function removePref($data_dir$username$string{
  147.     global $prefs_cache;
  148.  
  149.     cachePrefValues($data_dir$username);
  150.  
  151.     if (isset($prefs_cache[$string])) {
  152.         unset($prefs_cache[$string]);
  153.     }
  154.  
  155.     savePrefValues($data_dir$username);
  156. }
  157.  
  158. /**
  159.  * Set a there preference $string to $value.
  160.  */
  161. function setPref($data_dir$username$string$value{
  162.     global $prefs_cache;
  163.  
  164.     cachePrefValues($data_dir$username);
  165.     if (isset($prefs_cache[$string]&& ($prefs_cache[$string== $value)) {
  166.         return;
  167.     }
  168.  
  169.     if ($value === ''{
  170.         removePref($data_dir$username$string);
  171.         return;
  172.     }
  173.  
  174.     $prefs_cache[$string$value;
  175.     savePrefValues($data_dir$username);
  176. }
  177.  
  178. /**
  179.  * Check for a preferences file. If one can not be found, create it.
  180.  */
  181. function checkForPrefs($data_dir$username$filename ''{
  182.     /* First, make sure we have the filename. */
  183.     if ($filename == ''{
  184.         $filename getHashedFile($username$data_dir"$username.pref");
  185.     }
  186.  
  187.     /* Then, check if the file exists. */
  188.     if (!@file_exists($filename) ) {
  189.         /* First, check the $data_dir for the default preference file. */
  190.         if(substr($data_dir,-1!= '/'{
  191.             $data_dir .= '/';
  192.         }
  193.         $default_pref $data_dir 'default_pref';
  194.  
  195.         /* If it is not there, check the internal data directory. */
  196.         if (!@file_exists($default_pref)) {
  197.             $default_pref SM_PATH 'data/default_pref';
  198.         }
  199.  
  200.         /* Otherwise, report an error. */
  201.         $errTitle sprintf_("Error opening %s")$default_pref );
  202.         if (!is_readable($default_pref)) {
  203.             $errString $errTitle "<br />\n" .
  204.                          _("Default preference file not found or not readable!""<br />\n" .
  205.                          _("Please contact your system administrator and report this error.""<br />\n";
  206.             logout_error$errString$errTitle );
  207.             exit;
  208.         else if (!@copy($default_pref$filename)) {
  209.             $uid 'httpd';
  210.             if (function_exists('posix_getuid')){
  211.                 $user_data posix_getpwuid(posix_getuid());
  212.                 $uid $user_data['name'];
  213.             }
  214.             $errString $errTitle '<br />' .
  215.                        _("Could not create initial preference file!""<br />\n" .
  216.                        sprintf_("%s should be writable by user %s")$data_dir$uid .
  217.                        "<br />\n" _("Please contact your system administrator and report this error.""<br />\n";
  218.             logout_error$errString$errTitle );
  219.             exit;
  220.         }
  221.     }
  222. }
  223.  
  224. /**
  225.  * Write the User Signature.
  226.  */
  227. function setSig($data_dir$username$number$value{
  228.     // Limit signature size to 64KB (database BLOB limit)
  229.     if (strlen($value)>65536{
  230.         error_option_save(_("Signature is too big."));
  231.         return;
  232.     }
  233.     $filename getHashedFile($username$data_dir"$username.si$number");
  234.     /* Open the file for writing, or else display an error to the user. */
  235.     if(!$file @fopen("$filename.tmp"'w')) {
  236.         logout_errorsprintf_("Signature file, %s, could not be opened. Contact your system administrator to resolve this issue.")$filename '.tmp') );
  237.         exit;
  238.     }
  239.     if sq_fwrite($file$value=== FALSE {
  240.        logout_errorsprintf_("Signature file, %s, could not be written. Contact your system administrator to resolve this issue."$filename '.tmp'));
  241.        exit;
  242.     }
  243.     fclose($file);
  244.     if (@copy($filename '.tmp',$filename) ) {
  245.        logout_errorsprintf_("Signature file, %s, could not be copied from temporary file, %s. Contact your system administrator to resolve this issue.")$filename$filename '.tmp') );
  246.        exit;
  247.     }
  248.     @unlink($filename '.tmp');
  249.     @chmod($filename0600);
  250.  
  251. }
  252.  
  253. /**
  254.  * Get the signature.
  255.  */
  256. function getSig($data_dir$username$number{
  257.     $filename getHashedFile($username$data_dir"$username.si$number");
  258.     $sig '';
  259.     if (file_exists($filename)) {
  260.         /* Open the file, or else display an error to the user. */
  261.         if(!$file @fopen($filename'r'))
  262.         {
  263.             logout_errorsprintf_("Signature file, %s, could not be opened. Contact your system administrator to resolve this issue.")$filename) );
  264.             exit;
  265.         }
  266.         while (!feof($file)) {
  267.             $sig .= fgets($file1024);
  268.         }
  269.         fclose($file);
  270.     }
  271.     return $sig;
  272. }

Documentation generated on Mon, 13 Jan 2020 04:24:36 +0100 by phpDocumentor 1.4.3