@@ -, +, @@
---
C4/Search.pm | 1 +
...373_add_PassItemMarcToXSLT_preference.perl | 15 ++++++++
installer/data/mysql/mandatory/sysprefs.sql | 1 +
.../en/modules/admin/preferences/opac.pref | 6 +--
.../modules/admin/preferences/searching.pref | 7 ++++
.../admin/preferences/staff_interface.pref | 6 +--
t/Search.t | 38 ++++++++++++++++++-
7 files changed, 67 insertions(+), 7 deletions(-)
create mode 100644 installer/data/mysql/atomicupdate/bug28373_add_PassItemMarcToXSLT_preference.perl
--- a/C4/Search.pm
+++ a/C4/Search.pm
@@ -1773,6 +1773,7 @@ sub searchResults {
# Pull out the items fields
my @fields = $marcrecord->field($itemtag);
+ $marcrecord->delete_fields( @fields ) unless C4::Context->preference('PassItemMarcToXSLT');
my $marcflavor = C4::Context->preference("marcflavour");
# adding linked items that belong to host records
--- a/installer/data/mysql/atomicupdate/bug28373_add_PassItemMarcToXSLT_preference.perl
+++ a/installer/data/mysql/atomicupdate/bug28373_add_PassItemMarcToXSLT_preference.perl
@@ -0,0 +1,15 @@
+$DBversion = 'XXX';
+if( CheckVersion( $DBversion ) ) {
+ $dbh->do( q{
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+ ('PassItemMarcToXSLT','0',NULL,'If enabled, item fields in the MARC record will be made avaiable to XSLT sheets. Otherwise they will be removed.','YesNo');
+ });
+ foreach my $pref ('XSLTDetailsDisplay','XSLTListsDisplay','XSLTResultsDisplay','OPACXSLTDetailsDisplay','OPACXSLTListsDisplay','OPACXSLTResultsDisplay'){
+ if( C4::Context->preference($pref) ne 'default' ){
+ print "NOTE: You have defined a custom stylesheet. If your custom stylesheets are utilizing item fields you must enable the system preference 'PassItemMarcToXSLT'\n";
+ last;
+ }
+ }
+
+ NewVersion( $DBversion, 28373, "Add PassItemMarcToXSLT system preference");
+}
--- a/installer/data/mysql/mandatory/sysprefs.sql
+++ a/installer/data/mysql/mandatory/sysprefs.sql
@@ -507,6 +507,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('OverdueNoticeCalendar',0,NULL,'Take the calendar into consideration when generating overdue notices','YesNo'),
('OverduesBlockCirc','noblock','noblock|confirmation|block','When checking out an item should overdues block checkout, generate a confirmation dialogue, or allow checkout','Choice'),
('OverduesBlockRenewing','allow','allow|blockitem|block','If any of patron checked out documents is late, should renewal be allowed, blocked only on overdue items or blocked on whatever checked out document','Choice'),
+('PassItemMarcToXSLT','0',NULL,'If enabled, item fields in the MARC record will be made avaiable to XSLT sheets. Otherwise they will be removed.','YesNo'),
('PatronAnonymizeDelay','',NULL,'Delay for anonymizing patrons', 'Integer'),
('PatronAutoComplete','1','Try|Don\'t try','to guess the patron being entered while typing a patron search for circulation or patron search. Only returns the first 10 results at a time.','YesNo'),
('PatronDuplicateMatchingAddFields','surname|firstname|dateofbirth', NULL,'A list of fields separated by "|" to deduplicate patrons when created','Free'),
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
@@ -101,17 +101,17 @@ OPAC:
- 'Display lists in the OPAC using XSLT stylesheet at: '
- pref: OPACXSLTListsDisplay
class: file
- - '
Options:
- leave empty for "no xslt"
- enter "default" for the default one
- put a path to define a xslt file
- put an URL for an external specific stylesheet.
{langcode} will be replaced with current interface language.'
+ - '
Options:- leave empty for "no xslt"
- Enter "default" for the default stylesheet
- Put a path to define an xslt file
- Put a URL for an external specific stylesheet.
- NOTE: The system preference PassItemMarcToXSLT must be enabled if your custom stylesheet utilizes data in the item fields
If you have multiple stylesheets for different langues the placeholder {langcode} will be replaced with current interface language.'
-
- 'Display OPAC results using XSLT stylesheet at: '
- pref: OPACXSLTResultsDisplay
class: file
- - '
Options:- leave empty for "no xslt"
- enter "default" for the default one
- put a path to define a xslt file
- put an URL for an external specific stylesheet.
{langcode} will be replaced with current interface language.'
+ - '
Options:- leave empty for "no xslt"
- Enter "default" for the default stylesheet
- Put a path to define an xslt file
- Put a URL for an external specific stylesheet.
- NOTE: The system preference PassItemMarcToXSLT must be enabled if your custom stylesheet utilizes data in the item fields
If you have multiple stylesheets for different langues the placeholder {langcode} will be replaced with current interface language.'
-
- 'Display OPAC details using XSLT stylesheet at: '
- pref: OPACXSLTDetailsDisplay
class: file
- - '
Options:- leave empty for "no xslt"
- enter "default" for the default one
- put a path to define a xslt file
- put an URL for an external specific stylesheet.
{langcode} will be replaced with current interface language.'
+ - '
Options:- leave empty for "no xslt"
- Enter "default" for the default stylesheet
- Put a path to define an xslt file
- Put a URL for an external specific stylesheet.
- NOTE: The system preference PassItemMarcToXSLT must be enabled if your custom stylesheet utilizes data in the item fields
If you have multiple stylesheets for different langues the placeholder {langcode} will be replaced with current interface language.'
-
- "Show itemtype icons in the OPAC: "
- pref: OpacNoItemTypeImages
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref
@@ -273,6 +273,13 @@ Searching:
1: "Display"
0: "Don't display"
- ' Koha record level itemtype info on detail and result pages in the OPAC and staff interface. This info also displays if the item-level_itypes system preference is set to bibliographic record.'
+ -
+ - pref: PassItemMarcToXSLT
+ type: boolean
+ choices:
+ 1: Do
+ 0: "Don't"
+ - "make item MARC tags available to XSLT stylesheets. Default is \"Don't\", items are displayed using other methods."
Did you mean/spell checking:
-
- "Swedish service for spellchecking.
"
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_interface.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_interface.pref
@@ -71,17 +71,17 @@ Staff interface:
- 'Display lists in the staff interface using XSLT stylesheet at: '
- pref: XSLTListsDisplay
class: file
- - '
Options:- Leave empty for "no xslt"
- enter "default" for the default one
- put a path to define a xslt file
- put an URL for an external specific stylesheet.
{langcode} will be replaced with current interface language'
+ - '
Options:- Leave empty for "no xslt"
- Enter "default" for the default stylesheet
- Put a path to define an xslt file
- Put a URL for an external specific stylesheet.
- NOTE: The system preference PassItemMarcToXSLT must be enabled if your custom stylesheet utilizes data in the item fields
If you have multiple stylesheets for different langues the placeholder {langcode} will be replaced with current interface language.'
-
- 'Display results in the staff interface using XSLT stylesheet at: '
- pref: XSLTResultsDisplay
class: file
- - '
Options:- Enter "default" for the default one
- Put a path to define a xslt file
- Put an URL for an external specific stylesheet.
{langcode} will be replaced with current interface language'
+ - '
Options:- Enter "default" for the default stylesheet
- Put a path to define an xslt file
- Put a URL for an external specific stylesheet.
- NOTE: The system preference PassItemMarcToXSLT must be enabled if your custom stylesheet utilizes data in the item fields
If you have multiple stylesheets for different langues the placeholder {langcode} will be replaced with current interface language.'
-
- 'Display details in the staff interface using XSLT stylesheet at: '
- pref: XSLTDetailsDisplay
class: file
- - '
Options:- Enter "default" for the default one
- Put a path to define a xslt file
- Put an URL for an external specific stylesheet.
{langcode} will be replaced with current interface language'
+ - '
Options:- Enter "default" for the default stylesheet
- Put a path to define an xslt file
- Put a URL for an external specific stylesheet.
- NOTE: The system preference PassItemMarcToXSLT must be enabled if your custom stylesheet utilizes data in the item fields
If you have multiple stylesheets for different langues the placeholder {langcode} will be replaced with current interface language.'
-
- pref: DisplayIconsXSLT
choices:
--- a/t/Search.t
+++ a/t/Search.t
@@ -17,14 +17,18 @@
use Modern::Perl;
+use C4::Biblio;
use Test::More;
+use Test::MockModule;
+use Test::Warn;
use t::lib::Mocks;
+use t::lib::TestBuilder;
use Module::Load::Conditional qw/check_install/;
BEGIN {
if ( check_install( module => 'Test::DBIx::Class' ) ) {
- plan tests => 3;
+ plan tests => 4;
} else {
plan skip_all => "Need Test::DBIx::Class"
}
@@ -169,4 +173,36 @@ subtest "_build_initial_query tests" => sub {
};
+subtest "searchResults PassItemMarcToXSLT test" => sub {
+ plan tests => 2;
+
+ t::lib::Mocks::mock_preference('OPACXSLTResultsDisplay','default');
+ t::lib::Mocks::mock_preference('marcflavour','MARC21');
+ my $mock_xslt = Test::MockModule->new("C4::Search");
+ $mock_xslt->mock( XSLTParse4Display => sub {
+ my $params = shift;
+ my $record = $params->{record};
+ warn $record->field('952') ? "Item here" : "No item";
+ return;
+ });
+
+ my $builder = t::lib::TestBuilder->new;
+
+ my $item = $builder->build_sample_item();
+ my $record = $item->biblio->metadata->record;
+ C4::Biblio::EmbedItemsInMarcBiblio({ marc_record => $record, biblionumber => $item->biblionumber });
+
+ t::lib::Mocks::mock_preference('PassItemMarcToXSLT','1');
+
+ warnings_like { C4::Search::searchResults({ interface => "opac" },"test",1,1,0,0,[ $record->as_xml_record ] ,undef) }
+ [qr/Item here/],
+ "Item field returned from default XSLT if pref set";
+
+ t::lib::Mocks::mock_preference('PassItemMarcToXSLT','0');
+
+ warnings_like { C4::Search::searchResults({ interface => "opac" },"test",1,1,0,0,[ $record->as_xml_record ] ,undef) }
+ [qr/No item/],
+ "Item field returned from default XSLT if pref set";
+
+}
--