From ce92ba767a9557daf7f18be94882dd7e6f4591fb Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 30 Sep 2010 09:24:33 -0400
Subject: [PATCH] - Plugin API: improved 'abort' flag handling, added 'result' item in some hooks: group_*, contact_*, identity_* (#1486914)
---
program/include/rcube_user.php | 121 +++++++++++++++++++++------------------
1 files changed, 65 insertions(+), 56 deletions(-)
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index b1263ca..e4506cf 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -4,8 +4,8 @@
+-----------------------------------------------------------------------+
| program/include/rcube_user.inc |
| |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2010, RoundCube Dev. - Switzerland |
+ | This file is part of the Roundcube Webmail client |
+ | Copyright (C) 2005-2010, Roundcube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -33,18 +33,24 @@
public $data = null;
public $language = null;
+ /**
+ * Holds database connection.
+ *
+ * @var rcube_mdb2
+ */
private $db = null;
/**
* Object constructor
*
- * @param object DB Database connection
+ * @param int $id User id
+ * @param array $sql_arr SQL result set
*/
function __construct($id = null, $sql_arr = null)
{
$this->db = rcmail::get_instance()->get_dbh();
-
+
if ($id && !$sql_arr) {
$sql_result = $this->db->query(
"SELECT * FROM ".get_table_name('users')." WHERE user_id = ?", $id);
@@ -62,7 +68,7 @@
/**
* Build a user name string (as e-mail address)
*
- * @param string Username part (empty or 'local' or 'domain')
+ * @param string $part Username part (empty or 'local' or 'domain')
* @return string Full user name or its part
*/
function get_username($part = null)
@@ -74,9 +80,11 @@
if ($part == 'local') {
return $local;
}
- // if no domain was provided use the default if available
- if (empty($domain))
- $domain = $this->data['mail_host'];
+ // if no domain was provided...
+ if (empty($domain)) {
+ $rcmail = rcmail::get_instance();
+ $domain = $rcmail->config->mail_domain($this->data['mail_host']);
+ }
if ($part == 'domain') {
return $domain;
@@ -112,21 +120,21 @@
/**
* Write the given user prefs to the user's record
*
- * @param array User prefs to save
+ * @param array $a_user_prefs User prefs to save
* @return boolean True on success, False on failure
*/
function save_prefs($a_user_prefs)
{
if (!$this->ID)
return false;
-
+
$config = rcmail::get_instance()->config;
$old_prefs = (array)$this->get_prefs();
// merge (partial) prefs array with existing settings
$save_prefs = $a_user_prefs + $old_prefs;
unset($save_prefs['language']);
-
+
// don't save prefs with default values if they haven't been changed yet
foreach ($a_user_prefs as $key => $value) {
if (!isset($old_prefs[$key]) && ($value == $config->get($key)))
@@ -159,7 +167,7 @@
/**
* Get default identity of this user
*
- * @param int Identity ID. If empty, the default identity is returned
+ * @param int $id Identity ID. If empty, the default identity is returned
* @return array Hash array with all cols of the identity record
*/
function get_identity($id = null)
@@ -172,6 +180,7 @@
/**
* Return a list of all identities linked with this user
*
+ * @param string $sql_add Optional WHERE clauses
* @return array List of identities
*/
function list_identities($sql_add = '')
@@ -184,11 +193,11 @@
($sql_add ? " ".$sql_add : "").
" ORDER BY ".$this->db->quoteIdentifier('standard')." DESC, name ASC, identity_id ASC",
$this->ID);
-
+
while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
$result[] = $sql_arr;
}
-
+
return $result;
}
@@ -196,8 +205,8 @@
/**
* Update a specific identity record
*
- * @param int Identity ID
- * @param array Hash array with col->value pairs to save
+ * @param int $iid Identity ID
+ * @param array $data Hash array with col->value pairs to save
* @return boolean True if saved successfully, false if nothing changed
*/
function update_identity($iid, $data)
@@ -206,7 +215,7 @@
return false;
$query_cols = $query_params = array();
-
+
foreach ((array)$data as $col => $value) {
$query_cols[] = $this->db->quoteIdentifier($col) . ' = ?';
$query_params[] = $value;
@@ -222,15 +231,15 @@
call_user_func_array(array($this->db, 'query'),
array_merge(array($sql), $query_params));
-
+
return $this->db->affected_rows();
}
-
-
+
+
/**
* Create a new identity record linked with this user
*
- * @param array Hash array with col->value pairs to save
+ * @param array $data Hash array with col->value pairs to save
* @return int The inserted identity ID or false on error
*/
function insert_identity($data)
@@ -257,12 +266,12 @@
return $this->db->insert_id('identities');
}
-
-
+
+
/**
* Mark the given identity as deleted
*
- * @param int Identity ID
+ * @param int $iid Identity ID
* @return boolean True if deleted successfully, false if nothing changed
*/
function delete_identity($iid)
@@ -280,7 +289,7 @@
// we'll not delete last identity
if ($sql_arr['ident_count'] <= 1)
return false;
-
+
$this->db->query(
"UPDATE ".get_table_name('identities').
" SET del = 1, changed = ".$this->db->now().
@@ -291,12 +300,12 @@
return $this->db->affected_rows();
}
-
-
+
+
/**
* Make this identity the default one for this user
*
- * @param int The identity ID
+ * @param int $iid The identity ID
*/
function set_default($iid)
{
@@ -311,8 +320,8 @@
$iid);
}
}
-
-
+
+
/**
* Update user's last_login timestamp
*/
@@ -326,8 +335,8 @@
$this->ID);
}
}
-
-
+
+
/**
* Clear the saved object state
*/
@@ -336,43 +345,43 @@
$this->ID = null;
$this->data = null;
}
-
-
+
+
/**
* Find a user record matching the given name and host
*
- * @param string IMAP user name
- * @param string IMAP host name
- * @return object rcube_user New user instance
+ * @param string $user IMAP user name
+ * @param string $host IMAP host name
+ * @return rcube_user New user instance
*/
static function query($user, $host)
{
$dbh = rcmail::get_instance()->get_dbh();
-
+
// query for matching user name
$query = "SELECT * FROM ".get_table_name('users')." WHERE mail_host = ? AND %s = ?";
$sql_result = $dbh->query(sprintf($query, 'username'), $host, $user);
-
+
// query for matching alias
if (!($sql_arr = $dbh->fetch_assoc($sql_result))) {
$sql_result = $dbh->query(sprintf($query, 'alias'), $host, $user);
$sql_arr = $dbh->fetch_assoc($sql_result);
}
-
+
// user already registered -> overwrite username
if ($sql_arr)
return new rcube_user($sql_arr['user_id'], $sql_arr);
else
return false;
}
-
-
+
+
/**
* Create a new user record and return a rcube_user instance
*
- * @param string IMAP user name
- * @param string IMAP host
- * @return object rcube_user New user instance
+ * @param string $user IMAP user name
+ * @param string $host IMAP host
+ * @return rcube_user New user instance
*/
static function create($user, $host)
{
@@ -385,7 +394,7 @@
$user_email = is_array($email_list[0]) ? $email_list[0]['email'] : $email_list[0];
}
- $data = $rcmail->plugins->exec_hook('create_user',
+ $data = $rcmail->plugins->exec_hook('user_create',
array('user'=>$user, 'user_name'=>$user_name, 'user_email'=>$user_email));
// plugin aborted this operation
@@ -404,7 +413,7 @@
strip_newlines($user),
strip_newlines($host),
strip_newlines($data['alias'] ? $data['alias'] : $user_email),
- $_SESSION['language']);
+ strip_newlines($data['language'] ? $data['language'] : $_SESSION['language']));
if ($user_id = $dbh->insert_id('users')) {
// create rcube_user instance to make plugin hooks work
@@ -444,9 +453,9 @@
$record['user_id'] = $user_id;
$record['standard'] = $standard;
- $plugin = $rcmail->plugins->exec_hook('create_identity',
+ $plugin = $rcmail->plugins->exec_hook('identity_create',
array('login' => true, 'record' => $record));
-
+
if (!$plugin['abort'] && $plugin['record']['email']) {
$rcmail->user->insert_identity($plugin['record']);
}
@@ -461,15 +470,15 @@
'file' => __FILE__,
'message' => "Failed to create new user"), true, false);
}
-
+
return $user_id ? $user_instance : false;
}
-
-
+
+
/**
* Resolve username using a virtuser plugins
*
- * @param string E-mail address to resolve
+ * @param string $email E-mail address to resolve
* @return string Resolved IMAP username
*/
static function email2user($email)
@@ -485,9 +494,9 @@
/**
* Resolve e-mail address from virtuser plugins
*
- * @param string User name
- * @param boolean If true returns first found entry
- * @param boolean If true returns email as array (email and name for identity)
+ * @param string $user User name
+ * @param boolean $first If true returns first found entry
+ * @param boolean $extended If true returns email as array (email and name for identity)
* @return mixed Resolved e-mail address string or array of strings
*/
static function user2email($user, $first=true, $extended=false)
--
Gitblit v1.9.1