From: Joseph Lewis Date: Mon, 18 Jun 2012 21:07:05 +0000 (-0600) Subject: Fixed grp_tree to work with Dojo 1.6. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d7268a38fb6a45e08cb717c8fc70586f4842601f;p=evergreen%2Fjoelewis.git Fixed grp_tree to work with Dojo 1.6. Signed-off-by: Joseph Lewis --- diff --git a/Open-ILS/web/conify/global/permission/grp_tree.html b/Open-ILS/web/conify/global/permission/grp_tree.html index ac2026f36c..4567900b97 100644 --- a/Open-ILS/web/conify/global/permission/grp_tree.html +++ b/Open-ILS/web/conify/global/permission/grp_tree.html @@ -22,7 +22,8 @@ &conify.grp_tree.group_tree.title; - - - - + + + + - + - @@ -154,90 +94,19 @@ minSize="200" jsId="group_tree" > - - - - -
-
- @@ -260,11 +129,6 @@ @@ -278,13 +142,6 @@ searchAttr="code" jsId="editor_pane_application_perm" > - @@ -296,13 +153,6 @@ dojoType="dijit.form.NumberSpinner" jsId="editor_pane_hold_priority" > - @@ -318,13 +168,6 @@ ignoreCase="true" required="true" > - @@ -345,197 +188,23 @@
-
- +
-
- -
- -
+ +
@@ -549,7 +218,7 @@
&conify.grp_tree.group_name.label; - &conify.grp_tree.permission_interval.label; -
- +

