From 6ddb16d181e285d4f0ef0ef55bdd0ba787f1b583 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Sat, 17 Nov 2012 10:24:09 -0500 Subject: [PATCH] Merge branch 'master' of github.com:roundcube/roundcubemail --- program/include/rcube_user.php | 32 +++++++++++++++++++++++++++----- 1 files changed, 27 insertions(+), 5 deletions(-) diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php index b92187a..5a8e900 100644 --- a/program/include/rcube_user.php +++ b/program/include/rcube_user.php @@ -5,7 +5,7 @@ | program/include/rcube_user.inc | | | | This file is part of the Roundcube Webmail client | - | Copyright (C) 2005-2010, The Roundcube Dev Team | + | Copyright (C) 2005-2012, The Roundcube Dev Team | | | | Licensed under the GNU General Public License version 3 or | | any later version with exceptions for skins & plugins. | @@ -17,6 +17,7 @@ | | +-----------------------------------------------------------------------+ | Author: Thomas Bruederli <roundcube@gmail.com> | + | Author: Aleksander Machniak <alec@alec.pl> | +-----------------------------------------------------------------------+ */ @@ -24,8 +25,8 @@ /** * Class representing a system user * - * @package Core - * @author Thomas Bruederli <roundcube@gmail.com> + * @package Framework + * @subpackage Core */ class rcube_user { @@ -46,6 +47,13 @@ * @var rcube */ private $rc; + + /** + * Internal identities cache + * + * @var array + */ + private $identities = array(); const SEARCH_ADDRESSBOOK = 1; const SEARCH_MAIL = 2; @@ -213,8 +221,14 @@ */ function get_identity($id = null) { - $result = $this->list_identities($id ? sprintf('AND identity_id = %d', $id) : ''); - return $result[0]; + $id = (int)$id; + // cache identities for better performance + if (!array_key_exists($id, $this->identities)) { + $result = $this->list_identities($id ? 'AND identity_id = ' . $id : ''); + $this->identities[$id] = $result[0]; + } + + return $this->identities[$id]; } @@ -273,6 +287,8 @@ call_user_func_array(array($this->db, 'query'), array_merge(array($sql), $query_params)); + $this->identities = array(); + return $this->db->affected_rows(); } @@ -304,6 +320,8 @@ call_user_func_array(array($this->db, 'query'), array_merge(array($sql), $insert_values)); + + $this->identities = array(); return $this->db->insert_id('identities'); } @@ -339,6 +357,8 @@ $this->ID, $iid); + $this->identities = array(); + return $this->db->affected_rows(); } @@ -359,6 +379,8 @@ " AND del <> 1", $this->ID, $iid); + + unset($this->identities[0]); } } -- Gitblit v1.9.1