2017-09-13 14:12:57 +02:00
Ext . namespace ( 'Zarafa.plugins.mdm.dialogs' ) ;
/ * *
* @ class Zarafa . plugins . mdm . dialogs . MDMManageSharedFolderPanel
* @ extends Ext . Panel
* @ xtype mdm . managesharedfolderpanel
*
* Panel for users to show the { @ link Zarafa . core . data . IPFRecord folders } which are shared with device
* /
Zarafa . plugins . mdm . dialogs . MDMManageSharedFolderPanel = Ext . extend ( Ext . Panel , {
/ * *
* @ cfg { Zarafa . plugins . mdm . data . MDMDeviceFolderStore } store contains { @ link Zarafa . plugins . mdm . data . MDMDeviceFolderRecord folders } which
* is going to shared with device .
* /
sharedFoldersStore : undefined ,
/ * *
* @ cfg { Zarafa . core . data . IPMRecord } record The mail which
* is being update by this panel .
* /
record : null ,
/ * *
* @ constructor
* @ param { Object } config Configuration structure
* /
constructor : function ( config )
{
config = config || { } ;
Ext . applyIf ( config , {
xtype : 'mdm.managesharedfolderpanel' ,
layout : {
type : 'fit' ,
align : 'stretch'
} ,
border : false ,
header : false ,
items : [
this . createTreePanel ( )
] ,
buttonAlign : 'right' ,
plugins : [ 'zarafa.recordcomponentupdaterplugin' ] ,
buttons : [ {
text : _ ( 'Apply' ) ,
handler : this . onApply ,
cls : 'zarafa-action' ,
scope : this
} , {
text : _ ( 'Cancel' ) ,
handler : this . onCancel ,
scope : this
} ]
} ) ;
Zarafa . plugins . mdm . dialogs . MDMManageSharedFolderPanel . superclass . constructor . call ( this , config ) ;
} ,
/ * *
* Creates a { @ link Zarafa . hierarchy . ui . Tree treepanel }
* which contains all the { @ link Zarafa . hierarchy . data . MAPIFolderRecord folders }
* on which search get perform .
* @ return { Object } Configuration object for the tree panel .
* @ private
* /
createTreePanel : function ( )
{
return {
xtype : 'panel' ,
layout : 'form' ,
defaults : {
cls : 'mdm-create-tree-panel-item'
} ,
border : false ,
flex : 1 ,
items : [ {
xtype : 'displayfield' ,
hideLabel : true ,
2018-05-09 14:04:28 +02:00
value : dgettext ( 'plugin_mdm' , 'Select folders to sync to your device from the list below. To add additional mailboxes to the list, open them in WebApp first.' )
2017-09-13 14:12:57 +02:00
} , {
xtype : 'mdm.hierarchytree' ,
autoScroll : true ,
hideOwnTree : true ,
nodeConfig : {
checked : false
} ,
multiSelect : true ,
hideShowAllFolders : true ,
border : true ,
treeSorter : true ,
bbarConfig : {
hidden : true
} ,
enableDD : false ,
anchor : '100% 90%' ,
ref : '../hierarchyTree'
} ]
} ;
} ,
/ * *
* Initialize the events
* @ private
* /
initEvents : function ( )
{
Zarafa . plugins . mdm . dialogs . MDMManageSharedFolderPanel . superclass . initEvents . apply ( this , arguments ) ;
this . mon ( this . hierarchyTree , {
expandnode : this . onTreeNodeExpand ,
checkchange : this . onTreeNodeCheckChange ,
click : this . onTreeNodeClick ,
scope : this
} ) ;
} ,
/ * *
* Fired when the { @ link Zarafa . hierarchy . ui . Tree Tree } fires the { @ link Zarafa . hierarchy . ui . Tree # nodeexpand nodeexpand }
* event .
* It will update the hierarchy by selecting child node if it will shared with device .
* @ private
* /
onTreeNodeExpand : function ( )
{
if ( ! this . record . isOpened ( ) ) {
return false ;
}
this . updateHierarchy ( ) ;
} ,
/ * *
* Updates the panel by loading data from the record .
*
* @ param { Zarafa . core . data . IPMRecord } record The record update the panel with .
* @ param { Boolean } contentReset force the component to perform a full update of the data .
* /
update : function ( record , contentReset )
{
this . record = record ;
this . sharedFoldersStore = record . getSubStore ( 'sharedfolders' ) ;
this . updateHierarchy ( ) ;
} ,
/ * *
* Function will try to select those { @ link Ext . tree . TreeNode TreeNode } in
* { @ link Zarafa . hierarchy . ui . Tree Tree } which was shared with respective device .
* /
updateHierarchy : function ( )
{
var folders = this . sharedFoldersStore . getRange ( ) ;
folders . forEach ( function ( folder ) {
var node = this . hierarchyTree . getNodeById ( folder . get ( 'entryid' ) ) ;
if ( Ext . isDefined ( node ) ) {
if ( node . hasChildNodes ( ) ) {
node . expand ( ) ;
}
node . isNodeSelected = true ;
node . getUI ( ) . toggleCheck ( true ) ;
}
} , this ) ;
} ,
/ * *
* Called when a treeNode is click in tree . The corresponding folder is added to ,
* or removed from the active folder list depending on the state of the check box .
* @ param { Ext . tree . TreeNode } treeNode tree node .
* @ private
* /
onTreeNodeClick : function ( treeNode )
{
var treeNodeui = treeNode . getUI ( ) ;
if ( treeNodeui . checkbox . checked && treeNode . isNodeSelected ) {
treeNodeui . toggleCheck ( false ) ;
return false ;
}
treeNode . isNodeSelected = true ;
this . sharedFoldersStore . addFolder ( treeNode . getFolder ( ) ) ;
treeNodeui . toggleCheck ( true ) ;
} ,
/ * *
* Called when a check box in the calendar tree is toggled . The corresponding folder is added to ,
* or removed from the active folder list depending on the state of the check box .
* @ param { Ext . tree . TreeNode } node tree node .
* @ param { Boolean } checked indicates whether the box is checked .
* @ private
* /
onTreeNodeCheckChange : function ( node , checked )
{
if ( ! checked ) {
node . isNodeSelected = false ;
this . sharedFoldersStore . removeFolder ( node . getFolder ( ) ) ;
} else if ( checked && ! node . isNodeSelected ) {
this . onTreeNodeClick ( node ) ;
}
} ,
/ * *
* Action handler when the user presses the "Apply" button .
* This save the record and close the panel .
* /
onApply : function ( )
{
this . record . save ( ) ;
} ,
/ * *
* Action handler when the user presses the "Cancel" button .
* This will close the panel .
* /
onCancel : function ( )
{
this . dialog . close ( ) ;
}
} ) ;
2017-04-20 13:49:55 +02:00
Ext . reg ( 'mdm.managesharedfolderpanel' , Zarafa . plugins . mdm . dialogs . MDMManageSharedFolderPanel ) ;