From: Jeff Godin Date: Wed, 30 Oct 2013 20:52:19 +0000 (-0400) Subject: Add username suggestion based on patron name X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=refs%2Fheads%2Frel_2_2_tadl_post_upgrade;p=evergreen%2Ftadl.git Add username suggestion based on patron name Add support for suggesting a username based on the patron's first and last name. Currently, the scheme for suggestion is a lowercased first initial + last name, with any characters other than [a-z] removed. No effort is made to suggest an available username, but if the suggested username is already in use, the standard "username in use" message is displayed next to the username field. Staff can initiate the username suggestion by clicking the new button next to the username field, and usernames are automatically suggested when loading a staged user. Signed-off-by: Jeff Godin --- 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 4d3d0b5ba5..21d9e94ee5 100644 --- a/Open-ILS/web/js/ui/default/actor/user/register.js +++ b/Open-ILS/web/js/ui/default/actor/user/register.js @@ -199,6 +199,7 @@ function load() { uEditCloneCopyAddr = orgSettings['circ.patron_edit.clone.copy_address']; uEditUsePhonePw = orgSettings['patron.password.use_phone']; + uEditStagedAutoUsrname = true; // TODO: This can become an org setting uEditFetchUserSettings(userId); if(userId) { @@ -247,6 +248,8 @@ function load() { checkGrpAppPerm(); // to do the initial load loadStaticFields(); + // Trigger a username check if this is a staged user + if (stageUser) findWidget('au', 'usrname').widget.onChange(); if(patron.isnew() && patron.addresses().length == 0) uEditNewAddr(null, uEditAddrVirtId, true); @@ -489,6 +492,17 @@ function generatePasswordHandler() { } /** + * Generate a potential usrname for the patron. + */ +function generateUsrname(first, last) { + var candidate; + candidate = first.substring(0,1) + last; + candidate = candidate.toLowerCase(); + candidate = candidate.replace(/[^a-z]/g, ''); + return candidate; +} + +/** * Set Expire Date field based on today and current profile group */ function setExpireDateHandler() { @@ -539,6 +553,12 @@ function uEditLoadStageUser(stageUname) { patron['usrname'](''); } + // Generate a username if configured to do so and usrname is empty + if (patron['usrname']() == '' && uEditStagedAutoUsrname) { + var genUsrname = generateUsrname(patron['first_given_name'](), patron['family_name']()); + patron['usrname'](genUsrname); + } + // copy the data into our new address objects // TODO: uses the first mailing address only if(data.mailing_addresses.length) { @@ -1016,6 +1036,17 @@ function fleshFMRow(row, fmcls, args) { uGenerateInvalidatorWidget(span, fmfield); ftd.appendChild(span); } + + } + + if (fmcls == "au" && fmfield == "usrname") { + var span = dojo.create( + "span", { + "id": "wrap_usrname" + } + ); + uGenerateUsrnameWidget(span); + ftd.appendChild(span); } var span = document.createElement('span'); @@ -1931,6 +1962,25 @@ function uGenerateInvalidatorWidget(container_node, field) { ); } +function uGenerateUsrnameWidget(container_node) { + new dijit.form.Button( + { + "label": "Suggest Username", + "scrollOnFocus": false, + "onClick": function() { + var fname = findWidget("au", "first_given_name").widget.attr("value"); + var lname = findWidget("au", "family_name").widget.attr("value"); + + var genUsrname = generateUsrname(fname, lname); + + var f = findWidget("au", "usrname"); + + f.widget.attr("value", genUsrname); + } + }, dojo.create("span", null, container_node, "only") + ); +} + function uEditRemoveStage() { var resp = fieldmapper.standardRequest( ['open-ils.actor', 'open-ils.actor.user.stage.delete'],