@@ -, +, @@ --- 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:{langcode} will be replaced with current interface language.' + - '
Options: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:{langcode} will be replaced with current interface language.' + - '
Options: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:{langcode} will be replaced with current interface language.' + - '
Options: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:{langcode} will be replaced with current interface language' + - '
Options: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:{langcode} will be replaced with current interface language' + - '
Options: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:{langcode} will be replaced with current interface language' + - '
Options: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"; + +} --