Bug 7067 [Follow-up: templates] allow patron self registration via the opac

- Adding simple style to register link on home page
- Adding unique ids to new pages and to blocks containing
  registration links
- Adding better page titles and breadcrumb links to some pages
- Correcting bug which meant incorrect message showed on registration
  page when OPACPatronDetails preferences is turned off
- Passing patron details to opac-memberentry.tt so that patron's
  name can be displayed in breadcrumbs
- Improving display in staff client of patron record updates
  waiting to be approved.
- Adding a sort by name to output of pending patron record updates
- Adding updated JqueryUI library files to include expanded widget
  options.

The changes in this patch require the addition of the jQueryUI
Accordion widget. Other pending patches are seeking to add
enough of the other remaining missing widgets that it seems time
to go ahead and add the rest.

Future submissions which add usage of these widgets will have
to be careful to make changes to Koha's CSS where necessary.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Passed-QA-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
This commit is contained in:
Owen Leonard 2012-09-14 08:26:35 -04:00 committed by Jared Camins-Esakov
parent 92782d3832
commit 5a0dffcaac
16 changed files with 263 additions and 110 deletions

View File

@ -191,7 +191,7 @@ sub GetPendingModifications {
$query .= " AND borrowers.branchcode = ? ";
push( @params, $branchcode );
}
$query .= " ORDER BY borrowers.surname, borrowers.firstname";
my $sth = $dbh->prepare($query);
$sth->execute(@params);

View File

@ -2397,3 +2397,6 @@ div.authorizedheading {
.ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }
.ui-timepicker-div td { font-size: 90%; }
.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
/* jQuery UI Accordion */
.ui-accordion-header { font-weight: bold; font-size : 110%; }

View File

@ -285,6 +285,25 @@
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
* jQuery UI Accordion 1.8.23
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Accordion#theming
*/
/* IE/Win - Fix animation bug - #4615 */
.ui-accordion { width: 100%; }
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }
/*!
* jQuery UI Autocomplete 1.8.23
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
@ -337,6 +356,65 @@
font-weight: normal;
margin: -1px;
}
/*!
* jQuery UI Button 1.8.23
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Button#theming
*/
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
/*!
* jQuery UI Dialog 1.8.23
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Dialog#theming
*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/*!
* jQuery UI Slider 1.8.23
*
@ -443,4 +521,14 @@
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}
}/*!
* jQuery UI Progressbar 1.8.23
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar#theming
*/
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }

File diff suppressed because one or more lines are too long

View File

@ -134,7 +134,7 @@
[% IF ( CAN_user_borrowers && pending_borrower_modifications ) %]
<div class="pending-info">
<div class="pending-info" id="patron_updates_pending">
<a href="/cgi-bin/koha/members/members-update.pl">Patrons requesting modifications</a>:
<span class="pending-number-link">[% pending_borrower_modifications %]</span>
</div>

View File

@ -29,6 +29,12 @@
[% END %]
</div>
[% IF ( CAN_user_borrowers && pending_borrower_modifications ) %]
<div class="pending-info" id="patron_updates_pending">
<a href="/cgi-bin/koha/members/members-update.pl">Patrons requesting modifications</a>:
<span class="holdcount"><a href="/cgi-bin/koha/members/members-update.pl">[% pending_borrower_modifications %]</a></span>
</div>
[% END %]
[% IF ( resultsloop ) %]
<div id="searchheader"> <h3>Results [% from %] to [% to %] of [% numresults %] found for [% IF ( member ) %]'<span class="ex">[% member %]</span>'[% END %][% IF ( surname ) %]'<span class="ex">[% surname %]</span>'[% END %]</h3></div>

View File

