From 9bba14b3b401f90ed3f14fa245ef0a36f0ccdcf4 Mon Sep 17 00:00:00 2001 From: Srdjan Jankovic Date: Fri, 25 Nov 2011 18:06:22 +1300 Subject: [PATCH] bug_7264: Branch popup --- C4/Items.pm | 109 ++++++++---------- koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt | 122 +++++++++++++++++++- opac/opac-detail.pl | 12 ++- 3 files changed, 181 insertions(+), 62 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 0b91b65..37af776 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1167,6 +1167,40 @@ If this is set, it is set to C. sub GetItemsInfo { my ( $biblionumber ) = @_; my $dbh = C4::Context->dbh; + + my $sth_auth_val = $dbh->prepare( + 'SELECT authorised_value + FROM marc_subfield_structure + WHERE kohafield=? + ' + ); + + $sth_auth_val->execute("items.notforloan"); + my ($authorised_valuecode_notforloan) = $sth_auth_val->fetchrow; + my $sthnflstatus = $dbh->prepare( + "SELECT lib FROM authorised_values + WHERE category=? + AND authorised_value=?" + ); + + $sth_auth_val->execute("items.restricted"); + my ($authorised_valuecode_restricted) = $sth_auth_val->fetchrow; + my $restrictedstatus = $dbh->prepare( + "SELECT lib,lib_opac FROM authorised_values + WHERE category=? + AND authorised_value=?" + ); + + $sth_auth_val->execute("items.stack"); + my ($authorised_valuecode_stack) = $sth_auth_val->fetchrow; + my $stackstatus = $dbh->prepare( + "SELECT lib + FROM authorised_values + WHERE category=? + AND authorised_value=? + " + ); + # note biblioitems.* must be avoided to prevent large marc and marcxml fields from killing performance. my $query = " SELECT items.*, @@ -1185,7 +1219,15 @@ sub GetItemsInfo { items.notforloan as itemnotforloan, itemtypes.description, itemtypes.notforloan as notforloan_per_itemtype, - branchurl + branches.branchcode, + branches.branchname, + branches.branchaddress1, + branches.branchaddress2, + branches.branchaddress3, + branches.branchphone, + branches.branchemail, + branches.branchnotes, + branches.branchurl FROM items LEFT JOIN branches ON items.holdingbranch = branches.branchcode LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber @@ -1235,57 +1277,20 @@ sub GetItemsInfo { # value. $count_reserves = $restype; } - #get branch information..... - my $bsth = $dbh->prepare( - "SELECT * FROM branches WHERE branchcode = ? - " - ); - $bsth->execute( $data->{'holdingbranch'} ); - if ( my $bdata = $bsth->fetchrow_hashref ) { - $data->{'branchname'} = $bdata->{'branchname'}; - } $data->{'datedue'} = $datedue; $data->{'count_reserves'} = $count_reserves; # get notforloan complete status if applicable - my $sthnflstatus = $dbh->prepare( - 'SELECT authorised_value - FROM marc_subfield_structure - WHERE kohafield="items.notforloan" - ' - ); - - $sthnflstatus->execute; - my ($authorised_valuecode) = $sthnflstatus->fetchrow; - if ($authorised_valuecode) { - $sthnflstatus = $dbh->prepare( - "SELECT lib FROM authorised_values - WHERE category=? - AND authorised_value=?" - ); - $sthnflstatus->execute( $authorised_valuecode, + if ($authorised_valuecode_notforloan) { + $sthnflstatus->execute( $authorised_valuecode_notforloan, $data->{itemnotforloan} ); my ($lib) = $sthnflstatus->fetchrow; $data->{notforloanvalue} = $lib; } # get restricted status and description if applicable - my $restrictedstatus = $dbh->prepare( - 'SELECT authorised_value - FROM marc_subfield_structure - WHERE kohafield="items.restricted" - ' - ); - - $restrictedstatus->execute; - ($authorised_valuecode) = $restrictedstatus->fetchrow; - if ($authorised_valuecode) { - $restrictedstatus = $dbh->prepare( - "SELECT lib,lib_opac FROM authorised_values - WHERE category=? - AND authorised_value=?" - ); - $restrictedstatus->execute( $authorised_valuecode, + if ($authorised_valuecode_restricted) { + $restrictedstatus->execute( $authorised_valuecode_restricted, $data->{restricted} ); if ( my $rstdata = $restrictedstatus->fetchrow_hashref ) { @@ -1295,24 +1300,8 @@ sub GetItemsInfo { } # my stack procedures - my $stackstatus = $dbh->prepare( - 'SELECT authorised_value - FROM marc_subfield_structure - WHERE kohafield="items.stack" - ' - ); - $stackstatus->execute; - - ($authorised_valuecode) = $stackstatus->fetchrow; - if ($authorised_valuecode) { - $stackstatus = $dbh->prepare( - "SELECT lib - FROM authorised_values - WHERE category=? - AND authorised_value=? - " - ); - $stackstatus->execute( $authorised_valuecode, $data->{stack} ); + if ($authorised_valuecode_stack) { + $stackstatus->execute( $authorised_valuecode_stack, $data->{stack} ); my ($lib) = $stackstatus->fetchrow; $data->{stack} = $lib; } 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 8cba98b..515c1e4 100755 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt @@ -188,6 +188,101 @@ function renderPagination(index, total, ul, highlIndex) }//renderPagination [% END %] +var branch_info = [% branch_info_json %]; +function branch_popup(branchcode) { + if (branchcode == "") return; + + var b_i = branch_info[branchcode]; + if (!b_i) return; + + var info = "" + b_i.branchname + "
" + + b_i.branchaddress1; + if (b_i.branchaddress2) info = info + "
" + b_i.branchaddress2; + if (b_i.branchaddress3) info = info + "
" + b_i.branchaddress3; + if (b_i.branchnotes) info = info + "

" + b_i.branchnotes; + if (b_i.branchphone) info = info + "

Tel. " + b_i.branchphone; + if (b_i.branchemail) info = info + "

" + b_i.branchemail + ""; + if (b_i.branchurl) info = info + "

" + b_i.branchurl + ""; + + popup(info); +} + +// create the popup box - remember to give it some width in your styling +document.write(''); + +var minMargin = 15; // set how much minimal space there should be to + // between the popup and everything else (borders, mouse) +var ready = false; // we are ready when the mouse event is set up +var default_width = '200px'; // will be set to width from css in document.ready + +var follow_mouse = true; +jQuery(document).ready(function(){ + $('#pup').hide(); + default_width = $('#pup').width(); + // set dynamic coords when the mouse moves + $(document).mousemove(function(e){ + if (!follow_mouse) return; + + var x,y; + + x = $(document).scrollLeft() + e.clientX; + y = $(document).scrollTop() + e.clientY; + + x += 10; // important: if the popup is where the mouse is, the hoverOver/hoverOut events flicker + + var x_y = nudge(x,y); // avoids edge overflow + + // remember: the popup is still hidden + $('#pup').css('top', x_y[1] + 'px'); + $('#pup').css('left', x_y[0] + 'px'); + }); + + ready = true; +}); + +// avoid edge overflow +function nudge(x,y) +{ + var win = $(window); + + // When the mouse is too far on the right, put window to the left + var xtreme = $(document).scrollLeft() + win.width() - $('#pup').width() - minMargin; + if(x > xtreme) { + x -= $('#pup').width() + 2 * minMargin; + } + x = max(x, 0); + + // When the mouse is too far down, move window up + if((y + $('#pup').height()) > (win.height() + $(document).scrollTop())) { + y -= $('#pup').height() + minMargin; + } + + return [ x, y ]; +} + +function popup(msg, width) +{ + if (typeof width === "undefined"){ + width = default_width; + } + // write content and display + if (ready) { + $('#pup').width(width).html(msg).show(); + follow_mouse = false; + } + // make sure popup goes away on mouse out + $(this).mouseout(function(e){ + follow_mouse = true; + $('#pup').hide().width(default_width); + }); +} + + +function max(a,b){ + if (a>b) return a; + else return b; +} + YAHOO.util.Event.onContentReady("furtherm", function () { $("#furtherm").css("display","block").css("visibility","hidden"); @@ -206,6 +301,20 @@ YAHOO.util.Event.onContentReady("furtherm", function () { //]]> + [% IF ( opacuserlogin ) %][% IF ( loggedinusername ) %][% IF ( TagsEnabled ) %][% END %][% END %][% END %] @@ -586,7 +695,18 @@ YAHOO.util.Event.onContentReady("furtherm", function () { [% FOREACH ITEM_RESULT IN ITEM_RESULTS %] [% IF ( item_level_itypes ) %][% UNLESS ( noItemTypeImages ) %][% IF ( ITEM_RESULT.imageurl ) %][% ITEM_RESULT.description %][% END %][% END %] [% ITEM_RESULT.description %][% END %] - [% UNLESS ( singleBranchMode ) %][% IF ( ITEM_RESULT.branchurl ) %][% ITEM_RESULT.branchname %][% ELSE %][% ITEM_RESULT.branchname %][% END %][% END %] [% ITEM_RESULT.location_description %] + + + [% UNLESS ( singleBranchMode ) %] + [% IF ( ITEM_RESULT.branchurl ) %] + [% ITEM_RESULT.branchname %] + [% ELSE %] + [% ITEM_RESULT.branchname %] + [% END %] + [% END %] + + [% ITEM_RESULT.location_description %] + [% IF ( itemdata_ccode ) %][% ITEM_RESULT.ccode %][% END %] [% IF ( ITEM_RESULT.itemcallnumber ) %] [% ITEM_RESULT.itemcallnumber %][% IF ( OPACShelfBrowser ) %] (Browse Shelf)[% END %][% END %] [% IF ( itemdata_enumchron ) %][% ITEM_RESULT.enumchron %][% END %] diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index e2fb069..a0fecbc 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -465,6 +465,7 @@ my $biblio_authorised_value_images = C4::Items::get_authorised_value_images( C4: my $norequests = 1; my $branches = GetBranches(); my %itemfields; +my %itembranches; for my $itm (@items) { $norequests = 0 if ( (not $itm->{'wthdrawn'} ) @@ -516,6 +517,13 @@ for my $itm (@items) { $itm->{transfertfrom} = $branches->{$transfertfrom}{branchname}; $itm->{transfertto} = $branches->{$transfertto}{branchname}; } + + if (my $branchcode = $itm->{branchcode}) { + $itembranches{$branchcode} ||= { map { $_ => $itm->{$_} } + qw( branchname branchaddress1 branchaddress2 branchaddress3 + branchphone branchemail branchnotes branchurl ) + }; + } } ## get notes and subjects from MARC record @@ -535,7 +543,7 @@ my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($bib MARCAUTHORS => $marcauthorsarray, MARCSERIES => $marcseriesarray, MARCURLS => $marcurlsarray, - MARCHOSTS => $marchostsarray, + MARCHOSTS => $marchostsarray, norequests => $norequests, RequestOnOpac => C4::Context->preference("RequestOnOpac"), itemdata_ccode => $itemfields{ccode}, @@ -633,8 +641,10 @@ if(C4::Context->preference("ISBD")) { $template->param(ISBD => 1); } +use JSON; $template->param( ITEM_RESULTS => \@items, + branch_info_json => encode_json(\%itembranches), subscriptionsnumber => $subscriptionsnumber, biblionumber => $biblionumber, subscriptions => \@subs, -- 1.6.5