mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-29 03:13:40 +01:00
do NOT store user preferences and apps in session, we restore them from instance cache
This commit is contained in:
parent
99595ba1cf
commit
2adeddce8d
@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
namespace EGroupware\Api\Egw;
|
namespace EGroupware\Api\Egw;
|
||||||
|
use EGroupware\Api;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application (sub-)object of Egw-object used to load $GLOBALS['egw_info'](['user'])['apps']
|
* Application (sub-)object of Egw-object used to load $GLOBALS['egw_info'](['user'])['apps']
|
||||||
@ -19,7 +20,6 @@ namespace EGroupware\Api\Egw;
|
|||||||
class Applications
|
class Applications
|
||||||
{
|
{
|
||||||
var $account_id;
|
var $account_id;
|
||||||
var $data = Array();
|
|
||||||
/**
|
/**
|
||||||
* Reference to the global db class
|
* Reference to the global db class
|
||||||
*
|
*
|
||||||
@ -62,20 +62,12 @@ class Applications
|
|||||||
{
|
{
|
||||||
$this->read_installed_apps();
|
$this->read_installed_apps();
|
||||||
}
|
}
|
||||||
$this->data = Array();
|
|
||||||
if(!$this->account_id)
|
if(!$this->account_id)
|
||||||
{
|
{
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
$apps = $GLOBALS['egw']->acl->get_user_applications($this->account_id);
|
return array_intersect_key($GLOBALS['egw_info']['apps'],
|
||||||
foreach(array_keys($GLOBALS['egw_info']['apps']) as $app)
|
$GLOBALS['egw']->acl->get_user_applications($this->account_id));
|
||||||
{
|
|
||||||
if (isset($apps[$app]) && $apps[$app])
|
|
||||||
{
|
|
||||||
$this->data[$app] =& $GLOBALS['egw_info']['apps'][$app];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $this->data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -84,6 +76,9 @@ class Applications
|
|||||||
*/
|
*/
|
||||||
function read_installed_apps()
|
function read_installed_apps()
|
||||||
{
|
{
|
||||||
|
$GLOBALS['egw_info']['apps'] = Api\Cache::getInstance(__CLASS__, 'apps', function()
|
||||||
|
{
|
||||||
|
$apps = array();
|
||||||
foreach($this->db->select($this->table_name,'*',false,__LINE__,__FILE__,false,'ORDER BY app_order ASC') as $row)
|
foreach($this->db->select($this->table_name,'*',false,__LINE__,__FILE__,false,'ORDER BY app_order ASC') as $row)
|
||||||
{
|
{
|
||||||
$title = $app_name = $row['app_name'];
|
$title = $app_name = $row['app_name'];
|
||||||
@ -92,7 +87,7 @@ class Applications
|
|||||||
{
|
{
|
||||||
$title = $t;
|
$title = $t;
|
||||||
}
|
}
|
||||||
$GLOBALS['egw_info']['apps'][$app_name] = Array(
|
$apps[$app_name] = Array(
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'name' => $app_name,
|
'name' => $app_name,
|
||||||
'enabled' => True,
|
'enabled' => True,
|
||||||
@ -105,5 +100,15 @@ class Applications
|
|||||||
'icon_app'=> $row['app_icon_app'],
|
'icon_app'=> $row['app_icon_app'],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
return $apps;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invalidate cached apps
|
||||||
|
*/
|
||||||
|
public static function invalidate()
|
||||||
|
{
|
||||||
|
Api\Cache::unsetInstance(__CLASS__, 'apps');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -959,8 +959,17 @@ class Session
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// update prefs, which might be changed by an other session
|
// set prefs, they are no longer stored in session
|
||||||
$GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository();
|
$GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository();
|
||||||
|
|
||||||
|
// restore apps to $GLOBALS['egw_info']['apps']
|
||||||
|
$GLOBALS['egw']->applications->read_installed_apps();
|
||||||
|
|
||||||
|
// session only stores app-names, restore apps from egw_info[apps]
|
||||||
|
if (!is_array($GLOBALS['egw_info']['user']['apps']['api']))
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_info']['user']['apps'] = array_intersect_key($GLOBALS['egw_info']['apps'], array_flip($GLOBALS['egw_info']['user']['apps']));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($GLOBALS['egw']->accounts->is_expired($GLOBALS['egw_info']['user']))
|
if ($GLOBALS['egw']->accounts->is_expired($GLOBALS['egw_info']['user']))
|
||||||
|
@ -134,5 +134,14 @@ if ($GLOBALS['egw_info']['flags']['currentapp'] != 'login')
|
|||||||
$_SESSION[Session::EGW_INFO_CACHE] = $GLOBALS['egw_info'];
|
$_SESSION[Session::EGW_INFO_CACHE] = $GLOBALS['egw_info'];
|
||||||
unset($_SESSION[Session::EGW_INFO_CACHE]['flags']); // dont save the flags, they change on each request
|
unset($_SESSION[Session::EGW_INFO_CACHE]['flags']); // dont save the flags, they change on each request
|
||||||
|
|
||||||
|
// dont save preferences, as Session::verify restores them from instance cache anyway
|
||||||
|
unset($_SESSION[Session::EGW_INFO_CACHE]['user']['preferences']);
|
||||||
|
|
||||||
|
// dont save apps, as Session::verify restores them from instance cache anyway
|
||||||
|
unset($_SESSION[Session::EGW_INFO_CACHE]['apps']);
|
||||||
|
|
||||||
|
// store only which apps user has, Session::verify restores it from egw_info[apps]
|
||||||
|
$_SESSION[Session::EGW_INFO_CACHE]['user']['apps'] = array_keys($_SESSION[Session::EGW_INFO_CACHE]['user']['apps']);
|
||||||
|
|
||||||
$_SESSION[Session::EGW_OBJECT_CACHE] = serialize($GLOBALS['egw']);
|
$_SESSION[Session::EGW_OBJECT_CACHE] = serialize($GLOBALS['egw']);
|
||||||
}
|
}
|
||||||
|
@ -502,7 +502,7 @@ class setup
|
|||||||
'app_icon_app' => $setup_info[$appname]['icon_app'],
|
'app_icon_app' => $setup_info[$appname]['icon_app'],
|
||||||
),False,__LINE__,__FILE__);
|
),False,__LINE__,__FILE__);
|
||||||
|
|
||||||
$this->clear_session_cache();
|
Api\Egw\Applications::invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -582,6 +582,8 @@ class setup
|
|||||||
'app_icon' => $setup_info[$appname]['icon'],
|
'app_icon' => $setup_info[$appname]['icon'],
|
||||||
'app_icon_app' => $setup_info[$appname]['icon_app'],
|
'app_icon_app' => $setup_info[$appname]['icon_app'],
|
||||||
),array('app_name'=>$appname),__LINE__,__FILE__);
|
),array('app_name'=>$appname),__LINE__,__FILE__);
|
||||||
|
|
||||||
|
Api\Egw\Applications::invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -608,6 +610,8 @@ class setup
|
|||||||
$this->db->update($this->applications_table,array(
|
$this->db->update($this->applications_table,array(
|
||||||
'app_version' => $setup_info[$appname]['currentver'],
|
'app_version' => $setup_info[$appname]['currentver'],
|
||||||
),array('app_name'=>$appname),__LINE__,__FILE__);
|
),array('app_name'=>$appname),__LINE__,__FILE__);
|
||||||
|
|
||||||
|
Api\Egw\Applications::invalidate();
|
||||||
}
|
}
|
||||||
return $setup_info;
|
return $setup_info;
|
||||||
}
|
}
|
||||||
@ -636,10 +640,10 @@ class setup
|
|||||||
//echo 'DELETING application: ' . $appname;
|
//echo 'DELETING application: ' . $appname;
|
||||||
$this->db->delete($this->applications_table,array('app_name'=>$appname),__LINE__,__FILE__);
|
$this->db->delete($this->applications_table,array('app_name'=>$appname),__LINE__,__FILE__);
|
||||||
|
|
||||||
|
Api\Egw\Applications::invalidate();
|
||||||
|
|
||||||
// Remove links to the app
|
// Remove links to the app
|
||||||
Link::unlink(0, $appname);
|
Link::unlink(0, $appname);
|
||||||
|
|
||||||
$this->clear_session_cache();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user