diff --git a/Open-ILS/web/conify/global/permission/grp_tree.js b/Open-ILS/web/conify/global/permission/grp_tree.js index 1ee39d3656..67367e67ec 100644 --- a/Open-ILS/web/conify/global/permission/grp_tree.js +++ b/Open-ILS/web/conify/global/permission/grp_tree.js @@ -1,19 +1,19 @@ /* -# --------------------------------------------------------------------------- -# Copyright (C) 2008 Georgia Public Library Service / Equinox Software, Inc -# Mike Rylander -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# --------------------------------------------------------------------------- -*/ + # --------------------------------------------------------------------------- + # Copyright (C) 2008 Georgia Public Library Service / Equinox Software, Inc + # Mike Rylander + # + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # --------------------------------------------------------------------------- + */ dojo.require('fieldmapper.AutoIDL'); dojo.require('fieldmapper.dojoData'); @@ -39,14 +39,18 @@ dojo.require('dijit.layout.LayoutContainer'); dojo.require('dijit.layout.SplitContainer'); dojo.require('dojox.widget.Toaster'); dojo.require('dojox.fx'); -dojo.require('dojox.grid.Grid'); +dojo.require('dojox.grid.cells.dijit'); +dojo.require('dojo.data.ItemFileWriteStore'); +dojo.require('dojox.grid.DataGrid'); dojo.requireLocalization("openils.conify", "conify"); // some handy globals var cgi = new CGI(); var ses = dojo.cookie('ses') || cgi.param('ses'); var server = {}; -server.pcrud = new openils.PermaCrud({ authtoken : ses }); +server.pcrud = new openils.PermaCrud({ + authtoken : ses +}); server.actor = new OpenSRF.ClientSession('open-ils.actor'); var pgt_strings = dojo.i18n.getLocalization('openils.conify', 'conify'); @@ -55,73 +59,591 @@ var virgin_out_id = -1; var highlighter = {}; -function status_update (markup) { - if (parent !== window && parent.status_update) parent.status_update( markup ); + +var _ou_type_list = server.pcrud.retrieveAll('aout', { + order_by : { + aout : 'depth' + } +}); + +var _ou_type_data = aout.toStoreData(_ou_type_list); +var ou_type_store = new dojo.data.ItemFileReadStore({data : _ou_type_data}); + +var _perm_list = server.pcrud.retrieveAll('ppl', { + order_by : { + ppl : 'code' + } +}); +var _perm_data = ppl.toStoreData(_perm_list, 'code'); +var _perm_name_data = ppl.toStoreData(_perm_list, 'code', { + identifier : 'code' +}); + +var perm_store = new dojo.data.ItemFileWriteStore({ + data : _perm_data +}); +var perm_name_store = new dojo.data.ItemFileWriteStore({ + data : _perm_name_data +}); + +var _perm_map_list = server.pcrud.retrieveAll('pgpm'); +var _perm_map_data = pgpm.toStoreData(_perm_map_list, 'id'); +var perm_map_store = new dojo.data.ItemFileWriteStore({ + data : _perm_map_data +}); + +perm_map_store.onSet = function(item, attr, o, n) { + if (attr == 'ischanged') + return; + if (n == o) + return; + + this.setValue(item, 'ischanged', 1); + + if (attr == 'grantable' && ( typeof (n) != 'string')) + this.setValue(item, 'grantable', n ? 't' : 'f'); } -function save_group () { - var modified_pgt = new pgt().fromStoreItem( current_group ); - modified_pgt.ischanged( 1 ); +function status_update(markup) { + if (parent !== window && parent.status_update) + parent.status_update(markup); +} + +function save_group() { + + var modified_pgt = new pgt().fromStoreItem(current_group); + modified_pgt.ischanged(1); new_kid_button.disabled = false; save_group_button.disabled = false; delete_group_button.disabled = false; server.pcrud.update(modified_pgt, { - onerror : function (r) { + onerror : function(r) { highlighter.editor_pane.red.play(); - status_update( dojo.string.substitute( pgt_strings.ERROR_SAVING_DATA, [group_store.getValue( current_group, 'name' )]) ); + status_update(dojo.string.substitute(pgt_strings.ERROR_SAVING_DATA, [group_store.getValue(current_group, 'name')])); }, - oncomplete : function (r) { - group_store.setValue( current_group, 'ischanged', 0 ); + oncomplete : function(r) { + group_store.setValue(current_group, 'ischanged', 0); highlighter.editor_pane.green.play(); - status_update( dojo.string.substitute(pgt_strings.SUCCESS_SAVE, [group_store.getValue( current_group, 'name' )]) ); + status_update(dojo.string.substitute(pgt_strings.SUCCESS_SAVE, [group_store.getValue(current_group, 'name')])); }, }); } -function save_perm_map (storeItem) { +function save_perm_map(storeItem) { - var modified_pgpm = new pgpm().fromStoreItem( storeItem ); - modified_pgpm.ischanged( 1 ); + var modified_pgpm = new pgpm().fromStoreItem(storeItem); + modified_pgpm.ischanged(1); server.pcrud.update(modified_pgpm, { - onerror : function (r) { + onerror : function(r) { highlighter.editor_pane.red.play(); - status_update( dojo.string.substitute(pgt_strings.ERROR_SAVING_PERM_DATA, [group_store.getValue( current_group, 'name' )]) ); + status_update(dojo.string.substitute(pgt_strings.ERROR_SAVING_PERM_DATA, [group_store.getValue(current_group, 'name')])); }, - oncomplete : function (r) { - perm_map_store.setValue( storeItem, 'ischanged', 0 ); + oncomplete : function(r) { + perm_map_store.setValue(storeItem, 'ischanged', 0); highlighter.editor_pane.green.play(); - status_update( dojo.string.substitute(pgt_strings.SUCCESS_SAVE_PERM, [group_store.getValue( current_group, 'name' )]) ); + status_update(dojo.string.substitute(pgt_strings.SUCCESS_SAVE_PERM, [group_store.getValue(current_group, 'name')])); }, }); } -function save_them_all (event) { +function save_them_all(event) { var dirtyMaps = []; - perm_map_store.fetch({ - query : { ischanged : 1 }, - onItem : function (item, req) { try { if (this.isItem( item )) dirtyMaps.push( item ); } catch (e) { /* meh */ } }, - scope : perm_map_store - }); - - var confirmation = true; + perm_map_store.fetch({ + query : { + ischanged : 1 + }, + onItem : function(item, req) { + try { + if (this.isItem(item)) + dirtyMaps.push(item); + } catch (e) {/* meh */ + } + }, + scope : perm_map_store + }); + var confirmation = true; - if (event && dirtyMaps.length > 0) { - confirmation = confirm( pgt_strings.CONFIRM_EXIT); - } + if (event && dirtyMaps.length > 0) { + confirmation = confirm(pgt_strings.CONFIRM_EXIT); + } - if (confirmation) { - for (var i in dirtyMaps) { - save_perm_map(dirtyMaps[i]); - } - } + if (confirmation) { + for (var i in dirtyMaps) { + save_perm_map(dirtyMaps[i]); + } + } } -dojo.addOnUnload( save_them_all ); +dojo.addOnUnload(save_them_all); + +var dirtyStore = []; +var current_group; + +var _group_list = server.pcrud.retrieveAll('pgt', { + order_by : { + pgt : 'name' + } +}); +var _group_data = pgt.toStoreData(_group_list); +var group_store = new dojo.data.ItemFileWriteStore({ + data : _group_data +}); + +group_store.onSet = function(item, attr, o, n) { + if (attr == 'ischanged') + return; + if (n == o) + return; + this.setValue(item, 'ischanged', 1); +}; + +dojo.addOnUnload(function(event) { + + group_store.fetch({ + query : { + ischanged : 1 + }, + queryOptions : { + deep : true + }, + onItem : function(item, req) { + try { + if (this.isItem(item)) + dirtyStore.push(item); + } catch (e) {/* meh */ + } + }, + scope : group_store + }); + + if (dirtyStore.length > 0) { + var confirmation = confirm(pgt_strings.CONFIRM_EXIT_PGT); + + if (confirmation) { + for (var i in dirtyStore) { + current_group = dirtyStore[i]; + save_group(true); + } + } + } +}); + + + +dojo.addOnUnload(function(event) { + save_them_all(); +}); + +/** Called once everything has loaded, getting us ready for 1.7 **/ +dojo.addOnLoad(function() { + window.right_pane_toggler = new dojo.fx.Toggler({ + node : 'right_pane' + }); + window.right_pane_toggler.hide(); + + highlighter.group_tree = {}; + highlighter.editor_pane = {}; + highlighter.group_tree.green = dojox.fx.highlight({ + color : '#B4FFB4', + node : 'group_tree', + duration : 500 + }); + highlighter.group_tree.red = dojox.fx.highlight({ + color : '#FF2018', + node : 'group_tree', + duration : 500 + }); + highlighter.editor_pane.green = dojox.fx.highlight({ + color : '#B4FFB4', + node : 'editor_pane', + duration : 500 + }); + highlighter.editor_pane.red = dojox.fx.highlight({ + color : '#FF2018', + node : 'editor_pane', + duration : 500 + }); + + dojo.connect(group_tree, "getLabel", group_tree, function(item, pI) { + var label = this.store.getValue(item, 'name'); + + if (this.store.getValue(item, 'ischanged') == 1) + label = '* ' + label; + + return label; + }); + + dojo.connect(group_tree, "onClick", group_tree, function(item, node) { + right_pane_toggler.show(); + + current_group = item; + window.current_fm_group = new pgt().fromStoreItem(item); + + perm_grid.filter({ + grp : current_group ? group_store.getValue(current_group, 'id') : -1 + }); + //perm_map_store.refresh(); + //perm_grid.refresh(); + + highlighter.editor_pane.green.play(); + status_update(dojo.string.substitute(pgt_strings.STATUS_EDITING, [this.store.getValue(item, 'name')])); + + new_kid_button.disabled = false; + save_group_button.disabled = false; + delete_group_button.disabled = false; + + var main_settings_fields = ['name', 'perm_interval', 'description']; + for (var i in main_settings_fields ) { + var field = main_settings_fields[i]; + var value = this.store.getValue(current_group, field); + + if (!value) { + window["editor_pane_" + field].setValue(''); + // unset the value + if (field != 'description') + window["editor_pane_" + field].setDisplayedValue(''); + // unset the value + } else + window["editor_pane_" + field].setValue(value); + } + + if (this.store.getValue(current_group, '_trueRoot') == 'true') { + editor_pane_parent.disabled = true; + editor_pane_parent.setValue(null); + editor_pane_parent.setDisplayedValue(''); + editor_pane_parent.validate(false); + } else { + editor_pane_parent.disabled = false; + editor_pane_parent.validate(true); + editor_pane_parent.setValue(this.store.getValue(current_group, 'parent')); + } + + editor_pane_application_perm.setValue(this.store.getValue(current_group, 'application_perm')); + editor_pane_hold_priority.setValue(this.store.getValue(current_group, 'hold_priority')); + + editor_pane_usergroup.setChecked(this.store.getValue(current_group, 'usergroup') == 't' ? true : false); + }); + + dojo.connect(editor_pane_name, "onChange", editor_pane_name, function() { + if (current_group) { + group_store.setValue(current_group, "name", this.getValue()); + } + }); + + dojo.connect(editor_pane_perm_interval, "onChange", editor_pane_perm_interval, function() { + if (current_group) { + group_store.setValue(current_group, "perm_interval", this.getValue()); + } + }); + + dojo.connect(editor_pane_application_perm, "onChange", editor_pane_application_perm, function() { + if (current_group && this.getValue()) { + group_store.setValue(current_group, "application_perm", this.getValue()); + } + }); + + dojo.connect(editor_pane_hold_priority, "onChange", editor_pane_hold_priority, function() { + if (current_group && this.getValue()) { + group_store.setValue(current_group, "hold_priority", this.getValue()); + } + }); + + dojo.connect(editor_pane_parent, "onChange", editor_pane_parent, function() { + if (current_group && this.getValue()) { + this.store.setValue(current_group, "parent", this.getValue()); + } + }); + + save_group_button.disabled = true; + delete_group_button.disabled = true; + + dojo.connect(delete_group_button, "onClick", delete_group_button, function() { + if (group_store.getValue(current_group, '_trueRoot') == 'true') { + highlighter.editor_pane.red.play(); + status_update(dojo.string.substitute(pgt_strings.STATUS_ERR_DELETING, [group_store.getValue(current_group, 'name')])); + return false; + } + + if (current_group.children) { + var kids = current_group.children; + if (!dojo.isArray(kids)) + kids = [kids]; + + var existing_kids = dojo.filter(kids, function(kid) { + if(kid == null) + return false; + return kid.isdeleted[0] != 1 + }); + if (existing_kids.length > 0) { + highlighter.editor_pane.red.play(); + status_update(dojo.string.substitute(pgt_strings.STATUS_ERR_DELETING_DEPENDENCY, [group_store.getValue(current_group, 'name'), existing_kids.length])); + return; + } + } + + if (confirm(dojo.string.substitute(pgt_strings.CONFIRM_DELETE, [current_group.name]))) { + group_store.setValue(current_group, 'isdeleted', 1); + + var modified_pgt = new pgt().fromStoreItem(current_group); + modified_pgt.isdeleted(1); + + server.pcrud.eliminate(modified_pgt, { + onerror : function(r) { + highlighter.editor_pane.red.play(); + status_update(dojo.string.substitute(pgt_strings.CONFIRM_DELETE, [group_store.getValue(current_group, 'name')])); + }, + oncomplete : function(r) { + var old_name = group_store.getValue(current_group, 'name'); + + group_store.fetch({ + query : { + id : group_store.getValue(current_group, 'id') + }, + queryOptions : { + deep : true + }, + onItem : function(item, req) { + try { + if (this.isItem(item)) + this.deleteItem(item); + } catch (e) {/* meh */ + } + }, + scope : group_store + }); + + current_group = null; + + new_kid_button.disabled = true; + save_group_button.disabled = true; + delete_group_button.disabled = true; + + var main_settings_fields = ['name', 'perm_interval', 'description']; + for (var i in main_settings_fields ) { + var field = main_settings_fields[i]; + window["editor_pane_" + field].setValue(''); + // unset the value + window["editor_pane_" + field].setDisplayedValue(''); + // unset the value + } + + window["editor_pane_usergroup"].setChecked(false); + // unset the value + + highlighter.editor_pane.green.play(); + status_update(dojo.string.substitute(pgt_strings.STATUS_DELETED, [old_name])); + } + }); + + } + }); + + new_kid_button.disabled = true; + + dojo.connect(new_kid_button, "onClick", new_kid_button, function() { + var new_fm_obj = new pgt().fromHash({ + isnew : 1, + name : pgt_strings.LABEL_NEW_GROUP, + usergroup : 'f', + parent : group_store.getValue(current_group, 'id') + }); + + var err = false; + + server.pcrud.create(new_fm_obj, { + onerror : function(r) { + highlighter.editor_pane.red.play(); + status_update(pgt_strings.ERROR_CALLING_METHOD_PGT); + err = true; + }, + oncomplete : function(r, list) { + group_store.newItem(list[0].toStoreItem(), { + parent : current_group, + attribute : 'children' + }); + } + }); + + if (!err) { + highlighter.editor_pane.green.play(); + highlighter.group_tree.green.play(); + status_update(dojo.string.substitute(pgt_strings.SUCCESS_NEW_CHILD_GROUP, [group_store.getValue(current_group, 'name')])); + } + }); + + dojo.connect(perm_pane, "onShow", perm_pane, function() { + perm_grid.filter({ + grp : current_group ? group_store.getValue(current_group, 'id') : -1 + }); + //perm_map_model.refresh(); + //perm_grid.refresh(); + }); + + perm_grid = new dojox.grid.DataGrid({ + query: {perm: '*'}, + store: perm_map_store, + structure: [{ + cells : [[{ + name : pgt_strings.LABEL_CODE, + field : "perm", + formatter : function(val, rowIndex) + { + console.log(this.grid.getItem(rowIndex)["perm"][0]); + var perm_val = this.grid.getItem(rowIndex)["perm"][0]; + + var returnval = "undefined"; + console.log("items"); + dojo.map(_perm_data.items, function(x) + { + if(x.id == perm_val) + { + returnval = x.code; + } + }); + return returnval; + + + perm_store.fetch({query : {id: perm_val}, + onItem: function(item) { + console.log(perm_store.getValue(item)); + }}); + return ""; + }, + width : "auto" + }, { + editable:true, + name : pgt_strings.LABEL_DEPTH, + field : "depth", + formatter : function(item){ + return _ou_type_list[item].name(); + }, + cellType : dojox.grid.cells.Select, + options : dojo.map(_ou_type_list, function(x) { + return x.name() + }), + values : dojo.map(_ou_type_list, function(x) { + return x.depth() + }) + }, { + name : pgt_strings.LABEL_GRANTABLE, + field : "grantable", + editable:true, + cellType : dojox.grid.cells.Bool, + get : function(rowIndex, store) { + var gr = this.grid.getItem(rowIndex)["grantable"][0]; + return (gr == 't' || gr === true); + }, + }]] + }], + }, 'grid_node'); + perm_grid.startup(); + + dojo.connect(new_mapping_add, "onClick", new_mapping_add, function() { + var new_perm = new_perm_select.getValue(); + if (!new_perm) + return; + + var new_type_id = new_depth_select.getValue(); + if (!new_type_id) + return; + + var new_type; + window.ou_type_store.fetch({ + query : { + id : new_type_id + }, + onItem : function(item, req) { + try { + new_type = item + } catch (e) {/* meh */ + } + }, + }); + + var new_depth = ou_type_store.getValue(new_type, 'depth') + var new_grant = new_grant_checkbox.getValue(); + + var new_fm_obj = new pgpm().fromHash({ + isnew : 1, + perm : new_perm, + depth : new_depth, + grp : group_store.getValue(current_group, 'id'), + grantable : new_grant ? 't' : 'f' + }); + + var err = false; + server.pcrud.create(new_fm_obj, { + onerror : function(r) { + highlighter.group_tree.red.play(); + status_update(pgt_strings.ERROR_CALLING_METHOD_PERM_MAP); + err = true; + }, + oncomplete : function(r, list) { + + var new_item_hash = list[0].toStoreItem(); + perm_map_store.newItem(new_item_hash); + status_update(pgt_strings.SUCCESS_NEW_PERM_MAP); + highlighter.group_tree.green.play(); + + perm_grid.filter({ + grp : current_group ? group_store.getValue(current_group, 'id') : -1 + }); + perm_grid.sort(-1); + //perm_map_model.refresh(); + //perm_grid.refresh(); + + } + }); + + new_popup.closeDropDown(); + }); + + dojo.connect(delete_pgpm_button, "onClick", delete_pgpm_button, function() { + var selected_items = perm_grid.selection.getSelected(); + + for (var i in selected_items) { + window.current_perm_map = selected_items[i]; + + perm_map_store.setValue(window.current_perm_map, 'isdeleted', 1); + + var modified_pgpm = new pgpm().fromStoreItem(window.current_perm_map); + modified_pgpm.isdeleted(1); + + server.pcrud.eliminate(modified_pgpm, { + onerror : function(r) { + highlighter.editor_pane.red.play(); + status_update(dojo.string.substitute(pgt_strings.ERROR_DELETING_PERM_MAPPING, [perm_map_store.getValue(window.current_perm_map, 'id')])); + }, + oncomplete : function(r, list) { + + perm_map_store.fetch({ + query : { + id : perm_map_store.getValue(window.current_perm_map, 'id') + }, + onItem : function(item, req) { + try { + if (this.isItem(item)) + this.deleteItem(item); + } catch (e) {/* meh */ + } + }, + scope : perm_map_store + }); + + window.current_perm_map = null; + + highlighter.editor_pane.green.play(); + status_update(pgt_strings.SUCCESS_DELETED_PERM_MAP); + } + }); + } + }); +});