From e337e701883e5db2547d9674175b4b8d943297e9 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 10 Jul 2013 18:41:01 -0400 Subject: [PATCH] Bug 10589 - Override OpacHiddenItems based on Patron Category Two system preferences, PatronSingleBranch and PatronEveryBranch, have been added to facilitate some granularity on the override. If the home branch of the item and the patron match and the catgegory code of the patron matches the PatronSingleBranch patron category code, then an item which would normally be hidden will be visible. If the patron category matches the PatronEveryBranch patron category, then every item hidden by OpacHiddenItems will be visible. Since the patron category codes used by default for these two system preferences are not added, OpacHiddenItems will continue function as expected until individual patrons and system preferences are configured. There is no need to provide this functionality to staff, as they have access to the staff client. --- C4/Items.pm | 20 ++++++++++++++++++-- installer/data/mysql/sysprefs.sql | 2 ++ installer/data/mysql/updatedatabase.pl | 16 ++++++++++++++++ .../prog/en/modules/admin/preferences/opac.pref | 8 ++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 212a9d3..8b02e4a 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1635,6 +1635,14 @@ sub GetHiddenItemnumbers { return (); } my $dbh = C4::Context->dbh; + my $userid = C4::Context->userenv->{'id'} || q{}; + my $homebranch = C4::Context->userenv->{'branch'} || q{}; + my $categorycode = q{}; + if ($userid) { + my $sth = $dbh->prepare("SELECT categorycode FROM borrowers WHERE userid=?;"); + $sth->execute($userid); + $categorycode = $sth->fetchrow; + } # For each item foreach my $item (@items) { @@ -1654,8 +1662,16 @@ sub GetHiddenItemnumbers { # If the results matches the values in the yaml file if (any { $val eq $_ } @{$hidingrules->{$field}}) { - # We add the itemnumber to the list - push @resultitems, $item->{'itemnumber'}; + my $override = 0; + if ( ($homebranch eq $item->{'homebranch'} && + $categorycode eq C4::Context->preference('PatronSingleBranch') ) || + $categorycode eq C4::Context->preference('PatronEveryBranch') ) { + $override = 1; + } + if ($override==0) { + # We add the itemnumber to the hidden list + push @resultitems, $item->{'itemnumber'}; + } # If at least one rule matched for an item, no need to test the others last; diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 0a3f20f..ca6739d 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -428,3 +428,5 @@ INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) V INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacHoldNotes',0,'Show hold notes on OPAC','','YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CalculateFinesOnReturn','1','Switch to control if overdue fines are calculated on return or not', '', 'YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AcqWarnOnDuplicateInvoice','0','Warn librarians when they try to create a duplicate invoice', '', 'YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronEveryBranch','PTEB','The patron category code which allows viewing hidden items for every branch','',''); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronSingleBranch','PTSB',"The patron category code which allows viewing hidden items for only the patron's home branch",'',''); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 1f7b491..841ab92 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7044,6 +7044,22 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.13.00.XXX"; +if ( CheckVersion($DBversion) ) { + $dbh->do( + q{ +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronEveryBranch','PTEB',"The patron category code which allows viewing hidden items for every branch",'',''); +} + ); + $dbh->do( + q{ +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronSingleBranch','PTSB',"The patron category code which allows viewing hidden items for only the patron's home branch",'',''); +} + ); + print "Upgrade to $DBversion done (Bug filtering: Patron Category to override OPACHiddenItems)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 90295ef..0783df6 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -497,6 +497,14 @@ OPAC: class: code - Allows to define custom rules for hiding specific items at opac. See docs/opac/OpacHiddenItems.txt for more informations - + - pref: PatronSingleBranch + class: short + - Patrons matching this patron category overrides OpacHiddenItems for their home branch only. + - + - pref: PatronEveryBranch + class: short + - Patrons matching this patron category overrides OpacHiddenItems for their every branch. + - - pref: OpacAllowPublicListCreation default: 1 choices: -- 1.7.9.5