From f209717e418cdf54511fab1a6d3a19b528d0c416 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sun, 14 Mar 2010 09:02:29 -0400
Subject: [PATCH] - virtuser_query: support other identity data (#1486148)

---
 CHANGELOG                                 |    1 +
 program/include/rcube_user.php            |   27 +++++++++++++--------------
 plugins/virtuser_query/virtuser_query.php |   23 ++++++++++++++++++++---
 3 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 10630a7..cc11e45 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG RoundCube Webmail
 ===========================
 
+- virtuser_query: support other identity data (#1486148)
 - Options virtuser_* replaced with virtuser_* plugins
 - Plugin API: Implemented 'email2user' and 'user2email' hooks
 - Fix forwarding message omits CC header (#1486305)
diff --git a/plugins/virtuser_query/virtuser_query.php b/plugins/virtuser_query/virtuser_query.php
index 803c270..0264bf8 100644
--- a/plugins/virtuser_query/virtuser_query.php
+++ b/plugins/virtuser_query/virtuser_query.php
@@ -7,7 +7,9 @@
  * SQL query to resolve user names and e-mail addresses from the database
  * %u will be replaced with the current username for login.
  * The query should select the user's e-mail address as first column
- * and optional identity name as second column
+ * and optional identity data columns in specified order:
+ *    name, organization, reply-to, bcc, signature, html_signature
+ *
  * $rcmail_config['virtuser_query'] = '';
  *
  * @version 1.0
@@ -40,12 +42,27 @@
 
 	while ($sql_arr = $dbh->fetch_array($sql_result)) {
 	    if (strpos($sql_arr[0], '@')) {
-		$result[] = ($p['extended'] && count($sql_arr) > 1) ? $sql_arr : $sql_arr[0];
+		if ($p['extended'] && count($sql_arr) > 1) {
+		    $result[] = array(
+			'email' 	=> $sql_arr[0],
+			'name' 		=> $sql_arr[1],
+			'organization'  => $sql_arr[2],
+			'reply-to' 	=> $sql_arr[3],
+			'bcc' 		=> $sql_arr[4],
+			'signature' 	=> $sql_arr[5],
+			'html_signature' => (int)$sql_arr[6],
+    		    );
+		}
+		else {
+		    $result[] = $sql_arr[0];
+		}
 
 		if ($p['first'])
-		    return $result[0];
+		    break;
 	    }
 	}
+	
+	$p['email'] = $result;
 
 	return $p;
     }
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index 63ffa63..835ffe9 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -359,7 +359,7 @@
 
     // try to resolve user in virtuser table and file
     if ($email_list = self::user2email($user, false, true)) {
-      $user_email = is_array($email_list[0]) ? $email_list[0][0] : $email_list[0];
+      $user_email = is_array($email_list[0]) ? $email_list[0]['email'] : $email_list[0];
     }
 
     $data = $rcmail->plugins->exec_hook('create_user',
@@ -407,24 +407,23 @@
       // create new identities records
       $standard = 1;
       foreach ($email_list as $row) {
+	$record = array();
+
         if (is_array($row)) {
-          $email = $row[0];
-          $name = $row[1] ? $row[1] : $user_name;
+	  $record = $row;
         }
         else {
-          $email = $row;
-          $name = $user_name;
+          $record['email'] = $row;
         }
 
-        $plugin = $rcmail->plugins->exec_hook('create_identity', array(
-          'login' => true,
-          'record' => array(
-            'user_id' => $user_id,
-            'name' => strip_newlines($name),
-            'email' => $email,
-            'standard' => $standard,
-          ),
-        ));
+	if (empty($record['name']))
+	  $record['name'] = $user_name;
+        $record['name'] = strip_newlines($record['name']);
+        $record['user_id'] = $user_id;
+        $record['standard'] = $standard;
+
+        $plugin = $rcmail->plugins->exec_hook('create_identity',
+	  array('login' => true, 'record' => $record));
           
         if (!$plugin['abort'] && $plugin['record']['email']) {
           $rcmail->user->insert_identity($plugin['record']);

--
Gitblit v1.9.1