From 31b732b8300d8e9fe953cac3ab50f367f3fbe376 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 15 Nov 2013 12:02:53 +0100 Subject: [PATCH] Bug 11256: Opac: Set a number of items to display on a biblio detail page. Currently, the number of items to display is hardcoded (50). But the perl script loads all items before to check if the number of items is oversized. This patch adds a new pref OpacMaxItemsToDisplay (default to 50). If the *total* number of items for a biblio is greater, no item is displayed and a link allows to display all items. Test plan: 1/ search a biblio with many items 2/ set the pref according the number of items you want to display 3/ verify the items are not displayed if the number of items is greater the pref value 4/ enable the OpacSeparateHoldings pref and verify the items are displayed in different tabs (if items have different locations). Signed-off-by: Chris Cormack Signed-off-by: Kyle M Hall --- installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 7 ++++++ .../en/modules/admin/preferences/opac.pref | 6 +++++ .../opac-tmpl/prog/en/modules/opac-detail.tt | 20 ++++++----------- opac/opac-detail.pl | 22 +++++++++---------- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 89bf3680a4..2c453452ce 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -240,6 +240,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('OpacMaintenance','0','','If ON, enables maintenance warning in OPAC','YesNo'), ('OpacMainUserBlock','Welcome to Koha...\r\n
','70|10','A user-defined block of HTML in the main content area of the opac main page','Textarea'), ('OpacMainUserBlockMobile','',NULL,'Show the following HTML in its own column on the main page of the OPAC (mobile version):','free'), +('OpacMaxItemsToDisplay','50','','Max items to display at the OPAC on a biblio detail','Integer'), ('OPACMobileUserCSS','',NULL,'Include the following CSS for the mobile view on all pages in the OPAC:','free'), ('OPACMySummaryHTML','','70|10','Enter the HTML that will appear in a column on the \'my summary\' and \'my reading history\' tabs when a user is logged in to the OPAC. Enter {BIBLIONUMBER}, {TITLE}, {AUTHOR}, or {ISBN} in place of their respective variables in the HTML. Leave blank to disable.','Textarea'), ('OpacNav','Important links here.','70|10','Use HTML tags to add navigational links to the left-hand navigational bar in OPAC','Textarea'), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index baf17e5575..ccc7e687ab 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -8005,6 +8005,13 @@ if ( CheckVersion($DBversion) ) { $dbh->{RaiseError} = 0; } +$DBversion = "3.15.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('OpacMaxItemsToDisplay','50','','Max items to display at the OPAC on a biblio detail','Integer')"); + print "Upgrade to $DBversion done (Bug 11256: Add system preference OpacMaxItemsToDisplay)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 1364ff1a1c..9c1fc1fa84 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -286,6 +286,12 @@ OPAC: yes: Show no: Don't show - "the name of the staff member who managed a suggestion in OPAC." + - + - Display + - pref: OpacMaxItemsToDisplay + class: integer + - items on the biblio detail page (if the biblio has more items, a link allow to display all items). + Features: - - pref: opacuserlogin diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt index 3f3ade7680..26bbbc41f2 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt @@ -938,7 +938,7 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
    [% IF ( defaulttab == 'holdings' ) %]
  • [% ELSE %]
  • [% END %] - [% IF SeparateHoldings %][% LoginBranchname %] holdings[% ELSE %]Holdings[% END %] ( [% itemloop.size || 0 %] ) + [% IF SeparateHoldings %][% LoginBranchname %] holdings[% ELSE %]Holdings[% END %][% UNLESS too_many_items %] ( [% itemloop.size || 0 %] )[% END %]
  • [% IF (SeparateHoldings) %]
  • Other holdings ( [% otheritemloop.size || 0 %] )
  • @@ -1038,12 +1038,10 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
    -[% IF ( itemloop.size ) %] - [% IF ( lotsofholdingsitems ) %] -

    This record has many physical items. Click here to view them all.

    - [% ELSE %] - [% INCLUDE items_table items=itemloop tab="holdings" %] - [% END %] +[% IF too_many_items %] +

    This record has many physical items ([% items_count %]). Click here to view them all.

    +[% ELSIF ( itemloop.size ) %] + [% INCLUDE items_table items=itemloop tab="holdings" %] [% IF holds_count.defined || priority %]
    [% IF holds_count.defined %] @@ -1075,12 +1073,8 @@ YAHOO.util.Event.onContentReady("furtherm", function () { [% IF (SeparateHoldings) %]
    - [% IF (otheritemloop.size) %] - [% IF lotsofothersholdingsitems %] -

    This record has many physical items. Click here to view them all.

    - [% ELSE %] - [% INCLUDE items_table items=otheritemloop tab="otherholdings" %] - [% END %] + [% IF otheritemloop.size %] + [% INCLUDE items_table items=otheritemloop tab="otherholdings" %] [% ELSE %] No other items. [% END %] diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 0f6906ba04..0c2a6d9318 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -561,7 +561,15 @@ if ($currentbranch and C4::Context->preference('OpacSeparateHoldings')) { $template->param(SeparateHoldings => 1); } my $separatebranch = C4::Context->preference('OpacSeparateHoldingsBranch'); -for my $itm (@items) { +my $viewallitems = $query->param('viewallitems'); +my $max_items_to_display = C4::Context->preference('OpacMaxItemsToDisplay') // 50; +if ( not $viewallitems and @items > $max_items_to_display ) { + $template->param( + too_many_items => 1, + items_count => scalar( @items ), + ); +} else { + for my $itm (@items) { $itm->{holds_count} = $item_reserves{ $itm->{itemnumber} }; $itm->{priority} = $priority{ $itm->{itemnumber} }; $norequests = 0 @@ -616,6 +624,7 @@ for my $itm (@items) { } else { push @itemloop, $itm; } + } } # Display only one tab if one items list is empty @@ -626,17 +635,6 @@ if (scalar(@itemloop) == 0 || scalar(@otheritemloop) == 0) { } } -# If there is a lot of items, and the user has not decided -# to view them all yet, we first warn him -# TODO: The limit of 50 could be a syspref -my $viewallitems = $query->param('viewallitems'); -if (scalar(@itemloop) >= 50 && !$viewallitems) { - $template->param('lotsofholdingsitems' => 1); -} -if (scalar(@otheritemloop) >= 50 && !$viewallitems) { - $template->param('lotsofothersholdingsitems' => 1); -} - ## get notes and subjects from MARC record my $dbh = C4::Context->dbh; my $marcnotesarray = GetMarcNotes ($record,$marcflavour); -- 2.39.5