added basic update of own cache, to work around failed sitemgr install via setup (cant read just added categories)

This commit is contained in:
Ralf Becker 2012-02-14 17:36:35 +00:00
parent 7d2572dca5
commit 2ba0b31c43

View File

@ -425,7 +425,7 @@ class categories
{ {
$values['level'] = 0; $values['level'] = 0;
} }
$this->db->insert(self::TABLE,array( $this->db->insert(self::TABLE,$cat=array(
'cat_parent' => $values['parent'], 'cat_parent' => $values['parent'],
'cat_owner' => isset($values['owner']) ? $values['owner'] : $this->account_id, 'cat_owner' => isset($values['owner']) ? $values['owner'] : $this->account_id,
'cat_access' => isset($values['access']) ? $values['access'] : 'public', 'cat_access' => isset($values['access']) ? $values['access'] : 'public',
@ -438,14 +438,15 @@ class categories
'last_mod' => time(), 'last_mod' => time(),
),(int)$values['id'] > 0 ? array('cat_id' => $values['id']) : array(),__LINE__,__FILE__); ),(int)$values['id'] > 0 ? array('cat_id' => $values['id']) : array(),__LINE__,__FILE__);
$id = (int)$values['id'] > 0 ? (int)$values['id'] : $this->db->get_last_insert_id(self::TABLE,'cat_id'); $cat['cat_id'] = $id = (int)$values['id'] > 0 ? (int)$values['id'] : $this->db->get_last_insert_id(self::TABLE,'cat_id');
if (!(int)$values['parent'] && $id != $values['main']) if (!(int)$values['parent'] && $id != $values['main'])
{ {
$this->db->update(self::TABLE,array('cat_main' => $id),array('cat_id' => $id),__LINE__,__FILE__); $this->db->update(self::TABLE,array('cat_main' => $id),array('cat_id' => $id),__LINE__,__FILE__);
$cat['cat_main'] = $id;
} }
// update cache accordingly // update cache accordingly
self::invalidate_cache($id); self::invalidate_cache(egw_db::strip_array_keys($cat, 'cat_'));
return $id; return $id;
} }
@ -585,8 +586,7 @@ class categories
} }
if ($drop_subs) if ($drop_subs)
{ {
$all_cats = $this->return_all_children($cat_id); $where['cat_id'] = $this->return_all_children($cat_id);
$where = array("cat_id='".implode("' OR cat_id='", $all_cats)."'");
} }
else else
{ {
@ -613,7 +613,7 @@ class categories
$this->db->delete(self::TABLE,$where,__LINE__,__FILE__); $this->db->delete(self::TABLE,$where,__LINE__,__FILE__);
// update cache accordingly // update cache accordingly
self::invalidate_cache($cat_id); self::invalidate_cache($modify_subs ? null : $where['cat_id']);
} }
/** /**
@ -706,7 +706,7 @@ class categories
// adapt the level info in each child // adapt the level info in each child
$this->adapt_level_in_subtree($values); $this->adapt_level_in_subtree($values);
} }
$this->db->update(self::TABLE,array( $this->db->update(self::TABLE,$cat=array(
'cat_name' => $values['name'], 'cat_name' => $values['name'],
'cat_description' => isset($values['description']) ? $values['description'] : $values['descr'], // support old name different from the one read 'cat_description' => isset($values['description']) ? $values['description'] : $values['descr'], // support old name different from the one read
'cat_data' => is_array($values['data']) ? serialize($values['data']) : $values['data'], 'cat_data' => is_array($values['data']) ? serialize($values['data']) : $values['data'],
@ -721,8 +721,11 @@ class categories
'cat_appname' => $this->app_name, 'cat_appname' => $this->app_name,
),__LINE__,__FILE__); ),__LINE__,__FILE__);
$cat['cat_id'] = $values['id'];
$cat['cat_appname'] = $this->app_name;
// update cache accordingly // update cache accordingly
self::invalidate_cache($values['id']); self::invalidate_cache(egw_db::strip_array_keys($cat, 'cat_'));
return (int)$values['id']; return (int)$values['id'];
} }
@ -959,11 +962,28 @@ class categories
* Currently we dont care for $cat_id, as changing cats happens very infrequently and * Currently we dont care for $cat_id, as changing cats happens very infrequently and
* also changes child categories (!) * also changes child categories (!)
* *
* @param int $cat_id concerned id or null for all cats * @param int|array $cat concerned id(s) or array with cat-data or null for all cats
*/ */
public static function invalidate_cache($cat_id=null) public static function invalidate_cache($cat=null)
{ {
// allways invalidate instance-global cache, as updating our own cache is not perfect and does not help other sessions
egw_cache::unsetInstance(self::CACHE_APP, self::CACHE_NAME); egw_cache::unsetInstance(self::CACHE_APP, self::CACHE_NAME);
// if cat given update our own cache, to work around failed sitemgr install via setup (cant read just added categories)
if ($cat)
{
if (!is_array($cat) || isset($cat[0]))
{
foreach((array)$cat as $cat_id)
{
unset(self::$cache[$cat_id]);
}
}
elseif($cat['id'])
{
self::$cache[$cat['id']] = $cat;
}
}
} }
/** /**