X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fruntime%2Forg.argeo.security.ria%2Fsrc%2Fargeo-ria-lib%2Fsecurity%2Fclass%2Forg%2Fargeo%2Fsecurity%2Fria%2FUsersApplet.js;h=988e178b7503f58a02c1ec1a30b8c75709a656b6;hb=baa11e2f5b077334f51f183d352e9477cc0124ff;hp=72074cd15b3bb8a5c13486b222d346e28b6f7f83;hpb=30d0df2528e69ed0a0f8fb873fd8d591db949697;p=lgpl%2Fargeo-commons.git diff --git a/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UsersApplet.js b/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UsersApplet.js index 72074cd15..988e178b7 100644 --- a/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UsersApplet.js +++ b/security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UsersApplet.js @@ -3,7 +3,7 @@ * The only associated command is the "Close" command. */ /* ************************************************* -#asset(resource/org.argeo.ria.sample/window-close.png) +#asset(resource/org.argeo.security.ria/*) ****************************************************/ qx.Class.define("org.argeo.security.ria.UsersApplet", { @@ -28,25 +28,131 @@ qx.Class.define("org.argeo.security.ria.UsersApplet", */ commands : { init : { - "close" : { - label : "Close", - icon : "ria/window-close.png", - shortcut : "Control+w", + "load_users" : { + label : "Reload Users", + icon : "org.argeo.security.ria/view-refresh.png", + shortcut : "Control+h", + enabled : true, + menu : "Users", + toolbar : "users", + callback : function(e){ + this.loadUsersList(); + }, + command : null + }, + "new_user" : { + label : "New User", + icon : "org.argeo.security.ria/list-add.png", + shortcut : "Control+n", + enabled : true, + menu : "Users", + toolbar : null, + callback : function(e){ + // Call service to delete + var classObj = org.argeo.security.ria.UserEditorApplet; + var initData = {USER:null,ROLES_LIST:this.getRolesList()}; + var iView = org.argeo.ria.components.ViewsManager.getInstance().initIViewClass(classObj, "editor", initData); + iView.load(); + iView.addListener("savedUser", function(e){ + this.refreshUserEntry(e.getData()); + }, this); + }, + command : null + }, + "delete_user" : { + label : "Delete User", + icon : "org.argeo.security.ria/list-remove.png", + shortcut : "Control+d", + enabled : true, + menu : "Users", + toolbar : null, + callback : function(e){ + // Call service to delete + var username = this.getViewSelection().getNodes()[0]; + var deleteService = org.argeo.security.ria.SecurityAPI.getDeleteUserService(username); + deleteService.addListener("completed", function(response){ + if(response.getContent().status && response.getContent().status == "OK"){ + this.loadUsersList(); + } + }, this); + // Check if tab is opened before closing! + var editorTabPane = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("editor"); + var iApplet = editorTabPane.contentExists(username); + var modal = new org.argeo.ria.components.Modal("Delete"); + if(iApplet){ + if(iApplet.getModified()){ + modal.addConfirm("There are unsaved changes, are you sure you want to delete this user?"); + modal.addListener("ok", function(e){ + editorTabPane.closeCurrent(); + deleteService.send(); + }, this); + modal.attachAndShow(); + }else{ + modal.addConfirm("Are you sure you want to delete user " + username + "?"); + modal.addListener("ok", function(e){ + editorTabPane.closeCurrent(); + deleteService.send(); + }, this); + modal.attachAndShow(); + } + }else{ + modal.addConfirm("Are you sure you want to delete user " + username + "?"); + modal.addListener("ok", function(e){ + deleteService.send(); + }, this); + modal.attachAndShow(); + } + }, + selectionChange : function(viewName, data){ + if(viewName != "users") return; + this.setEnabled(!(data == null || !data.length || data.length>1)); + }, + command : null + }, + "edit_user" : { + label : "Edit User", + icon : "org.argeo.security.ria/document-properties.png", + shortcut : "Control+u", enabled : true, - menu : "Applet", - toolbar : "result", + menu : "Users", + toolbar : null, callback : function(e){ // Call service to delete - this.getView().empty(); + var crtUser = this.getViewSelection().getNodes()[0]; + var classObj = org.argeo.security.ria.UserEditorApplet; + var initData = {USER:crtUser,ROLES_LIST:this.getRolesList()}; + var iView = org.argeo.ria.components.ViewsManager.getInstance().initIViewClass(classObj, "editor", initData); + iView.load(crtUser); + iView.addListener("savedUser", function(e){ + this.refreshUserEntry(e.getData()); + }, this); + }, + selectionChange : function(viewName, data){ + if(viewName != "users") return; + this.setEnabled(!(data == null || !data.length || data.length > 1)); }, command : null - } + } } }, + + guiMode : { + init : "filter", + apply : "_applyGuiMode" + }, + viewSelection : { nullable:false, check:"org.argeo.ria.components.ViewSelection" }, + usersList : { + check : "Map", + apply : "_applyUsersList", + event : "changeUsersList" + }, + rolesList : { + check : "Array" + }, instanceId : {init:""}, instanceLabel : {init:""} }, @@ -59,7 +165,13 @@ qx.Class.define("org.argeo.security.ria.UsersApplet", */ init : function(viewPane){ this.setView(viewPane); - this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId())); + this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId())); + + this.toolBar = new qx.ui.toolbar.ToolBar(); + this.toolBarPart = new qx.ui.toolbar.Part(); + this.toolBar.add(this.toolBarPart); + viewPane.add(this.toolBar); + this.tableModel = new qx.ui.table.model.Filtered(); this.tableModel.setColumns(["username", "roles"]); this.table = new qx.ui.table.Table(this.tableModel, { @@ -67,8 +179,55 @@ qx.Class.define("org.argeo.security.ria.UsersApplet", return new qx.ui.table.columnmodel.Resize(obj) } }); - this.table.setStatusBarVisible(false); + this.table.setStatusBarVisible(false); + this.table.setShowCellFocusIndicator(false); + this.table.setColumnVisibilityButtonVisible(false); + this.table.highlightFocusedRow(false); viewPane.add(this.table, {height:"100%"}); + this.table.getSelectionModel().addListener("changeSelection", function(){ + this._selectionToValues(this.table.getSelectionModel(), this.getViewSelection()); + }, this); + this.table.addListener("cellDblclick", function(cellEvent){ + this.getCommands()["edit_user"].command.execute(); + }, this); + + this.setRolesList([]); + this.setUsersList({}); + this.setGuiMode("clear"); + }, + + _applyGuiMode : function(newMode, oldMode){ + this.table.getSelectionModel().clearSelection(); + this.resetHiddenRows(); + if(newMode == "filter"){ + this.table.getSelectionModel().setSelectionMode(qx.ui.table.selection.Model.SINGLE_SELECTION); + }else if(newMode == "chooser"){ + this.table.getSelectionModel().setSelectionMode(qx.ui.table.selection.Model.MULTIPLE_INTERVAL_SELECTION_TOGGLE); + }else if(newMode == "clear"){ + this.table.getSelectionModel().setSelectionMode(qx.ui.table.selection.Model.SINGLE_SELECTION); + } + }, + + _selectionToValues : function(selectionModel, viewSelection){ + if(viewSelection){ + viewSelection.setBatchMode(true); + viewSelection.clear(); + } + if(!selectionModel.getSelectedCount()) return []; + var ranges = selectionModel.getSelectedRanges(); + var values = []; + for(var i=0;i