From 7bbbb8c8303b35080486f1ee7361edfd0f69e85f Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Mon, 11 May 2020 10:10:39 -0300
Subject: [PATCH] Bug 24458: Use the ViewPolicy filter on search results

This patch implements the use of the ViewPolicy record processor filter
inside C4::Search::searchResults. The idea is that the $record_processor
is instantiated once and reused inside the loop. This leaves options for
further optimizations I will do on a follow-up bug.

The filter is applied to the MARC data before it is passed to the XSLT
processor.

To test:
1. Apply the regression tests patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/Search.t
=> FAIL: This is not implemented, tests fail
3. Apply this patch
4. Repeat 2
5. Feel the joy in your body from a long standing bug being solved
6. Sign off :-D

https://bugs.koha-community.org/show_bug.cgi?id=25416

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
---
 C4/Search.pm | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/C4/Search.pm b/C4/Search.pm
index 0ab24a5ff8..cd9b8923bd 100644
--- a/C4/Search.pm
+++ b/C4/Search.pm
@@ -33,6 +33,7 @@ use Koha::AuthorisedValues;
 use Koha::ItemTypes;
 use Koha::Libraries;
 use Koha::Patrons;
+use Koha::RecordProcessor;
 use YAML;
 use URI::Escape;
 use Business::ISBN;
@@ -1690,6 +1691,10 @@ sub searchResults {
         $is_opac       = 1;
     }
 
+    my $record_processor = Koha::RecordProcessor->new({
+        filters => 'ViewPolicy'
+    });
+
     #Build branchnames hash
     my %branches = map { $_->branchcode => $_->branchname } Koha::Libraries->search({}, { order_by => 'branchname' });
 
@@ -2087,6 +2092,12 @@ sub searchResults {
         # XSLT processing of some stuff
         # we fetched the sysprefs already before the loop through all retrieved record!
         if (!$scan && $xslfile) {
+            $record_processor->options({
+                frameworkcode => $fw,
+                interface     => $search_context->{'interface'}
+            });
+
+            $record_processor->process($marcrecord);
             $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, $xslsyspref, 1, \@hiddenitems, $sysxml, $xslfile, $lang, $xslt_variables);
         }
 
-- 
2.26.2