titles was not caching the returned titles and new param for get_links_multiple() to cache the titles of all found links

This commit is contained in:
Ralf Becker 2008-03-08 22:38:09 +00:00
parent 15ca7e90ed
commit b1c2d9ac47

View File

@ -323,9 +323,12 @@ class egw_link extends solink
* @ToDo also query the attachments in a single query, eg. via a directory listing of /apps/$app
* @param string $app
* @param array $ids
* @param boolean $cache_titles=true should all titles be queryed and cached (allows to query each link app only once!)
* @param string $only_app if set return only links from $only_app (eg. only addressbook-entries) or NOT from if $only_app[0]=='!'
* @param string $order='link_lastmod DESC' defaults to newest links first
* @return array of $id => array($links) pairs
*/
static function get_links_multiple($app,array $ids,$only_app='',$order='link_lastmod DESC' )
static function get_links_multiple($app,array $ids,$cache_titles=true,$only_app='',$order='link_lastmod DESC' )
{
$links = solink::get_links($app,$ids,$only_app,$order);
@ -345,6 +348,22 @@ class egw_link extends solink
}
}
}
if ($cache_titles)
{
// agregate links by app
$app_ids = array();
foreach($links as $src_id => &$targets)
{
foreach($targets as $link)
{
$app_ids[$link['app']][] = $link['id'];
}
}
foreach($app_ids as $app => $a_ids)
{
self::titles($app,$a_ids);
}
}
return $links;
}
@ -577,6 +596,10 @@ class egw_link extends solink
*/
static function titles($app,array $ids)
{
if (self::DEBUG)
{
echo "<p>".__METHOD__."($app,".implode(',',$ids).")</p>\n";
}
$titles = $ids_to_query = array();
foreach($ids as $id)
{
@ -591,11 +614,14 @@ class egw_link extends solink
self::title($app,$id); // no titles method --> fallback to query each link separate
}
}
$titles[$id] = $title_cache[$app.':'.$id];
$titles[$id] = self::$title_cache[$app.':'.$id];
}
if ($ids_to_query)
{
$titles = array_merge($titles,ExecMethod(self::$app_register[$app]['titles'],$ids_to_query));
foreach(ExecMethod(self::$app_register[$app]['titles'],$ids_to_query) as $id => $title)
{
$titles[$id] = self::$title_cache[$app.':'.$id] = $title;
}
}
return $titles;
}