Bugzilla – Attachment 12116 Details for
Bug 7067
allow patron self registration via the opac
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7067 - OPAC Borrower Self Registration - Followup
Bug-7067---OPAC-Borrower-Self-Registration---Follo.patch (text/plain), 23.82 KB, created by
Kyle M Hall (khall)
on 2012-09-10 18:07:35 UTC
(
hide
)
Description:
Bug 7067 - OPAC Borrower Self Registration - Followup
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2012-09-10 18:07:35 UTC
Size:
23.82 KB
patch
obsolete
>From 64384f46dcdd9c3014ee0b343384ff1eed0c0a06 Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Mon, 10 Sep 2012 08:06:09 -0400 >Subject: [PATCH] Bug 7067 - OPAC Borrower Self Registration - Followup >Content-Type: text/plain; charset="utf-8" > >--- > C4/Members.pm | 9 +- > C4/SQLHelper.pm | 15 ++-- > Koha/Borrower/Modifications.pm | 32 ++++-- > .../intranet-tmpl/prog/en/modules/intranet-main.tt | 3 +- > .../prog/en/modules/members/members-update.tt | 113 ++++++++++---------- > .../opac-tmpl/prog/en/modules/opac-memberentry.tt | 45 ++++++-- > mainpage.pl | 10 ++- > members/members-update-do.pl | 2 +- > members/members-update.pl | 10 ++- > opac/opac-memberentry.pl | 29 +++--- > 10 files changed, 163 insertions(+), 105 deletions(-) > >diff --git a/C4/Members.pm b/C4/Members.pm >index 5cf65e3..ae00805 100644 >--- a/C4/Members.pm >+++ b/C4/Members.pm >@@ -757,10 +757,6 @@ sub AddMember { > # generate a proper login if none provided > $data{'userid'} = Generate_Userid($data{'borrowernumber'}, $data{'firstname'}, $data{'surname'}) if $data{'userid'} eq ''; > >- # create a disabled account if no password provided >- $data{'password'} = ($data{'password'})? md5_base64($data{'password'}) : '!'; >- $data{'borrowernumber'}=InsertInTable("borrowers",\%data); >- > # add expiration date if it isn't already there > unless ( $data{'dateexpiry'} ) { > $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, C4::Dates->new()->output("iso") ); >@@ -771,6 +767,11 @@ sub AddMember { > $data{'dateenrolled'} = C4::Dates->new()->output("iso"); > } > >+ # create a disabled account if no password provided >+ $data{'password'} = ($data{'password'})? md5_base64($data{'password'}) : '!'; >+ $data{'borrowernumber'}=InsertInTable("borrowers",\%data); >+ >+ > # mysql_insertid is probably bad. not necessarily accurate and mysql-specific at best. > logaction("MEMBERS", "CREATE", $data{'borrowernumber'}, "") if C4::Context->preference("BorrowersLog"); > >diff --git a/C4/SQLHelper.pm b/C4/SQLHelper.pm >index e86d2b7..09a0e81 100644 >--- a/C4/SQLHelper.pm >+++ b/C4/SQLHelper.pm >@@ -233,23 +233,24 @@ Get the Primary Key field names of the table > =cut > > sub GetPrimaryKeys($) { >- my $tablename=shift; >- my $result; >+ my $tablename = shift; >+ >+ my @results; > my $cache; > if (Koha::Cache->is_cache_active()) { > $cache = Koha::Cache->new(); > if (defined $cache) { >- $result = $cache->get_from_cache("sqlhelper:GetPrimaryKeys:$tablename"); >+ @results = $cache->get_from_cache("sqlhelper:GetPrimaryKeys:$tablename"); > } > } >- unless (defined $result) { >+ unless (@results) { > my $hash_columns=_get_columns($tablename); >- $result = grep { $hash_columns->{$_}->{'Key'} =~/PRI/i} keys %$hash_columns; >+ @results = grep { $hash_columns->{$_}->{'Key'} =~/PRI/i} keys %$hash_columns; > if (Koha::Cache->is_cache_active() && defined $cache) { >- $cache->set_in_cache("sqlhelper:GetPrimaryKeys:$tablename", $result); >+ $cache->set_in_cache("sqlhelper:GetPrimaryKeys:$tablename", @results); > } > } >- return $result; >+ return @results; > } > > >diff --git a/Koha/Borrower/Modifications.pm b/Koha/Borrower/Modifications.pm >index a986599..f83b61d 100644 >--- a/Koha/Borrower/Modifications.pm >+++ b/Koha/Borrower/Modifications.pm >@@ -144,17 +144,24 @@ Returns the number of pending modifications for existing borrowers. > =cut > > sub GetPendingModificationsCount { >- my ($self) = @_; >+ my ( $self, $branchcode ) = @_; > > my $dbh = C4::Context->dbh; > my $query = " > SELECT COUNT(*) AS count >- FROM borrower_modifications >- WHERE borrowernumber > 0 >+ FROM borrower_modifications, borrowers >+ WHERE borrower_modifications.borrowernumber > 0 >+ AND borrower_modifications.borrowernumber = borrowers.borrowernumber > "; > >+ my @params; >+ if ($branchcode) { >+ $query .= " AND borrowers.branchcode = ? "; >+ push( @params, $branchcode ); >+ } >+ > my $sth = $dbh->prepare($query); >- $sth->execute(); >+ $sth->execute(@params); > my $result = $sth->fetchrow_hashref(); > > return $result->{'count'}; >@@ -169,17 +176,24 @@ Returns an arrayref of hashrefs for all pending modifications for existing borro > =cut > > sub GetPendingModifications { >- my ($self) = @_; >+ my ( $self, $branchcode ) = @_; > > my $dbh = C4::Context->dbh; > my $query = " >- SELECT * >- FROM borrower_modifications >- WHERE borrowernumber > 0 >+ SELECT borrower_modifications.* >+ FROM borrower_modifications, borrowers >+ WHERE borrower_modifications.borrowernumber > 0 >+ AND borrower_modifications.borrowernumber = borrowers.borrowernumber > "; > >+ my @params; >+ if ($branchcode) { >+ $query .= " AND borrowers.branchcode = ? "; >+ push( @params, $branchcode ); >+ } >+ > my $sth = $dbh->prepare($query); >- $sth->execute(); >+ $sth->execute(@params); > > my @m; > while ( my $row = $sth->fetchrow_hashref() ) { >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt >index 8242d23..8e9ecf4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt >@@ -100,6 +100,7 @@ > <div class="yui-g"> > [% IF ( ( CAN_user_tools_moderate_comments && pendingcomments ) > || ( CAN_user_tools_moderate_tags && pendingtags ) >+ || ( CAN_user_borrowers && pending_borrower_modifications ) > || ( CAN_user_acquisition && pendingsuggestions ) ) %] > <div id="area-pending"> > [% IF ( CAN_user_acquisition && pendingsuggestions ) %] >@@ -125,7 +126,7 @@ > [% END %] > > >- [% IF ( CAN_user_borrowers && pending_borrower_modifications )%] >+ [% IF ( CAN_user_borrowers && pending_borrower_modifications ) %] > <div class="pending-info"> > <a href="/cgi-bin/koha/members/members-update.pl">Patrons requesting modifications</a>: > <span class="pending-number-link">[% pending_borrower_modifications %]</span> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/members-update.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/members-update.tt >index 8878b7f..228ccf2 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/members-update.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/members-update.tt >@@ -64,72 +64,75 @@ > <div id="yui-main"> > <div class="yui-b"> > <div class="yui-g"> >+ [% IF PendingModifications %] >+ <form method="post" action="members-update-do.pl"> > >- <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> >- >- <tr> >- <th>Approve</th> >- <th>Deny</th> >- <th>Ignore</th> >- </tr> >- </thead> >+ <table> >+ <thead> >+ <tr> >+ <th colspan="3">Action</th> >+ <th rowspan="2">Patron</th> >+ <th rowspan="2">Changes</th> >+ </tr> > >- <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> >+ <th>Approve</th> >+ <th>Deny</th> >+ <th>Ignore</th> >+ </tr> >+ </thead> >+ >+ <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> >+ [% borrowers.$borrowernumber.firstname %] [% borrowers.$borrowernumber.surname %] >+ </td> > >- <td> >- <table> >- <tr> >- <th>Field</th> >- <th>From</th> >- <th>To</th> >- </tr> >+ <td> >+ <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> >- </td> >+ [% 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 %] > [% END %] >- [% END %] >- </table> >- </td> >- </tr> >- [% END %] >- </tbody> >- </table> >+ </table> >+ </td> >+ </tr> >+ [% END %] >+ </tbody> >+ </table> > >- <p><input type="submit" /></p> >+ <p><input type="submit" /></p> > >- </form> >+ </form> >+ [% ELSE %] >+ <p>There are no pending patron modifications.</p> >+ [% END %] > </div> > </div> > </div> >diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-memberentry.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-memberentry.tt >index 38c0bc7..ac2cb02 100644 >--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-memberentry.tt >+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-memberentry.tt >@@ -7,7 +7,16 @@ > > <script type="text/javascript"> > $(document).ready(function() { >- $( "#borrower_dateofbirth" ).datepicker({ yearRange: "c-120:c" }); >+ [% IF action == 'edit' && !OPACPatronDetails %] >+ $("#memberentry-form :input").attr('readonly', true); >+ $("#borrower_branchcode").attr('disabled',true); >+ $("#borrower_title").attr('disabled',true); >+ $('#memberentry-form :radio').attr('disabled',true); >+ $('span.required').remove(); >+ $('label.required').removeClass('required'); >+ [% ELSE %] >+ $( "#borrower_dateofbirth" ).datepicker({ yearRange: "c-120:c" }); >+ [% END %] > }); > </script> > </head> >@@ -21,6 +30,9 @@ > <div class="yui-b"> > <div class="yui-g"> > <div id="useraccount" class="container"> >+ [% UNLESS OPACPatronDetails %] >+ <div>To make changes to your record please contact the library.</div> >+ [% END %] > > [% IF empty_mandatory_fields %] > <div class="dialog alert">You have not filled out all required fields. Please fill in all missing fields and resubmit.</div> >@@ -30,7 +42,7 @@ > <div class="dialog alert">You typed in the wrong characters in the box before submitting. Please try again.</div> > [% END %] > >- <form method="post"> >+ <form method="post" id="memberentry-form"> > > [% UNLESS > hidden.defined('branchcode') >@@ -132,9 +144,11 @@ > [% END %] > Date of birth:</label> > >- <input type="text" id="borrower_dateofbirth" name="borrower_dateofbirth" value="[% borrower.dateofbirth | $KohaDates %]" readonly="readonly" size="10" /> >+ <input type="text" id="borrower_dateofbirth" name="borrower_dateofbirth" value="[% borrower.dateofbirth | $KohaDates %]" size="10" /> > >- <a href="#" style="font-size:85%;text-decoration:none;" onclick="document.getElementById('borrower_dateofbirth').value='';return false;">Clear date</a><p></p> >+ [% UNLESS action == 'edit' && !OPACPatronDetails %] >+ <a href="#" style="font-size:85%;text-decoration:none;" onclick="document.getElementById('borrower_dateofbirth').value='';return false;">Clear date</a><p></p> >+ [% END %] > > [% IF mandatory.defined('dateofbirth') %]<span class="required">Required</span>[% END %] > </li> >@@ -682,16 +696,25 @@ > [% END %] > > [% UNLESS action == 'edit' %] >- <p>Please type this following characters into the box below : [% captcha %]</p> >- <p> >- <input type="text" name="captcha" id="captcha" /> >- <input type="hidden" name="captcha_digest" value="[% captcha_digest %]" /> >- </p> >+ <fieldset class="rows" id="memberentry_captcha"> >+ <ol> >+ <li> >+ <label for="borrower_altcontactphone" 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> >+ </li> >+ </ol> >+ </fieldset> > [% END %] > > [% IF action == 'edit' %] >- <input type="hidden" name="action" value="update" /> >- <input type="submit" value="Submit Update Request" /> >+ [% IF OPACPatronDetails %] >+ <input type="hidden" name="action" value="update" /> >+ <input type="submit" value="Submit Update Request" /> >+ [% END %] > [% ELSE %] > <input type="hidden" name="action" value="create" /> > <input type="submit" value="Submit" /> >diff --git a/mainpage.pl b/mainpage.pl >index 78dbe66..259380b 100755 >--- a/mainpage.pl >+++ b/mainpage.pl >@@ -32,7 +32,7 @@ use Koha::Borrower::Modifications; > > my $query = new CGI; > >-my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >+my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user( > { > template_name => "intranet-main.tmpl", > query => $query, >@@ -50,11 +50,17 @@ $template->param( > koha_news_count => $koha_news_count > ); > >+my $branch = >+ C4::Context->preference("IndependantBranches") >+ && !$flags->{'superlibrarian'} >+ ? C4::Context->userenv()->{'branch'} >+ : undef; >+ > my $pendingcomments = numberofreviews(0); > my $pendingtags = get_count_by_tag_status(0); > my $pendingsuggestions = CountSuggestion("ASKED"); > my $pending_borrower_modifications = >- Koha::Borrower::Modifications->GetPendingModificationsCount(); >+ Koha::Borrower::Modifications->GetPendingModificationsCount( $branch ); > > $template->param( > pendingcomments => $pendingcomments, >diff --git a/members/members-update-do.pl b/members/members-update-do.pl >index 147975a..e7b7b28 100755 >--- a/members/members-update-do.pl >+++ b/members/members-update-do.pl >@@ -61,4 +61,4 @@ foreach my $param (@params) { > } > } > >-print $query->redirect("/cgi-bin/koha/mainpage.pl"); >+print $query->redirect("/cgi-bin/koha/members/members-update.pl"); >diff --git a/members/members-update.pl b/members/members-update.pl >index 9ffcf42..334d83b 100755 >--- a/members/members-update.pl >+++ b/members/members-update.pl >@@ -30,7 +30,7 @@ use Koha::Borrower::Modifications; > > my $query = new CGI; > >-my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >+my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user( > { > template_name => "members/members-update.tmpl", > query => $query, >@@ -41,8 +41,14 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > } > ); > >+my $branch = >+ C4::Context->preference("IndependantBranches") >+ && !$flags->{'superlibrarian'} >+ ? C4::Context->userenv()->{'branch'} >+ : undef; >+ > my $pending_modifications = >- Koha::Borrower::Modifications->GetPendingModifications(); >+ Koha::Borrower::Modifications->GetPendingModifications($branch); > > my $borrowers; > foreach my $pm (@$pending_modifications) { >diff --git a/opac/opac-memberentry.pl b/opac/opac-memberentry.pl >index cf24176..b133af8 100755 >--- a/opac/opac-memberentry.pl >+++ b/opac/opac-memberentry.pl >@@ -30,11 +30,6 @@ use C4::Branch qw(GetBranchesLoop); > my $cgi = new CGI; > my $dbh = C4::Context->dbh; > >-unless ( C4::Context->preference('PatronSelfRegistration') ) { >- print $cgi->redirect("/cgi-bin/koha/opac-main.pl"); >- exit; >-} >- > my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > { > template_name => "opac-memberentry.tmpl", >@@ -44,11 +39,17 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >+unless ( C4::Context->preference('PatronSelfRegistration') || $borrowernumber ) { >+ print $cgi->redirect("/cgi-bin/koha/opac-main.pl"); >+ exit; >+} >+ > $template->param( >- hidden => GetHiddenFields(), >- mandatory => GetMandatoryFields(), >- member_titles => GetTitles(), >- branches => GetBranchesLoop() >+ hidden => GetHiddenFields(), >+ mandatory => GetMandatoryFields(), >+ member_titles => GetTitles(), >+ branches => GetBranchesLoop(), >+ OPACPatronDetails => C4::Context->preference('OPACPatronDetails'), > ); > > my $action = $cgi->param('action') || q{}; >@@ -167,7 +168,8 @@ elsif ($borrowernumber) { #Display logged in borrower's data > $action = 'edit'; > > $template->param( >- borrower => GetMember( borrowernumber => $borrowernumber ) ); >+ borrower => GetMember( borrowernumber => $borrowernumber ), >+ ); > } > > my $captcha = random_string("CCCCC"); >@@ -236,9 +238,10 @@ sub ParseCgiForBorrower { > my %borrower; > > foreach ( $cgi->param ) { >- my ($key) = substr( $_, 9 ); >- $borrower{$key} = $cgi->param($_) >- if ( $_ =~ '^borrower_' ); >+ if ( $_ =~ '^borrower_' ) { >+ my ($key) = substr( $_, 9 ); >+ $borrower{$key} = $cgi->param($_); >+ } > } > > $borrower{'dateofbirth'} = >-- >1.7.2.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7067
:
11960
|
11961
|
11962
|
11965
|
11966
|
11967
|
11968
|
11970
|
11973
|
11978
|
12006
|
12007
|
12013
|
12104
|
12109
|
12114
|
12116
|
12129
|
12135
|
12136
|
12138
|
12153
|
12154
|
12171
|
12190
|
12191
|
12196
|
12197
|
12242
|
12243
|
12244
|
12245
|
12277
|
12278
|
13038
|
13039
|
13040
|
13048
|
13053
|
13259
|
13260
|
13744
|
13745
|
13746
|
13747
|
13748
|
13765
|
13766
|
13767
|
13768
|
13769
|
13984
|
14001
|
14085
|
14086
|
14087
|
14088
|
14089
|
14090
|
14092
|
14093
|
14119
|
14190
|
14191
|
14193
|
14194
|
14282
|
14283