@@ -, +, @@
ageRestricted material
# # # # # #
# A PRIORI #
# # # # # #
How lame is that for a 12 year old?
# # # # # # # #
# A POSTERIORI #
# # # # # # # #
forbidden.
The "Place Hold" -button is missing on the right sidebar if the underage
user is logged in.
an error about age restrictions.
---
C4/Reserves.pm | 8 +++--
.../bootstrap/en/includes/opac-detail-sidebar.inc | 2 +-
opac/opac-detail.pl | 7 ++++
t/db_dependent/Reserves.t | 37 +++++++++++++++++++-
4 files changed, 50 insertions(+), 4 deletions(-)
--- a/C4/Reserves.pm
+++ a/C4/Reserves.pm
@@ -486,12 +486,16 @@ sub CanItemBeReserved{
# we retrieve borrowers and items informations #
# item->{itype} will come for biblioitems if necessery
my $item = GetItem($itemnumber);
+ my $biblioData = C4::Biblio::GetBiblioData( $item->{biblionumber} );
+ my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber);
# If an item is damaged and we don't allow holds on damaged items, we can stop right here
return 0 if ( $item->{damaged} && !C4::Context->preference('AllowHoldsOnDamagedItems') );
- my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber);
-
+ #Check for the age restriction
+ my ($ageRestriction, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction( $biblioData->{agerestriction}, $borrower );
+ return 0 if $daysToAgeRestriction && $daysToAgeRestriction > 0;
+
my $controlbranch = C4::Context->preference('ReservesControlBranch');
my $itemtypefield = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype";
--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc
+++ a/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc
@@ -1,7 +1,7 @@
[% UNLESS ( norequests ) %]
[% IF Koha.Preference( 'opacuserlogin' ) == 1 %]
- [% IF Koha.Preference( 'RequestOnOpac' ) == 1 %]
+ [% IF ( Koha.Preference( 'RequestOnOpac' ) == 1 && !cannotReserve ) %]
[% IF ( AllowOnShelfHolds ) %]
- Place hold
[% ELSE %]
--- a/opac/opac-detail.pl
+++ a/opac/opac-detail.pl
@@ -520,6 +520,13 @@ if ( C4::Context->preference('HighlightOwnItemsOnOPAC') ) {
my $dat = &GetBiblioData($biblionumber);
+#Check if we can place a hold on this biblio.
+my $canReserve = C4::Reserves::CanBookBeReserved( $borrowernumber, $biblionumber );
+unless ($canReserve ) {
+ $template->param( cannotReserve => 1 ) ;
+}
+
+
my $itemtypes = GetItemTypes();
# imageurl:
my $itemtype = $dat->{'itemtype'};
--- a/t/db_dependent/Reserves.t
+++ a/t/db_dependent/Reserves.t
@@ -17,7 +17,7 @@
use Modern::Perl;
-use Test::More tests => 50;
+use Test::More tests => 53;
use MARC::Record;
use DateTime::Duration;
@@ -471,6 +471,41 @@ is($cancancel, 0, 'Reserve in waiting status cant be canceled');
# End of tests for bug 12876
+ ####
+####### Testing Bug 13113 - Prevent juvenile/children from reserving ageRestricted material >>>
+ ####
+
+#Make the borrower too young for our Biblio, the Biblio has been ageRestricted during initialization
+C4::Context->set_preference( 'AgeRestrictionMarker', 'FSK|PEGI|Age|K' );
+
+#Reserving an not-agerestricted Biblio by a Borrower with no dateofbirth is tested previously.
+
+#Set the ageRestriction for the Biblio
+my $record = GetMarcBiblio( $bibnum );
+my ( $ageres_tagid, $ageres_subfieldid ) = GetMarcFromKohaField( "biblioitems.agerestriction", '' );
+$record->append_fields( MARC::Field->new($ageres_tagid, '', '', $ageres_subfieldid => 'PEGI 16') );
+C4::Biblio::ModBiblio( $record, $bibnum, '' );
+
+is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 1, "Reserving an ageRestricted Biblio without a borrower dateofbirth succeeds" );
+
+#Set the dateofbirth for the Borrower making him "too young".
+my $now = DateTime->now();
+my $duration_15years = DateTime::Duration->new(years => 15);
+my $past15yearsAgo = DateTime->now()->subtract_duration($duration_15years);
+C4::Members::ModMember( borrowernumber => $borrowernumber, dateofbirth => $past15yearsAgo->ymd() );
+
+is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 0, "Reserving a 'PEGI 16' Biblio by a 15 year old borrower fails");
+
+#Set the dateofbirth for the Borrower making him "too old".
+my $duration_30years = DateTime::Duration->new(years => 30);
+my $past30yearsAgo = DateTime->now()->subtract_duration($duration_30years);
+C4::Members::ModMember( borrowernumber => $borrowernumber, dateofbirth => $past30yearsAgo->ymd() );
+
+is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber) , 1, "Reserving a 'PEGI 16' Biblio by a 30 year old borrower succeeds");
+ ####
+####### EO Bug 13113 <<<
+ ####
+
$dbh->rollback;
sub count_hold_print_messages {
--