mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 06:30:59 +01:00
* Calendar: disable some owner/participant pre-loading for faster initial open
We no longer send the accounts or owngroups to pre-fill the owner / participant options. Accounts are pulled from the client-side cache, groups are now always via ajax like other resources
This commit is contained in:
parent
eb795d523b
commit
09275367c0
@ -1190,6 +1190,7 @@ div.et2_vfsPath li img {
|
|||||||
position: relative;
|
position: relative;
|
||||||
margin: 0px auto -16px auto;
|
margin: 0px auto -16px auto;
|
||||||
top: 5px;
|
top: 5px;
|
||||||
|
background-image: url('images/ajax-loader.gif');
|
||||||
}
|
}
|
||||||
.et2_taglist .ms-input-readonly {display: none;}
|
.et2_taglist .ms-input-readonly {display: none;}
|
||||||
.et2_taglist div.ms-sel-ctn .ms-close-btn {
|
.et2_taglist div.ms-sel-ctn .ms-close-btn {
|
||||||
|
@ -48,50 +48,7 @@ class calendar_owner_etemplate_widget extends Etemplate\Widget\Taglist
|
|||||||
}
|
}
|
||||||
$sel_options =& self::$request->sel_options[$form_name];
|
$sel_options =& self::$request->sel_options[$form_name];
|
||||||
|
|
||||||
// Get user accounts, formatted nicely for grouping and matching
|
if($value && !is_array($value))
|
||||||
// the ajax call calendar_uiforms->ajax_owner() - users first
|
|
||||||
$accounts = array();
|
|
||||||
$list = array('accounts', 'owngroups');
|
|
||||||
foreach($list as $type)
|
|
||||||
{
|
|
||||||
$account_options = array('account_type' => $type);
|
|
||||||
$accounts_type = Api\Accounts::link_query('',$account_options);
|
|
||||||
if($type == 'accounts')
|
|
||||||
{
|
|
||||||
$accounts_type = array_intersect_key($accounts_type, $GLOBALS['egw']->acl->get_grants('calendar'));
|
|
||||||
}
|
|
||||||
$accounts += $accounts_type;
|
|
||||||
}
|
|
||||||
$sel_options += array_map(
|
|
||||||
function($account_id, $account_name)
|
|
||||||
{
|
|
||||||
$data = array(
|
|
||||||
'value' => ''.$account_id,
|
|
||||||
'label' => $account_name,
|
|
||||||
'app' => lang('api-accounts'),
|
|
||||||
);
|
|
||||||
if ($account_id > 0)
|
|
||||||
{
|
|
||||||
$contact_obj = new Api\Contacts();
|
|
||||||
if (($contact = $contact_obj->read('account:'.$account_id, true)))
|
|
||||||
{
|
|
||||||
$data['icon'] = Api\Framework::link('/api/avatar.php', array(
|
|
||||||
'contact_id' => $contact['id'],
|
|
||||||
'etag' => $contact['etag'] ? $contact['etag'] : 1
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Add in group memberships as strings
|
|
||||||
$data['resources'] = array_map(function($a) { return ''.$a;},$GLOBALS['egw']->accounts->members($account_id, true));
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
},
|
|
||||||
array_keys($accounts), $accounts
|
|
||||||
);
|
|
||||||
|
|
||||||
if(!is_array($value))
|
|
||||||
{
|
{
|
||||||
// set value with an empty string only if sel options are not
|
// set value with an empty string only if sel options are not
|
||||||
// loaded, for example: setting calendar owner via URL when
|
// loaded, for example: setting calendar owner via URL when
|
||||||
@ -215,11 +172,13 @@ class calendar_owner_etemplate_widget extends Etemplate\Widget\Taglist
|
|||||||
// Handle Api\Accounts seperately
|
// Handle Api\Accounts seperately
|
||||||
if($type == '')
|
if($type == '')
|
||||||
{
|
{
|
||||||
|
$owngroup_options = $options+array('account_type'=>'owngroups');
|
||||||
|
$own_groups = Api\Accounts::link_query('',$owngroup_options);
|
||||||
$account_options = $options + array('account_type' => 'both');
|
$account_options = $options + array('account_type' => 'both');
|
||||||
$_results += $remove_contacts = Api\Accounts::link_query($query, $account_options);
|
$_results += $remove_contacts = Api\Accounts::link_query($query, $account_options);
|
||||||
if (!empty($_REQUEST['checkgrants']))
|
if (!empty($_REQUEST['checkgrants']))
|
||||||
{
|
{
|
||||||
$grants = $GLOBALS['egw']->acl->get_grants('calendar');
|
$grants = (array)$GLOBALS['egw']->acl->get_grants('calendar') + $own_groups;
|
||||||
$_results = array_intersect_key($_results, $grants);
|
$_results = array_intersect_key($_results, $grants);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,10 @@ var et2_calendar_owner = /** @class */ (function (_super) {
|
|||||||
};
|
};
|
||||||
return _this;
|
return _this;
|
||||||
}
|
}
|
||||||
|
et2_calendar_owner.prototype.transformAttributes = function (_attrs) {
|
||||||
|
_super.prototype.transformAttributes.call(this, _attrs);
|
||||||
|
_attrs.select_options = this._get_accounts(_attrs.select_options);
|
||||||
|
};
|
||||||
et2_calendar_owner.prototype.doLoadingFinished = function () {
|
et2_calendar_owner.prototype.doLoadingFinished = function () {
|
||||||
_super.prototype.doLoadingFinished.call(this);
|
_super.prototype.doLoadingFinished.call(this);
|
||||||
var widget = this;
|
var widget = this;
|
||||||
@ -89,6 +93,42 @@ var et2_calendar_owner = /** @class */ (function (_super) {
|
|||||||
return null;
|
return null;
|
||||||
return this.taglist.getValue();
|
return this.taglist.getValue();
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* Get account info for select options from common client-side account cache
|
||||||
|
*
|
||||||
|
* @return {Array} select options
|
||||||
|
*/
|
||||||
|
et2_calendar_owner.prototype._get_accounts = function (select_options) {
|
||||||
|
if (!jQuery.isArray(select_options)) {
|
||||||
|
var options = jQuery.extend({}, select_options);
|
||||||
|
select_options = [];
|
||||||
|
for (var key in options) {
|
||||||
|
if (typeof options[key] == 'object') {
|
||||||
|
if (typeof (options[key].key) == 'undefined') {
|
||||||
|
options[key].value = key;
|
||||||
|
}
|
||||||
|
select_options.push(options[key]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
select_options.push({ value: key, label: options[key] });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var type = this.egw().preference('account_selection', 'common');
|
||||||
|
var accounts = this.egw().accounts('accounts');
|
||||||
|
var _loop_1 = function (option) {
|
||||||
|
if (!select_options.find(function (element) { return element.value == option.value; })) {
|
||||||
|
option.app = this_1.egw().lang('api-accounts');
|
||||||
|
select_options.push(option);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var this_1 = this;
|
||||||
|
for (var _i = 0, accounts_1 = accounts; _i < accounts_1.length; _i++) {
|
||||||
|
var option = accounts_1[_i];
|
||||||
|
_loop_1(option);
|
||||||
|
}
|
||||||
|
return select_options;
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* Override parent to handle our special additional data types (c#,r#,etc.) when they
|
* Override parent to handle our special additional data types (c#,r#,etc.) when they
|
||||||
* are not available client side.
|
* are not available client side.
|
||||||
@ -103,7 +143,7 @@ var et2_calendar_owner = /** @class */ (function (_super) {
|
|||||||
for (var i = 0; i < this.options.value.length; i++) {
|
for (var i = 0; i < this.options.value.length; i++) {
|
||||||
var value = this.options.value[i];
|
var value = this.options.value[i];
|
||||||
if (value.id == value.label) {
|
if (value.id == value.label) {
|
||||||
// Proper label was not fount by parent - ask directly
|
// Proper label was not found by parent - ask directly
|
||||||
egw.json('calendar_owner_etemplate_widget::ajax_owner', value.id, function (data) {
|
egw.json('calendar_owner_etemplate_widget::ajax_owner', value.id, function (data) {
|
||||||
this.widget.options.value[this.i].label = data;
|
this.widget.options.value[this.i].label = data;
|
||||||
this.widget.set_value(this.widget.options.value);
|
this.widget.set_value(this.widget.options.value);
|
||||||
|
@ -13,7 +13,9 @@
|
|||||||
et2_widget_taglist;
|
et2_widget_taglist;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {et2_register_widget} from "../../api/js/etemplate/et2_core_widget";
|
import {et2_register_widget, WidgetConfig} from "../../api/js/etemplate/et2_core_widget";
|
||||||
|
import {ClassWithAttributes} from "../../api/js/etemplate/et2_core_inheritance";
|
||||||
|
import {et2_selectbox} from "../../api/js/etemplate/et2_widget_selectbox";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tag list widget customised for calendar owner, which can be a user
|
* Tag list widget customised for calendar owner, which can be a user
|
||||||
@ -63,6 +65,13 @@ export class et2_calendar_owner extends et2_taglist_email
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
transformAttributes( _attrs)
|
||||||
|
{
|
||||||
|
super.transformAttributes(_attrs);
|
||||||
|
_attrs.select_options = this._get_accounts(_attrs.select_options);
|
||||||
|
}
|
||||||
|
|
||||||
doLoadingFinished()
|
doLoadingFinished()
|
||||||
{
|
{
|
||||||
super.doLoadingFinished();
|
super.doLoadingFinished();
|
||||||
@ -106,6 +115,47 @@ export class et2_calendar_owner extends et2_taglist_email
|
|||||||
return this.taglist.getValue();
|
return this.taglist.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get account info for select options from common client-side account cache
|
||||||
|
*
|
||||||
|
* @return {Array} select options
|
||||||
|
*/
|
||||||
|
_get_accounts(select_options)
|
||||||
|
{
|
||||||
|
if (!jQuery.isArray(select_options))
|
||||||
|
{
|
||||||
|
var options = jQuery.extend({}, select_options);
|
||||||
|
select_options = [];
|
||||||
|
for(var key in options)
|
||||||
|
{
|
||||||
|
if (typeof options[key] == 'object')
|
||||||
|
{
|
||||||
|
if (typeof(options[key].key) == 'undefined')
|
||||||
|
{
|
||||||
|
options[key].value = key;
|
||||||
|
}
|
||||||
|
select_options.push(options[key]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
select_options.push({value: key, label: options[key]});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var type = this.egw().preference('account_selection', 'common');
|
||||||
|
var accounts = this.egw().accounts('accounts');
|
||||||
|
for(const option of accounts)
|
||||||
|
{
|
||||||
|
if(!select_options.find(element => element.value == option.value))
|
||||||
|
{
|
||||||
|
option.app = this.egw().lang('api-accounts');
|
||||||
|
select_options.push(option);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return select_options
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override parent to handle our special additional data types (c#,r#,etc.) when they
|
* Override parent to handle our special additional data types (c#,r#,etc.) when they
|
||||||
* are not available client side.
|
* are not available client side.
|
||||||
@ -124,7 +174,7 @@ export class et2_calendar_owner extends et2_taglist_email
|
|||||||
var value = this.options.value[i];
|
var value = this.options.value[i];
|
||||||
if(value.id == value.label)
|
if(value.id == value.label)
|
||||||
{
|
{
|
||||||
// Proper label was not fount by parent - ask directly
|
// Proper label was not found by parent - ask directly
|
||||||
egw.json('calendar_owner_etemplate_widget::ajax_owner',value.id,function(data) {
|
egw.json('calendar_owner_etemplate_widget::ajax_owner',value.id,function(data) {
|
||||||
this.widget.options.value[this.i].label = data;
|
this.widget.options.value[this.i].label = data;
|
||||||
this.widget.set_value(this.widget.options.value);
|
this.widget.set_value(this.widget.options.value);
|
||||||
|
Loading…
Reference in New Issue
Block a user