Ext.namespace('Zarafa.plugins.mdm.settings'); /** * @class Zarafa.plugins.mdm.settings.MDMSettingsWidget * @extends Zarafa.settings.ui.SettingsWidget */ Zarafa.plugins.mdm.settings.MDMSettingsWidget = Ext.extend(Zarafa.settings.ui.SettingsWidget, { /** * @constructor * @param {Object} config Configuration object */ constructor : function(config) { config = config || {}; var store = new Zarafa.plugins.mdm.data.MDMDeviceStore(); Ext.applyIf(config, { title : _('Mobile Devices', 'plugin_mdm'), items : [{ xtype : 'container', layout: 'fit', items : [{ xtype : 'grid', name : _('Devices', 'plugin_mdm'), ref : '../deviceGrid', height : 400, store : store, viewConfig : { forceFit : true, deferEmptyText: false, emptyText: '
' + _('No devices connected to your account', 'plugin_mdm') + '
' }, columns : [{ dataIndex : 'devicetype', header : _('Device', 'plugin_mdm'), renderer : Ext.util.Format.htmlEncode },{ dataIndex : 'useragent', header : _('User Agent', 'plugin_mdm'), renderer : Ext.util.Format.htmlEncode },{ dataIndex : 'wipestatus', header : _('Provisioning Status', 'plugin_mdm'), renderer : Zarafa.plugins.mdm.ui.Renderers.provisioningStatus },{ dataIndex : 'lastupdatetime', header : _('Last Update', 'plugin_mdm'), renderer : Ext.util.Format.htmlEncode },{ dataIndex : 'entryid', header : _('Device ID', 'plugin_mdm'), renderer : Ext.util.Format.htmlEncode },{ dataIndex : 'deviceos', header : _('Device OS', 'plugin_mdm'), hidden : true, renderer : Ext.util.Format.htmlEncode },{ dataIndex : 'devicefriendlyname', header : _('Device Info', 'plugin_mdm'), hidden : true, renderer : Ext.util.Format.htmlEncode },{ dataIndex : 'firstsynctime', header : _('First Sync time', 'plugin_mdm'), hidden : true, renderer : Ext.util.Format.htmlEncode }], buttons : [{ text : _('Wipe Device', 'plugin_mdm'), ref : '../../../wipeBtn', handler : this.onWipeBtn, scope : this },{ text : _('Full resync', 'plugin_mdm'), ref : '../../../resyncBtn', handler : this.onFullResync, scope : this },{ text : _('Remove device', 'plugin_mdm'), ref : '../../../removeBtn', handler : this.onRemoveDevice, scope : this },{ text : _('Refresh', 'plugin_mdm'), ref : '../../../refresh', handler : this.onRefresh, scope : this }], listeners : { rowdblclick: this.onRowDblClick, rowclick: this.onRowClick, scope: this } }] }] }); Zarafa.plugins.mdm.settings.MDMSettingsWidget.superclass.constructor.call(this, config); }, /** * Function which handles the click event on the "Wipe Device" button, displays * a MessageBox for the user to confirm the wipe action. The wipe action is * handled by the onWipeDevice function. */ onWipeBtn : function() { var msgbox = Ext.MessageBox.show({ title: _('Kopano WebApp', 'plugin_mdm'), msg: _('Do you really want to wipe your device?\n Enter your password to confirm.', 'plugin_mdm'), inputType :'password', icon: Ext.MessageBox.WARNING, buttons: Ext.MessageBox.YESNO, fn: this.onWipeDevice, prompt: true, scope: this.deviceGrid }); // ExtJS does not support a password field. msgbox.getDialog().body.child('input').dom.type = 'password'; }, /** * Function which handles the confirmation button in the "wipe device" messagebox. * Sends an wipe request to PHP for the selected device in the grid. * * @param {Ext.Button} button button from the messagebox * @param {String} password user password */ onWipeDevice : function(button, password) { if (button === 'yes') { var selectionModel = this.getSelectionModel(); var record = selectionModel.getSelected(); if (record) { container.getRequest().singleRequest( 'pluginmdmmodule', 'wipe', { 'deviceid' : record.get('entryid'), 'password': password }, new Zarafa.plugins.mdm.data.MDMResponseHandler() ); } } }, /** * Function which handles the click event on the "Full resync" button, sends a * full resync request to PHP. */ onFullResync : function() { var selectionModel = this.deviceGrid.getSelectionModel(); var record = selectionModel.getSelected(); if(record) { container.getRequest().singleRequest( 'pluginmdmmodule', 'resync', { 'deviceid' : record.get('entryid') }, new Zarafa.plugins.mdm.data.MDMResponseHandler() ); } }, /** * Remove all state data for a device, essentially resyncing it. */ onRemoveDevice : function() { var selectionModel = this.deviceGrid.getSelectionModel(); var record = selectionModel.getSelected(); if(record) { container.getRequest().singleRequest( 'pluginmdmmodule', 'remove', { 'deviceid' : record.get('entryid') }, new Zarafa.plugins.mdm.data.MDMResponseHandler({ successCallback : this.removeDone.createDelegate(this, [record], true) }) ); } }, /** * Callback function triggers when device was successfully removed from the z-push server. * we have to remove that device from {@link Zarafa.plugins.mdm.data.MDMDeviceStore store}. * @param {Zarafa.plugins.mdm.data.MDMDeviceRecord} record {@link Zarafa.core.data.IPMRecord record} object */ removeDone : function(record) { record.getStore().remove(record); }, /** * Function which refreshes the store records from the server. */ onRefresh : function() { this.deviceGrid.getStore().load(); }, /** * Function is called if a row in the grid gets double clicked. * Which is use to show a dialog with detail device information * @param {Ext.grid.GridPanel} grid The Grid on which the user double-clicked * @param {Number} rowIndex The Row number on which was double-clicked. */ onRowDblClick : function (grid, rowIndex) { var record = grid.getStore().getAt(rowIndex); record.opened = false; Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['mdm.dialog.mdmdevicecontentpanel'], undefined, { manager : Ext.WindowMgr, record : record }); }, /** * Function is called if a row in the grid gets clicked. * Which is use to disabled wipe button if wipe status is not available. * @param {Ext.grid.GridPanel} grid The Grid on which the user clicked * @param {Number} rowIndex The Row number on which was clicked. */ onRowClick : function (grid, rowIndex) { var record = grid.getStore().getAt(rowIndex); this.wipeBtn.setDisabled(!Ext.isDefined(record.get('wipestatus'))); } }); Ext.reg('Zarafa.plugins.mdm.mdmsettingswidget', Zarafa.plugins.mdm.settings.MDMSettingsWidget);