Various optimizations to the API. This also does a little internal caching of some of the account data, but, only for a single page session.

This commit is contained in:
skeeter 2001-08-15 02:14:18 +00:00
parent 5044e863f4
commit 6da089837d
9 changed files with 97 additions and 34 deletions

View File

@ -243,7 +243,7 @@
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
static $name_list; static $name_list;
if($name_list[$account_lid]) if(@isset($name_list[$account_lid]))
{ {
return $name_list[$account_lid]; return $name_list[$account_lid];
} }
@ -252,13 +252,13 @@
if($this->db->num_rows()) if($this->db->num_rows())
{ {
$this->db->next_record(); $this->db->next_record();
$name_list[$account_lid] = $this->db->f('account_id'); $name_list[$account_lid] = intval($this->db->f('account_id'));
return intval($this->db->f('account_id'));
} }
else else
{ {
return False; $name_list[$account_lid] = False;
} }
return $name_list[$account_lid];
} }
function id2name($account_id) function id2name($account_id)
@ -266,7 +266,7 @@
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
static $id_list; static $id_list;
if($id_list[$account_id]) if(isset($id_list[$account_id]))
{ {
return $id_list[$account_id]; return $id_list[$account_id];
} }
@ -276,29 +276,35 @@
{ {
$this->db->next_record(); $this->db->next_record();
$id_list[$account_id] = $this->db->f('account_lid'); $id_list[$account_id] = $this->db->f('account_lid');
return $this->db->f('account_lid');
} }
else else
{ {
return False; $id_list[$account_id] = False;
} }
return $id_list[$account_id];
} }
function get_type($accountid = '') function get_type($accountid = '')
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
static $account_type;
$account_id = get_account_id($accountid); $account_id = get_account_id($accountid);
if(@isset($account_type[$account_id]))
{
return $account_type[$account_id];
}
$this->db->query("SELECT account_type FROM phpgw_accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__); $this->db->query("SELECT account_type FROM phpgw_accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__);
if ($this->db->num_rows()) if ($this->db->num_rows())
{ {
$this->db->next_record(); $this->db->next_record();
return $this->db->f('account_type'); $account_type[$account_id] = $this->db->f('account_type');
} }
else else
{ {
return False; $account_type[$account_id] = False;
} }
return $account_type[$account_id];
} }
/* /*
@ -308,16 +314,28 @@
function exists($account) function exists($account)
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
/* This sets up internal caching variables for this functon */
static $by_id, $by_lid;
if(gettype($account) == 'integer') if(gettype($account) == 'integer')
{ {
$sql_name = 'account_id'; $sql_name = 'account_id';
$ldap_name = 'uidnumber'; $ldap_name = 'uidnumber';
/* If data is cached, use it. */
if(@isset($by_id[$account]))
{
return $by_id[$account];
}
} }
else else
{ {
$sql_name = 'account_lid'; $sql_name = 'account_lid';
$ldap_name = 'uid'; $ldap_name = 'uid';
/* If data is cached, use it. */
if(@isset($by_lid[$account]))
{
return $by_lid[$account];
}
} }
$this->db->query("SELECT count(*) FROM phpgw_accounts WHERE $sql_name='$account'",__LINE__,__FILE__); $this->db->query("SELECT count(*) FROM phpgw_accounts WHERE $sql_name='$account'",__LINE__,__FILE__);
$this->db->next_record(); $this->db->next_record();
@ -335,6 +353,18 @@
$in += 2; $in += 2;
} }
/* echo "<p>class_accounts_ldap->exists('$account') == $in</p>"; */ /* echo "<p>class_accounts_ldap->exists('$account') == $in</p>"; */
/* This sets up internal caching for this functon */
if($sql_name == 'account_id')
{
$by_id[$account] = $in;
$by_lid[$this->id2name($account)] = $in;
}
else
{
$by_lid[$account] = $in;
$by_id[$this->name2id($account)] = $in;
}
return $in; return $in;
} }

View File

@ -172,13 +172,13 @@
if($this->db->num_rows()) if($this->db->num_rows())
{ {
$this->db->next_record(); $this->db->next_record();
$name_list[$account_lid] = $this->db->f('account_id'); $name_list[$account_lid] = intval($this->db->f('account_id'));
return $this->db->f('account_id');
} }
else else
{ {
return False; $name_list[$account_lid] = False;
} }
return $name_list[$account_lid];
} }
function id2name($account_id) function id2name($account_id)
@ -196,43 +196,73 @@
{ {
$this->db->next_record(); $this->db->next_record();
$id_list[$account_id] = $this->db->f('account_lid'); $id_list[$account_id] = $this->db->f('account_lid');
return $this->db->f('account_lid');
} }
else else
{ {
return False; $id_list[$account_id] = False;
} }
return $id_list[$account_id];
} }
function get_type($accountid) function get_type($accountid)
{ {
global $phpgw, $phpgw_info; global $phpgw, $phpgw_info;
static $account_type;
$account_id = get_account_id($accountid); $account_id = get_account_id($accountid);
if(@isset($account_type[$account_id]))
{
return $account_type[$account_id];
}
$this->db->query("SELECT account_type FROM phpgw_accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__); $this->db->query("SELECT account_type FROM phpgw_accounts WHERE account_id='".$account_id."'",__LINE__,__FILE__);
if ($this->db->num_rows()) if ($this->db->num_rows())
{ {
$this->db->next_record(); $this->db->next_record();
return $this->db->f('account_type'); $account_type[$account_id] = $this->db->f('account_type');
} }
else else
{ {
return False; $account_type[$account_id] = False;
} }
return $account_type[$account_id];
} }
function exists($account_lid) function exists($account_lid)
{ {
static $by_id, $by_lid;
$sql = "SELECT count(account_id) FROM phpgw_accounts WHERE ";
if(gettype($account_lid) == 'integer') if(gettype($account_lid) == 'integer')
{ {
$account_id = $account_lid; if(@isset($by_id[$account_lid]))
settype($account_lid,'string'); {
$account_lid = $this->id2name($account_id); return $by_id[$account_lid];
}
$sql .= "account_id = ".$account_lid;
}
else
{
if(@isset($by_lid[$account_lid]))
{
return $by_lid[$account_lid];
}
$sql .= "account_lid = '".$account_lid."'";
} }
$this->db->query("SELECT count(*) FROM phpgw_accounts WHERE account_lid='".$account_lid."'",__LINE__,__FILE__); $this->db->query($sql,__LINE__,__FILE__);
$this->db->next_record(); $this->db->next_record();
return $this->db->f(0) > 0; $ret_val = $this->db->f(0) > 0;
if(gettype($account_lid) == 'integer')
{
$by_id[$account_lid] = $ret_val;
$by_lid[$this->id2name($account_lid)] = $ret_val;
}
else
{
$by_lid[$account_lid] = $ret_val;
$by_id[$this->name2id($account_lid)] = $ret_val;
}
return $ret_val;
} }
function create($account_info) function create($account_info)

View File

@ -254,14 +254,17 @@
function exists($account_lid) function exists($account_lid)
{ {
$sql = "SELECT count(account_id) FROM phpgw_accounts WHERE ";
if(gettype($account_lid) == 'integer') if(gettype($account_lid) == 'integer')
{ {
$account_id = $account_lid; $sql .= "account_id = ".$account_lid;
settype($account_lid,'string'); }
$account_lid = $this->id2name($account_id); else
{
$sql .= "account_lid = '".$account_lid."'";
} }
$this->db->query("SELECT count(*) FROM phpgw_accounts WHERE account_lid='".$account_lid."'",__LINE__,__FILE__); $this->db->query($sql,__LINE__,__FILE__);
$this->db->next_record(); $this->db->next_record();
return $this->db->f(0) > 0; return $this->db->f(0) > 0;
} }

View File

@ -72,7 +72,7 @@
default: return False; default: return False;
} }
$this->db->query("select count(*) from phpgw_categories $w",__LINE__,__FILE__); $this->db->query("select count(cat_id) from phpgw_categories $w",__LINE__,__FILE__);
$this->db->next_record(); $this->db->next_record();
return $this->db->f(0); return $this->db->f(0);
@ -475,7 +475,7 @@
$cat_exists = " cat_name='" . addslashes($cat_name) . "' AND cat_id != '$cat_id' "; $cat_exists = " cat_name='" . addslashes($cat_name) . "' AND cat_id != '$cat_id' ";
} }
$this->db->query("select count(*) from phpgw_categories where $cat_exists $filter",__LINE__,__FILE__); $this->db->query("select count(cat_id) from phpgw_categories where $cat_exists $filter",__LINE__,__FILE__);
$this->db->next_record(); $this->db->next_record();

