diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | plugins/virtuser_query/virtuser_query.php | 23 | ||||
-rw-r--r-- | program/include/rcube_user.php | 27 |
3 files changed, 34 insertions, 17 deletions
@@ -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 803c2702d..0264bf8f9 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 @@ class virtuser_query extends rcube_plugin 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 63ffa63ec..835ffe955 100644 --- a/program/include/rcube_user.php +++ b/program/include/rcube_user.php @@ -359,7 +359,7 @@ class rcube_user // 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 @@ class rcube_user // 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']); |