View | Details | Raw Unified | Return to bug 20930
Collapse All | Expand All

(-)a/C4/Biblio.pm (-3 / +1 lines)
Lines 2633-2641 sub EmbedItemsInMarcBiblio { Link Here
2633
                     # and on this biblionumber
2633
                     # and on this biblionumber
2634
2634
2635
    # Flag indicating if there is potential hiding.
2635
    # Flag indicating if there is potential hiding.
2636
    my $opachiddenitems = $opac
2636
    my $opachiddenitems = $opac && ( C4::Context->preference('OpacHiddenItems') );
2637
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2638
2639
    require C4::Items;
2637
    require C4::Items;
2640
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2638
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2641
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2639
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
(-)a/C4/Items.pm (-11 / +2 lines)
Lines 1201-1217 sub GetHiddenItemnumbers { Link Here
1201
    }
1201
    }
1202
    my @resultitems;
1202
    my @resultitems;
1203
1203
1204
    my $yaml = C4::Context->preference('OpacHiddenItems');
1204
    my $hidingrules = C4::Context->preference('OpacHiddenItems');
1205
    return () if (! $yaml =~ /\S/ );
1205
    return () if !$hidingrules or ref($hidingrules) ne 'HASH';
1206
    $yaml = "$yaml\n\n"; # YAML is anal on ending \n. Surplus does not hurt
1207
    my $hidingrules;
1208
    eval {
1209
        $hidingrules = YAML::Load($yaml);
1210
    };
1211
    if ($@) {
1212
        warn "Unable to parse OpacHiddenItems syspref : $@";
1213
        return ();
1214
    }
1215
    my $dbh = C4::Context->dbh;
1206
    my $dbh = C4::Context->dbh;
1216
1207
1217
    # For each item
1208
    # For each item
