From 197601ef5fa2e6aaabfb6e0baaf56179f7cc1ee3 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Wed, 30 Apr 2008 04:21:42 -0400
Subject: [PATCH] Next step: introduce the application class 'rcmail' and get rid of some global vars

---
 program/include/rcube_user.php |  125 ++++++++++++++++++-----------------------
 1 files changed, 55 insertions(+), 70 deletions(-)

diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index e748758..e125f63 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -29,8 +29,11 @@
  */
 class rcube_user
 {
-  var $ID = null;
-  var $data = null;
+  public $ID = null;
+  public $data = null;
+  public $language = 'en_US';
+  
+  private $db = null;
   
   
   /**
@@ -40,18 +43,19 @@
    */
   function __construct($id = null, $sql_arr = null)
   {
-    global $DB;
+    $this->db = rcmail::get_instance()->get_dbh();
     
     if ($id && !$sql_arr)
     {
-      $sql_result = $DB->query("SELECT * FROM ".get_table_name('users')." WHERE  user_id=?", $id);
-      $sql_arr = $DB->fetch_assoc($sql_result);
+      $sql_result = $this->db->query("SELECT * FROM ".get_table_name('users')." WHERE  user_id=?", $id);
+      $sql_arr = $this->db->fetch_assoc($sql_result);
     }
     
     if (!empty($sql_arr))
     {
       $this->ID = $sql_arr['user_id'];
       $this->data = $sql_arr;
+      $this->language = $sql_arr['language'];
     }
   }
 
@@ -85,7 +89,7 @@
   function get_prefs()
   {
     if ($this->ID && $this->data['preferences'])
-      return unserialize($this->data['preferences']);
+      return array('language' => $this->language) + unserialize($this->data['preferences']);
     else
       return array();
   }
@@ -99,26 +103,26 @@
    */
   function save_prefs($a_user_prefs)
   {
-    global $DB, $CONFIG, $sess_user_lang;
-    
     if (!$this->ID)
       return false;
 
     // merge (partial) prefs array with existing settings
     $a_user_prefs += (array)$this->get_prefs();
+    unset($a_user_prefs['language']);
 
-    $DB->query(
+    $this->db->query(
       "UPDATE ".get_table_name('users')."
        SET    preferences=?,
               language=?
        WHERE  user_id=?",
       serialize($a_user_prefs),
-      $sess_user_lang,
+      $_SESSION['language'],
       $this->ID);
 
-    if ($DB->affected_rows())
+    $this->language = $_SESSION['language'];
+    if ($this->db->affected_rows())
     {
-      $CONFIG = array_merge($CONFIG, $a_user_prefs);
+      rcmail::get_instance()->config->merge($a_user_prefs);
       return true;
     }
 
@@ -134,10 +138,8 @@
    */
   function get_identity($id = null)
   {
-    global $DB;
-    
     $sql_result = $this->list_identities($id ? sprintf('AND identity_id=%d', $id) : '');
-    return $DB->fetch_assoc($sql_result);
+    return $this->db->fetch_assoc($sql_result);
   }
   
   
@@ -148,15 +150,13 @@
    */
   function list_identities($sql_add = '')
   {
-    global $DB;
-    
     // get contacts from DB
-    $sql_result = $DB->query(
+    $sql_result = $this->db->query(
       "SELECT * FROM ".get_table_name('identities')."
        WHERE  del<>1
        AND    user_id=?
        $sql_add
-       ORDER BY ".$DB->quoteIdentifier('standard')." DESC, name ASC",
+       ORDER BY ".$this->db->quoteIdentifier('standard')." DESC, name ASC",
       $this->ID);
     
     return $sql_result;
@@ -172,8 +172,6 @@
    */
   function update_identity($iid, $data)
   {
-    global $DB;
-    
     if (!$this->ID)
       return false;
     
@@ -182,11 +180,11 @@
     foreach ((array)$data as $col => $value)
     {
       $write_sql[] = sprintf("%s=%s",
-        $DB->quoteIdentifier($col),
-        $DB->quote($value));
+        $this->db->quoteIdentifier($col),
+        $this->db->quote($value));
     }
     
-    $DB->query(
+    $this->db->query(
       "UPDATE ".get_table_name('identities')."
        SET ".join(', ', $write_sql)."
        WHERE  identity_id=?
@@ -195,7 +193,7 @@
       $iid,
       $this->ID);
     
-    return $DB->affected_rows();
+    return $this->db->affected_rows();
   }
   
   
@@ -207,25 +205,23 @@
    */
   function insert_identity($data)
   {
-    global $DB;
-    
     if (!$this->ID)
       return false;
 
     $insert_cols = $insert_values = array();
     foreach ((array)$data as $col => $value)
     {
-      $insert_cols[] = $DB->quoteIdentifier($col);
-      $insert_values[] = $DB->quote($value);
+      $insert_cols[] = $this->db->quoteIdentifier($col);
+      $insert_values[] = $this->db->quote($value);
     }
 
-    $DB->query(
+    $this->db->query(
       "INSERT INTO ".get_table_name('identities')."
         (user_id, ".join(', ', $insert_cols).")
        VALUES (?, ".join(', ', $insert_values).")",
       $this->ID);
 
-    return $DB->insert_id(get_sequence_name('identities'));
+    return $this->db->insert_id(get_sequence_name('identities'));
   }
   
   
@@ -237,24 +233,22 @@
    */
   function delete_identity($iid)
   {
-    global $DB;
-    
     if (!$this->ID)
       return false;
 
     if (!$this->ID || $this->ID == '')
       return false;
 
-    $sql_result = $DB->query("SELECT count(*) AS ident_count FROM " .
+    $sql_result = $this->db->query("SELECT count(*) AS ident_count FROM " .
       get_table_name('identities') .
       " WHERE user_id = ? AND del <> 1",
       $this->ID);
 
-    $sql_arr = $DB->fetch_assoc($sql_result);
+    $sql_arr = $this->db->fetch_assoc($sql_result);
     if ($sql_arr['ident_count'] <= 1)
       return false;
     
-    $DB->query(
+    $this->db->query(
       "UPDATE ".get_table_name('identities')."
        SET    del=1
        WHERE  user_id=?
@@ -262,7 +256,7 @@
       $this->ID,
       $iid);
 
-    return $DB->affected_rows();
+    return $this->db->affected_rows();
   }
   
   
@@ -273,13 +267,11 @@
    */
   function set_default($iid)
   {
-    global $DB;
-    
     if ($this->ID && $iid)
     {
-      $DB->query(
+      $this->db->query(
         "UPDATE ".get_table_name('identities')."
-         SET ".$DB->quoteIdentifier('standard')."='0'
+         SET ".$this->db->quoteIdentifier('standard')."='0'
          WHERE  user_id=?
          AND    identity_id<>?
          AND    del<>1",
@@ -294,13 +286,11 @@
    */
   function touch()
   {
-    global $DB;
-    
     if ($this->ID)
     {
-      $DB->query(
+      $this->db->query(
         "UPDATE ".get_table_name('users')."
-         SET    last_login=".$DB->now()."
+         SET    last_login=".$this->db->now()."
          WHERE  user_id=?",
         $this->ID);
     }
@@ -323,14 +313,13 @@
    * @param string IMAP user name
    * @param string IMAP host name
    * @return object rcube_user New user instance
-   * @static
    */
-  function query($user, $host)
+  static function query($user, $host)
   {
-    global $DB;
+    $dbh = rcmail::get_instance()->get_dbh();
     
     // query if user already registered
-    $sql_result = $DB->query(
+    $sql_result = $dbh->query(
       "SELECT * FROM ".get_table_name('users')."
        WHERE  mail_host=? AND (username=? OR alias=?)",
       $host,
@@ -338,7 +327,7 @@
       $user);
       
     // user already registered -> overwrite username
-    if ($sql_arr = $DB->fetch_assoc($sql_result))
+    if ($sql_arr = $dbh->fetch_assoc($sql_result))
       return new rcube_user($sql_arr['user_id'], $sql_arr);
     else
       return false;
@@ -351,28 +340,27 @@
    * @param string IMAP user name
    * @param string IMAP host
    * @return object rcube_user New user instance
-   * @static
    */
-  function create($user, $host)
+  static function create($user, $host)
   {
-    global $DB, $CONFIG;
-    
     $user_email = '';
+    $rcmail = rcmail::get_instance();
+    $dbh = $rcmail->get_dbh();
 
     // try to resolve user in virtusertable
-    if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@'))
+    if ($rcmail->config->get('virtuser_file') && !strpos($user, '@'))
       $user_email = rcube_user::user2email($user);
 
-    $DB->query(
+    $dbh->query(
       "INSERT INTO ".get_table_name('users')."
         (created, last_login, username, mail_host, alias, language)
-       VALUES (".$DB->now().", ".$DB->now().", ?, ?, ?, ?)",
+       VALUES (".$dbh->now().", ".$dbh->now().", ?, ?, ?, ?)",
       strip_newlines($user),
       strip_newlines($host),
       strip_newlines($user_email),
-      $_SESSION['user_lang']);
+      $_SESSION['language']);
 
-    if ($user_id = $DB->insert_id(get_sequence_name('users')))
+    if ($user_id = $dbh->insert_id(get_sequence_name('users')))
     {
       $mail_domain = rcmail_mail_domain($host);
 
@@ -382,13 +370,13 @@
       $user_name = $user != $user_email ? $user : '';
 
       // try to resolve the e-mail address from the virtuser table
-      if (!empty($CONFIG['virtuser_query']) &&
-          ($sql_result = $DB->query(preg_replace('/%u/', $DB->escapeSimple($user), $CONFIG['virtuser_query']))) &&
-          ($DB->num_rows()>0))
+      if ($virtuser_query = $rcmail->config->get('virtuser_query') &&
+          ($sql_result = $dbh->query(preg_replace('/%u/', $dbh->escapeSimple($user), $virtuser_query))) &&
+          ($dbh->num_rows() > 0))
       {
-        while ($sql_arr = $DB->fetch_array($sql_result))
+        while ($sql_arr = $dbh->fetch_array($sql_result))
         {
-          $DB->query(
+          $dbh->query(
             "INSERT INTO ".get_table_name('identities')."
               (user_id, del, standard, name, email)
              VALUES (?, 0, 1, ?, ?)",
@@ -400,7 +388,7 @@
       else
       {
         // also create new identity records
-        $DB->query(
+        $dbh->query(
           "INSERT INTO ".get_table_name('identities')."
             (user_id, del, standard, name, email)
            VALUES (?, 0, 1, ?, ?)",
@@ -428,9 +416,8 @@
    *
    * @param string E-mail address to resolve
    * @return string Resolved IMAP username
-   * @static
    */
-  function email2user($email)
+  static function email2user($email)
   {
     $user = $email;
     $r = rcmail_findinvirtual("^$email");
@@ -455,9 +442,8 @@
    *
    * @param string User name
    * @return string Resolved e-mail address
-   * @static
    */
-  function user2email($user)
+  static function user2email($user)
   {
     $email = "";
     $r = rcmail_findinvirtual("$user$");
@@ -479,4 +465,3 @@
 }
 
 
-?>

--
Gitblit v1.9.1