From 09c74a39f70b3f582011ad386b9795a104483be1 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 one of the pipe delimited values in the PatronSingleBranch patron category code, then an item which would normally be hidden will be visible. If the patron category matches one of the pipe delimited values in 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. Rebased to current master (again). --- C4/Items.pm | 25 ++++++++++++++++++-- installer/data/mysql/sysprefs.sql | 2 ++ installer/data/mysql/updatedatabase.pl | 17 +++++++++++++ .../prog/en/modules/admin/preferences/opac.pref | 8 +++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 8116c22..ba1d985 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -33,6 +33,7 @@ use List::MoreUtils qw/any/; use YAML qw/Load/; use Data::Dumper; # used as part of logging item record changes, not just for # debugging; so please don't remove this +use C4::Members qw/GetBorrowerCategorycode/; use vars qw($VERSION @ISA @EXPORT); @@ -1641,6 +1642,18 @@ sub GetHiddenItemnumbers { return (); } my $dbh = C4::Context->dbh; + my $borrowernumber = 0; + my $homebranch = q{}; + my $categorycode = q{}; + if (C4::Context->userenv) { + $borrowernumber = C4::Context->userenv->{'number'} || 0; + $homebranch = C4::Context->userenv->{'branch'} || q{}; + } + if ($borrowernumber) { + $categorycode = C4::Members::GetBorrowerCategorycode($borrowernumber) || q{}; + } + my @SingleBranchCodes = split /\|/,C4::Context->preference('PatronSingleBranch'); + my @EveryBranchCodes = split /\|/,C4::Context->preference('PatronEveryBranch'); # For each item foreach my $item (@items) { @@ -1660,8 +1673,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'} && + (any { /^$categorycode$/ } @SingleBranchCodes ) ) || + (any { /^$categorycode$/ } @EveryBranchCodes ) ) { + $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 4b9c492..289ae95 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -285,6 +285,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('OverDriveLibraryID','','Library ID for OverDrive integration','','Integer'), ('OverdueNoticeBcc','','','Email address to bcc outgoing overdue notices sent by email','free'), ('OverduesBlockCirc','noblock','noblock|confirmation|block','When checking out an item should overdues block checkout, generate a confirmation dialogue, or allow checkout','Choice'), +('PatronEveryBranch','','Pipe delimited patron category codes which allow viewing hidden items for every branch','',''), ('patronimages','0',NULL,'Enable patron images for the Staff Client','YesNo'), ('PatronSelfRegistration','0',NULL,'If enabled, patrons will be able to register themselves via the OPAC.','YesNo'), ('PatronSelfRegistrationAdditionalInstructions','','','A free text field to display additional instructions to newly self registered patrons.','free'), @@ -293,6 +294,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('PatronSelfRegistrationDefaultCategory','','','A patron registered via the OPAC will receive a borrower category code set in this system preference.','free'), ('PatronSelfRegistrationExpireTemporaryAccountsDelay','0',NULL,'If PatronSelfRegistrationDefaultCategory is enabled, this system preference controls how long a patron can have a temporary status before the account is deleted automatically. It is an integer value representing a number of days to wait before deleting a temporary patron account. Setting it to 0 disables the deleting of temporary accounts.','Integer'), ('PatronSelfRegistrationVerifyByEmail','0',NULL,'If enabled, any patron attempting to register themselves via the OPAC will be required to verify themselves via email to activate his or her account.','YesNo'), +('PatronSingleBranch','',"Pipe delimited patron category codes which allow viewing hidden items for only the patron's home branch",'',''), ('PatronsPerPage','20','20','Number of Patrons Per Page displayed by default','Integer'), ('Persona','0','','Use Mozilla Persona for login','YesNo'), ('PrefillItem','0','','When a new item is added, should it be prefilled with last created item values?','YesNo'), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 31f494a..ee44a9c 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7139,6 +7139,23 @@ 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','',"Pipe delimited patron category codes which allow viewing hidden items for every branch",'',''); +} + ); + $dbh->do( + q{ +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('PatronSingleBranch','',"Pipe delimited patron category codes which allow 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 a75c7ef..eb7ff48 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 one of these pipe delimited patron category codes override OpacHiddenItems for their home branch only. + - + - pref: PatronEveryBranch + class: short + - Patrons matching one of these pipe delimited patron category codes override OpacHiddenItems for every branch. + - - pref: OpacAllowPublicListCreation default: 1 choices: -- 1.7.9.5