@ -1,8 +1,13 @@
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha &rsaquo; Patrons [% IF ( searching ) %]&rsaquo; Search results[% END %]</title>
<title>Koha &rsaquo; Patrons &rsaquo; Update patron records</title>
[% INCLUDE 'doc-head-close.inc' %]
<script type="text/javascript">
$(function() {
$( "#pending_updates" ).accordion();
});
</script>
</head>
<body id="pat_member" class="pat">
<body id="pat_update" class="pat">
[% INCLUDE 'header.inc' %]
[% INCLUDE 'patron-search.inc' %]
@ -56,85 +61,63 @@
smsalertnumber => "SMS alert number"
}
%]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; Patrons &rsaquo; Modifications</div>
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/members-home.pl">Patrons</a> &rsaquo; Update patron records</div>
<div id="doc2" class="yui-t7">
<div id="bd">
<div id="yui-main">
<div class="yui-b">
<div class="yui-g">
[% IF PendingModifications %]
<form method="post" action="members-update-do.pl">
<table>
<thead>
<tr>
<th colspan="3">Action</th>
<th rowspan="2">Patron</th>
<th rowspan="2">Changes</th>
</tr>
[% IF PendingModifications %]
<h2>Update patron records</h2>
<form method="post" action="members-update-do.pl">
<div id="pending_updates">
[% FOREACH pm IN PendingModifications %]
[% SET borrowernumber = pm.borrowernumber %]
<h3><a href="#panel_modify_[% pm.borrowernumber %]">[% borrowers.$borrowernumber.surname %], [% borrowers.$borrowernumber.firstname %]</a></h3>
<div id="panel_modify_[% pm.borrowernumber %]">
<div style="background-color:#E6F0F2;padding:.5em;margin:.3em 0;">
<input type="radio" id="approve_modify_[% pm.borrowernumber %]" name="modify_[% pm.borrowernumber %]" value="approve" />
<label for="approve_modify_[% pm.borrowernumber %]">Approve</label>
<tr>
<th>Approve</th>
<th>Deny</th>
<th>Ignore</th>
</tr>
</thead>
<input type="radio" id="deny_modify_[% pm.borrowernumber %]" name="modify_[% pm.borrowernumber %]" value="deny" />
<label for="deny_modify_[% pm.borrowernumber %]">Deny</label>
<tbody>
[% FOREACH pm IN PendingModifications %]
[% SET borrowernumber = pm.borrowernumber %]
<tr>
<td>
<input type="radio" name="modify_[% pm.borrowernumber %]" value="approve" />
</td>
<td>
<input type="radio" name="modify_[% pm.borrowernumber %]" value="deny" />
</td>
<td>
<input type="radio" name="modify_[% pm.borrowernumber %]" value="ignore" checked="checked"/>
</td>
<td>
[% borrowers.$borrowernumber.firstname %] [% borrowers.$borrowernumber.surname %]
</td>
<td>
<table>
<tr>
<th>Field</th>
<th>From</th>
<th>To</th>
</tr>
<input type="radio" id="ignore_modify_[% pm.borrowernumber %]" name="modify_[% pm.borrowernumber %]" value="ignore" checked="checked"/>
<label for="ignore_modify_[% pm.borrowernumber %]">Ignore</label>
</div>
<table>
<tr>
<th>Field</th>
<th>From</th>
<th>To</th>
</tr>
[% FOREACH key IN pm.keys %]
[% IF field_display_names.$key %]
[% IF ( ( pm.$key OR borrowers.$borrowernumber.$key ) && ( pm.$key != borrowers.$borrowernumber.$key ) ) %]
<tr>
<td>[% field_display_names.$key %]</td>
<td>[% borrowers.$borrowernumber.$key %]</td>
<td>[% pm.$key %]</td>
</tr>
[% END %]
[% END %]
[% FOREACH key IN pm.keys %]
[% IF field_display_names.$key %]
[% IF ( ( pm.$key OR borrowers.$borrowernumber.$key ) && ( pm.$key != borrowers.$borrowernumber.$key ) ) %]
<tr>
<td>[% field_display_names.$key %]</td>
<td>[% borrowers.$borrowernumber.$key %]</td>
<td>[% pm.$key %]</td>
</tr>
[% END %]
</table>
</td>
</tr>
[% END %]
</tbody>
</table>
[% END %]
[% END %]
</table>
</div>
[% END %]
</div>
<fieldset class="action"><input type="submit" value="Submit" /></fieldset>
<p><input type="submit" /></p>
</form>
[% ELSE %]
<p>There are no pending patron modifications.</p>
[% END %]
</div>
</form>
[% ELSE %]
<div class="dialog message">
<p>There are no pending patron modifications.</p>
</div>
[% END %]
</div>
</div>
[% INCLUDE 'intranet-bottom.inc' %]

View File

