Bugzilla – Attachment 161689 Details for
Bug 35942
OPAC user can enroll several times to the same club
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 35942: OPAC user can enroll several times to the same club
Bug-35942-OPAC-user-can-enroll-several-times-to-th.patch (text/plain), 8.00 KB, created by
Martin Renvoize (ashimema)
on 2024-01-31 13:51:44 UTC
(
hide
)
Description:
Bug 35942: OPAC user can enroll several times to the same club
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2024-01-31 13:51:44 UTC
Size:
8.00 KB
patch
obsolete
>From 933ebd89ac70cd7c346a2dce381e0e249c7101a7 Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Tue, 30 Jan 2024 10:58:02 -0500 >Subject: [PATCH] Bug 35942: OPAC user can enroll several times to the same > club > >Test Plan: > >1) Create 3 clubs, 1 limited to library A, 1 limited to library B and one not limited >2) Use a patron with home library A. >3) Go to the opac-user page, "Clubs" tab show 0/2 (the one from library B is not listed) >4) Browse to /cgi-bin/koha/svc/club/enroll?id=1 >5) Reload that page a couple times >6) Note the patron is now enrolled in the same club multiple times >7) Delete those enrollments >8) Apply this patch >9) Restart all the things! >10) Repeat steps 2-7, note the lack of duplicate enrollments! >11) Repeat steps 2-10 for the staff interface > >Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > opac/svc/club/enroll | 51 ++++++++++++++++++------------- > svc/club/enroll | 71 +++++++++++++++++++++++++------------------- > 2 files changed, 72 insertions(+), 50 deletions(-) > >diff --git a/opac/svc/club/enroll b/opac/svc/club/enroll >index ed19fc89b08..249a2bdd094 100755 >--- a/opac/svc/club/enroll >+++ b/opac/svc/club/enroll >@@ -30,8 +30,8 @@ use Koha::Clubs; > > my $cgi = CGI->new; > >-my ( $auth_status ) = >- check_cookie_auth( $cgi->cookie('CGISESSID') ); >+my ($auth_status) = >+ check_cookie_auth( $cgi->cookie('CGISESSID') ); > if ( $auth_status ne "ok" ) { > exit 0; > } >@@ -42,31 +42,42 @@ my $id = $cgi->param('id'); > > my $enrollment; > if ( $borrowernumber && $id ) { >+ my $already_enrolled = Koha::Club::Enrollments->search( >+ { >+ club_id => $id, >+ borrowernumber => $borrowernumber, >+ date_canceled => undef, >+ } >+ )->count(); >+ > my $club = Koha::Clubs->find($id); > >- if ( $club->club_template()->is_enrollable_from_opac() ) { >- $enrollment = Koha::Club::Enrollment->new()->set( >- { >- club_id => $club->id(), >- borrowernumber => $borrowernumber, >- date_enrolled => \'NOW()', >- date_created => \'NOW()', >- branchcode => C4::Context->userenv >- ? C4::Context->userenv->{'branch'} >- : undef, >- } >- )->store(); >+ my $wrong_branch = $club->branchcode && C4::Context->userenv && C4::Context->userenv->{branch} ne $club->branchcode; > >- my @enrollment_fields = $club->club_template()->club_template_enrollment_fields->as_list; >+ unless ( $already_enrolled || $wrong_branch ) { > >- foreach my $e (@enrollment_fields) { >- Koha::Club::Enrollment::Field->new()->set( >+ if ( $club->club_template()->is_enrollable_from_opac() ) { >+ $enrollment = Koha::Club::Enrollment->new( > { >- club_enrollment_id => $enrollment->id(), >- club_template_enrollment_field_id => $e->id(), >- value => scalar $cgi->param( $e->id() ), >+ club_id => $club->id(), >+ borrowernumber => $borrowernumber, >+ date_enrolled => \'NOW()', >+ date_created => \'NOW()', >+ branchcode => C4::Context->userenv ? C4::Context->userenv->{branch} : undef, > } > )->store(); >+ >+ my @enrollment_fields = $club->club_template()->club_template_enrollment_fields->as_list; >+ >+ foreach my $e (@enrollment_fields) { >+ Koha::Club::Enrollment::Field->new()->set( >+ { >+ club_enrollment_id => $enrollment->id(), >+ club_template_enrollment_field_id => $e->id(), >+ value => scalar $cgi->param( $e->id() ), >+ } >+ )->store(); >+ } > } > } > } >diff --git a/svc/club/enroll b/svc/club/enroll >index 0d7762b8b94..ea47e371258 100755 >--- a/svc/club/enroll >+++ b/svc/club/enroll >@@ -30,8 +30,8 @@ use Koha::Clubs; > > my $cgi = CGI->new; > >-my ( $auth_status ) = >- check_cookie_auth( $cgi->cookie('CGISESSID'), { clubs => 'enroll' } ); >+my ($auth_status) = >+ check_cookie_auth( $cgi->cookie('CGISESSID'), { clubs => 'enroll' } ); > if ( $auth_status ne "ok" ) { > exit 0; > } >@@ -46,42 +46,54 @@ my $enrollment; > > my @club_enrollment_fields; > >-if($enrollent_id){ >+if ($enrollent_id) { > my @enrollment_fields = $club->club_template()->club_template_enrollment_fields()->as_list; >- @club_enrollment_fields = Koha::Club::Enrollment::Fields->search({'club_enrollment_id'=> $enrollent_id})->as_list; >+ @club_enrollment_fields = >+ Koha::Club::Enrollment::Fields->search( { 'club_enrollment_id' => $enrollent_id } )->as_list; > >- foreach my $club_enrollment_field (@club_enrollment_fields){ >- foreach my $e (@enrollment_fields){ >- if($e->id()==$club_enrollment_field->club_template_enrollment_field_id){ >+ foreach my $club_enrollment_field (@club_enrollment_fields) { >+ foreach my $e (@enrollment_fields) { >+ if ( $e->id() == $club_enrollment_field->club_template_enrollment_field_id ) { > my $value = $cgi->param( $e->id() ); > $club_enrollment_field->value($value); > $club_enrollment_field->update(); > } > } > } >-} >-elsif ($club) { >- $enrollment = Koha::Club::Enrollment->new( >+} elsif ($club) { >+ my $already_enrolled = Koha::Club::Entrollments->search( > { > club_id => $club->id(), > borrowernumber => $borrowernumber, >- date_enrolled => \'NOW()', >- date_created => \'NOW()', >- branchcode => C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef, >+ date_canceled => undef, > } >- )->store(); >- >- if ($enrollment) { >- my @enrollment_fields = $club->club_template()->club_template_enrollment_fields->as_list; >- >- foreach my $e (@enrollment_fields) { >- my $club_enrollment_field = Koha::Club::Enrollment::Field->new( >- { >- club_enrollment_id => $enrollment->id(), >- club_template_enrollment_field_id => $e->id(), >- value => scalar $cgi->param( $e->id() ), >- } >- )->store(); >+ )->count(); >+ >+ my $wrong_branch = $club->branchcode && C4::Context->userenv && C4::Context->userenv->{branch} ne $club->branchcode; >+ >+ unless ( $already_enrolled || $wrong_branch ) { >+ $enrollment = Koha::Club::Enrollment->new( >+ { >+ club_id => $club->id(), >+ borrowernumber => $borrowernumber, >+ date_enrolled => \'NOW()', >+ date_created => \'NOW()', >+ branchcode => C4::Context->userenv ? C4::Context->userenv->{branch} : undef, >+ } >+ )->store(); >+ >+ if ($enrollment) { >+ my @enrollment_fields = $club->club_template()->club_template_enrollment_fields->as_list; >+ >+ foreach my $e (@enrollment_fields) { >+ my $club_enrollment_field = Koha::Club::Enrollment::Field->new( >+ { >+ club_enrollment_id => $enrollment->id(), >+ club_template_enrollment_field_id => $e->id(), >+ value => scalar $cgi->param( $e->id() ), >+ } >+ )->store(); >+ } > } > } > } >@@ -89,9 +101,8 @@ elsif ($club) { > binmode STDOUT, ':encoding(UTF-8)'; > print $cgi->header( -type => 'text/plain', -charset => 'UTF-8' ); > >-if($enrollent_id){ >+if ($enrollent_id) { > print to_json( { success => @club_enrollment_fields ? 1 : 0 } ); >-} >-else{ >+} else { > print to_json( { success => $enrollment ? 1 : 0 } ); >-} >\ No newline at end of file >+} >-- >2.43.0
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 35942
:
161648
|
161649
|
161665
| 161689 |
162332