From: James Fournie Date: Wed, 4 Jan 2012 19:55:19 +0000 (-0800) Subject: Add multiple permission groups editor to user registration form X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=8a7a954c4085a8cc494a39af52a22982b8c6e899;p=working%2FEvergreen.git Add multiple permission groups editor to user registration form This makes use of permission.usr_grp_perm_map which grants secondary permission groups. It does not affect the 'profile' ie: circulation policy. --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm index 9c9efc490d..61e3b31db8 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm @@ -2953,6 +2953,7 @@ sub user_retrieve_fleshed_by_id { $fields ||= [ "cards", "card", + "groups", "standing_penalties", "addresses", "billing_address", diff --git a/Open-ILS/src/templates/actor/user/register.tt2 b/Open-ILS/src/templates/actor/user/register.tt2 index 2f764504b2..0940ce3189 100644 --- a/Open-ILS/src/templates/actor/user/register.tt2 +++ b/Open-ILS/src/templates/actor/user/register.tt2 @@ -83,6 +83,44 @@ + + + [% END %] diff --git a/Open-ILS/src/templates/actor/user/register_table.tt2 b/Open-ILS/src/templates/actor/user/register_table.tt2 index cdb5fa3c45..51c1891c12 100644 --- a/Open-ILS/src/templates/actor/user/register_table.tt2 +++ b/Open-ILS/src/templates/actor/user/register_table.tt2 @@ -40,13 +40,17 @@ - - + - + + + (MM/DD/YYYY) + diff --git a/Open-ILS/web/js/ui/default/actor/user/register.js b/Open-ILS/web/js/ui/default/actor/user/register.js index c31eb2fc54..c3c8dc1bc4 100644 --- a/Open-ILS/web/js/ui/default/actor/user/register.js +++ b/Open-ILS/web/js/ui/default/actor/user/register.js @@ -10,6 +10,7 @@ dojo.require('openils.PermaCrud'); dojo.require('openils.widget.AutoGrid'); dojo.require('openils.widget.AutoFieldWidget'); dojo.require('openils.widget.ProgressDialog'); +dojo.require('openils.widget.PermGrpFilteringSelect'); dojo.require('dijit.form.CheckBox'); dojo.require('dijit.form.Button'); dojo.require('dojo.date'); @@ -46,6 +47,8 @@ var cloneUserObj; var stageUser; var optInSettings; var allCardsTemplate; +var secondaryGroupsTemplate; +var editSecondaryGroups; var uEditCloneCopyAddr; // if true, copy addrs on clone instead of link var homeOuTypes = {}; var holdPickupTypes = {}; @@ -262,6 +265,9 @@ function load() { dojo.connect(replaceBarcode, 'onClick', replaceCardHandler); dojo.connect(allCards, 'onClick', drawAllCards); + checkSecondaryGroupsPerm(); + dojo.connect(secondaryGroupsButton, 'onClick', drawSecondaryGroups); + if(patron.isnew()) { dojo.addClass(dojo.byId('uedit-all-barcodes'), 'hidden'); } else if(checkGrpAppPerm(patron.profile())) { @@ -430,6 +436,104 @@ function drawAllCards() { allCardsDialog.show(); } +/* Additional group editor */ +function drawSecondaryGroups() { + var tbody = dojo.byId('uedit-secondary-groups-tbody'); + + // create a template for each row we add + if(!secondaryGroupsTemplate) { + secondaryGroupsTemplate = tbody.removeChild(dojo.byId('uedit-secondary-groups-tr-template')); + } else { + while(tbody.childNodes[0]) + tbody.removeChild(tbody.childNodes[0]); + } + + // for each of the groups, add the group name and a delete button to the dialog + dojo.forEach(patron.groups(), + function(group) { + if(!group.isdeleted()){ + var row = secondaryGroupsTemplate.cloneNode(true); + getByName(row, 'groupname').innerHTML = group.name(); + var act = new dijit.form.ToggleButton({label:"Delete", onClick: function() {deleteSecondaryGroup(group.id());} },"deleteButton"); + getByName(row, 'groupeditbutton').appendChild(act.domNode); + tbody.appendChild(row); + } + } + ); + + //add a blank row with a selector and an "add" button for adding new groups + var row = secondaryGroupsTemplate.cloneNode(true); + var editbox = new openils.widget.AutoFieldWidget({fmClass:"pgt",selfReference:true, parentNode:getByName(row,'groupname')}); + editbox.build(function(w, ww){ trimGrpTree(ww)} ); + var act = new dijit.form.ToggleButton({label:"Add", onClick: function() {addSecondaryGroup(editbox.widget.value)} },"addButton"); + getByName(row, 'groupeditbutton').appendChild(act.domNode); + + tbody.appendChild(row); + + secondaryGroupsDialog.show(); +} + + +function deleteSecondaryGroup(id){ + // filter out the selected group from our patron.groups() + var myGroups = dojo.filter( patron.groups(), function(g){ + return (g.id() != id ) + } + ); + patron.groups(myGroups); + // redraw dialog + drawSecondaryGroups(); +} + +function addSecondaryGroup(id){ + var myGroups = patron.groups() || []; + // check if we allowed to add requested group + if (!checkGrpAppPerm(id)){ + alert('You do not have permission to add this group'); + return; + } + // check if group is profile + if(id == patron.profile()){ + alert('That is already the primary profile group for this patron'); + return; + } + + // check if the group exists + var old = myGroups.filter(function(c){return ( c.id() == id )})[0]; + if(old){ + alert('This group is on the list already'); + drawSecondaryGroups(); + return; + } + + // fetch the group from the pgt table + dojo.forEach(permGroups,function(newgrp){ + // add it to our groups list + if(newgrp.id() == id){ + if (!myGroups) { grps = []; } + newgrp.isnew(1); + myGroups.push(newgrp); + } + }); + patron.groups(myGroups); + // redraw the dialog + drawSecondaryGroups(); +} + +function saveSecondaryGroups(){ + var groupids = dojo.map( patron.groups(), function(grp){ if(!grp.isdeleted()){ return grp.id()} } ); + var data = fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.user.set_groups'], + { params : [openils.User.authtoken, patron.id(), groupids ] } + ); + if(data){ + alert('Secondary Groups Saved'); + } else { + alert('Error saving groups. Contact your sysadmin.'); + } + secondaryGroupsDialog.hide() +} + function applyCardChanges() { var cardrows = dojo.query('[cardid]', allCardsDialog.domNode); var changed = false; @@ -1233,6 +1337,19 @@ function checkClaimsReturnCountPerm() { ); } +function checkSecondaryGroupsPerm() { + new openils.User().getPermOrgList( + 'CREATE_USER_GROUP_LINK', + function(orgList) { + if(orgList.indexOf(patron.home_ou()) == -1) + dojo.addClass(dojo.byId('ueditSecondaryGrpButton'), 'hidden'); + else + dojo.removeClass(dojo.byId('ueditSecondaryGrpButton'), 'hidden'); + }, + true, + true + ); +} function checkClaimsNoCheckoutCountPerm() { new openils.User().getPermOrgList( @@ -1943,6 +2060,8 @@ function _uEditSave(doClone) { } } ); + + saveSecondaryGroups(); } function uUpdateContactInvalidators() {