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

(-)a/C4/Biblio.pm (-3 / +1 lines)
Lines 2661-2669 sub EmbedItemsInMarcBiblio { Link Here
2661
                     # and on this biblionumber
2661
                     # and on this biblionumber
2662
2662
2663
    # Flag indicating if there is potential hiding.
2663
    # Flag indicating if there is potential hiding.
2664
    my $opachiddenitems = $opac
2664
    my $opachiddenitems = $opac && ( C4::Context->preference('OpacHiddenItems') );
2665
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2666
2667
    require C4::Items;
2665
    require C4::Items;
2668
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2666
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2669
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2667
        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 368-374 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
368
('OPACFinesTab','1','','If OFF the patron fines tab in the OPAC is disabled.','YesNo'),
368
('OPACFinesTab','1','','If OFF the patron fines tab in the OPAC is disabled.','YesNo'),
369
('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'),
369
('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'),
370
('opacheader','','70|10','Add HTML to be included as a custom header in the OPAC','Textarea'),
370
('opacheader','','70|10','Add HTML to be included as a custom header in the OPAC','Textarea'),
371
('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'),
371
('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'),
372
('OpacHiddenItemsExceptions','',NULL,'List of borrower categories, separated by |, that can see items otherwise hidden by OpacHiddenItems','Textarea'),
372
('OpacHiddenItemsExceptions','',NULL,'List of borrower categories, separated by |, that can see items otherwise hidden by OpacHiddenItems','Textarea'),
373
('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'),
373
('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'),
374
('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice'),
374
('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 244-260 my $cnt; Link Here
244
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
244
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
245
my @advanced_search_types = split(/\|/, $advanced_search_types);
245
my @advanced_search_types = split(/\|/, $advanced_search_types);
246
246
247
my $hidingrules = {};
247
my $hidingrules = C4::Context->preference('OpacHiddenItems');
248
my $yaml = C4::Context->preference('OpacHiddenItems');
248
$hidingrules = {} if !$hidingrules or ref($hidingrules) ne 'HASH';
249
if ( $yaml =~ /\S/ ) {
250
    $yaml = "$yaml\n\n"; # YAML expects trailing newline. Surplus does not hurt.
251
    eval {
252
        $hidingrules = YAML::Load($yaml);
253
    };
254
    if ($@) {
255
        warn "Unable to parse OpacHiddenItems syspref : $@";
256
    }
257
}
258
249
259
my @sorted_itemtypes = sort { $itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}->{translated_description} } keys %$itemtypes;
250
my @sorted_itemtypes = sort { $itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}->{translated_description} } keys %$itemtypes;
260
foreach my $advanced_srch_type (@advanced_search_types) {
251
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 671-678 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
671
    @items = $record->field($itemfield);
669
    @items = $record->field($itemfield);
672
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
670
    is( scalar @items, $number_of_items, 'Should return all items for opac' );
673
671
674
    my $opachiddenitems = "
672
    my $opachiddenitems = { homebranch => [$library1->{branchcode}] };
675
        homebranch: ['$library1->{branchcode}']";
676
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
673
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
677
674
678
    C4::Biblio::EmbedItemsInMarcBiblio({
675
    C4::Biblio::EmbedItemsInMarcBiblio({
Lines 694-701 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
694
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
691
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
695
    );
692
    );
696
693
697
    $opachiddenitems = "
694
    $opachiddenitems = {
698
        homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']";
695
        homebranch => [$library1->{branchcode}, $library2->{branchcode}] };
699
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
696
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
700
    C4::Biblio::EmbedItemsInMarcBiblio({
697
    C4::Biblio::EmbedItemsInMarcBiblio({
701
        marc_record  => $record,
698
        marc_record  => $record,
702
- 

Return to bug 20930