- virtuser_query: support other identity data (#1486148)
| | |
| | | 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) |
| | |
| | | * 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 |
| | |
| | | |
| | | 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; |
| | | } |
| | |
| | | |
| | | // 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', |
| | |
| | | // 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']); |