* 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 acefbc6264
commit c4bb5c3caf
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
*

View File

@ -66,7 +66,7 @@ egw.extend('user', egw.MODULE_GLOBAL, function()
* Get data about current user
*
* @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'
* - 'apps': object with app => data pairs the user has run-rights for
* @return {string|array|null}

View File

@ -411,7 +411,7 @@ class Accounts
/**
* 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'
*
* @param int|string $id
@ -420,11 +420,12 @@ class Accounts
function json($id)
{
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',
);
if (($account = $this->read($id)))
{
if (isset($account['memberships'])) $account['memberships'] = array_keys($account['memberships']);
$account = array_intersect_key($account, array_flip($keys));
}
// 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);
}
}
// 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')))
{