Added a feature to allow patrons to update/edit their preferred name.
The form is located in the Account Preferences tab in the OPAC.
2 new files were added for the bootstrap & non-bootstrap versions. These 2 files contain the html form.
update_preferred_name.tt2
Signed-off-by: Scott <scottangel@mobiusconsortium.org>
}
);
+__PACKAGE__->register_method(
+ method => "update_passwd",
+ api_name => "open-ils.actor.user.preferred_name.update",
+ signature => {
+ desc => "Update the operator's preferred name",
+ params => [
+ { desc => 'Authentication token', type => 'string' },
+ { desc => 'User', type => 'hash' },
+ { desc => 'Current password', type => 'string' }
+ ],
+ return => {desc => '1 on success, Event on error or incorrect current password'}
+ }
+);
+
sub update_passwd {
my( $self, $conn, $auth, $new_val, $orig_pw ) = @_;
my $e = new_editor(xact=>1, authtoken=>$auth);
} elsif( $api =~ /locale/o ) {
$db_user->locale($new_val);
$at_event++;
+ } elsif( $api =~ /preferred_name/o ) {
+ if(ref($new_val) eq 'HASH'){
+ foreach(qw/ pref_prefix pref_first_given_name pref_second_given_name pref_family_name pref_suffix/){
+ $db_user->$_($new_val->{$_});
+ # Set the value to NULL when no data is submitted.
+ eval '$db_user->clear_' . $_ . '();' if($new_val->{$_} eq '' );
+ }
+ $at_event++;
+ }else {
+ return new OpenILS::Event('BAD_PARAMS');
+ }
}
}
return $self->generic_redirect($url);
}
+sub load_myopac_update_preferred_name {
+ my $self = shift;
+ my $e = $self->editor;
+ my $ctx = $self->ctx;
+
+ $self->prepare_extended_user_info;
+
+ return Apache2::Const::OK
+ unless $self->cgi->request_method eq 'POST';
+
+ my $current_pw = $self->cgi->param('current_pw') || '';
+
+ my %opac_vals = ();
+
+ foreach(qw/ pref_prefix pref_first_given_name pref_second_given_name pref_family_name pref_suffix/ ){
+ $opac_vals{$_} = $self->cgi->param($_) if($self->cgi->param($_) && $self->cgi->param($_) ne '');
+ }
+
+ my $evt = $U->simplereq('open-ils.actor', 'open-ils.actor.user.preferred_name.update',
+ $e->authtoken, \%opac_vals, $current_pw);
+
+ if($U->event_equals($evt, 'INCORRECT_PASSWORD')) {
+ $ctx->{password_incorrect} = 1;
+ return Apache2::Const::OK;
+ }
+
+ if($U->event_equals($evt, 'BAD_PARAM')) {
+ $ctx->{bad_param} = 1;
+ return Apache2::Const::OK;
+ }
+
+ foreach(qw/ pref_prefix pref_first_given_name pref_second_given_name pref_family_name pref_suffix/ ){
+ $self->ctx->{user}->$_($opac_vals{$_});
+ }
+
+ return $self->generic_redirect($self->apache->unparsed_uri);
+
+}
+
sub _update_bookbag_metadata {
my ($self, $bookbag) = @_;
.subtle-button:hover { text-decoration: underline; cursor: pointer; }
.no-dec:hover { text-decoration: none; }
.pending-addr td { background-color: [% css_colors.background_alert %] !important; border: 0 !important; }
-
+#account-update-preferred-name table { text-align: center; padding: 20px; margin-top: 18px; border-collapse: collapse; }
+#account-update-preferred-name table td {
+ [% IF rtl == 't' -%]
+ text-align: right;
+ [% ELSE -%]
+ text-align: left;
+ [% END -%]
+ padding: 5px 15px 5px 15px;
+ border-bottom: 1px solid [% css_colors.accent_lighter %];
+}
#account-update-email table { text-align: center; padding: 20px; margin-top: 18px; border-collapse: collapse; }
#account-update-email table td {
[% IF rtl == 't' -%]
<div id="acct_info_main">
<table title="[% l('Account preference') %]" class='light_border table table-hover'>
<tbody id='myopac_summary_tbody'>
+ <tr>
+ <td width='30%'
+ class='color_4 light_border'>[% l("Preferred Name") %]</td>
+
+ <td class='light_border'>[% l(
+ HUMAN_NAME_FORMAT,
+ ctx.user.pref_prefix,
+ (ctx.user.pref_first_given_name || ctx.user.first_given_name),
+ ctx.user.pref_second_given_name,
+ (ctx.user.pref_family_name || ctx.user.family_name),
+ ctx.user.pref_suffix
+ ) | html %]</td>
+
+ <td class='light_border'><a class="btn btn-sm btn-action" href='update_preferred_name'
+ title="[% l('Change Preferred Name') %]"><i class="fas fa-user-cog"></i>[% l("Change") %]</a></td>
+
+ </tr>
[% IF ctx.user.pref_first_given_name || ctx.user.pref_second_given_name || ctx.user.pref_family_name %]
<tr>
<td class='color_4 light_border'>[% l("Preferred Name") %]</td>
--- /dev/null
+[% PROCESS "opac/parts/header.tt2";
+ PROCESS "opac/parts/misc_util.tt2";
+ WRAPPER "opac/parts/myopac/base.tt2";
+ myopac_page = "prefs" %]
+<h3 class="sr-only">[% l('Update Username') %]</h3>
+<div id='myopac_summary_div' style="padding:0px;">
+
+ <div class="header_middle">
+ <span class="float-left">[% l('Update Username') %]</span>
+ </div>
+
+[% IF ctx.password_incorrect %]
+ <div class='account-password-error'>
+ [% |l %]Your current password was not correct.[% END %]
+ </div>
+
+[% END %]
+
+<form method='post' id='account-update-preferred-name' autocomplete='off'>
+ <table>
+ <tr><td>[% l('Current Prefix') %]</td><td> [% ctx.user.pref_prefix | html %]</td></tr>
+ <tr><td>[% l('Current First Name') %]</td><td> [% ctx.user.pref_first_given_name | html %]</td></tr>
+ <tr><td>[% l('Current Second Name') %]</td><td> [% ctx.user.pref_second_given_name | html %]</td></tr>
+ <tr><td>[% l('Current Family Name') %]</td><td> [% ctx.user.pref_family_name | html %]</td></tr>
+ <tr><td>[% l('Current Suffix') %]</td><td> [% ctx.user.pref_suffix | html %]</td></tr>
+ <tr><td><label for="current_pw">[% l('Current Password') %]</label></td><td><input type='password' name='current_pw' id='current_pw' class="form-control" /></td></tr>
+ <tr><td><label for='pref-prefix'>[% l('New Preferred Prefix') %]</label></td><td><input type='text' name='pref_prefix' id='pref_prefix' class="form-control" /></td></tr>
+ <tr><td><label for='pref-first-given-name'>[% l('New Preferred First Name') %]</label></td><td><input type='text' name='pref_first_given_name' id='pref_first_given_name' class="form-control" /></td></tr>
+ <tr><td><label for='pref-second-given-name'>[% l('New Preferred Second Name') %]</label></td><td><input type='text' name='pref_second_given_name' id='pref_second_given_name' class="form-control" /></td></tr>
+ <tr><td><label for='pref-family-name'>[% l('New Preferred Family Name') %]</label></td><td><input type='text' name='pref_family_name' id='pref_family_name' class="form-control" /></td></tr>
+ <tr><td><label for='pref-suffix'>[% l('New Preferred Suffix') %]</label></td><td><input type='text' name='pref_suffix' id='pref_suffix' class="form-control" /></td></tr>
+ <tr><td colspan='2'><button class="btn btn-confirm m-2" type='submit'><i class="fas fa-save"></i> [% l('Save Changes') %]</button></td></tr>
+ </table>
+</form>
+
+[% END %]
.subtle-button:hover { text-decoration: underline; cursor: pointer; }
.no-dec:hover { text-decoration: none; }
.pending-addr td { background-color: [% css_colors.background_alert %] !important; border: 0 !important; }
-
+#account-update-preferred-name table { text-align: center; padding: 20px; margin-top: 18px; border-collapse: collapse; }
+#account-update-preferred-name table td {
+ [% IF rtl == 't' -%]
+ text-align: right;
+ [% ELSE -%]
+ text-align: left;
+ [% END -%]
+ padding: 5px 15px 5px 15px; border-bottom: 1px solid [% css_colors.accent_lighter %];
+}
#account-update-email table { text-align: center; padding: 20px; margin-top: 18px; border-collapse: collapse; }
#account-update-email table td {
[% IF rtl == 't' -%]
<table width='70%' title="[% l('Account preference') %]"
class='light_border data_grid'>
<tbody id='myopac_summary_tbody'>
+ <tr>
+ <td width='30%'
+ class='color_4 light_border'>[% l("Preferred Name") %]</td>
+
+ <td class='light_border'>[% l(
+ HUMAN_NAME_FORMAT,
+ ctx.user.pref_prefix,
+ (ctx.user.pref_first_given_name || ctx.user.first_given_name),
+ ctx.user.pref_second_given_name,
+ (ctx.user.pref_family_name || ctx.user.family_name),
+ ctx.user.pref_suffix
+ ) | html %]</td>
+
+ <td></td>
+ <td><a href='update_preferred_name'
+ title="[% l('Change Preferred Name') %]">[% l("Change") %]</a></td>
+ </tr>
[% IF ctx.user.pref_first_given_name || ctx.user.pref_second_given_name || ctx.user.pref_family_name %]
<tr>
<td width='30%'
--- /dev/null
+[% PROCESS "opac/parts/header.tt2";
+ PROCESS "opac/parts/misc_util.tt2";
+ WRAPPER "opac/parts/myopac/base.tt2";
+ myopac_page = "prefs";
+ prefs_page = 'prefs';
+%]
+
+<h3 class="sr-only">[% l('Update Preferred Name') %]</h3>
+
+<div class="header_middle">
+ <span class="float-left">[% l('Update Preferred Name') %]</span>
+</div>
+
+[% IF ctx.password_incorrect %]
+ <div id='account-update-email-error'>
+ [% |l %]Your current password was not correct.[% END %]
+ </div>
+[% END %]
+
+<form method='post' id='account-update-preferred-name' autocomplete='off'>
+ <table>
+ <tr><td>[% l('Current Prefix') %]</td><td> [% ctx.user.pref_prefix | html %]</td></tr>
+ <tr><td>[% l('Current First Name') %]</td><td> [% ctx.user.pref_first_given_name | html %]</td></tr>
+ <tr><td>[% l('Current Second Name') %]</td><td> [% ctx.user.pref_second_given_name | html %]</td></tr>
+ <tr><td>[% l('Current Family Name') %]</td><td> [% ctx.user.pref_family_name | html %]</td></tr>
+ <tr><td>[% l('Current Suffix') %]</td><td> [% ctx.user.pref_suffix | html %]</td></tr>
+ <tr><td><label for="current_pw">[% l('Current Password') %]</label></td><td><input type='password' name='current_pw' id='current_pw' /></td></tr>
+ <tr><td><label for='pref-prefix'>[% l('New Preferred Prefix') %]</label></td><td><input type='text' name='pref_prefix' id='pref_prefix' /></td></tr>
+ <tr><td><label for='pref-first-given-name'>[% l('New Preferred First Name') %]</label></td><td><input type='text' name='pref_first_given_name' id='pref_first_given_name' /></td></tr>
+ <tr><td><label for='pref-second-given-name'>[% l('New Preferred Second Name') %]</label></td><td><input type='text' name='pref_second_given_name' id='pref_second_given_name' /></td></tr>
+ <tr><td><label for='pref-family-name'>[% l('New Preferred Family Name') %]</label></td><td><input type='text' name='pref_family_name' id='pref_family_name' /></td></tr>
+ <tr><td><label for='pref-suffix'>[% l('New Preferred Suffix') %]</label></td><td><input type='text' name='pref_suffix' id='pref_suffix' /></td></tr>
+ <tr><td colspan='2' align='center'><input type='submit' value='submit' /></td><td></td></tr>
+ </table>
+</form>
+
+[% END %]
+
+