=cut
-use strict;
-use warnings;
+use Modern::Perl;
+
use CGI qw ( -utf8 );
use CGI::Cookie; # need to check cookies before having CGI parse the POST request
+use Array::Utils qw( array_minus );
-use C4::Auth qw(:DEFAULT check_cookie_auth);
+use C4::Auth qw( check_cookie_auth get_template_and_user );
use C4::Context;
-use C4::Debug;
-use C4::Output qw(:html :ajax pagination_bar);
+use C4::Output qw( output_with_http_headers is_ajax output_html_with_http_headers );
use C4::Scrubber;
-use C4::Biblio;
-use C4::Tags qw(add_tag get_approval_rows get_tag_rows remove_tag stratify_tags);
-use C4::XSLT;
-
-use Data::Dumper;
+use C4::Biblio qw( GetMarcBiblio );
+use C4::Items qw( GetItemsInfo );
+use C4::Tags qw(
+ add_tag
+ get_approval_rows
+ get_tag_rows
+ remove_tag
+ stratify_tags
+);
+use C4::XSLT qw( XSLTParse4Display );
+
+
+use Koha::Logger;
+use Koha::Biblios;
+use Koha::CirculationRules;
my %newtags = ();
my @deltags = ();
my %cookies = CGI::Cookie->fetch;
my $input = CGI->new;
my $sessid = $cookies{'CGISESSID'}->value;
- my ($auth_status, $auth_sessid) = check_cookie_auth($sessid, $needed_flags);
- $debug and
- print STDERR "($auth_status, $auth_sessid) = check_cookie_auth($sessid," . Dumper($needed_flags) . ")\n";
+ my ($auth_status) = check_cookie_auth($sessid, $needed_flags);
if ($auth_status ne "ok") {
output_with_http_headers $input, undef,
"window.alert('Your CGI session cookie ($sessid) is not current. " .
"Please refresh the page and try again.');\n", 'js';
exit 0;
}
- $debug and print STDERR "AJAX request: " . Dumper($input),
- "\n(\$auth_status,\$auth_sessid) = ($auth_status,$auth_sessid)\n";
return $input;
}
my $is_ajax = is_ajax();
my $openadds = C4::Context->preference('TagsModeration') ? 0 : 1;
my $query = ($is_ajax) ? &ajax_auth_cgi({}) : CGI->new();
-unless (C4::Context->preference('TagsEnabled')) {
- push @errors, {+ tagsdisabled=>1 };
- push @globalErrorIndexes, $#errors;
-} else {
- foreach ($query->param) {
- if (/^newtag(.*)/) {
- my $biblionumber = $1;
- unless ($biblionumber =~ /^\d+$/) {
- $debug and warn "$_ references non numerical biblionumber '$biblionumber'";
- push @errors, {+'badparam' => $_ };
- push @globalErrorIndexes, $#errors;
- next;
- }
- $newtags{$biblionumber} = $query->param($_);
- } elsif (/^del(\d+)$/) {
- push @deltags, $1;
- }
- }
+foreach ($query->param) {
+ if (/^newtag(.*)/) {
+ my $biblionumber = $1;
+ unless ($biblionumber =~ /^\d+$/) {
+ push @errors, {+'badparam' => $_ };
+ push @globalErrorIndexes, $#errors;
+ next;
+ }
+ $newtags{$biblionumber} = $query->param($_);
+ } elsif (/^del(\d+)$/) {
+ push @deltags, $1;
+ }
}
my $add_op = (scalar(keys %newtags) + scalar(@deltags)) ? 1 : 0;
my ($template, $loggedinuser, $cookie);
if ($is_ajax) {
$loggedinuser = C4::Context->userenv->{'number'}; # must occur AFTER auth
- $debug and print STDERR "op: $loggedinuser\n";
} else {
($template, $loggedinuser, $cookie) = get_template_and_user({
template_name => "opac-tags.tt",
query => $query,
type => "opac",
authnotrequired => ($add_op ? 0 : 1), # auth required to add tags
- debug => 1,
});
}
+unless ( C4::Context->preference('TagsEnabled') ) {
+ print $query->redirect("/cgi-bin/koha/errors/404.pl");
+ exit;
+}
+
if ($add_op) {
unless ($loggedinuser) {
push @errors, {+'login' => 1 };
} else {
push @errors, {failed_add_tag=>$clean_tag};
push @{$bibResults->{errors}}, {failed_add_tag=>$clean_tag};
- $debug and warn "add_tag($biblionumber,$clean_tag,$loggedinuser...) returned bad result (" . (defined $result ? $result : 'UNDEF') .")";
+ Koha::Logger->get->warn("add_tag($biblionumber,$clean_tag,$loggedinuser...) returned bad result (" . (defined $result ? $result : 'UNDEF') .")");
}
}
$perBibResults->{$biblionumber} = $bibResults;
my $my_tags = [];
if ($loggedinuser) {
+ my $patron = Koha::Patrons->find( { borrowernumber => $loggedinuser } );
+ $borcat = $patron ? $patron->categorycode : $borcat;
+ my $rules = C4::Context->yaml_preference('OpacHiddenItems');
+ my $should_hide = ( $rules ) ? 1 : 0;
$my_tags = get_tag_rows({borrowernumber=>$loggedinuser});
my $my_approved_tags = get_approval_rows({ approved => 1 });
+
+ my $art_req_itypes;
+ if( C4::Context->preference('ArticleRequests') ) {
+ $art_req_itypes = Koha::CirculationRules->guess_article_requestable_itemtypes({ $patron ? ( categorycode => $patron->categorycode ) : () });
+ }
+
+ # get biblionumbers stored in the cart
+ my @cart_list;
+
+ if($query->cookie("bib_list")){
+ my $cart_list = $query->cookie("bib_list");
+ @cart_list = split(/\//, $cart_list);
+ }
+
foreach my $tag (@$my_tags) {
- my $biblio = GetBiblioData($tag->{biblionumber});
- my $record = &GetMarcBiblio( $tag->{biblionumber} );
- $tag->{subtitle} = GetRecordValue( 'subtitle', $record, GetFrameworkCode( $tag->{biblionumber} ) );
- $tag->{title} = $biblio->{title};
- $tag->{author} = $biblio->{author};
- if (C4::Context->preference("OPACXSLTResultsDisplay")) {
- $tag->{XSLTBloc} = XSLTParse4Display($tag->{biblionumber}, $record, "OPACXSLTResultsDisplay");
+ $tag->{visible} = 0;
+ my $biblio = Koha::Biblios->find( $tag->{biblionumber} );
+ my $record = &GetMarcBiblio({
+ biblionumber => $tag->{biblionumber},
+ embed_items => 1,
+ opac => 1,
+ borcat => $borcat });
+ next unless $record;
+ my @hidden_items;
+ if ($should_hide) {
+ my $items = $biblio->items;
+ my @all_itemnumbers = $items->get_column('itemnumber');
+ my @items_to_show = $items->filter_by_visible_in_opac({ opac => 1, patron => $patron })->as_list;
+ @hidden_items = array_minus( @all_itemnumbers, @items_to_show );
}
+ next
+ if (
+ (
+ !$patron
+ or ( $patron and !$patron->category->override_hidden_items )
+ )
+ and $biblio->hidden_in_opac( { rules => $rules } )
+ );
+ $tag->{title} = $biblio->title;
+ $tag->{subtitle} = $biblio->subtitle;
+ $tag->{medium} = $biblio->medium;
+ $tag->{part_number} = $biblio->part_number;
+ $tag->{part_name} = $biblio->part_name;
+ $tag->{author} = $biblio->author;
+ # BZ17530: 'Intelligent' guess if result can be article requested
+ $tag->{artreqpossible} = ( $art_req_itypes->{ $tag->{itemtype} // q{} } || $art_req_itypes->{ '*' } ) ? 1 : q{};
+
+ my $variables = {
+ anonymous_session => ($loggedinuser) ? 0 : 1
+ };
+ $tag->{XSLTBloc} = XSLTParse4Display(
+ {
+ biblionumber => $tag->{biblionumber},
+ record => $record,
+ xsl_syspref => 'OPACXSLTResultsDisplay',
+ fix_amps => 1,
+ hidden_items => \@hidden_items,
+ xslt_variables => $variables
+ }
+ );
+
my $date = $tag->{date_created} || '';
$date =~ /\s+(\d{2}\:\d{2}\:\d{2})/;
$tag->{time_created_display} = $1;
$tag->{approved} = ( grep { $_->{term} eq $tag->{term} and $_->{approved} } @$my_approved_tags );
+ $tag->{visible} = 1;
+ # while we're checking each line, see if item is in the cart
+ if ( grep {$_ eq $biblio->biblionumber} @cart_list) {
+ $tag->{incart} = 1;
+ }
}
}