View File

@ -243,13 +243,13 @@
{ {
return (isset($GLOBALS['phpgw_info']['user']['account_id'])?$GLOBALS['phpgw_info']['user']['account_id']:0); return (isset($GLOBALS['phpgw_info']['user']['account_id'])?$GLOBALS['phpgw_info']['user']['account_id']:0);
} }
elseif (gettype($default_id) == 'string') elseif (is_string($default_id))
{ {
return $GLOBALS['phpgw']->accounts->name2id($default_id); return $GLOBALS['phpgw']->accounts->name2id($default_id);
} }
return intval($default_id); return intval($default_id);
} }
elseif (gettype($account_id) == 'string') elseif (is_string($account_id))
{ {
if($GLOBALS['phpgw']->accounts->exists(intval($account_id)) == True) if($GLOBALS['phpgw']->accounts->exists(intval($account_id)) == True)
{ {
@ -412,7 +412,7 @@
} }
$GLOBALS['phpgw']->db->Halt_On_Error = 'no'; $GLOBALS['phpgw']->db->Halt_On_Error = 'no';
@$GLOBALS['phpgw']->db->query("select count(*) from phpgw_config"); @$GLOBALS['phpgw']->db->query("select count(config_name) from phpgw_config");
if (! @$GLOBALS['phpgw']->db->next_record()) if (! @$GLOBALS['phpgw']->db->next_record())
{ {
$setup_dir = ereg_replace($PHP_SELF,'index.php','setup/'); $setup_dir = ereg_replace($PHP_SELF,'index.php','setup/');

View File

@ -79,7 +79,7 @@
if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers'])) if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers']))
{ {
$db = $phpgw->db; $db = $phpgw->db;
$db->query("select count(*) from phpgw_sessions where session_flags != 'A'"); $db->query("select count(session_id) from phpgw_sessions where session_flags != 'A'");
$db->next_record(); $db->next_record();
$tpl->set_var('current_users','<a href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;' $tpl->set_var('current_users','<a href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;'
. lang('Current users') . ': ' . $db->f(0) . '</a>'); . lang('Current users') . ': ' . $db->f(0) . '</a>');

View File

@ -106,7 +106,7 @@
if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers'])) if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers']))
{ {
$db = $phpgw->db; $db = $phpgw->db;
$db->query('select count(*) from phpgw_sessions'); $db->query('select count(session_id) from phpgw_sessions');
$db->next_record(); $db->next_record();
$tpl->set_var("current_users",'<a href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;' $tpl->set_var("current_users",'<a href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;'
. lang('Current users') . ': ' . $db->f(0) . '</a>'); . lang('Current users') . ': ' . $db->f(0) . '</a>');

View File

@ -79,7 +79,7 @@
if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers'])) if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers']))
{ {
$db = $phpgw->db; $db = $phpgw->db;
$db->query("select count(*) from phpgw_sessions"); $db->query("select count(session_id) from phpgw_sessions");
$db->next_record(); $db->next_record();
$tpl->set_var('current_users','<a href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;' $tpl->set_var('current_users','<a href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;'
. lang('Current users') . ': ' . $db->f(0) . '</a>'); . lang('Current users') . ': ' . $db->f(0) . '</a>');

View File

@ -89,7 +89,7 @@
if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers'])) if (isset($phpgw_info['navbar']['admin']) && isset($phpgw_info['user']['preferences']['common']['show_currentusers']))
{ {
$db = $phpgw->db; $db = $phpgw->db;
$db->query("select count(*) from phpgw_sessions where session_flags != 'A'"); $db->query("select count(session_id) from phpgw_sessions where session_flags != 'A'");
$db->next_record(); $db->next_record();
$tpl->set_var('current_users','<a style="font-family: Geneva,Arial,Helvetica,sans-serif; font-size: 12pt;" href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;' $tpl->set_var('current_users','<a style="font-family: Geneva,Arial,Helvetica,sans-serif; font-size: 12pt;" href="' . $phpgw->link('/admin/currentusers.php') . '">&nbsp;'
. lang('Current users') . ': ' . $db->f(0) . '</a>'); . lang('Current users') . ': ' . $db->f(0) . '</a>');