From 91cddc5c574b4ac3cd66abc0c8c00b991bce49e0 Mon Sep 17 00:00:00 2001 From: Jonathan Druart <jonathan.druart@biblibre.com> Date: Wed, 31 Oct 2012 11:10:44 +0100 Subject: [PATCH] Bug 8992: Interfacing with the Idref webservice On the detail page (in the opac), if the biblio comes from the Sudoc, you must have a link (on the right of the author link) which open a popup with informations about this author (publications by role). To test: 1/ Modify your zebra conf in order to index the ppn: ccl.properties: Identifier-standard 1=1007 4=6 ident Identifier-standard record.abs: (biblios) melm 009 Identifier-standard:w,Number-standard:n 2/ Switch on the Idref system preference 3/ Simulate a SUDOC record: Fill a 7..$3 field with a ppn (032581270 for example). Fill the 009 field with an integer 4/ Go to the opac detail page of this notice. You should see the IDREF link. If you click on it, a popup displays a loading icon and after a few seconds (depending of the productivity of the authority :)), a list of roles. For each role, a table displays all his corresponding publications. 5/ On the right, you have 2 links: 1 for a koha search for this result and 1 for a SUDOC link --- C4/Biblio.pm | 6 ++ installer/data/mysql/updatedatabase.pl | 16 ++++ .../en/modules/admin/preferences/web_services.pref | 7 ++ koha-tmpl/opac-tmpl/prog/en/css/datatables.css | 42 ++++----- koha-tmpl/opac-tmpl/prog/en/css/opac.css | 41 +++++++++ koha-tmpl/opac-tmpl/prog/en/includes/greybox.inc | 7 ++ koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt | 10 ++- koha-tmpl/opac-tmpl/prog/en/modules/opac-idref.tt | 66 ++++++++++++++ koha-tmpl/opac-tmpl/prog/images/first-disabled.png | Bin 0 -> 843 bytes koha-tmpl/opac-tmpl/prog/images/first.png | Bin 0 -> 720 bytes koha-tmpl/opac-tmpl/prog/images/last-disabled.png | Bin 0 -> 826 bytes koha-tmpl/opac-tmpl/prog/images/last.png | Bin 0 -> 737 bytes koha-tmpl/opac-tmpl/prog/images/next-disabled.png | Bin 0 -> 866 bytes koha-tmpl/opac-tmpl/prog/images/next.png | Bin 0 -> 736 bytes koha-tmpl/opac-tmpl/prog/images/prev-disabled.png | Bin 0 -> 862 bytes koha-tmpl/opac-tmpl/prog/images/prev.png | Bin 0 -> 745 bytes opac/opac-detail.pl | 13 +++ opac/opac-idref.pl | 91 ++++++++++++++++++++ 18 files changed, 277 insertions(+), 22 deletions(-) create mode 100644 koha-tmpl/opac-tmpl/prog/en/includes/greybox.inc create mode 100644 koha-tmpl/opac-tmpl/prog/en/modules/opac-idref.tt create mode 100644 koha-tmpl/opac-tmpl/prog/images/first-disabled.png create mode 100644 koha-tmpl/opac-tmpl/prog/images/first.png create mode 100644 koha-tmpl/opac-tmpl/prog/images/last-disabled.png create mode 100644 koha-tmpl/opac-tmpl/prog/images/last.png create mode 100644 koha-tmpl/opac-tmpl/prog/images/next-disabled.png create mode 100644 koha-tmpl/opac-tmpl/prog/images/next.png create mode 100644 koha-tmpl/opac-tmpl/prog/images/prev-disabled.png create mode 100644 koha-tmpl/opac-tmpl/prog/images/prev.png create mode 100755 opac/opac-idref.pl diff --git a/C4/Biblio.pm b/C4/Biblio.pm index afb60d3..6a8d68c 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1834,9 +1834,14 @@ sub GetMarcAuthors { } # other subfields + my $unimarc3; for my $authors_subfield (@subfields) { next if ( $authors_subfield->[0] eq '9' ); + # unimarc3 contains the $3 of the author for UNIMARC. + # For french academic libraries, it's the "ppn", and it's required for idref webservice + $unimarc3 = $authors_subfield->[1] if $marcflavour eq 'UNIMARC' and $authors_subfield->[0] =~ /3/; + # don't load unimarc subfields 3, 5 next if ( $marcflavour eq 'UNIMARC' and ( $authors_subfield->[0] =~ /3|5/ ) ); @@ -1872,6 +1877,7 @@ sub GetMarcAuthors { push @marcauthors, { MARCAUTHOR_SUBFIELDS_LOOP => \@subfields_loop, authoritylink => $subfield9, + unimarc3 => $unimarc3 }; } return \@marcauthors; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 7ab48ee..8e9509b 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -6020,6 +6020,22 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { SetVersion ($DBversion); } + + + +$DBversion = "3.09.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do(qq{ + INSERT INTO systempreferences (variable,value,explanation,options,type) + VALUES('IDREF','0','Disable/enable the IDREF webservice from the OPAC detail page.',NULL,'YesNo') + }); + print "Upgrade to $DBversion done (Add system preference IDREF))\n"; + SetVersion($DBversion); +} + + + + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/web_services.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/web_services.pref index 7244675..a3ad67f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/web_services.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/web_services.pref @@ -44,3 +44,10 @@ Web services: - pref: SvcMaxReportRows class: integer - rows of a report requested via the reports web service. + IDREF: + - + - pref: IDREF + choices: + yes: Enable + no: Disable + - the IDREF webservice from the opac detail page diff --git a/koha-tmpl/opac-tmpl/prog/en/css/datatables.css b/koha-tmpl/opac-tmpl/prog/en/css/datatables.css index e7b11bd..2a80b5a 100644 --- a/koha-tmpl/opac-tmpl/prog/en/css/datatables.css +++ b/koha-tmpl/opac-tmpl/prog/en/css/datatables.css @@ -3,23 +3,23 @@ input.search_init { } .sorting_asc { padding-right: 19px; - background: url("../../img/asc.gif") no-repeat scroll right center #EEEEEE; + background: url("../../images/asc.gif") no-repeat scroll right center #EEEEEE; } .sorting_desc { padding-right: 19px; - background: url("../../img/desc.gif") no-repeat scroll right center #EEEEEE; + background: url("../../images/desc.gif") no-repeat scroll right center #EEEEEE; } .sorting { padding-right: 19px; - background: url("../../img/ascdesc.gif") no-repeat scroll right center #EEEEEE; + background: url("../../images/ascdesc.gif") no-repeat scroll right center #EEEEEE; } .sorting_asc_disabled { padding-right: 19px; - background: url("../../img/datatables/sort_asc_disabled.png") no-repeat scroll right center #EEEEEE; + background: url("../../images/datatables/sort_asc_disabled.png") no-repeat scroll right center #EEEEEE; } .sorting_desc_disabled { padding-right: 19px; - background: url("../../img/datatables/sort_desc_disabled.png") no-repeat scroll right center #EEEEEE; + background: url("../../images/datatables/sort_desc_disabled.png") no-repeat scroll right center #EEEEEE; } .sorting_disabled { padding-right: 19px; @@ -83,25 +83,25 @@ div.dataTables_paginate { color : #0000CC; } .paging_full_numbers span.paginate_button.first { - background-image : url('../../img/first.png'); + background-image : url('../../images/first.png'); background-repeat: no-repeat; background-position : 2px center; padding-left : 2em; } .paging_full_numbers span.paginate_button.previous { - background-image : url('../../img/prev.png'); + background-image : url('../../images/prev.png'); background-repeat: no-repeat; background-position : 2px center; padding-left : 2em; } .paging_full_numbers span.paginate_button.next { - background-image : url('../../img/next.png'); + background-image : url('../../images/next.png'); background-repeat: no-repeat; background-position : right center; padding-right : 2em; } .paging_full_numbers span.paginate_button.last { - background-image : url('../../img/last.png'); + background-image : url('../../images/last.png'); background-repeat: no-repeat; background-position : right center; border-right : 1px solid #686868; @@ -147,31 +147,31 @@ div.dataTables_paginate.paging_four_button { width: 16px; } .paginate_disabled_first { - background-image: url("../../img/first-disabled.png"); + background-image: url("../../images/first-disabled.png"); } .paginate_enabled_first { - background-image: url("../../img/first.png"); + background-image: url("../../images/first.png"); cursor: pointer; } .paginate_disabled_previous { - background-image: url("../../img/prev-disabled.png"); + background-image: url("../../images/prev-disabled.png"); } .paginate_enabled_previous { - background-image: url("../../img/prev.png"); + background-image: url("../../images/prev.png"); cursor: pointer; } .paginate_disabled_next { - background-image: url("../../img/next-disabled.png"); + background-image: url("../../images/next-disabled.png"); } .paginate_enabled_next { - background-image: url("../../img/next.png"); + background-image: url("../../images/next.png"); cursor: pointer; } .paginate_disabled_last { - background-image: url("../../img/last-disabled.png"); + background-image: url("../../images/last-disabled.png"); } .paginate_enabled_last { - background-image: url("../../img/last.png"); + background-image: url("../../images/last.png"); cursor: pointer; } @@ -248,16 +248,16 @@ table.display thead th { width: 19px; } .paginate_disabled_previous { - background-image: url("../../img/datatables/back_disabled.jpg"); + background-image: url("../../images/datatables/back_disabled.jpg"); } .paginate_enabled_previous { - background-image: url("../../img/datatables/back_enabled.jpg"); + background-image: url("../../images/datatables/back_enabled.jpg"); } .paginate_disabled_next { - background-image: url("../../img/datatables/forward_disabled.jpg"); + background-image: url("../../images/datatables/forward_disabled.jpg"); } .paginate_enabled_next { - background-image: url("../../img/datatables/forward_enabled.jpg"); + background-image: url("../../images/datatables/forward_enabled.jpg"); } .spacer { clear: both; diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css index 7ab95e0..5fdcc07 100644 --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css +++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css @@ -2820,3 +2820,44 @@ body#opac-main #opacmainuserblockmobile { .tagweight9 { font-size: 30px; } + +div.pager { + background-color : #E8E8E8; + border : 1px solid #BCBCBC; + -moz-border-radius : 5px; + display : inline-block; + font-size : 85%; + padding : .3em .5em .3em .5em; + margin : .4em 0; +} +div.pager img { + vertical-align : middle; +} +div.pager img.last { + padding-right: 5px; +} +div.pager input.pagedisplay { + border : 0; + background-color : transparent; + font-weight: bold; + text-align : center; +} +a.localimage img { + border : 1px solid #0000CC; + margin : 0 .5em; + padding : .3em; +} +div.pager p { + margin: 0; +} + + +/* IDREF */ +#idref h2.role { + background-color: #DDDEEE; + cursor: pointer; +} + +#idref table { + margin: 0; +} diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/greybox.inc b/koha-tmpl/opac-tmpl/prog/en/includes/greybox.inc new file mode 100644 index 0000000..b955b44 --- /dev/null +++ b/koha-tmpl/opac-tmpl/prog/en/includes/greybox.inc @@ -0,0 +1,7 @@ +<script type="text/javascript"> + var GB_ROOT_DIR = "[% themelang %]/lib/greybox/"; +</script> +<script type="text/javascript" src="[% themelang %]/lib/greybox/AJS.js"></script> +<script type="text/javascript" src="[% themelang %]/lib/greybox/AJS_fx.js"></script> +<script type="text/javascript" src="[% themelang %]/lib/greybox/gb_scripts.js"></script> +<link href="[% themelang %]/lib/greybox/gb_styles.css" rel="stylesheet" type="text/css" /> 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 1d0523a..c942b2b 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt @@ -11,6 +11,7 @@ [% END %] [% IF ( OpacStarRatings != 'disable' ) %]<script type="text/javascript" src="/opac-tmpl/prog/en/lib/jquery/plugins/jquery.rating.js"></script> <link rel="stylesheet" type="text/css" href="/opac-tmpl/prog/en/css/jquery.rating.css" />[% END %] +[% INCLUDE greybox.inc %] [% IF ( OpacHighlightedWords ) %]<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.highlight-3.js"></script>[% END %] <script type="text/JavaScript" language="JavaScript"> @@ -345,7 +346,11 @@ YAHOO.util.Event.onContentReady("furtherm", function () { [% XSLTBloc %] [% ELSE %] <h1 class="title">[% title |html %][% IF ( subtitle ) %] <span class="subtitle">[% FOREACH subtitl IN subtitle %][% subtitl.subfield |html %] [% END %]</span>[% END %]</h1> - [% IF ( author ) %]<h5 class="author">by <a href="/cgi-bin/koha/opac-search.pl?q=au:[% author |url %]">[% author |html %]</a></h5>[% END %] + [% IF ( author ) %] + <h5 class="author"> + by <a href="/cgi-bin/koha/opac-search.pl?q=au:[% author |url %]">[% author |html %]</a> + </h5> + [% END %] <span class="results_summary">[% UNLESS ( item_level_itypes ) %] [ @@ -369,6 +374,9 @@ YAHOO.util.Event.onContentReady("furtherm", function () { [% IF (MARCAUTHOR.authoritylink) %] <a class='authlink' href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=[% MARCAUTHOR.authoritylink %]"><img style="vertical-align:middle" height="15" width="15" src="/opac-tmpl/prog/images/filefind.png"></a> [% END %] + [% IF ( IDREF and MARCAUTHOR.unimarc3) %] + <a href="/cgi-bin/koha/opac-idref.pl?unimarc3=[% MARCAUTHOR.unimarc3 %]" title="IDREF" rel="gb_page_center[600,500]">IDREF</a> + [% END %] [% UNLESS ( loop.last ) %]|[% END %] [% END %] </span> diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-idref.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-idref.tt new file mode 100644 index 0000000..6adbbc5 --- /dev/null +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-idref.tt @@ -0,0 +1,66 @@ +[% INCLUDE 'doc-head-open.inc' %] +[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › Your search IDREF for ppn [% unimarc3 %] +[% INCLUDE 'doc-head-close.inc' %] + <link rel="stylesheet" href="[% themelang %]/css/datatables.css" /> + <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script> + [% INCLUDE 'datatables-strings.inc' %] + <script type="text/javascript" src="[% themelang %]/js/datatables.js"></script> + <script type="text/javascript"> + $(document).ready(function (){ + $("table").dataTable($.extend(true, {}, dataTablesDefaults, { + "oLanguage": { + "sSearch": _("Search all columns:") + }, + 'bFilter': false, + 'sPaginationType': 'four_button', + 'aoColumnDefs': [ + { 'aTargets': [-1, -2], 'bSortable': false } + ], + 'aLengthMenu': [[10, 25, 50, 100, 250, 500, 1000, -1], [10, 25, 50, 100, 250, 500, 1000, _("All")]], + })); + + $(".role").click(function(){ + var docs_node = $(this).parent().find("div.docs"); + if ( $(docs_node).is(":visible") ) { + $(".docs").hide(); + } else { + $(".docs").hide(); + docs_node.show(); + } + }); + $(".docs").hide(); + }); + </script> +</head> +<body> +<div id="idref"> + [% IF error %] + This ppn is not found on the idref service. + [% ELSE %] + [% FOREACH role IN content %] + <div> + <h2 class="role" title="Click to expand this role">[% role.role_name %] ([% role.count %])</h2> + <div class="docs"> + <table> + <thead> + <th>Citation</th> + <th>Koha</th> + <th>Sudoc</th> + </thead> + <tbody> + [% FOREACH doc IN role.docs %] + <tr> + <td>[% doc.citation %]</td> + <td><a href="/cgi-bin/koha/opac-search.pl?q=kw,phr=[% doc.ppn %]" target="_blank">Koha</a></td> + <td><a href="http://www.sudoc.fr/[% doc.ppn %]" target="_blank">Sudoc</a></td> + </tr> + [% END %] + </tbody> + </table> + </div> + </div> + [% END %] + [% END %] +</div> +[% INCLUDE 'opac-bottom.inc' %] + diff --git a/koha-tmpl/opac-tmpl/prog/images/first-disabled.png b/koha-tmpl/opac-tmpl/prog/images/first-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf2106cf24f9e6536907061ea9be1945552c635 GIT binary patch literal 843 zcmV-R1GM~!P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!-AP12RCwBA z{Qv(y12ULAd9oBEBcn7>Tog$2L*+jL@oOM{nwy*Z3|T!u05QT00BYm`YS0i96El~T zl+@zo<uzbqW77c1fB*jd#-~r8F1&pC^4gm>Z%zW0-vAo)1*8ukfWQWTGy~a&y1Ke9 z;^N{FKtt5HxVRWNI5-$U@;`q3VEFv`GsBZ7Pj0<>^=iePJ9qW~Ejyo+lk){2fLOq$ z0BzRM(Q%QGkSJ18QsM#H%<${iFNUvQzk&?_@qq?2@bU4f{r&s52#6UTJb3UOsPzm$ z05J;-3rhhdU4R;sfmo8Aot@#`yLSw~fB$Cq_wOGVgV^WJonrvXGYAO@u>oBn3G~*} zBS(%r1qdJ}pefQoo3%tmMb$u>K~9}CX%fSdB}?D|b?w?UhBIf*FuZ>Knt_v(lR-g2 zK@CW20bM5z5I`UUM0t3447j<u!G1*sAm@WL@7lEsF81x)HwFO#0g#*l(CeZA0mK4| zDppoj4Up|$zI*{|g5je_k20J-eHyMA<Q-7B0KEZ{*8mFf0|XEgaykI9fd;}20I`t) z$N*TZfWigD1_&S~prVgJfg2#FfkGRm2&CD}%#5L=qy)tRQ1pTV85m19KzacJ2;_p- zA3uJ)08A+000Joz5fOpM0LaNOLqL3xnx{{nf(*C-N}T`!1PX(v&!0cP2DJSaFfi4C zam^4PAI|_yfnXYBI7kc>c)-NOaPi{BTR_9Efs!^r05Nadw(awwLx=t|Gc*4NMw2lx zU9brX3c_8$#Kgn^Ox6sbSOVF+W5<p!Krhb*YTgG-&Nl%92$m9W0A0ZevT@IzJrU~a z>S~~r$Is8t07`Yh^w03<(Ic?UfByVg!NS6_2b3Q`dI16mB{Kmj4WL)dfwUG-qXCEy z)BtkH4IsV%)OZc(B5-B`<pYpDfB<5|mYqSV6O>4Ra{SO}{RpJN*%_!2B|8HI7y#v+ VkuA4ftNj1~002ovPDHLkV1ks|VH^Me literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/images/first.png b/koha-tmpl/opac-tmpl/prog/images/first.png new file mode 100644 index 0000000000000000000000000000000000000000..6f11fcb086b1bfa51bc5070ca45fac0a988c624c GIT binary patch literal 720 zcmV;>0x$iEP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Vo5|nR5;6} zlS^+BQ547f0sI7f4p_Q$!@|Vwx--6F!p6i!Q&	anYDUW`HQBO=|;{NKLAi)JR+D z2+}kbI#7m(KwIcg7;qRE7@!>ITpohD^Ctgf=H~o==W*|y0)VM;-LQd9lR=YF)677| z!Jh8V_;KSkP5LJrlF9S+j0qkk+2iPm7~x{#{$ZSbvzK9J-4zqYVC)27V7~717pTZd znit9v$VwYJS3ROyLxp^?0)a!0U)oMn7(0Xv0eUoZ@gH)t)d5_J+J%bT22oSJ)g^nf zqQZVCEIYOm2+<P&_Jw6*=Ak)XX+fdd0->rB;rB+cID%~N1o%g50=A<=fWgC_GFUb) z%s4&22M=t~3G+RMgR^pz#KbcfK)ZtsdJ$j@d{400GnQJeAz+sPu#&f$`6hKh0J%~V zq(%oWs|qZyzh}{lfSK@dRK#JSxg@DDP3^*cD+kP0j(npKkSQvp3bk_uYtD5My##O+ z;RpcDs9R5c#9;NFP5{z^GN_^r%PX%(0OOZ~7+aNFP*XZk{E2|i#E`vI`YjCrsfz|V zndEsDXoqvug2CxaF}ZvhdOaY6!{9q~KO+jO!o5Vk0qt%NcD}`cvVR;6QTNzYGWq-= zUX+?7V0e7VLW2m6_>T!vT6W8eRsOC$*+0hNMWWwDsLfA)S*X-WV71;M{bCz<v<Oa~ zSHSFW$#eA9?~62kl^2{LYSq2T2g51I2@;tJ_8iNK;PppffnMTgEg$~A%Hxme;j64^ z{-u|BZd+k#t6f~QFyb?_gPk*bnA=SJ-;e2kp7SrPKM4}2E#B7v0000<MNUMnLSTZm Co<+<6 literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/images/last-disabled.png b/koha-tmpl/opac-tmpl/prog/images/last-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e3815b5f55add82f1db9114a095d1bd776742650 GIT binary patch literal 826 zcmV-A1I7G_P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!%t=H+RCwBA z{Qv(y12UL0Wr`F~Oq!9AQ54AK2Z;gsAA!_sAby&goBIq|JwO04!VCav<N>lZ#KpzU zrKF^^czAdW*x1-KK=R+ef4}kh^XCgMUc9*W_U+q~K(QM@gT8?D0R#}(fXS05^8nd~ zy1Ke9Km#Jg#KhFNxVRWNI5<GIGyM4Rg8^s&!{f(~Z@qr~dc~bPclH3)p9dKN5I`(Y zmuP@AOG-)>DJm-R0BvUY_3IbImoH#T7(jfW!3=zSd}^02T>`0Lc<|uCcc9c6fB<3^ z78aHQO1da1DJ283BuMeelP4MY`T4=N|NHk3Y}mJN-#`X10M)a-di6>Y=&GkjjvRRk z5I{`8z>=1bkkA4-8>IQ;$Bzs<ckX1ke*HQFEPN(Sn#8bd*)p&<I5{~P<mKhn*xA{& zK!FVqKrBE)6ck_}KmYvs6Ko?$BghaCTSG$wC6+)g5fl^zF%5uN6d-_DfG*%?Wo6X> znh5tZ%;p0J4lulX_YQ6-hz40AARqwZgG}ZJ2p}e84ajU}W@d)pzkf3@F)@L~VB#Pe z6eb`!5C8}uCQu>)2FMMN(||4k+rq-a0#;B|RK#FnVuE5gC=5WZ0=nb|(Dfey0tgg{ zuYmz~0Tg&3Ntg{KB_&}0f(#TD6@|M36jo23JONp70hBrc0tl22p1yqf@)|G<Zt?Q+ zs(}<27Z<}dgEYm)#)4e{ipFQpo-tg!c<~lc?ixrhKmajs+qUiVp+krM1O56Nn97WS zA<PB}WuVKz27qW#00UzRta-<d9bbT6o(<Hz510~f0t65X)NeO{lAIuod-m*!P*+!1 zgQh%&zkmNSym|8ml#IbP1Nkd}0lWuj@C}e&fB=GLCTM=p0464LpqLiWc2GQPfD8cQ z8$huOKv!M^YDURS00G2EC_97XL7@!_Fd!QvI|Bq501}dz-y{)%cmMzZ07*qoM6N<$ Ef;ulvi2wiq literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/images/last.png b/koha-tmpl/opac-tmpl/prog/images/last.png new file mode 100644 index 0000000000000000000000000000000000000000..72079357614b4254b163a5cac766093d1f99bbe7 GIT binary patch literal 737 zcmV<70v`Q|P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!b4f%&R5;6} zlS^+BQ547f0sI7f4p_Q$!%lo8-5FmoVPoQ=sVgVd*hOQ6%m7hLo7M&@3DuxNYNSOv z1!)=!1<Di<Xo2z?5T*>za-4I45g$8m^55K?|L?r+odSTVNnJ96LXt|7TGI4L>d~Fz z&-h8>1xd<>>vgSt=Y;X^$Jv9(As-4y`R%<J`^J-EW^7e0#$fDkfRXv4)tje6he@tb zse>SPp?5wYYBW2LD^|g`7v>f>k`%^{A!C3N&EeR0q1EmI9<kGhs?Y^q(pkGt?gX&| z+kv29b{-)_NdVXvmW`RmX2)&`ia$C~s122`wINq+%aDytA9sJXfbA#{pt7^a43>?j zT<^fuCti3LD9UEdoCoe2BcvKUvD7KhHa~-21gL%Aj#%s&OGVR_$6iSuSoaqp%eN%J z76DWmU8pyEP^yWrwDz7wF9N262N52Jg#ie_jHv7Leqfv#&`?`&#}Fpfom5)T>7B!> zWsOHK0qlpu1b_k9E1Iu8-65F`u4B0T$PKrdAs|z3NmX=VY5BDbP=DEtvNfR%4Y5Zu z5VMpOD@qkb3GkT!aIm<Uc(w+#*&?@~vbYmWCRc&M07wQ6<tFB2K_o)+O*%~4>-Gn* z`85iZ>7zVE#RF?u>-GjXzTT2IfyTsX6XN-%yiPPHr0n_^E8Hzpe7MH(L!#e?D90zS zP^g}fN@{04Qcb!flJ%iEo~?q;Y!zl{=dXt}`IHwd0cyqO;QYY^WD0dM6YM#f=E3C+ z!2-R=&FDY;{gfv^)4f+|?c7Tj^US!+(gqX%T+i_HIx{<~voklC*uOv1|9t14Z-oeY T<X^Ql00000NkvXXu0mjfFR4u9 literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/images/next-disabled.png b/koha-tmpl/opac-tmpl/prog/images/next-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..58b03409bfbe94b6eca9d45b3442245664d4b754 GIT binary patch literal 866 zcmV-o1D*VdP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!^hrcPRCwBA z{Qv(y12UL0Wr`F~Od7}(1!8_iMn(o8|09t78pwW{lauodSv^1iF~SU(Jb5w?kkXKl zkT3^gEgl{o12#4`4UpXT@855H`t<3-%a<>&y?y)kBv8+d+}zwRAUS{l0viC*3^d(P zM@Pp+TwFXtR8&-ro12?~gM)(sY5>ERFJBlQKYo1c)vH%4?%cVv2dMr$&^2EG0*D3b z5)F`Mpv^@}N=iIHn;Cxn`o-||>sPQOD=RC5n3xy?FE6j!-@kv0fSBR_{rlg6QfB}H zh*?-zSPE#X3s7USva+%yNb|F25O0DM{`>cj;p4}T48MQ>X5i!FV-OM&VgtHD66mU@ zhYufq3J^d{K&MDcN=j-0ZBPSg2Ktp@&YU@5C&R$(*|Wi}dGqEC11BdZgMxyB8qj-M zAiV$q!~_fjQJ{YfKz{!D^C#F=P`J#UI~S}8<N^?wH*X%8|Lxm120=kVkdOgLFF*h> zfuaf&+Ax2E0LTCkUbt`}!;c?7z-*8~ixw?n`0(Ka12Bd_Vj4gf@B;)8$O~{=Kr}2` znVFfv1_A>PEDqy?G=peRn1Iv*1Q5szAAz>q067ih3YcP$g5u(0a1?@K;m@Bx3?(Hc z3`|T+48XJiGUNu(o{s<l1oFabP$B^Z9w>l7rh+t=mX?D33*v)p1Q`YjSS~IuhNn-T zg2XO>^a2DBv!|ygDBwhZSOpk3!oX-^FfuX%YX-RngdH6n!J1`cWWbt%(RT}|ehbim zQvd<PylvaI&j$}4{10^6@7J$i8v_kt1BEguY(Oyr@(w#YJ2>P)=>w?#3((86f$H}G zlk-i000O5(pyC@ZUcBH0h4`L5dm_};)zyHBi-Dh?A8ZKFU{Eq<xOnm6Enrxz0EWpP zP<{aE1qdK`W&-9y9#GT(1JWEwYXO~Z07~MZzym1;8gv2ZnrlFel9>Pkh!I<M22#?X sL;{LusQgDD`!$gL6sQp;I|Bq506C7S@8*npX8-^I07*qoM6N<$g03K4OaK4? literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/images/next.png b/koha-tmpl/opac-tmpl/prog/images/next.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2f9d4e4a81857f509d85bbe46936c99709cd6f GIT binary patch literal 736 zcmV<60w4W}P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!a!Eu%R5;6} zQ%i3WQ55bE@E7nqVCm8gyH;z`orxP0HYP5by0Me`=%O(~W-L)mo7M&@37XW}rlwS! z4j`tnP@oJCf$}I61{?;4$54)QE)Vgs^CsWo-kk3{=R4=z2>_TF$F*h9sL-j<tC$%; zKX}vp89z?EqC$KBt!Qw#GmQ5*#+`&tg+MSY93DluH?AZzYp)nE24jB{7?7{p*gO?D zP4I=X2$I|Z<+4XmYqTL(tbpez$gk`rD2yG73<b1E4o1F9&6Waq<aQS-QU?ST^;Va> zNpc$weSXQZ6Gag%5kOy9HfA1@<L3=1{%Av?+DA0kfLx_D64^WO@OL)~Xh(wrItO>g zVA*&|VjFHeVhIV!`DzQM7F-a@NRTNvNlYYp4z%6NAQuJno^MeOJ!7dzy8e(=;etr6 z4q2h83Vb36o=G4!6u79$u)6u4LoN!;_)kItHmh9g5CP1HxVh+sSiS*Mlqx_uVfwL~ z+}p|}Y*;r1<Pw47K#&Mv`REnN(@)$aD~e9eJBh8y`F(O18y#3(dp#1+fBqWgs!|JT zvO;_kGSw$1i}Hw!32-v8Y!zsWb!0(jb;g-=t_-~%K)Tc<<svyzkO?Lq?31ZrV>{g* z9DE4_W&SW~qUN5hWN@-RUJ#q3Ngxr&iJp;+4aEd;HM{A>I)B?7>yL4`Nc6h^we^ve z3YC6fwXTqAQWr8=Cd?emR={YnNptkhuSFVP<t3|+TDNcUUVj|Y1(EawJ%>{Q?6Lt^ zqF4A?)Arx1JpP&Pyh<4sUhXnam)AJ@xmkE-VuVGbg_|=vm|INb-=FD!zVlDxJ_uiv SXLQ>D0000<MNUMnLSTa5n>yhD literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/images/prev-disabled.png b/koha-tmpl/opac-tmpl/prog/images/prev-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..225c9a9ab8b4827ea16bde80eeb48b562e9564ad GIT binary patch literal 862 zcmV-k1EKthP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!@JU2LRCwBA z{Qv(y12UL0Wr`F~Oq!9AQ54AKhsu8h@?QhlPjho~pCPLU2p~q70YHsBK(>a2goHT| zYw_^#7_hOiX@KN^{P=O>^XJbOUc7j5?aiAvCxOau01f&A(gzSgU<06<4Rv*OUBt!3 zBSb|-)wsF288|pNz=nVS{+$760K=0fPj0<>^=if4yLa~h)t?6$0uVqfAO#?sL7IU! z7bz(z@c?aR`2G7g!`H80!3MCfurL4(X5i!FQ~Ue(ZxIkP+`oVSJ5cHjKmaj|h=@o5 zC0&3TlYv;0ot>TG<HwH--@bhVYX&L)^XCs(Oi)meK}bl5?d8jtl0Sd`e0t=_k*5Fw z!~_a3ke@-$25J8E=@Z!YIdkTKTn5HK#SHW3&u0MopMjH;lR-g2K@I3VEs$P-0Ad1# zHZL!)0m#oFg}?v<g$V;t9Iko7gb8py$Ymgx0NDmW2Z{m&5ECe>SXo&$K(>PdYudDF zV5k54_mAP%uU}xzFqeS512O<;AvoNChVlah5XcK)#ULA)n3x#2xVXRyL41&NK`sLY zB1jE1z`+KCya{3h1Q5szAA!!i0Sa-TOBj-qlNo?%0BiurJDHi8U_QujkOolHzI*o$ z<h2{11O^a5ATPZB@ZrM+P$+|J1lg37lmxdG6a$HgiEuv1MZoj`a>WHu>I4WNW=~H~ zkdsA#rmF}D2nYkC37lvQ3=F^;VE)(B(_@g9mS%YR^eMyP!-sDH^=tu(p8^OV=55=y zeLi&P(0`y4f4_eH+87kiz$k?WB*-hEKm!`i@a)+$hV9$8e*p&eY@qsmz?66sAb?n) zdE&<N=g&Dov9Nph?g({tbv01R<LBoGdjV)L!{f(~87^MD2(ozv&^w@{3<?7VfB=GL zrpc2h^8jtr07{wzxmrNmLGi2sG62ZF0aSMZXzMi~J_%HJBPS;ZoS6Uuh!IzI1|<?u oJVT=noSlKpr$CJ;*%=_f02&gb@5#$_MF0Q*07*qoM6N<$f_qtQg8%>k literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/images/prev.png b/koha-tmpl/opac-tmpl/prog/images/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..15d1584bdbb2c26a9fc4c8269aa54615a58a4657 GIT binary patch literal 745 zcmV<F0v7#=P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!dr3q=R5;6} zlTB|DQ51&z1N;U24p_Q$L!$8`YEc&^ZcNyixM*4vBdIZs#aaksiDKHcHc&~>1hlor z)=Ec^h7>5J3?Bj(D6|X+0|UcQj&m*_Qg!D|-c07sd7pF6opXl(U}#WhW<VxMAxSAo z)s?clC;Kyg(0EFceC$nGZTq@UxqVT3XLpYc1VikmH%!0YNKhlzq8ei`_5`47K5cPk zHG#c2lPi>g<C`EJw}~n>0W$d_xV%ATb~UcS*dC+@kfS*m{?64KBH-eM78JQAu#&2c z7TM!?0X98;&a@msh@1ehFDx4~_smCS0rm@Z$dv@5Y^ec>Jl}_`uDh5!i#cpZh5&_) z{y|~cgJzZ1d%`?CxkdJIg%by0u(~PqB0%Zdj?maMmYO=M!=;B#0>~5_5YO>&?w*4H z@LRbi!eNPrxg`gUUIeK8JG(3%R{o~|7so$K+8_qZe0Iz($pKd%d&oOhA&AGYXkKE` zO8~w=kN^smCS05H!-WT*2mpbXAJK6B{s*`+;U?8|s%XO8{Hs1d`DH6am$(L0coEX9 z)c+Ho)WS9-4?6~g4NrO@c2FaKCYmmR!DQ~YpfIn+s8pr^?KThtmU&}3Kr*7R^y^Rk z5Xsb_*=oc3w-9KI@B4=+yK6a8uQ@#oTkf1PnlL+NjAm=Zh)+xqld|idFEF=^(avw| z4U*w)Kx6;t<Z{I-2`p7bQVoJ|m@soRT?C!U!i^f1e-F~&C~M6g&4Sg=xcxCm<;vtt zu;);cg%xK2w1!z`ME~yZQ69WZw_hgJ<1bdIshN4&@XW|g>nV0ZXQD@SHtHr7{`Y12 bpX>Y!%!CO%>C8GV00000NkvXXu0mjfJYGkQ literal 0 HcmV?d00001 diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index d9ecdfa..1beabb1 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -950,6 +950,19 @@ if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ $template->param('OPACSearchForTitleIn' => $search_for_title); } +#IDREF +if ( C4::Context->preference("IDREF") ) { + # If the record comes from the SUDOC + if ( $record->field('009') ) { + my $unimarc3 = $record->field("009")->data; + if ( $unimarc3 =~ /^\d+$/ ) { + $template->param( + IDREF => 1, + ); + } + } +} + # We try to select the best default tab to show, according to what # the user wants, and what's available for display my $opac_serial_default = C4::Context->preference('opacSerialDefaultTab'); diff --git a/opac/opac-idref.pl b/opac/opac-idref.pl new file mode 100755 index 0000000..8980a41 --- /dev/null +++ b/opac/opac-idref.pl @@ -0,0 +1,91 @@ +#!/usr/bin/perl + +use Modern::Perl; + +use CGI; +use LWP::UserAgent; +use HTTP::Request::Common; +use JSON; +use Encode; + +use C4::Auth; +use C4::Context; +use C4::Search; +use C4::Output; + +my $cgi = new CGI; +my ( $template, $borrowernumber, $cookie ) = get_template_and_user( + { + template_name => "opac-idref.tt", + query => $cgi, + type => "opac", + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), + flagsrequired => { borrow => 1 }, + } +); + +my $ua = LWP::UserAgent->new; + +my $base = 'http://www.idref.fr/services/biblio/'; +my $unimarc3 = $cgi->param('unimarc3'); + +my $request = HTTP::Request->new( + 'GET', + $base . $unimarc3 . ".json", +); +$request->protocol('HTTP/1.1'); +my $response = $ua->request($request); +if ( not $response->is_success) { + $template->param(error => $base.$unimarc3.'.json'); + output_html_with_http_headers $cgi, $cookie, $template->output; + exit; +} + +my $content = Encode::decode("utf8", $response->content); +my $json = from_json( $content ); +my $r; +my $role_name; +my @unimarc3; +my @results = ref $json->{sudoc}{result} eq "ARRAY" + ? @{ $json->{sudoc}{result} } + : ($json->{sudoc}{result}); + +for my $role_node ( @results ) { + while ( my ( $k, $v ) = each %$role_node ) { + next unless $k eq "role"; + my $role_name; + my $count = 0; + my $role_data = {}; + my @nodes = ref $v eq "ARRAY" + ? @$v + : ($v); + for my $node ( @nodes ) { + while ( ( $k, $v ) = each %$node ) { + given ( $k ) { + when ( "roleName" ) { + $role_name = $v; + $role_data->{role_name} = $role_name; + } + when ( "count" ) { + $role_data->{count} = $v; + } + when ( "doc" ) { + push @{ $role_data->{docs} }, $v; + } + default { + # unimarcCode and marc21Code + } + } + } + } + push @$r, $role_data; + } +} + +$template->param( + content => $r, + unimarc3 => $unimarc3, +); + +output_html_with_http_headers $cgi, $cookie, $template->output; + -- 1.7.10.4