diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/CommonContext.js ./client/zarafa/common/CommonContext.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/CommonContext.js 2013-01-04 13:42:45.000000000 +0100 +++ ./client/zarafa/common/CommonContext.js 2013-05-02 18:07:15.513665300 +0200 @@ -23,6 +23,7 @@ // Register categories for the settings this.registerInsertionPoint('context.settings.categories', this.createDelegateSettingsCategory, this); + this.registerInsertionPoint('context.settings.categories', this.createSendAsSettingsCategory, this); this.registerInsertionPoint('context.settings.categories', this.createRuleSettingsCategory, this); // Register common specific dialog types @@ -42,6 +43,7 @@ Zarafa.core.data.SharedComponentType.addProperty('common.contextmenu.reminder.remindergrid'); Zarafa.core.data.SharedComponentType.addProperty('common.printer.renderer'); Zarafa.core.data.SharedComponentType.addProperty('common.rules.dialog.ruleswordsedit'); + Zarafa.core.data.SharedComponentType.addProperty('common.sendas.dialog.sendasedit'); }, /** @@ -74,6 +76,7 @@ case Zarafa.core.data.SharedComponentType['common.contextmenu.importance']: case Zarafa.core.data.SharedComponentType['common.contextmenu.reminder.remindergrid']: case Zarafa.core.data.SharedComponentType['common.rules.dialog.ruleswordsedit']: + case Zarafa.core.data.SharedComponentType['common.sendas.dialog.sendasedit']: bid = 1; break; case Zarafa.core.data.SharedComponentType['common.contextmenu.freebusy']: @@ -144,6 +147,9 @@ case Zarafa.core.data.SharedComponentType['common.rules.dialog.ruleswordsedit']: component = Zarafa.common.rules.dialogs.RulesWordsEditContentPanel; break; + case Zarafa.core.data.SharedComponentType['common.sendas.dialog.sendasedit']: + component = Zarafa.common.sendas.dialogs.SendAsEditContentPanel; + break; case Zarafa.core.data.SharedComponentType['common.create']: if (record instanceof Zarafa.core.data.IPMRecipientRecord) { component = Zarafa.common.recipientfield.ui.EditRecipientContentPanel; @@ -220,6 +226,27 @@ settingsContext : settingsContext }; }, + + /** + * Create the send as {@link Zarafa.settings.ui.SettingsCategory Settings Category} + * to the {@link Zarafa.settings.SettingsContext}. This will create new + * {@link Zarafa.settings.ui.SettingsCategoryTab tabs} for the + * {@link Zarafa.calendar.ui.SettingsSendAsCategory SendAs} + * in the {@link Zarafa.settings.ui.SettingsCategoryWidgetPanel Widget Panel}. + * @param {String} insertionName insertion point name that is currently populated + * @param {Zarafa.settings.ui.SettingsMainPanel} settingsMainPanel settings main panel + * which is populating this insertion point + * @param {Zarafa.settings.SettingsContext} settingsContext settings context + * @return {Array} configuration object for the categories to register + * @private + */ + createSendAsSettingsCategory : function(insertionName, settingsMainPanel, settingsContext) + { + return { + xtype : 'zarafa.settingssendascategory', + settingsContext : settingsContext + }; + }, /** * Create the Rule {@link Zarafa.settings.ui.SettingsCategory Settings Category} diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/dialogs/SendAsEditContentPanel.js ./client/zarafa/common/sendas/dialogs/SendAsEditContentPanel.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/dialogs/SendAsEditContentPanel.js 1970-01-01 01:00:00.000000000 +0100 +++ ./client/zarafa/common/sendas/dialogs/SendAsEditContentPanel.js 2013-05-02 22:39:19.679354100 +0200 @@ -0,0 +1,40 @@ +Ext.namespace('Zarafa.common.sendas.dialogs'); + +/** + * @class Zarafa.common.sendas.dialogs.SendAsEditContentPanel + * @extends Zarafa.core.ui.ContentPanel + * @xtype zarafa.sendaseditcontentpanel + * + * {@link Zarafa.common.sendas.dialogs.SendAsEditContentPanel SendAsEditContentPanel} will be used to edit sendas addresses. + */ +Zarafa.common.sendas.dialogs.SendAsEditContentPanel = Ext.extend(Zarafa.core.ui.ContentPanel, { + /** + * @constructor + * @param config Configuration structure + */ + constructor : function(config) + { + config = config || {}; + + // Add in some standard configuration data. + Ext.applyIf(config, { + // Override from Ext.Component + xtype : 'zarafa.sendaseditcontentpanel', + // Override from Ext.Component + layout : 'fit', + model : true, + autoSave : false, + width : 400, + height : 100, + title : _('Send As'), + items : [{ + xtype : 'zarafa.sendaseditpanel', + item : config.item + }] + }); + + Zarafa.common.sendas.dialogs.SendAsEditContentPanel.superclass.constructor.call(this, config); + } +}); + +Ext.reg('zarafa.sendaseditcontentpanel', Zarafa.common.sendas.dialogs.SendAsEditContentPanel); diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/dialogs/SendAsEditPanel.js ./client/zarafa/common/sendas/dialogs/SendAsEditPanel.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/dialogs/SendAsEditPanel.js 1970-01-01 01:00:00.000000000 +0100 +++ ./client/zarafa/common/sendas/dialogs/SendAsEditPanel.js 2013-05-03 13:17:58.427828000 +0200 @@ -0,0 +1,135 @@ +Ext.namespace('Zarafa.common.sendas.dialogs'); + +/** + * @class Zarafa.common.sendas.dialogs.SendAsEditPanel + * @extends Ext.form.FormPanel + * @xtype zarafa.sendaseditpanel + * + * Will generate UI for {@link Zarafa.common.sendas.dialogs.SendAsEditContentPanel SendAsEditContentPanel}. + */ +Zarafa.common.sendas.dialogs.SendAsEditPanel = Ext.extend(Ext.form.FormPanel, { + + /** + * the id of the currently edited item + */ + currentItem : undefined, + + /** + * @constructor + * @param config Configuration structure + */ + constructor : function(config) + { + config = config || {}; + + if(config.item) + this.currentItem = config.item; + + Ext.applyIf(config, { + // Override from Ext.Component + xtype : 'zarafa.sendaseditpanel', + labelAlign : 'left', + defaultType: 'textfield', + items : this.createPanelItems(config), + buttons: [{ + text: _('Save'), + handler: this.doSave, + scope: this + }, + { + text: _('Cancel'), + handler: this.doClose, + scope: this + }] + }); + + Zarafa.common.sendas.dialogs.SendAsEditPanel.superclass.constructor.call(this, config); + }, + + /** + * close the dialog + */ + doClose : function() { + this.dialog.close(); + }, + + /** + * save the data to the store + */ + doSave : function() { + var store = this.dialog.store; + var id = 0; + var record = undefined; + + if(!this.currentItem) { + record = new store.recordType({ + id: this.hashCode(this.email_address.getValue()), + display_name: this.display_name.getValue(), + email_address: this.email_address.getValue() + }); + } + + if(this.email_address.isValid()) { + if(record) { + store.add(record); + } else { + this.currentItem.set('display_name', this.display_name.getValue()); + this.currentItem.set('email_address', this.email_address.getValue()); + } + this.dialog.close(); + } + }, + + /** + * Function will create panel items for {@link Zarafa.common.sendas.dialogs.SendAsEditPanel SendAsEditPanel} + * @return {Array} array of items that should be added to panel. + * @private + */ + createPanelItems : function(config) + { + var displayName = ""; + var emailAddress = ""; + + if(config.item){ + displayName = config.item.get('display_name'); + emailAddress = config.item.get('email_address'); + } + + return [{ + fieldLabel: _('Display Name'), + name: 'display_name', + ref: 'display_name', + value: displayName, + anchor: '100%' + }, + { + fieldLabel: _('Email Address'), + name: 'email_address', + ref: 'email_address', + allowBlank: false, + value: emailAddress, + vtype:'email', + anchor: '100%' + }]; + }, + + /** + * Java String.hashCode() implementation + * @private + */ + hashCode : function(str){ + var hash = 0; + var chr = 0; + var i = 0; + + if (str.length == 0) return hash; + for (i = 0; i < str.length; i++) { + chr = str.charCodeAt(i); + hash = ((hash<<5)-hash)+chr; + hash = hash & hash; // Convert to 32bit integer + } + return Math.abs(hash); + } +}); + +Ext.reg('zarafa.sendaseditpanel', Zarafa.common.sendas.dialogs.SendAsEditPanel); diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/ui/SendAsGrid.js ./client/zarafa/common/sendas/ui/SendAsGrid.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/ui/SendAsGrid.js 1970-01-01 01:00:00.000000000 +0100 +++ ./client/zarafa/common/sendas/ui/SendAsGrid.js 2013-05-02 21:29:16.060920900 +0200 @@ -0,0 +1,136 @@ +Ext.namespace('Zarafa.common.sendas.ui'); + +/** + * @class Zarafa.common.sendas.ui.SendAsGrid + * @extends Ext.grid.GridPanel + * @xtype zarafa.sendasgrid + * + * {@link Zarafa.common.sendas.ui.SendAsGrid SendAsGrid} will be used to display + * sendas of the current user. + */ +Zarafa.common.sendas.ui.SendAsGrid = Ext.extend(Ext.grid.GridPanel, { + /** + * @constructor + * @param {Object} config Configuration structure + */ + constructor : function(config) + { + config = config || {}; + + Ext.applyIf(config, { + xtype : 'zarafa.sendasgrid', + border : true, + store : config.store, + viewConfig : { + forceFit : true, + emptyText : '
' + _('No sendas address exists') + '
' + }, + loadMask : this.initLoadMask(), + columns : this.initColumnModel(), + selModel : this.initSelectionModel(), + listeners : { + viewready : this.onViewReady, + rowdblclick : this.onRowDblClick, + scope : this + } + }); + + Zarafa.common.sendas.ui.SendAsGrid.superclass.constructor.call(this, config); + }, + + /** + * initialize events for the grid panel. + * @private + */ + initEvents : function() + { + Zarafa.common.sendas.ui.SendAsGrid.superclass.initEvents.call(this); + + // select first sendas when store has finished loading + this.mon(this.store, 'load', this.onViewReady, this, {single : true}); + }, + + /** + * Creates a column model object, used in {@link #colModel} config + * @return {Ext.grid.ColumnModel} column model object + * @private + */ + initColumnModel : function() + { + return [{ + dataIndex : 'display_name', + header : _('Name'), + renderer : Zarafa.common.ui.grid.Renderers.text + }, + { + dataIndex : 'email_address', + header : _('Email Address'), + renderer : Zarafa.common.ui.grid.Renderers.text + }] + }, + + /** + * Creates a selection model object, used in {@link #selModel} config + * @return {Ext.grid.RowSelectionModel} selection model object + * @private + */ + initSelectionModel : function() + { + return new Ext.grid.RowSelectionModel({ + singleSelect : true + }); + }, + + /** + * Initialize the {@link Ext.grid.GridPanel.loadMask} field + * + * @return {Ext.LoadMask} The configuration object for {@link Ext.LoadMask} + * @private + */ + initLoadMask : function() + { + return { + msg : _('Loading sendas addresses') + '...' + }; + }, + + /** + * Event handler which is fired when the gridPanel is ready. This will automatically + * select the first row in the grid. + * @private + */ + onViewReady : function() + { + this.getSelectionModel().selectFirstRow(); + }, + + /** + * Function will be called to remove a sendas address. + */ + removeSendAs : function() + { + var sendasRecord = this.getSelectionModel().getSelected(); + if(!sendasRecord) { + Ext.Msg.alert(_('Alert'), _('Please select a sendas address.')); + return; + } + + this.store.remove(sendasRecord); + }, + + /** + * Event handler which is fired when the {@link Zarafa.common.sendas.ui.SendAsGrid SendAsGrid} is double clicked. + * it will call generic function to handle the functionality. + * @private + */ + onRowDblClick : function(grid, rowIndex) + { + Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['common.sendas.dialog.sendasedit'], undefined, { + store : grid.getStore(), + item : grid.getStore().getAt(rowIndex), + manager : Ext.WindowMgr + }); + } +}); + +Ext.reg('zarafa.sendasgrid', Zarafa.common.sendas.ui.SendAsGrid); diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/ui/SendAsPanel.js ./client/zarafa/common/sendas/ui/SendAsPanel.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/sendas/ui/SendAsPanel.js 1970-01-01 01:00:00.000000000 +0100 +++ ./client/zarafa/common/sendas/ui/SendAsPanel.js 2013-05-02 21:12:03.987889700 +0200 @@ -0,0 +1,160 @@ +Ext.namespace('Zarafa.common.sendas.ui'); + +/** + * @class Zarafa.common.sendas.ui.SendAsPanel + * @extends Ext.Panel + * @xtype zarafa.sendaspanel + * Will generate UI for the {@link Zarafa.common.settings.SettingsSendAsWidget SettingsSendAsWidget}. + */ +Zarafa.common.sendas.ui.SendAsPanel = Ext.extend(Ext.Panel, { + + // store + store : undefined, + + /** + * @constructor + * @param config Configuration structure + */ + constructor : function(config) + { + config = config || {}; + if(config.store) + this.store = config.store; + + Ext.applyIf(config, { + // Override from Ext.Component + xtype : 'zarafa.sendaspanel', + border : false, + layout : { + type : 'vbox', + align : 'stretch', + pack : 'start' + }, + items : this.createPanelItems(this.store) + }); + + Zarafa.common.sendas.ui.SendAsPanel.superclass.constructor.call(this, config); + }, + + /** + * Function will create panel items for {@link Zarafa.common.sendas.ui.SendAsPanel SendAsPanel} + * @return {Array} array of items that should be added to panel. + * @private + */ + createPanelItems : function(store) + { + return [{ + xtype : 'displayfield', + value : _('Here you can setup your alias email addresses.'), + fieldClass : 'x-form-display-field zarafa-delegates-extrainfo' + }, { + xtype : 'container', + flex : 1, + layout : { + type : 'hbox', + align : 'stretch', + pack : 'start' + }, + items : [{ + xtype : 'zarafa.sendasgrid', + ref : '../sendasGrid', + store : store, + flex : 1 + }, { + xtype : 'container', + width : 160, + defaults : { + width : 140 + }, + layout : { + type : 'vbox', + align : 'center', + pack : 'start' + }, + items : [{ + xtype : 'button', + text : _('Add') + '...', + handler : this.onSendAsAdd, + ref : '../../addButton', + scope : this + }, { + xtype : 'spacer', + height : 20 + }, { + xtype : 'button', + text : _('Remove') + '...', + disabled : true, + ref : '../../removeButton', + handler : this.onSendAsRemove, + scope : this + }] + }] + }]; + }, + + /** + * initialize events for the panel. + * @private + */ + initEvents : function() + { + Zarafa.common.sendas.ui.SendAsPanel.superclass.initEvents.call(this); + + // register event to enable/disable buttons + this.mon(this.sendasGrid.getSelectionModel(), 'selectionchange', this.onGridSelectionChange, this); + }, + + /** + * Handler function will be called when user clicks on 'Add' button, + * this will show addressbook dialog to select sendas user. + * @private + */ + onSendAsAdd : function() + { + Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['common.sendas.dialog.sendasedit'], undefined, { + store : this.store, + item : undefined, + manager : Ext.WindowMgr + }); + }, + + /** + * Event handler will be called when selection in {@link Zarafa.common.ui.SendAsGrid SendAsGrid} + * has been changed + * @param {Ext.grid.RowSelectionModel} selectionModel selection model that fired the event + */ + onGridSelectionChange : function(selectionModel) + { + var noSelection = (selectionModel.hasSelection() === false); + + this.removeButton.setDisabled(noSelection); + }, + + /** + * Handler function will be called when user clicks on 'Remove' button, + * this will remove currently selected sendas from sendass list. + * @private + */ + onSendAsRemove : function() + { + this.sendasGrid.removeSendAs(); + }, + + /** + * Function will be used to reload data in the store. + */ + discardChanges : function() + { + this.store.load(); + }, + + /** + * Function will be used to save changes in the store. + */ + saveChanges : function() + { + this.store.save(); + } +}); + +Ext.reg('zarafa.sendaspanel', Zarafa.common.sendas.ui.SendAsPanel); diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/settings/SettingsSendAsCategory.js ./client/zarafa/common/settings/SettingsSendAsCategory.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/settings/SettingsSendAsCategory.js 1970-01-01 01:00:00.000000000 +0100 +++ ./client/zarafa/common/settings/SettingsSendAsCategory.js 2013-05-02 17:40:58.653474000 +0200 @@ -0,0 +1,50 @@ +Ext.namespace('Zarafa.common.settings'); + +/** + * @class Zarafa.common.settings.SettingsSendAsCategory + * @extends Zarafa.settings.ui.SettingsCategory + * @xtype zarafa.settingssendascategory + * + * The sendas category for users which will allow the user to configure send as settings. + */ +Zarafa.common.settings.SettingsSendAsCategory = Ext.extend(Zarafa.settings.ui.SettingsCategory, { + // Insertion points for this class + /** + * @insert context.settings.category.sendas + * Insertion point to register new {@link Zarafa.settings.ui.SettingsWidget widgets} + * for the {@link Zarafa.common.settings.SettingsSendAsCategory SendAs Category}. + * @param {Zarafa.common.settings.SettingsSendAsCategory} category The sendas + * category to which the widgets will be added. + */ + + /** + * @cfg {Zarafa.settings.SettingsContext} settingsContext + */ + settingsContext : undefined, + + /** + * @constructor + * @param {Object} config Configuration object + */ + constructor : function(config) + { + config = config || {}; + + Ext.applyIf(config, { + title : _('Send As'), + categoryIndex : 6, + xtype : 'zarafa.settingssendascategory', + iconCls : 'zarafa-settings-category-delegate', + items : [{ + xtype : 'zarafa.settingssendaswidget', + settingsContext : config.settingsContext + }, + container.populateInsertionPoint('context.settings.category.sendas', this) + ] + }); + + Zarafa.common.settings.SettingsSendAsCategory.superclass.constructor.call(this, config); + } +}); + +Ext.reg('zarafa.settingssendascategory', Zarafa.common.settings.SettingsSendAsCategory); diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/settings/SettingsSendAsWidget.js ./client/zarafa/common/settings/SettingsSendAsWidget.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/common/settings/SettingsSendAsWidget.js 1970-01-01 01:00:00.000000000 +0100 +++ ./client/zarafa/common/settings/SettingsSendAsWidget.js 2013-05-02 20:23:02.528647900 +0200 @@ -0,0 +1,107 @@ +Ext.namespace('Zarafa.common.settings'); + +/** + * @class Zarafa.common.settings.SettingsSendAsWidget + * @extends Zarafa.settings.ui.SettingsWidget + * @xtype zarafa.settingssendaswidget + * + * The {@link Zarafa.settings.ui.SettingsWidget widget} for configuring + * delegation options in the {@link Zarafa.common.settings.SettingsSendAsCategory sendas category}. + */ +Zarafa.common.settings.SettingsSendAsWidget = 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 : 'display_name' }, + { name : 'email_address' } + ], + sortInfo : { + field : 'id', + direction : 'ASC' + }, + autoDestroy : true + }); + + Ext.applyIf(config, { + height : 400, + title : _('Send As settings'), + xtype : 'zarafa.settingssendaswidget', + layout : { + // override from SettingsWidget + type : 'fit' + }, + items : [{ + xtype : 'zarafa.sendaspanel', + store : store, + ref : 'sendasPanel' + }] + }); + + Zarafa.common.settings.SettingsSendAsWidget.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 addresses = settingsModel.get('zarafa/v1/contexts/mail/sendas', true); + var addressesArray = []; + for (var key in addresses) { + addressesArray.push(Ext.apply({}, addresses[key], { id : key })); + } + + // Load all addresses into the GridPanel + var store = this.sendasPanel.sendasGrid.getStore(); + store.loadData(addressesArray); + }, + + /** + * 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 addresses = this.sendasPanel.sendasGrid.getStore().getRange(); + var addressesData = {}; + for (var i = 0, len = addresses.length; i < len; i++) { + var address = addresses[i]; + + addressesData[address.get('id')] = { + 'display_name' : address.get('display_name'), + 'email_address' : address.get('email_address') + }; + } + settingsModel.set('zarafa/v1/contexts/mail/sendas', addressesData); + + settingsModel.endEdit(); + } +}); + +Ext.reg('zarafa.settingssendaswidget', Zarafa.common.settings.SettingsSendAsWidget); diff -ruN --exclude-from=..\diffexclude.txt C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/mail/dialogs/MailCreatePanel.js ./client/zarafa/mail/dialogs/MailCreatePanel.js --- C:\Users\admhaasch\Downloads\webapp-1.3.1.svn41348.tar\webapp-1.3.1.svn41348/client/zarafa/mail/dialogs/MailCreatePanel.js 2013-01-25 16:42:28.000000000 +0100 +++ ./client/zarafa/mail/dialogs/MailCreatePanel.js 2013-05-03 12:46:43.505588600 +0200 @@ -59,6 +59,44 @@ this.mon(this.dialog, 'fromtoggle', this.onDialogFromToggle, this); } }, + + /** + * Returns items for the splitbutton + * @private + */ + initSendAsList : function() { + + var addresses = container.getSettingsModel().get('zarafa/v1/contexts/mail/sendas', true); + var addressesArray = []; + var items = []; + + for (var key in addresses) { + addressesArray.push(Ext.apply({}, addresses[key], { id : key })); + } + + if(addressesArray.length != 0) { + Ext.each(addressesArray, function (record) { + var item = { + text: record.display_name + ' (' + record.email_address + ')', + handler: this.onSelectQuickUser.createDelegate(this, [record], 0) + }; + + if(record.display_name === ""){ + // we don't need the brackets, just use the mail address + item.text = record.email_address; + } + + items.push(item); + }, this); + } else { + items.push({ + text: _('No alias set!'), + handler: this.onSelectUser + }); + } + + return items; + }, /** * Creates the form panel @@ -67,6 +105,7 @@ initMessageFormPanel : function(config) { var items = []; + var quickSendItems = this.initSendAsList(); items.push({ xtype: 'zarafa.compositefield', @@ -75,10 +114,22 @@ anchor: '100%', autoHeight: true, items: [{ - xtype: 'button', + xtype: 'splitbutton', width: 100, text: _('From') + ':', handler: this.onSelectUser, + menu: new Ext.menu.Menu({ + style: { + backgroundImage: 'none' // if "showSeperator" does not work + }, + defaults: { + style: { + paddingLeft: 0 + } + }, + showSeperator: false, + items: quickSendItems // quick sendas + }), scope: this },{ xtype: 'zarafa.addressbookboxfield', @@ -435,6 +486,28 @@ } }); }, + + /** + * Event handler which is fired when the user presses a item in the 'Name' splitbutton. + * + * @private + */ + onSelectQuickUser : function(item) + { + var recipientRecord = Zarafa.core.data.RecordFactory.createRecordObjectByCustomType(Zarafa.core.data.RecordCustomObjectType.ZARAFA_RECIPIENT, { + display_name : item.display_name !== "" ? item.display_name : item.email_address, + email_address : item.email_address, + smtp_address : item.email_address, + recipient_type : Zarafa.core.mapi.RecipientType.MAPI_ORIG + }); + + var store = this.fromRecipientField.getBoxStore(); + + // We need to maintain that in from field there should be only one user, + // So remove earlier added user. + store.removeAll(); + store.add(recipientRecord); + }, /** * Callback function for {@link Zarafa.addressbook.dialogs.ABUserSelectionContent AddressBook}