* Preferences: use push to ask every affected client to reload preferences, if affected

This commit is contained in:
Ralf Becker 2020-07-31 09:47:49 +02:00
parent a562cdf502
commit 33e88d25ae
4 changed files with 28 additions and 5 deletions

View File

@ -121,6 +121,24 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function()
} }
}, },
/**
* Endpoint for push to request reload of preference, if loaded and affected
*
* @param _app app-name of prefs to reload
* @param _account_id _account_id 0: allways reload (default or forced prefs), <0: reload if member of group
*/
reload_preferences: function(_app, _account_id)
{
if (typeof _account_id !== 'number') _account_id = parseInt(_account_id);
if (typeof prefs[_app] === 'undefined' || // prefs not loaded
_account_id < 0 && this.user('memberships').indexOf(_account_id) < 0) // no member of this group
{
return;
}
var request = this.json('EGroupware\\Api\\Framework::ajax_get_preference', [_app]);
request.sendRequest();
},
/** /**
* Call context / open app specific preferences function * Call context / open app specific preferences function
* *

View File

@ -66,7 +66,7 @@ egw.extend('user', egw.MODULE_GLOBAL, function()
* Get data about current user * Get data about current user
* *
* @param {string} _field * @param {string} _field
* - 'account_id','account_lid','person_id','account_status', * - 'account_id','account_lid','person_id','account_status','memberships'
* - 'account_firstname','account_lastname','account_email','account_fullname','account_phone' * - 'account_firstname','account_lastname','account_email','account_fullname','account_phone'
* - 'apps': object with app => data pairs the user has run-rights for * - 'apps': object with app => data pairs the user has run-rights for
* @return {string|array|null} * @return {string|array|null}

View File

@ -411,7 +411,7 @@ class Accounts
/** /**
* Get an account as json, returns only whitelisted fields: * Get an account as json, returns only whitelisted fields:
* - 'account_id','account_lid','person_id','account_status', * - 'account_id','account_lid','person_id','account_status','memberships'
* - 'account_firstname','account_lastname','account_email','account_fullname','account_phone' * - 'account_firstname','account_lastname','account_email','account_fullname','account_phone'
* *
* @param int|string $id * @param int|string $id
@ -420,11 +420,12 @@ class Accounts
function json($id) function json($id)
{ {
static $keys = array( static $keys = array(
'account_id','account_lid','person_id','account_status', 'account_id','account_lid','person_id','account_status','memberships',
'account_firstname','account_lastname','account_email','account_fullname','account_phone', 'account_firstname','account_lastname','account_email','account_fullname','account_phone',
); );
if (($account = $this->read($id))) if (($account = $this->read($id)))
{ {
if (isset($account['memberships'])) $account['memberships'] = array_keys($account['memberships']);
$account = array_intersect_key($account, array_flip($keys)); $account = array_intersect_key($account, array_flip($keys));
} }
// for current user, add the apps available to him // for current user, add the apps available to him

View File

@ -122,9 +122,13 @@ class preferences_settings
Framework::refresh_opener($msg, null, null, null, null, null, null, $msg_type); Framework::refresh_opener($msg, null, null, null, null, null, null, $msg_type);
} }
} }
// update client-side Api\Preferences in response (only current user/session)
Framework::ajax_get_preference($appname);
// ask every affected client to reload preferences, if affected ($appname prefs loaded and member of group for group prefs)
$push = new Api\Json\Push($account_id > 0 ? (int)$account_id : Api\Json\Push::ALL);
$push->call('egw.reload_preferences', $appname, $account_id ? (int)$account_id : 0);
} }
// update client-side Api\Preferences in response
Framework::ajax_get_preference($appname);
} }
if (in_array($button, array('save','cancel'))) if (in_array($button, array('save','cancel')))
{ {