From 56505a11743d6869f6222f6b9467158edf295a44 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 11 Mar 2010 13:34:01 -0500
Subject: [PATCH] - Options virtuser_* replaced with virtuser_* plugins - Plugin API: Implemented 'email2user' and 'user2email' hooks

---
 program/include/rcube_user.php |   84 +++++-------------------------------------
 1 files changed, 10 insertions(+), 74 deletions(-)

diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index ab44cdc..63ffa63 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -447,29 +447,23 @@
   
   
   /**
-   * Resolve username using a virtuser file
+   * Resolve username using a virtuser plugins
    *
    * @param string E-mail address to resolve
    * @return string Resolved IMAP username
    */
   static function email2user($email)
   {
-    $r = self::findinvirtual('/^' . preg_quote($email, '/') . '\s/');
+    $rcmail = rcmail::get_instance();
+    $plugin = $rcmail->plugins->exec_hook('email2user',
+      array('email' => $email, 'user' => NULL));
 
-    for ($i=0; $i<count($r); $i++)
-    {
-      $data = trim($r[$i]);
-      $arr = preg_split('/\s+/', $data);
-      if (count($arr) > 0)
-        return trim($arr[count($arr)-1]);
-    }
-
-    return NULL;
+    return $plugin['user'];
   }
 
 
   /**
-   * Resolve e-mail address from virtuser file/table
+   * Resolve e-mail address from virtuser plugins
    *
    * @param string User name
    * @param boolean If true returns first found entry
@@ -478,70 +472,12 @@
    */
   static function user2email($user, $first=true, $extended=false)
   {
-    $result = array();
     $rcmail = rcmail::get_instance();
-    $dbh = $rcmail->get_dbh();
+    $plugin = $rcmail->plugins->exec_hook('user2email',
+      array('email' => NULL, 'user' => $user,
+        'first' => $first, 'extended' => $extended));
 
-    // SQL lookup
-    if ($virtuser_query = $rcmail->config->get('virtuser_query')) {
-      $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escapeSimple($user), $virtuser_query));
-      while ($sql_arr = $dbh->fetch_array($sql_result))
-        if (strpos($sql_arr[0], '@')) {
-          $result[] = ($extended && count($sql_arr) > 1) ? $sql_arr : $sql_arr[0];
-          if ($first)
-            return $result[0];
-        }
-    }
-    // File lookup
-    $r = self::findinvirtual('/\s' . preg_quote($user, '/') . '\s*$/');
-    for ($i=0; $i<count($r); $i++)
-    {
-      $data = $r[$i];
-      $arr = preg_split('/\s+/', $data);
-      if (count($arr) > 0 && strpos($arr[0], '@'))
-      {
-        $result[] = trim(str_replace('\\@', '@', $arr[0]));
-
-        if ($first)
-          return $result[0];
-      }
-    }
-    
-    return empty($result) ? NULL : $result;
+    return empty($plugin['email']) ? NULL : $plugin['email'];
   }
   
-  
-  /**
-   * Find matches of the given pattern in virtuser file
-   * 
-   * @param string Regular expression to search for
-   * @return array Matching entries
-   */
-  private static function findinvirtual($pattern)
-  {
-    $result = array();
-    $virtual = null;
-    
-    if ($virtuser_file = rcmail::get_instance()->config->get('virtuser_file'))
-      $virtual = file($virtuser_file);
-    
-    if (empty($virtual))
-      return $result;
-    
-    // check each line for matches
-    foreach ($virtual as $line)
-    {
-      $line = trim($line);
-      if (empty($line) || $line{0}=='#')
-        continue;
-        
-      if (preg_match($pattern, $line))
-        $result[] = $line;
-    }
-    
-    return $result;
-  }
-
 }
-
-

--
Gitblit v1.9.1