From 5a0c49fb3723d0bbe71a254f0af2f4a73667e830 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 +-
 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  |   26 ++++-
 mainpage.pl                                        |   10 ++-
 members/members-update-do.pl                       |    2 +-
 members/members-update.pl                          |   10 ++-
 opac/opac-memberentry.pl                           |   22 ++--
 9 files changed, 138 insertions(+), 89 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/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..4495054 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>
+                                                                </td>
+                                                            [% 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..fab3ff5 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 OPACPatronDetails %]
+                $( "#borrower_dateofbirth" ).datepicker({ yearRange: "c-120:c" });
+            [% ELSE %]
+                $("#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');
+            [% 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')
@@ -134,7 +146,9 @@
 
                                                     <input type="text" id="borrower_dateofbirth" name="borrower_dateofbirth" value="[% borrower.dateofbirth | $KohaDates %]" readonly="readonly" size="10" />
 
-                                                    <a href="#" style="font-size:85%;text-decoration:none;" onclick="document.getElementById('borrower_dateofbirth').value='';return false;">Clear date</a><p></p>
+                                                    [% IF 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>
@@ -690,8 +704,10 @@
                                 [% 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..36ddd24 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");
-- 
1.7.2.5