@ -2829,3 +2829,17 @@ body#opac-main #opacmainuserblockmobile {
.tagweight9 {
font-size: 30px;
}
#patronregistration {
background-color: #F7F7F7;
border : 1px solid #EAEAEA;
-moz-border-radius: 3px;
border-radius : 3px;
font-size : 90%;
margin : .7em 0;
padding : .5em;
text-align: center;
}
#patronregistration a {
display: block;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -86,7 +86,7 @@ please choose against which one you would like to authenticate: </p>
<input type="submit" value="Log In" class="submit" />
<div id="nologininstructions">
<h5>Don't have a password yet?</h5><p> If you don't have a password yet, stop by the circulation desk the next time you're in the library. We'll happily set one up for you.</p>
<h5>Don't have a library card?</h5><p> If you don't have a library card, stop by your local library to sign up[% IF PatronSelfRegistration && PatronSelfRegistrationDefaultCategory %] or <a href="/cgi-bin/koha/opac-memberentry.pl">register here</a>[% END %].</p>
<h5>Don't have a library card?</h5><p> If you don't have a library card, stop by your local library to sign up[% IF PatronSelfRegistration && PatronSelfRegistrationDefaultCategory %]<span id="registrationinstructions"> or <a href="/cgi-bin/koha/opac-memberentry.pl">register here</a></span>[% END %]. </p>
</div>
</form>

View File

@ -56,7 +56,8 @@
<li><label for="password">Password:</label><input type="password" id="password" size="10" name="password" /></li>
</ol> <fieldset class="action">
<input type="submit" value="Log In" class="submit" />
[% IF PatronSelfRegistration && PatronSelfRegistrationDefaultCategory %]<div>Don't have an account? <a href="/cgi-bin/koha/opac-memberentry.pl">Register here.</a></div>[% END %]
[% IF PatronSelfRegistration && PatronSelfRegistrationDefaultCategory %]<div id="patronregistration">Don't have an account? <a href="/cgi-bin/koha/opac-memberentry.pl">Register here.</a></div>[% END %]
</fieldset></fieldset>
</form>

View File

