Source for file identity.php

Documentation is available at identity.php

  1. <?php
  2.  
  3. /**
  4.  * identity.php
  5.  *
  6.  * This contains utility functions for dealing with multiple identities
  7.  *
  8.  * @copyright 1999-2020 The SquirrelMail Project Team
  9.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  10.  * @version $Id: identity.php 14840 2020-01-07 07:42:38Z pdontthink $
  11.  * @package squirrelmail
  12.  * @since 1.4.2
  13.  */
  14.  
  15. /** Used to simplify includes */
  16. if (!defined('SM_PATH')) {
  17.     define('SM_PATH','../');
  18. }
  19.  
  20. include_once(SM_PATH 'include/load_prefs.php');
  21.  
  22. /**
  23. * Returns an array of all the identities.
  24. * Array is keyed: full_name, reply_to, email_address, index, signature
  25. @return array full_name,reply_to,email_address,index,signature
  26. */
  27. function get_identities({
  28.  
  29.     global $username$data_dir$domain;
  30.  
  31.     $em getPref($data_dir,$username,'email_address');
  32.     if $em {
  33.         if (strpos($username '@'== false{
  34.             $em $username.'@'.$domain;
  35.         else {
  36.             $em $username;
  37.         }
  38.     }
  39.     $identities array();
  40.     /* We always have this one, even if the user doesn't use multiple identities */
  41.     $identities[array('full_name' => getPref($data_dir,$username,'full_name'),
  42.         'email_address' => $em,
  43.         'reply_to' => getPref($data_dir,$username,'reply_to'),
  44.         'signature' => getSig($data_dir,$username,'g'),
  45.         'index' => );
  46.  
  47.     $num_ids getPref($data_dir,$username,'identities');
  48.     /* If there are any others, add them to the array */
  49.     if (!empty($num_ids&& $num_ids 1{
  50.         for ($i=1;$i<$num_ids;$i++{
  51.             $identities[array('full_name' => getPref($data_dir,$username,'full_name' $i),
  52.             'email_address' => getPref($data_dir,$username,'email_address' $i),
  53.             'reply_to' => getPref($data_dir,$username,'reply_to' $i),
  54.             'signature' => getSig($data_dir,$username,$i),
  55.             'index' => $i );
  56.         }
  57.     }
  58.  
  59.     return $identities;
  60. }
  61.  
  62. /**
  63.  * Function to save the identities array
  64.  *
  65.  * @param  array     $identities     Array of identities
  66.  */
  67. function save_identities($identities{
  68.  
  69.     global $username$data_dir;
  70.  
  71.     if (empty($identities|| !is_array($identities)) {
  72.         return;
  73.     }
  74.  
  75.  
  76.     $num_cur getPref($data_dir$username'identities'0);
  77.     
  78.     $cnt count($identities);
  79.  
  80.     // Remove any additional identities in prefs //
  81.     for($i=$cnt$i <= $num_cur$i++{
  82.         removePref($data_dir$username'full_name' $i);
  83.         removePref($data_dir$username'email_address' $i);
  84.         removePref($data_dir$username'reply_to' $i);
  85.         setSig($data_dir$username$i'');
  86.     }
  87.  
  88.     foreach($identities as $id=>$ident{
  89.  
  90.         $key ($id?$id:'');
  91.  
  92.         setPref($data_dir$username'full_name' $key$ident['full_name']);
  93.         setPref($data_dir$username'email_address' $key$ident['email_address']);
  94.         setPref($data_dir$username'reply_to' $key$ident['reply_to']);
  95.  
  96.         if ($id === 0{
  97.             setSig($data_dir$username'g'$ident['signature']);
  98.         else {
  99.             setSig($data_dir$username$key$ident['signature']);
  100.         }
  101.  
  102.     }
  103.  
  104.     setPref($data_dir$username'identities'$cnt);
  105.  
  106. }
  107.  
  108. /**
  109.  * Returns an array with a fixed set of identities
  110.  *
  111.  * @param   array       $identities      Array of identities
  112.  * @param   int         $id             Identity to modify
  113.  * @param   string      $action         Action to perform
  114.  * @param   boolean     $override_edit_identity  For use by plugins
  115.  *                                                where the incoming
  116.  *                                                identities array is
  117.  *                                                trusted (OPTIONAL;
  118.  *                                                default FALSE)
  119.  * @return  array 
  120.  */
  121. function sqfixidentities$identities$id$action$override_edit_identity=FALSE {
  122.  
  123.     global $edit_identity$data_dir$username,
  124.            $edit_name$edit_reply_to;
  125.     $num_cur = (int)getPref($data_dir$username'identities'0);
  126.     $fixed array();
  127.     $tmp_hold array();
  128.     $i 0;
  129.  
  130.     if (empty($identities|| !is_array($identities)) {
  131.         return $fixed;
  132.     }
  133.  
  134.     if ($override_edit_identity)
  135.         $edit_identity_local TRUE;
  136.     else
  137.         $edit_identity_local $edit_identity;
  138.  
  139.     // NOTE that $identities is untrusted user input at this point
  140.  
  141.     // make sure no one is being sneaky trying to add identities when they shouldn't
  142.     if (!$edit_identity_local && $num_cur !== count($identities)) {
  143.         exit;
  144.     }
  145.     // only allow growing the identities list if action is "save" and the last ident is populated
  146.     // (the input form always has a blank set of inputs for adding a new identity)
  147.     // (but we assume when $override_edit_identities is used, a plugin is not passing in the
  148.     // identities array with a blank element on the end)
  149.     if (!$override_edit_identity && $edit_identity_local
  150.      && ($action !== 'save' || empty_identity(end($identities)))) {
  151.         array_pop($identities);
  152.     }
  153.     // make sure someone not trying to mess with index numbers
  154.     for ($x 0$x $num_cur $x++// there could be one more when adding but that's ok
  155.         if (!isset($identities[$x]))
  156.             exit;
  157.     }
  158.  
  159.     foreach$identities as $key=>$ident {
  160.  
  161.         if ($edit_identity_local && empty_identity($ident)) {
  162.             continue;
  163.         }
  164.  
  165.         // when user isn't allowed to edit some fields, make sure they are unchanged
  166.         $pref_index ($key $key '');
  167.         if (!$edit_identity_local && !$edit_name)
  168.             $ident['full_name'getPref($data_dir$username'full_name' $pref_index);
  169.         if (!$edit_identity_local)
  170.             $ident['email_address'getPref($data_dir$username'email_address' $pref_index);
  171.         if (!$edit_identity_local && !$edit_reply_to)
  172.             $ident['reply_to'getPref($data_dir$username'reply_to' $pref_index);
  173.  
  174.         switch($action{
  175.  
  176.             case 'makedefault':
  177.  
  178.                 // can only get here if someone is trying to be sneaky
  179.                 if ($num_cur 2exit;
  180.  
  181.                 if ($key == $id{
  182.                     $fixed[0$ident;
  183.  
  184.                     // inform plugins about renumbering of ids
  185.                     do_hook('options_identities_renumber'$id'default');
  186.  
  187.                     continue 2;
  188.                 else {
  189.                     $fixed[$i+1$ident;
  190.                 }
  191.                 break;
  192.  
  193.             case 'move':
  194.  
  195.                 // can only get here if someone is trying to be sneaky
  196.                 if ($num_cur 2exit;
  197.  
  198.                 if ($key == ($id 1)) {
  199.                     $tmp_hold $ident;
  200.  
  201.                     // inform plugins about renumbering of ids
  202.                     do_hook('options_identities_renumber'$id $id 1);
  203.  
  204.                     continue 2;
  205.                 else {
  206.                     $fixed[$i$ident;
  207.  
  208.                     if ($key == $id{
  209.                         $i++;
  210.                         $fixed[$i$tmp_hold;
  211.                     }
  212.                 }
  213.                 break;
  214.  
  215.             case 'delete':
  216.  
  217.                 // can only get here if someone is trying to be sneaky
  218.                 if (!$edit_identity_localexit;
  219.  
  220.                 if ($key == $id{
  221.                     // inform plugins about deleted id
  222.                     do_hook('options_identities_process'$action$id);
  223.  
  224.                     continue 2;
  225.                 else {
  226.                     $fixed[$i$ident;
  227.                 }
  228.                 break;
  229.  
  230.             // Process actions from plugins and save/update action //
  231.             default:
  232.                 /**
  233.                  * send action and id information. number of hook arguments 
  234.                  * differs from 1.4.4 or older and 1.5.0. count($args) can 
  235.                  * be used to detect modified hook. Older hook does not 
  236.                  * provide information that can be useful for plugins.
  237.                  */
  238.                 do_hook('options_identities_process'$action$id);
  239.  
  240.                 $fixed[$i$ident;
  241.  
  242.         }
  243.  
  244.         // Inc array index //
  245.         $i++;
  246.     }
  247.  
  248.     ksort($fixed);
  249.     return $fixed;
  250.  
  251. }
  252.  
  253. /**
  254.  * Function to test if identity is empty
  255.  *
  256.  * @param   array   $identity   Identity Array
  257.  * @return  boolean 
  258.  */
  259. function empty_identity($ident{
  260.     if (empty($ident['full_name']&& empty($ident['email_address']&& empty($ident['signature']&& empty($ident['reply_to'])) {
  261.         return true;
  262.     else {
  263.         return false;
  264.     }
  265. }

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