Happy New Year
[squirrelmail.git] / functions / identity.php
index 62bcf3b5fb8f7cae0aebbd626f1c56fd1e6c8207..479896b9928032c53c3459197ed9eda68b7ac8f6 100644 (file)
@@ -3,24 +3,15 @@
 /**
  * identity.php
  *
- * Copyright (c) 1999-2005 The SquirrelMail Project Team
- * Licensed under the GNU GPL. For full terms see the file COPYING.
- *
  * This contains utility functions for dealing with multiple identities
  *
+ * @copyright 1999-2020 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
  * @since 1.4.2
  */
 
-/** @ignore
- * Used to simplify includes */
-if (!defined('SM_PATH')) {
-    define('SM_PATH','../');
-}
-
-/** preference and signature functions */
-include_once(SM_PATH . 'include/load_prefs.php');
 
 /**
  * Returns an array of all the identities.
@@ -52,8 +43,9 @@ function get_identities() {
     /* If there are any others, add them to the array */
     if (!empty($num_ids) && $num_ids > 1) {
         for ($i=1;$i<$num_ids;$i++) {
+            $thisem = getPref($data_dir,$username,'email_address' . $i);
             $identities[] = array('full_name' => getPref($data_dir,$username,'full_name' . $i),
-            'email_address' => getPref($data_dir,$username,'email_address' . $i),
+            'email_address' => empty($thisem)?$em:$thisem,
             'reply_to' => getPref($data_dir,$username,'reply_to' . $i),
             'signature' => getSig($data_dir,$username,$i),
             'index' => $i );
@@ -79,7 +71,7 @@ function save_identities($identities) {
 
 
     $num_cur = getPref($data_dir, $username, 'identities');
-    
+
     $cnt = count($identities);
 
     // Remove any additional identities in prefs //
@@ -141,6 +133,11 @@ function sqfixidentities( $identities, $id, $action ) {
 
                 if ($key == $id) {
                     $fixed[0] = $ident;
+
+                    // inform plugins about renumbering of ids
+                    $temp = array(&$id, 'default');
+                    do_hook('options_identities_renumber', $temp);
+
                     continue 2;
                 } else {
                     $fixed[$i+1] = $ident;
@@ -151,6 +148,11 @@ function sqfixidentities( $identities, $id, $action ) {
 
                 if ($key == ($id - 1)) {
                     $tmp_hold = $ident;
+
+                    // inform plugins about renumbering of ids
+                    $temp = array(&$id , $id - 1);
+                    do_hook('options_identities_renumber', $temp);
+
                     continue 2;
                 } else {
                     $fixed[$i] = $ident;
@@ -165,14 +167,27 @@ function sqfixidentities( $identities, $id, $action ) {
             case 'delete':
 
                 if ($key == $id) {
+                    // inform plugins about deleted id
+                    $temp = array(&$action, &$id);
+                    do_hook('options_identities_process', $temp);
+
                     continue 2;
                 } else {
                     $fixed[$i] = $ident;
                 }
                 break;
 
-            // we should never hit this but just in case //
+            // Process actions from plugins and save/update action //
             default:
+                /**
+                 * send action and id information. number of hook arguments
+                 * differs from 1.4.4 or older and 1.5.0. count($args) can
+                 * be used to detect modified hook. Older hook does not
+                 * provide information that can be useful for plugins.
+                 */
+                $temp = array(&$action, &$id);
+                do_hook('options_identities_process', $temp);
+
                 $fixed[$i] = $ident;
 
         }
@@ -201,4 +216,61 @@ function empty_identity($ident) {
     }
 }
 
-?>
\ No newline at end of file
+/**
+ * Construct our "From:" header based on
+ * a supplied identity number.
+ * Will fall back when no sensible email address has been defined.
+ *
+ * @param   int $identity   identity# to use
+ * @since 1.5.2
+ */
+function build_from_header($identity = 0) {
+
+    global $domain;
+
+    $idents = get_identities();
+
+    if (! isset($idents[$identity]) ) $identity = 0;
+
+    if ( !empty($idents[$identity]['full_name']) ) {
+        $from_name = $idents[$identity]['full_name'];
+    }
+
+    $from_mail = $idents[$identity]['email_address'];
+    if (strpos($from_mail, '@') === FALSE)
+        $from_mail .= '@' . $domain;
+    
+    if ( isset($from_name) ) {
+        $from_name_encoded = encodeHeader('"' . $from_name . '"');
+        if ($from_name_encoded != $from_name) {
+            return $from_name_encoded . ' <' . $from_mail . '>';
+        }
+        return '"' . $from_name . '" <' . $from_mail . '>';
+    }
+    return $from_mail;
+}
+
+/**
+ * Find a matching identity based on a set of emailaddresses.
+ * Will return the first identity to have a matching address.
+ * When nothing found, returns the default identity.
+ *
+ * @param needles   array   list of mailadresses
+ * @returns int identity
+ * @since 1.5.2
+ */
+function find_identity($needles) {
+    $idents = get_identities();
+    if ( count($idents) == 1 || empty($needles) ) return 0;
+
+    foreach ( $idents as $nr => $ident ) {
+        if ( isset($ident['email_address']) ) {
+            foreach ( $needles as $needle ) {
+                if ( strcasecmp($needle, $ident['email_address']) == 0 ) {
+                    return $nr;
+                }
+            }
+        }
+    }
+    return 0;
+}