calendarimporter/js/settings/SettingsCalSyncWidget.js

110 lines
3.5 KiB
JavaScript

Ext.namespace('Zarafa.plugins.calendarimporter.settings');
/**
* @class Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget
* @extends Zarafa.settings.ui.SettingsWidget
* @xtype calendarimporter.settingscalsyncwidget
*
*/
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget = Ext.extend(Zarafa.settings.ui.SettingsWidget, {
/**
* @cfg {Zarafa.settings.SettingsContext} settingsContext
*/
settingsContext : undefined,
/**
* @constructor
* @param {Object} config Configuration object
*/
constructor : function(config) {
config = config || {};
var store = new Ext.data.JsonStore({
fields : [
{ name : 'id', type : 'int' },
{ name : 'icsurl' },
{ name : 'user' },
{ name : 'pass' },
{ name : 'intervall', type : 'int' },
{ name : 'calendar' },
{ name : 'lastsync' }
],
sortInfo : {
field : 'id',
direction : 'ASC'
},
autoDestroy : true
});
Ext.applyIf(config, {
height : 400,
title : _('Calendar Sync settings'),
xtype : 'calendarimporter.settingscalsyncwidget',
layout : {
// override from SettingsWidget
type : 'fit'
},
items : [{
xtype : 'calendarimporter.calsyncpanel',
store : store,
ref : 'calsyncPanel'
}]
});
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget.superclass.constructor.call(this, config);
},
/**
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
* it has been called with {@link zarafa.settings.ui.SettingsCategory#update}.
* This is used to load the latest version of the settings from the
* {@link Zarafa.settings.SettingsModel} into the UI of this category.
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to load
*/
update : function(settingsModel) {
this.model = settingsModel;
// Convert the signatures into Store data
var icslinks = settingsModel.get('zarafa/v1/contexts/calendar/icssync', true);
var syncArray = [];
for (var key in icslinks) {
syncArray.push(Ext.apply({}, icslinks[key], { id : key }));
}
// Load all icslinks into the GridPanel
var store = this.calsyncPanel.calsyncGrid.getStore();
store.loadData(syncArray);
},
/**
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
*/
updateSettings : function(settingsModel) {
settingsModel.beginEdit();
// Start reading the Grid store and convert the contents back into
// an object which can be pushed to the settings.
var icslinks = this.calsyncPanel.calsyncGrid.getStore().getRange();
var icslinkData = {};
for (var i = 0, len = icslinks.length; i < len; i++) {
var icslink = icslinks[i];
icslinkData[icslink.get('id')] = {
'icsurl' : icslink.get('icsurl'),
'intervall' : icslink.get('intervall'),
'user' : icslink.get('user'),
'pass' : icslink.get('pass'),
'lastsync' : icslink.get('lastsync'),
'calendar' : icslink.get('calendar')
};
}
settingsModel.set('zarafa/v1/contexts/calendar/icssync', icslinkData);
settingsModel.endEdit();
}
});
Ext.reg('calendarimporter.settingscalsyncwidget', Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget);