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

(-)a/C4/Biblio.pm (-1 / +1 lines)
Lines 2803-2809 sub EmbedItemsInMarcBiblio { Link Here
2803
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
2803
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
2804
    my @items;
2804
    my @items;
2805
    my $opachiddenitems = $opac
2805
    my $opachiddenitems = $opac
2806
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2806
      && ( C4::Context->preference('OpacHiddenItems') );
2807
    require C4::Items;
2807
    require C4::Items;
2808
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2808
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2809
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2809
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
(-)a/C4/Items.pm (-11 / +2 lines)
Lines 1409-1425 sub GetHiddenItemnumbers { Link Here
1409
    my (@items) = @_;
1409
    my (@items) = @_;
1410
    my @resultitems;
1410
    my @resultitems;
1411
1411
1412
    my $yaml = C4::Context->preference('OpacHiddenItems');
1412
    my $hidingrules = C4::Context->preference('OpacHiddenItems');
1413
    return () if (! $yaml =~ /\S/ );
1413
    return () if !$hidingrules or ref($hidingrules) ne 'HASH';
1414
    $yaml = "$yaml\n\n"; # YAML is anal on ending \n. Surplus does not hurt
1415
    my $hidingrules;
1416
    eval {
1417
        $hidingrules = YAML::Load($yaml);
1418
    };
1419
    if ($@) {
1420
        warn "Unable to parse OpacHiddenItems syspref : $@";
1421
        return ();
1422
    }
1423
    my $dbh = C4::Context->dbh;
1414
    my $dbh = C4::Context->dbh;
1424
1415
1425
    # For each item
1416
    # 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 339-345 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
339
('OPACFinesTab','1','','If OFF the patron fines tab in the OPAC is disabled.','YesNo'),
339
('OPACFinesTab','1','','If OFF the patron fines tab in the OPAC is disabled.','YesNo'),
340
('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'),
340
('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'),
341
('opacheader','','70|10','Add HTML to be included as a custom header in the OPAC','Textarea'),
341
('opacheader','','70|10','Add HTML to be included as a custom header in the OPAC','Textarea'),
342
('OpacHiddenItems','','','This syspref allows to define custom rules for hiding specific items at opac. See docs/opac/OpacHiddenItems.txt for more informations.','Textarea'),
342
('OpacHiddenItems','','','This syspref allows to define custom rules for hiding specific items at opac. See docs/opac/OpacHiddenItems.txt for more informations.','YAML'),
343
('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'),
343
('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'),
344
('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice'),
344
('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice'),
345
('OPACHoldsIfAvailableAtPickup','1','','Allow to pickup up holds at libraries where the item is available','YesNo'),
345
('OPACHoldsIfAvailableAtPickup','1','','Allow to pickup up holds at libraries where the item is available','YesNo'),
(-)a/opac/opac-search.pl (-11 / +2 lines)
Lines 240-256 my $cnt; Link Here
240
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
240
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
241
my @advanced_search_types = split(/\|/, $advanced_search_types);
241
my @advanced_search_types = split(/\|/, $advanced_search_types);
242
242
243
my $hidingrules = {};
243
my $hidingrules = C4::Context->preference('OpacHiddenItems');
244
my $yaml = C4::Context->preference('OpacHiddenItems');
244
$hidingrules = {} if !$hidingrules or ref($hidingrules) ne 'HASH';
245
if ( $yaml =~ /\S/ ) {
246
    $yaml = "$yaml\n\n"; # YAML expects trailing newline. Surplus does not hurt.
247
    eval {
248
        $hidingrules = YAML::Load($yaml);
249
    };
250
    if ($@) {
251
        warn "Unable to parse OpacHiddenItems syspref : $@";
252
    }
253
}
254
245
255
my @sorted_itemtypes = sort { $itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}->{translated_description} } keys %$itemtypes;
246
my @sorted_itemtypes = sort { $itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}->{translated_description} } keys %$itemtypes;
256
foreach my $advanced_srch_type (@advanced_search_types) {
247
foreach my $advanced_srch_type (@advanced_search_types) {
(-)a/t/db_dependent/Items.t (-14 / +10 lines)
Lines 200-230 subtest 'GetHiddenItemnumbers tests' => sub { Link Here
200
        "Hidden items list undef if OpacHiddenItems empty");
200
        "Hidden items list undef if OpacHiddenItems empty");
201
201
202
    # Blank spaces
202
    # Blank spaces
203
    t::lib::Mocks::mock_preference('OpacHiddenItems','  ');
203
    t::lib::Mocks::mock_preference('OpacHiddenItems', {});
204
    ok( scalar GetHiddenItemnumbers( @items ) == 0,
204
    ok( scalar GetHiddenItemnumbers( @items ) == 0,
205
        "Hidden items list empty if OpacHiddenItems only contains blanks");
205
        "Hidden items list empty if OpacHiddenItems only contains blanks");
206
206
207
    # One variable / value
207
    # One variable / value
208
    $opachiddenitems = "
208
    $opachiddenitems = { withdrawn => [1] };
209
        withdrawn: [1]";
210
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
209
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
211
    @hidden = GetHiddenItemnumbers( @items );
210
    @hidden = GetHiddenItemnumbers( @items );
212
    ok( scalar @hidden == 1, "Only one hidden item");
211
    ok( scalar @hidden == 1, "Only one hidden item");
213
    is( $hidden[0], $item1_itemnumber, "withdrawn=1 is hidden");
212
    is( $hidden[0], $item1_itemnumber, "withdrawn=1 is hidden");
214
213
215
    # One variable, two values
214
    # One variable, two values
216
    $opachiddenitems = "
215
    $opachiddenitems = { withdrawn => [1,0] };
217
        withdrawn: [1,0]";
218
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
216
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
219
    @hidden = GetHiddenItemnumbers( @items );
217
    @hidden = GetHiddenItemnumbers( @items );
220
    ok( scalar @hidden == 2, "Two items hidden");
218
    ok( scalar @hidden == 2, "Two items hidden");
221
    is_deeply( \@hidden, \@itemnumbers, "withdrawn=1 and withdrawn=0 hidden");
219
    is_deeply( \@hidden, \@itemnumbers, "withdrawn=1 and withdrawn=0 hidden");
222
220
223
    # Two variables, a value each
221
    # Two variables, a value each
224
    $opachiddenitems = "
222
    $opachiddenitems = {
225
        withdrawn: [1]
223
        withdrawn => [1],
226
        homebranch: [$library2->{branchcode}]
224
        homebranch => [$library2->{branchcode}]
227
    ";
225
    };
228
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
226
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
229
    @hidden = GetHiddenItemnumbers( @items );
227
    @hidden = GetHiddenItemnumbers( @items );
230
    ok( scalar @hidden == 2, "Two items hidden");
228
    ok( scalar @hidden == 2, "Two items hidden");
Lines 616-623 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
616
    @items = $record->field($itemfield);
614
    @items = $record->field($itemfield);
617
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
615
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
618
616
619
    my $opachiddenitems = "
617
    my $opachiddenitems = { homebranch => [$library1->{branchcode}] };
620
        homebranch: ['$library1->{branchcode}']";
621
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
618
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
622
619
623
    C4::Biblio::EmbedItemsInMarcBiblio( $record, $biblionumber );
620
    C4::Biblio::EmbedItemsInMarcBiblio( $record, $biblionumber );
Lines 634-641 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
634
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
631
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
635
    );
632
    );
636
633
637
    $opachiddenitems = "
634
    $opachiddenitems = {
638
        homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']";
635
        homebranch => [$library1->{branchcode}, $library2->{branchcode}] };
639
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
636
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
640
    C4::Biblio::EmbedItemsInMarcBiblio( $record, $biblionumber, undef, 1 );
637
    C4::Biblio::EmbedItemsInMarcBiblio( $record, $biblionumber, undef, 1 );
641
    @items = $record->field($itemfield);
638
    @items = $record->field($itemfield);
642
- 

Return to bug 20930