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 1205-1221 sub GetHiddenItemnumbers { Link Here
1205
    }
1205
    }
1206
    my @resultitems;
1206
    my @resultitems;
1207
1207
1208
    my $yaml = C4::Context->preference('OpacHiddenItems');
1208
    my $hidingrules = C4::Context->preference('OpacHiddenItems');
1209
    return () if (! $yaml =~ /\S/ );
1209
    return () if !$hidingrules or ref($hidingrules) ne 'HASH';
1210
    $yaml = "$yaml\n\n"; # YAML is anal on ending \n. Surplus does not hurt
1211
    my $hidingrules;
1212
    eval {
1213
        $hidingrules = YAML::Load($yaml);
1214
    };
1215
    if ($@) {
1216
        warn "Unable to parse OpacHiddenItems syspref : $@";
1217
        return ();
1218
    }
1219
    my $dbh = C4::Context->dbh;
1210
    my $dbh = C4::Context->dbh;
1220
1211
1221
    # For each item
1212
    # 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 675-682 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
675
    @items = $record->field($itemfield);
673
    @items = $record->field($itemfield);
676
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
674
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
677
675
678
    my $opachiddenitems = "
676
    my $opachiddenitems = { homebranch => [$library1->{branchcode}] };
679
        homebranch: ['$library1->{branchcode}']";
680
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
677
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
681
678
682
    C4::Biblio::EmbedItemsInMarcBiblio({
679
    C4::Biblio::EmbedItemsInMarcBiblio({
Lines 698-705 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
698
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
695
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
699
    );
696
    );
700
697
701
    $opachiddenitems = "
698
    $opachiddenitems = {
702
        homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']";
699
        homebranch => [$library1->{branchcode}, $library2->{branchcode}] };
703
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
700
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
704
    C4::Biblio::EmbedItemsInMarcBiblio({
701
    C4::Biblio::EmbedItemsInMarcBiblio({
705
        marc_record  => $record,
702
        marc_record  => $record,
706
- 

Return to bug 20930