(-)a/installer/data/mysql/atomicupdate/Bug_20930-Set-OpacHiddenItems-system-preference-type-to-YAML.perl (+8 lines)
Line 0 Link Here
1
$DBversion = 'XXX';  # will be replaced by the RM
2
if( CheckVersion( $DBversion ) ) {
3
    $dbh->do( "UPDATE systempreferences set type='YAML' WHERE variable='OpacHiddenItems'" );
4
5
    # Always end with this (adjust the bug info)
6
    SetVersion( $DBversion );
7
    print "Upgrade to $DBversion done (Bug 20930: Set OpacHiddenItems system preference type to YAML)\n";
8
}
(-)a/installer/data/mysql/sysprefs.sql (-1 / +1 lines)
Lines 380-386 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
380
('OPACFinesTab','1','','If OFF the patron fines tab in the OPAC is disabled.','YesNo'),
380
('OPACFinesTab','1','','If OFF the patron fines tab in the OPAC is disabled.','YesNo'),
381
('OPACFRBRizeEditions','0','','If ON, the OPAC will query one or more ISBN web services for associated ISBNs and display an Editions tab on the details pages','YesNo'),
381
('OPACFRBRizeEditions','0','','If ON, the OPAC will query one or more ISBN web services for associated ISBNs and display an Editions tab on the details pages','YesNo'),
382
('opacheader','','70|10','Add HTML to be included as a custom header in the OPAC','Textarea'),
382
('opacheader','','70|10','Add HTML to be included as a custom header in the OPAC','Textarea'),
383
('OpacHiddenItems','','','This syspref allows to define custom rules for hiding specific items at the OPAC. See http://wiki.koha-community.org/wiki/OpacHiddenItems for more information.','Textarea'),
383
('OpacHiddenItems','','','This syspref allows to define custom rules for hiding specific items at the OPAC. See http://wiki.koha-community.org/wiki/OpacHiddenItems for more information.','YAML'),
384
('OpacHiddenItemsExceptions','',NULL,'List of borrower categories, separated by |, that can see items otherwise hidden by OpacHiddenItems','Textarea'),
384
('OpacHiddenItemsExceptions','',NULL,'List of borrower categories, separated by |, that can see items otherwise hidden by OpacHiddenItems','Textarea'),
385
('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'),
385
('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'),
386
('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice'),
386
('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice'),
(-)a/opac/opac-search.pl (-11 / +2 lines)
Lines 247-263 my $cnt; Link Here
247
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
247
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
248
my @advanced_search_types = split(/\|/, $advanced_search_types);
248
my @advanced_search_types = split(/\|/, $advanced_search_types);
249
249
250
my $hidingrules = {};
250
my $hidingrules = C4::Context->preference('OpacHiddenItems');
251
my $yaml = C4::Context->preference('OpacHiddenItems');
251
$hidingrules = {} if !$hidingrules or ref($hidingrules) ne 'HASH';
252
if ( $yaml =~ /\S/ ) {
253
    $yaml = "$yaml\n\n"; # YAML expects trailing newline. Surplus does not hurt.
254
    eval {
255
        $hidingrules = YAML::Load($yaml);
256
    };
257
    if ($@) {
258
        warn "Unable to parse OpacHiddenItems syspref : $@";
259
    }
260
}
261
252
262
my @sorted_itemtypes = sort { $itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}->{translated_description} } keys %$itemtypes;
253
my @sorted_itemtypes = sort { $itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}->{translated_description} } keys %$itemtypes;
263
foreach my $advanced_srch_type (@advanced_search_types) {
254
foreach my $advanced_srch_type (@advanced_search_types) {
(-)a/t/db_dependent/Items.t (-15 / +11 lines)
Lines 203-234 subtest 'GetHiddenItemnumbers tests' => sub { Link Here
203
    ok( !defined( GetHiddenItemnumbers( { items => \@items } ) ),
203
    ok( !defined( GetHiddenItemnumbers( { items => \@items } ) ),
204
        "Hidden items list undef if OpacHiddenItems empty");
204
        "Hidden items list undef if OpacHiddenItems empty");
205
205
206
    # Blank spaces
206
    # Empty ref
207
    t::lib::Mocks::mock_preference('OpacHiddenItems','  ');
207
    t::lib::Mocks::mock_preference('OpacHiddenItems', {});
208
    ok( scalar GetHiddenItemnumbers( { items => \@items } ) == 0,
208
    ok( scalar GetHiddenItemnumbers( { items => \@items } ) == 0,
209
        "Hidden items list empty if OpacHiddenItems only contains blanks");
209
        "Hidden items list empty if OpacHiddenItems only contains blanks");
210
210
211
    # One variable / value
211
    # One variable / value
212
    $opachiddenitems = "
212
    $opachiddenitems = { withdrawn => [1] };
213
        withdrawn: [1]";
214
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
213
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
215
    @hidden = GetHiddenItemnumbers( { items => \@items } );
214
    @hidden = GetHiddenItemnumbers( { items => \@items } );
216
    ok( scalar @hidden == 1, "Only one hidden item");
215
    ok( scalar @hidden == 1, "Only one hidden item");
217
    is( $hidden[0], $item1_itemnumber, "withdrawn=1 is hidden");
216
    is( $hidden[0], $item1_itemnumber, "withdrawn=1 is hidden");
218
217
219
    # One variable, two values
218
    # One variable, two values
220
    $opachiddenitems = "
219
    $opachiddenitems = { withdrawn => [1,0] };
221
        withdrawn: [1,0]";
222
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
220
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
223
    @hidden = GetHiddenItemnumbers( { items => \@items } );
221
    @hidden = GetHiddenItemnumbers( { items => \@items } );
224
    ok( scalar @hidden == 2, "Two items hidden");
222
    ok( scalar @hidden == 2, "Two items hidden");
225
    is_deeply( \@hidden, \@itemnumbers, "withdrawn=1 and withdrawn=0 hidden");
223
    is_deeply( \@hidden, \@itemnumbers, "withdrawn=1 and withdrawn=0 hidden");
226
224
227
    # Two variables, a value each
225
    # Two variables, a value each
228
    $opachiddenitems = "
226
    $opachiddenitems = {
229
        withdrawn: [1]
227
        withdrawn => [1],
230
        homebranch: [$library2->{branchcode}]
228
        homebranch => [$library2->{branchcode}]
231
    ";
229
    };
232
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
230
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
233
    @hidden = GetHiddenItemnumbers( { items => \@items } );
231
    @hidden = GetHiddenItemnumbers( { items => \@items } );
234
    ok( scalar @hidden == 2, "Two items hidden");
232
    ok( scalar @hidden == 2, "Two items hidden");
Lines 673-680 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
673
    @items = $record->field($itemfield);
671
    @items = $record->field($itemfield);
674
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
672
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
675
673
676
    my $opachiddenitems = "
674
    my $opachiddenitems = { homebranch => [$library1->{branchcode}] };
677
        homebranch: ['$library1->{branchcode}']";
678
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
675
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
679
676
680
    C4::Biblio::EmbedItemsInMarcBiblio({
677
    C4::Biblio::EmbedItemsInMarcBiblio({
Lines 696-703 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
696
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
693
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
697
    );
694
    );
698
695
699
    $opachiddenitems = "
696
    $opachiddenitems = {
700
        homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']";
697
        homebranch => [$library1->{branchcode}, $library2->{branchcode}] };
701
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
698
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
702
    C4::Biblio::EmbedItemsInMarcBiblio({
699
    C4::Biblio::EmbedItemsInMarcBiblio({
703
        marc_record  => $record,
700
        marc_record  => $record,
704
- 

Return to bug 20930