Guarantee outgoing addresses have a domain part
[squirrelmail.git] / functions / identity.php
index 10c377ebcdb60940bef4ffb2d7a903a755715136..4f80b0a4c790934627cad520255d4ef01d997af0 100644 (file)
@@ -5,7 +5,7 @@
  *
  * This contains utility functions for dealing with multiple identities
  *
- * @copyright © 1999-2006 The SquirrelMail Project Team
+ * @copyright © 1999-2007 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
@@ -43,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 );
@@ -134,7 +135,8 @@ function sqfixidentities( $identities, $id, $action ) {
                     $fixed[0] = $ident;
 
                     // inform plugins about renumbering of ids
-                    do_hook('options_identities_renumber', $id, 'default');
+                    $temp = array(&$id, 'default');
+                    do_hook('options_identities_renumber', $temp);
 
                     continue 2;
                 } else {
@@ -148,7 +150,8 @@ function sqfixidentities( $identities, $id, $action ) {
                     $tmp_hold = $ident;
 
                     // inform plugins about renumbering of ids
-                    do_hook('options_identities_renumber', $id , $id - 1);
+                    $temp = array(&$id , $id - 1);
+                    do_hook('options_identities_renumber', $temp);
 
                     continue 2;
                 } else {
@@ -165,7 +168,8 @@ function sqfixidentities( $identities, $id, $action ) {
 
                 if ($key == $id) {
                     // inform plugins about deleted id
-                    do_hook('options_identities_process', $action, $id);
+                    $temp = array(&$action, &$id);
+                    do_hook('options_identities_process', $temp);
 
                     continue 2;
                 } else {
@@ -181,7 +185,8 @@ function sqfixidentities( $identities, $id, $action ) {
                  * be used to detect modified hook. Older hook does not
                  * provide information that can be useful for plugins.
                  */
-                do_hook('options_identities_process', $action, $id);
+                $temp = array(&$action, &$id);
+                do_hook('options_identities_process', $temp);
 
                 $fixed[$i] = $ident;
 
@@ -211,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;
+}