Ext.namespace('Zarafa.addressbook');
/**
* @class Zarafa.addressbook.AddressBookContext
* @extends Zarafa.core.Context
*/
Zarafa.addressbook.AddressBookContext = Ext.extend(Zarafa.core.Context, {
/**
* @constructor
* @param config
*/
constructor : function(config)
{
config = config || {};
Ext.applyIf(config, {
hasToolbar : false,
hasContentPanel : false
});
Zarafa.addressbook.AddressBookContext.superclass.constructor.call(this, config);
// Register addressbook specific dialog types
Zarafa.core.data.SharedComponentType.addProperty('addressbook.dialog.addressbook');
Zarafa.core.data.SharedComponentType.addProperty('addressbook.dialog.abuserselection');
Zarafa.core.data.SharedComponentType.addProperty('addressbook.dialog.abmultiuserselection');
},
/**
* Bid for the type of shared component and the given record.
* This will bid on a dialog.crate or dialog.view for a record with a
* message class set to IPM or IPM.Note.
* @param {Zarafa.core.data.SharedComponentType} type Type of component a context can bid for.
* @param {Ext.data.Record} record Optionally passed record.
* @return {Number} The bid for the shared component
*/
bidSharedComponent: function(type, record)
{
var bid = -1;
if (Array.isArray(record)) {
record = record[0];
}
switch (type) {
case Zarafa.core.data.SharedComponentType['addressbook.dialog.addressbook']:
case Zarafa.core.data.SharedComponentType['addressbook.dialog.abuserselection']:
case Zarafa.core.data.SharedComponentType['addressbook.dialog.abmultiuserselection']:
bid = 1;
break;
case Zarafa.core.data.SharedComponentType['common.contextmenu']:
if (record instanceof Zarafa.addressbook.AddressBookRecord) {
bid = 1;
}
break;
case Zarafa.core.data.SharedComponentType['common.view']:
if (record instanceof Zarafa.addressbook.AddressBookRecord) {
var objType = record.get('object_type');
var biddableObjectTypes = [
Zarafa.core.mapi.ObjectType.MAPI_MAILUSER,
Zarafa.core.mapi.ObjectType.MAPI_DISTLIST,
Zarafa.core.mapi.ObjectType.MAPI_ABCONT
];
// We also check whether the entryid does not indicate this entry comes from the Contact Provider
if(biddableObjectTypes.indexOf(objType) >= 0 && !Zarafa.core.EntryId.hasContactProviderGUID(record.get('entryid'))){
bid = 1;
}
}
break;
}
return bid;
},
/**
* Will return the reference to the shared component.
* Based on the type of component requested a component is returned.
* @param {Zarafa.core.data.SharedComponentType} type Type of component a context can bid for.
* @param {Ext.data.Record} record Optionally passed record.
* @return {Ext.Component} Component
*/
getSharedComponent: function(type, record)
{
var component;
switch (type) {
case Zarafa.core.data.SharedComponentType['addressbook.dialog.addressbook']:
component = Zarafa.addressbook.dialogs.AddressBookContentPanel;
break;
case Zarafa.core.data.SharedComponentType['common.view']:
switch (record.get('object_type')) {
case Zarafa.core.mapi.ObjectType.MAPI_MAILUSER:
component = Zarafa.addressbook.dialogs.ABUserDetailContentPanel;
break;
case Zarafa.core.mapi.ObjectType.MAPI_DISTLIST:
component = Zarafa.addressbook.dialogs.ABGroupDetailContentPanel;
break;
case Zarafa.core.mapi.ObjectType.MAPI_ABCONT:
component = Zarafa.addressbook.dialogs.ABGroupDetailContentPanel;
break;
}
break;
case Zarafa.core.data.SharedComponentType['addressbook.dialog.abuserselection']:
component = Zarafa.addressbook.dialogs.ABUserSelectionContentPanel;
break;
case Zarafa.core.data.SharedComponentType['addressbook.dialog.abmultiuserselection']:
component = Zarafa.addressbook.dialogs.ABMultiUserSelectionContentPanel;
break;
case Zarafa.core.data.SharedComponentType['common.contextmenu']:
component = Zarafa.addressbook.ui.AddressBookContextMenu;
break;
}
return component;
}
});
Zarafa.onReady(function() {
container.registerContext(new Zarafa.core.ContextMetaData({
name : 'addressbook',
allowUserVisible : false,
pluginConstructor : Zarafa.addressbook.AddressBookContext
}));
});