HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: //usr/local/packages/@appstore/SMBService/ui/directory-admin-list-dialog.js
/* Copyright (c) 2026 Synology Inc. All rights reserved. */

Ext.ns("SYNO.SDS.SMBService.Domain"),SYNO.SDS.SMBService.Domain.Error2Msg=function(e){return SYNO.API.getErrorString(e)},SYNO.SDS.SMBService.Domain.Alert=function(e,t,i){var o=_T("network","domain_set_admin"),s=_T("common","error_system"),r=-1;if(e){if("string"==typeof e)s=e;else if("number"==typeof e)r=e,s=SYNO.API.getErrorString(r);else if(e instanceof Array)for(var n=0;n<e.length;n++)if(!e[n].success){r=e[n].error.code,s=SYNO.API.getErrorString(r);break}}else;this.getMsgBox().alert(o,s,t,i)},Ext.define("SYNO.SDS.SMBService.Domain.DirectoryAdminDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.module=e.module,this.owner=e.owner,this.authType=e.authType,this.store=this.createStore(e),this.grid=this.createGridPanel();var t=this.fillConfig(e);this.callParent([t])},fillConfig:function(e){return Ext.apply({width:750,height:570,title:_T("network","domain_set_admin"),layout:"fit",items:[this.grid],buttons:[{xtype:"syno_button",text:_T("common","close"),btnStyle:"blue",scope:this,handler:function(){this.close()}}],listeners:{close:{scope:this,fn:function(e){this.store.removeAll()}}}},e)},createGridPanel:function(){this.actionRemove=this.createActionRemove();var e={itemId:"grid",border:!1,store:this.store,columns:[{id:"user_type",dataIndex:"type",width:30,sortable:!0,renderer:function(e,t,i){return"user"===i.get("type")?'<div class="acl-grid-item-user" style="width: 26px; height: 26px; margin-left: -4px;"> </div>':'<div class="acl-grid-item-group" style="width: 26px; height: 26px; margin-left: -4px;"> </div>'}},{id:"username",header:_T("group","grp_name"),dataIndex:"name",sortable:!0,width:500}],autoExpandColumn:"username",enableHdMenu:!1,enableColumnMove:!1,selModel:new Ext.grid.RowSelectionModel({single:!0,listeners:{selectionchange:{scope:this,fn:function(e){var t=e.getCount();this.actionRemove.setDisabled(0===t)}}}}),view:new SYNO.ux.FleXcroll.grid.BufferView({trackResetOnLoad:!1,rowHeight:27,scrollDelay:!1,cacheSize:50}),tbar:{items:[{xtype:"syno_button",text:_T("common","add"),itemId:"add",scope:this,handler:this.addMembers},new SYNO.ux.Button(this.actionRemove)]},bbar:new SYNO.ux.PageLessToolbar({store:this.store,displayInfo:!0,showRefreshBtn:!1})};return new SYNO.ux.GridPanel(e)},createActionRemove:function(){return new Ext.Action({text:_T("common","delete"),itemId:"remove",scope:this,handler:this.removeMembers})},createStore:function(e){return new SYNO.API.JsonStore({autoDestroy:!0,appWindow:e.owner,api:"SYNO.Core.Group.ExtraAdmin",method:"get",version:1,baseParams:{category:this.authType},idProperty:"name",totalProperty:"total",root:"list",fields:[{name:"name",sortType:"asNaturalUCString"},"type"],listeners:{exception:this.onStoreException,beforeload:this.onBeforeLoad,load:this.onLoad,scope:this}})},addMembers:function(){var e=new SYNO.SDS.SMBService.Domain.UserChooser({owner:this,module:this.module,authType:this.authType});this.mon(e,"close",this.afterUserChooser,this),e.load()},afterUserChooser:function(e){var t=e.getRecords(),i=[],o=0===e.curUserType?"user":"group";t.length>0&&(Ext.each(t,(function(e){return i.push({name:e.get("name"),type:o}),!0})),this.applyAddMembers(i)),this.mun(e,"close",this.afterUserChooser,this)},applyAddMembers:function(e){this.setStatusBusy({text:_T("common","saving")}),this.sendWebAPI({api:"SYNO.Core.Group.ExtraAdmin",method:"add",version:1,params:{list:e,category:this.authType},scope:this,callback:this.afterAddMembers})},afterAddMembers:function(e,t,i){this.clearStatusBusy(),e?this.store.load():SYNO.SDS.SMBService.Domain.Alert.call(this,t.code)},removeMembers:function(){var e=this.grid.getSelectionModel().getSelections(),t=this.getMsgBox(),i=[],o="";Ext.each(e,(function(e,t,s){i.push({name:e.get("name"),type:e.get("type")}),""!==o&&(o+=","),o+=e.get("name")}),this),t.confirmDelete(_T("network","domain_set_admin"),String.format(_T("network","cfrm_remove_dir_adm")+"<br>{0}",o),(function(t){"yes"===t&&(this.position=this.grid.getBottomToolbar().cursor+this.store.indexOf(e[0]),this.applyRemoveMembers(i))}),this)},applyRemoveMembers:function(e){this.setStatusBusy({text:_T("common","saving")}),this.sendWebAPI({api:"SYNO.Core.Group.ExtraAdmin",method:"delete",version:1,params:{list:e,category:this.authType},scope:this,callback:this.afterRemoveMembers})},afterRemoveMembers:function(e,t,i){this.clearStatusBusy(),e?this.store.load({params:{ingroup:!0}}):SYNO.SDS.SMBService.Domain.Alert.call(this,t.code)},onStoreException:function(e,t,i,o,s,r){this.clearStatusBusy(),3105!==s.code&&3203!==s.code?SYNO.SDS.SMBService.Domain.Alert.call(this,s.code):this.grid.getEl().mask(_T("directory_service","warr_db_not_ready"),"syno-ux-mask-info")},onBeforeLoad:function(e,t){this.setStatusBusy()},onLoad:function(e,t,i){if(this.clearStatusBusy(),this.totalNum=e.totalLength,this.focusMembers&&this.focusMembers.length){var o=e.indexOfId(this.focusMembers[0]);-1!==o&&(this.grid.getSelectionModel().selectRow(o),function(){this.grid.getView().focusRow(o)}.defer(100,this))}e.getCount()>0?this.grid.getSelectionModel().selectFirstRow():this.grid.getTopToolbar().getComponent("remove").disable()},load:function(){this.store.load(),this.show()}}),Ext.define("SYNO.SDS.SMBService.Domain.UserChooser",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.owner=e.owner,this.module=e.module,this.authType=e.authType?e.authType:"domain",this.curUserType=1,this.pageSize=50,"domain"===this.authType&&(this.domainFilter=new SYNO.SDS.SMBService.Domain.Filter({module:this.module})),this.store=this.createGroupStore(),this.grid=this.createGridPanel(e),this.domainFilter.grid=this.grid;var t={module:this,title:_T("group","add_groups"),autoDestroy:!0,width:750,height:500,minWidth:300,minHeight:250,layout:"fit",items:[this.grid],buttons:[{xtype:"syno_button",btnStyle:"grey",itemId:"cancel",text:_T("common","cancel"),scope:this,handler:this.cancelDialog},{xtype:"syno_button",btnStyle:"blue",itemId:"add",text:_T("common","add"),btnStle:"blue",scope:this,handler:this.collectSelected}]};Ext.apply(t,e),this.callParent([t])},createUserStore:function(){var e={api:"SYNO.Core.User",method:"list",version:1,appWindow:this,baseParams:{type:this.authType,offset:0,limit:this.pageSize,additional:["description"]},listeners:{exception:{scope:this,fn:this.onStoreException},beforeload:{scope:this,fn:this.onBeforeLoad},load:{scope:this,fn:this.onLoad}},root:"users",totalProperty:"total",id:"name",fields:[{name:"name",sortType:"asNaturalUCString"},"description"],remoteSort:!0,defaultSortable:!0,scope:this};return new SYNO.API.JsonStore(e)},createGroupStore:function(){var e={api:"SYNO.Core.Group",method:"list",version:1,appWindow:this,baseParams:{offset:0,limit:this.pageSize,name_only:!0,type:this.authType},listeners:{exception:{scope:this,fn:this.onStoreException},beforeload:{scope:this,fn:this.onBeforeLoad},load:{scope:this,fn:this.onLoad}},root:"groups",totalProperty:"total",id:"name",fields:[{name:"name",sortType:"asNaturalUCString"},"description"],remoteSort:!0,defaultSortable:!0,scope:this};return new SYNO.API.JsonStore(e)},createGridPanel:function(e){var t={border:!1,store:this.store,colModel:new Ext.grid.ColumnModel({defaults:{sortable:!0},columns:[{id:"name",header:_T("user","user_account"),dataIndex:"name",width:200},{id:"description",header:_T("user","user_fullname"),dataIndex:"description",width:150,renderer:Ext.util.Format.htmlEncode}]}),autoExpandColumn:"description",enableHdMenu:!1,enableColumnMove:!1,tbar:this.configTopToolbar(),bbar:this.createBBar(),selModel:new Ext.grid.RowSelectionModel({singleSelect:!1,listeners:{selectionchange:{scope:this,fn:this.onSelectionChange}}}),view:new SYNO.ux.FleXcroll.grid.BufferView({trackResetOnLoad:!1,rowHeight:27,scrollDelay:!1,cacheSize:50})};return new SYNO.ux.GridPanel(t)},configTopToolbar:function(){return this.findField=new SYNO.ux.TextFilter({iconStyle:"search",queryParam:"substr",itemId:"search",emptyText:_T("group","search_group"),store:this.store,pageSize:this.pageSize}),"ldap"===this.authType?{items:["->",this.findField]}:"domain"===this.authType?(this.domainFilter.grid=this.grid,{items:[{xtype:"syno_displayfield",itemId:"filterName",value:_T("helptoc","directory_service_domain")+_T("common","colon"),style:"margin-right: 8px"},this.domainFilter,"->",this.findField]}):{items:[]}},createBBar:function(){return this.pageToolbar=new SYNO.ux.PagingToolbar({store:this.store,pageSize:this.pageSize,displayButtons:!0,displayInfo:!0}),this.pageToolbar},collectSelected:function(){this.records=this.grid.getSelectionModel().getSelections(),this.close()},cancelDialog:function(){this.grid.getSelectionModel().clearSelections(),this.close()},domainActivateLoad:function(){this.sendWebAPI({api:"SYNO.Core.Directory.Domain",version:2,method:"get_domain_list",scope:this,callback:function(e,t,i){e&&(this.domainFilter.updateList(t.domain_list),this.store.baseParams.domain_name=this.module.currDomain),this.store.load()}})},load:function(){this.setBtnAddDisable(!0),this.records=[],"domain"===this.authType?this.domainActivateLoad():this.store.load(),this.show()},setBtnAddDisable:function(e){this.getFooterToolbar().getComponent("add").setDisabled(e)},getRecords:function(){return this.records},onSelectionChange:function(e){var t=e.getCount();this.setBtnAddDisable(0===t)},onStoreException:function(e,t,i,o,s,r){SYNO.Debug("Store exception: options:",e,t,i,o,s,r),this.clearStatusBusy(),s.code?3105!==s.code&&3203!==s.code?(this.findField.getValue()&&this.findField.reset(),0===this.curUserType?SYNO.SDS.SMBService.Domain.Alert.call(this.appWin,_T("user","failed_load_user")):SYNO.SDS.SMBService.Domain.Alert.call(this.appWin,_T("group","failed_load_group"))):this.grid.getEl().mask(_T("directory_service","warr_db_not_ready"),"syno-ux-mask-info"):this.setStatusError()},onBeforeLoad:function(e,t){var i=[];"domain"===this.authType&&this.domainFilter.setValue(this.module.currDomain),this.store.baseParams.domain_name=this.module.currDomain?this.module.currDomain:"",this.grid.getColumnModel().getColumnsBy((function(e){return e.hidden||i.push(e.dataIndex),!1})),t.params.searchFields=i,this.setStatusBusy()},onLoad:function(e,t,i){this.clearStatusBusy(),this.grid.getSelectionModel().clearSelections()}});