@ -1,29 +1,28 @@
[% INCLUDE 'doc-head-open.inc' %]
[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog
[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog &rsaquo; Updates submitted
[% INCLUDE 'doc-head-close.inc' %]
</head>
<body id="opac-main">
[% IF ( OpacNav ) %]<div id="doc3" class="yui-t1">[% ELSE %]<div id="doc3" class="yui-t7">[% END %]
<body id="opac-patron-update-submitted">
<div id="doc3" class="yui-t1">
<div id="bd">
[% INCLUDE 'masthead.inc' %]
<div id="yui-main">
<div class="yui-b">
<div id="loggedin" class="yui-ge">
<div class="yui-u first">
<p>Your updates have been submitted. A librarian will now review you updates before applying them.</p>
<div id="update-submitted" class="container">
<h3><a href="/cgi-bin/koha/opac-user.pl">[% borrower.firstname %] [% borrower.surname %]'s account</a> &#8674; Updates to your record</h3>
<div class="dialog message">
<h3>Thank you</h3>
<p>Your updates have been submitted. A librarian will review your updates before applying them.</p>
</div>
</div>
</div>
</div>
[% IF ( OpacNav ) %]<div class="yui-b">
<div id="opacnav" class="container">
[% INCLUDE 'navigation.inc' %]
</div>
[% END %]
<div class="yui-b">
<div id="leftmenus" class="container">
[% INCLUDE 'navigation.inc' IsPatronPage=1 %]
</div>
</div>
</div>
[% INCLUDE 'opac-bottom.inc' %]

View File

@ -2,10 +2,11 @@
[% SET userupdateview = 1 %]
[% INCLUDE 'doc-head-open.inc' %]
[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog &rsaquo; Your fines and charges
[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog &rsaquo; [% IF action == 'edit' %]Update your personal details[% ELSE %]Register a new account[% END %]
[% INCLUDE 'doc-head-close.inc' %]
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
[% IF action == 'edit' && !OPACPatronDetails %]
$("#memberentry-form :input").attr('readonly', true);
@ -18,10 +19,14 @@
$( "#borrower_dateofbirth" ).datepicker({ yearRange: "c-120:c" });
[% END %]
});
//]]>
</script>
</head>
<body id="opac-account">
[% IF action == 'edit' %]
<body id="opac-patron-update">
[% ELSE %]
<body id="opac-patron-registration">
[% END %]
<div id="doc3" class="yui-t1">
<div id="bd">
[% INCLUDE 'masthead.inc' %]
@ -29,9 +34,21 @@
<div id="yui-main">
<div class="yui-b">
<div class="yui-g">
<div id="useraccount" class="container">
[% IF action == 'edit' %]
<div id="update-account" class="container">
[% ELSE %]
<div id="add-account" class="container">
[% END %]
[% IF action == 'edit' %]
<h3><a href="/cgi-bin/koha/opac-user.pl">[% borrower.firstname %] [% borrower.surname %]'s account</a> &#8674; Personal details</h3>
[% ELSE %]
<h3>Register a new account</h3>
[% END %]
[% IF action == 'edit' %]
[% UNLESS OPACPatronDetails %]
<div>To make changes to your record please contact the library.</div>
<div class="dialog message">To make changes to your record please contact the library.</div>
[% END %]
[% END %]
[% IF empty_mandatory_fields %]
@ -42,7 +59,7 @@
<div class="dialog alert">You typed in the wrong characters in the box before submitting. Please try again.</div>
[% END %]
<form method="post" id="memberentry-form">
<form method="post" action="/cgi-bin/koha/opac-memberentry.pl" id="memberentry-form">
[% UNLESS
hidden.defined('branchcode')
@ -699,12 +716,12 @@
<fieldset class="rows" id="memberentry_captcha">
<ol>
<li>
<label for="borrower_altcontactphone" class="required">Verification</label>
<label for="captcha" class="required">Verification:</label>
<input type="text" name="captcha" id="captcha" />
<input type="hidden" name="captcha_digest" value="[% captcha_digest %]" />
<span class="required">Please type this following characters into the preceding box: <strong>[% captcha %]</strong></span>
<span class="hint">Please type this following characters into the preceding box: <strong>[% captcha %]</strong></span>
</li>
</ol>
</fieldset>
@ -712,17 +729,21 @@
[% IF action == 'edit' %]
[% IF OPACPatronDetails %]
<input type="hidden" name="action" value="update" />
<input type="submit" value="Submit Update Request" />
<fieldset class="action">
<input type="hidden" name="action" value="update" />
<input type="submit" value="Submit update request" />
</fieldset>
[% END %]
[% ELSE %]
<input type="hidden" name="action" value="create" />
<input type="submit" value="Submit" />
<fieldset class="action">
<input type="hidden" name="action" value="create" />
<input type="submit" value="Submit" />
</fieldset>
[% END %]
</form>
</div><!--/div id="useraccount" -->
</div><!--/div id="update-account" -->
</div>
</div>
</div>

View File

@ -1,24 +1,21 @@
[% INCLUDE 'doc-head-open.inc' %]
[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog
[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog &rsaquo; Please confirm your registration
[% INCLUDE 'doc-head-close.inc' %]
</head>
<body id="opac-main">
<body id="opac-confirmation-pending">
[% IF ( OpacNav ) %]<div id="doc3" class="yui-t1">[% ELSE %]<div id="doc3" class="yui-t7">[% END %]
<div id="bd">
[% INCLUDE 'masthead.inc' %]
<div id="yui-main">
<div class="yui-b">
<div id="loggedin" class="yui-ge">
<div class="yui-u first">
<h1>Please Confirm Registration</h1>
<div id="confirmation-pending" class="dialog message">
<h1>Please confirm your registration</h1>
<p>A confirmation email has been sent to the email address <strong>[% email %]</strong>.</p>
<p>A confirmation email has been sent to the email address <strong>[% email %]</strong>.</p>
<p>Your account will not be activated until you follow the link provided in the confirmation email.</p>
</div>
<p>Your account will not be activated until you follow the link provided in the confirmation email.</p></div>
</div>
</div>
</div>
[% IF ( OpacNav ) %]<div class="yui-b">

View File

@ -26,6 +26,7 @@ use C4::Context;
use C4::Members;
use C4::Branch;
use C4::Category;
use Koha::Borrower::Modifications;
my $query = new CGI;
my $branch = $query->param('branchcode');
@ -76,9 +77,14 @@ else {
$template->param(categories=>\@categories);
}
my $pending_borrower_modifications =
Koha::Borrower::Modifications->GetPendingModificationsCount( $branch );
$template->param(
"AddPatronLists_".C4::Context->preference("AddPatronLists")=> "1",
no_add => $no_add,
pending_borrower_modifications => $pending_borrower_modifications,
);
$template->param( 'alphabet' => C4::Context->preference('alphabet') || join ' ', 'A' .. 'Z' );

View File

@ -189,6 +189,9 @@ elsif ( $action eq 'update' ) {
$m->DelModifications;
$m->AddModifications(%borrower_changes);
$template->param(
borrower => GetMember( borrowernumber => $borrowernumber ),
);
}
}
elsif ( $action eq 'edit' ) { #Display logged in borrower's data