From e3cf3c1daa1c80bba9dcaff8d1e540d12e61f186 Mon Sep 17 00:00:00 2001 From: morgane alonso <morgane.alonso@biblibre.com> Date: Thu, 25 Aug 2016 10:06:12 +0000 Subject: [PATCH] Bug 17047 ability to search subscription model on mana - add a class SharedContent.pm to communicate with mana server - add a link in serials-menu.inc to serials_search.pl to open a mana-subscription research form - modify the research form in serials-search.tt to show the right fields for mana - create datatable in mana-subscription-search-result.inc to show results from a research on mana - modify serials-search.pl to manage research on mana --- Koha/SharedContent.pm | 56 ++++++++++ .../includes/mana-subscription-search-result.inc | 40 +++++++ .../prog/en/includes/serials-menu.inc | 3 + .../prog/en/modules/serials/serials-home.tt | 1 + .../prog/en/modules/serials/serials-search.tt | 49 +++++++-- serials/serials-search.pl | 121 +++++++++++++++------ 6 files changed, 227 insertions(+), 43 deletions(-) create mode 100644 Koha/SharedContent.pm create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/mana-subscription-search-result.inc diff --git a/Koha/SharedContent.pm b/Koha/SharedContent.pm new file mode 100644 index 0000000..ced0e6c --- /dev/null +++ b/Koha/SharedContent.pm @@ -0,0 +1,56 @@ +package Koha::SharedContent; + +# Copyright 2016 BibLibre Morgane Alonso +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; +use JSON; +use HTTP::Request; +use LWP::UserAgent; + +our $MANA_IP = "http://10.25.159.107:5000"; + +sub manaRequest { + my $mana_request = shift; + my $result; + + $mana_request->content_type('application/json'); + my $userAgent = LWP::UserAgent->new; + my $response = $userAgent->request($mana_request); + + if ( $response->code ne "204" ) { + $result = from_json( $response->decoded_content ); + } + $result->{code} = $response->code; + + return $result if ( $response->code =~ /^2..$/ ); +} + +sub manaGetRequest { + my $resource = shift; + my $parameters = shift; + + $parameters = join '&', + map { defined $parameters->{$_} ? $_ . "=" . $parameters->{$_} : () } + keys %$parameters; + my $url = "$MANA_IP/$resource.json?$parameters"; + my $request = HTTP::Request->new( GET => $url ); + + return manaRequest($request); +} + +1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/mana-subscription-search-result.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/mana-subscription-search-result.inc new file mode 100644 index 0000000..acaadec --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/mana-subscription-search-result.inc @@ -0,0 +1,40 @@ +[% USE KohaDates %] +<table id="mana_results_datatable"> + <thead> + <tr> + <th>ISSN</th> + <th class="anti-the">Title</th> + <th>Frequency</th> + <th>Numbering pattern</th> + <th class="NoSort">Number of users</th> + <th class="title-string">Last Import</th> + <th class="NoSort">Actions</th> + </tr> + </thead> + <tfoot> + <tr> + <td><input type="text" class="dt-filter" data-column_num="0" placeholder="Search ISSN" /></td> + <td><input type="text" class="dt-filter" data-column_num="1" placeholder="Search title" /></td> + <td><input type="text" class="dt-filter" data-column_num="2" placeholder="Search frequency" /></td> + <td><input type="text" class="dt-filter" data-column_num="3" placeholder="Search numbering pattern" /></td> + <td></td> + <td><input type="text" class="dt-filter" data-column_num="5" placeholder="Search last import" /></td> + <td></td> + </tr> + </tfoot> + <tbody> + [% FOREACH subscription IN subscriptions %] + [% UNLESS subscription.cannotdisplay %] + <tr id="row[% subscription.subscriptionid %]"> + <td>[% IF ( subscription.issn ) %][% subscription.issn %][% END %]</td> + <td>[% subscription.title %]</a></td> + <td>[% IF ( subscription.sfdescription ) %][% subscription.sfdescription %][% END %]</td> + <td>[% IF ( subscription.numberingmethod ) %][% subscription.numberingmethod %][% END %]</td> + <td>[% IF ( subscription.nbofusers ) %][% subscription.nbofusers %][% END %]</td> + <td><span title="[% subscription.lastimport %]">[% subscription.lastimport | $KohaDates %]</span></td> + <td><a style="cursor:pointer" onclick="mana_use([% subscription.id %])"> <i class="fa fa-inbox"></i> Use</a></td> + </tr> + [% END %] + [% END %] + </tbody> +</table> diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc index 21dff3a..ee66508 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc @@ -31,4 +31,7 @@ </a> </li> <li><a href="/cgi-bin/koha/serials/add_fields.pl">Add subscription fields</a></li> + [% IF Koha.Preference('Mana') %] + <li><a href="/cgi-bin/koha/serials/serials-search.pl?mana=1">Search on Mana</a></li> + [% END %] </ul> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt index eaafc94..f587b28 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt @@ -1,5 +1,6 @@ [% INCLUDE 'doc-head-open.inc' %] [% USE KohaDates %] +[% USE Koha %] <title>Koha › Serials [% biblionumber %]</title> [% INCLUDE 'doc-head-close.inc' %] </head> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt index 1728fb0..6131ed1 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt @@ -1,6 +1,7 @@ [% USE Branches %] [% INCLUDE 'doc-head-open.inc' %] [% USE KohaDates %] +[% USE Koha %] [% USE AuthorisedValues %] <title>Koha › Serials [% biblionumber %]</title> [% INCLUDE 'doc-head-close.inc' %] @@ -10,6 +11,14 @@ <script type="text/javascript"> //<![CDATA[ $(document).ready(function() { + var manarlt = $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults, { + "sPaginationType": "four_button", + "aoColumnDefs": [ + { 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] }, + { "sType": "title-string", "aTargets" : [ "title-string" ] }, + { 'sType': "anti-the", 'aTargets' : [ 'anti-the'] } + ] + } ) ); var osrlt = $("#osrlt").dataTable($.extend(true, {}, dataTablesDefaults, { "sPaginationType": "four_button", "aoColumnDefs": [ @@ -28,6 +37,7 @@ ] } ) ); + manarlt.fnAddFilters("dt-filter", 750); osrlt.fnAddFilters("dt-filter", 750); csrlt.fnAddFilters("dt-filter", 750); @@ -35,6 +45,17 @@ $("#reopensub").click(function(){ return confirm(_("Are you sure you want to reopen this subscription?")); }); + [% IF ( mana ) %] + $("label[for=callnumber], input#callnumber").hide(); + $("label[for=bookseller], input#bookseller").hide(); + $("label[for=branch], select#branch").hide(); + $("label[for=to], input#to").hide(); + $(".ui-datepicker-trigger").hide(); + $("label[for=location], select#location_filter").hide(); + [% FOR field IN additional_fields_for_subscription %] + $("label[for=additional_field_[% field.id %]], input#additional_field_[% field.id %]").hide(); + [% END %] + [% END %] }); //]]> </script> @@ -123,6 +144,7 @@ [% END %] </ol> <input type="hidden" name="searched" value="1" /> + [% IF ( mana ) %]<input type="hidden" name="mana" value="1" />[% END %] <fieldset class="action"> <input type="submit" value="Search" /> </fieldset> @@ -130,13 +152,22 @@ </form> </div> [% END %] - [% IF ( done_searched ) %] - [% IF ( total ) %] - <div id="serialstabs" class="toptabs" style="clear:both;"> - <ul class="ui-tabs-nav"> - <li><a href="#opened">Open ([% openedsubscriptions.size || 0 %])</a></li> - <li><a href="#closed">Closed ([% closedsubscriptions.size || 0 %])</a></li> - </ul> + [% IF ( done_searched ) %] + [% IF ( total ) %] + <div id="serialstabs" class="toptabs" style="clear:both;"> + <ul class="ui-tabs-nav"> + [% IF mana %] + <li><a href="#mana">Mana ([% total || 0 %])</a></li> + [% ELSE %] + <li><a href="#opened">Open ([% openedsubscriptions.size || 0 %])</a></li> + <li><a href="#closed">Closed ([% closedsubscriptions.size || 0 %])</a></li> + [% END %] + </ul> + [% IF mana %] + <div id="mana"> + [% INCLUDE 'mana-subscription-search-result.inc' %] + </div> + [% ELSE %] <div id="opened"> [% IF openedsubscriptions %] <table id="osrlt"> @@ -354,6 +385,7 @@ </div> [% END %] </div> + [% END %] </div> [% ELSE %] <div class="dialog message"> @@ -367,6 +399,7 @@ <div class="yui-b"> [% INCLUDE 'serials-menu.inc' %] [% IF ( done_searched ) %] + [% UNLESS ( mana ) %] <div id="advsearch"> <form action="/cgi-bin/koha/serials/serials-search.pl" method="get"> <fieldset class="brief"> @@ -439,10 +472,12 @@ <fieldset class="action"> <input type="submit" value="Search" /> </fieldset> + </div> </fieldset> </form> [% END %] + [% END %] </div> </div> [% INCLUDE 'intranet-bottom.inc' %] diff --git a/serials/serials-search.pl b/serials/serials-search.pl index 30bf7db..bd52cd7 100755 --- a/serials/serials-search.pl +++ b/serials/serials-search.pl @@ -38,6 +38,7 @@ use C4::Serials; use Koha::AdditionalField; use Koha::DateUtils; +use Koha::SharedContent; my $query = new CGI; my $title = $query->param('title_filter') || ''; @@ -52,6 +53,7 @@ my $location = $query->param('location_filter') || ''; my $expiration_date = $query->param('expiration_date_filter') || ''; my $routing = $query->param('routing') || C4::Context->preference("RoutingSerials"); my $searched = $query->param('searched') || 0; +my $mana = $query->param('mana') || 0; my @subscriptionids = $query->multi_param('subscriptionid'); my $op = $query->param('op'); @@ -95,7 +97,17 @@ for my $field ( @$additional_fields ) { my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef; my @subscriptions; if ($searched){ - @subscriptions = SearchSubscriptions( + if ($mana) { + my $result = Koha::SharedContent::manaGetRequest("subscription",{ + title => $title, + issn => $ISSN, + ean => $EAN, + publisher => $publisher + }); + @subscriptions = @{ $result->{data} }; + } + else { + @subscriptions = SearchSubscriptions( { biblionumber => $biblionumber, title => $title, @@ -108,46 +120,83 @@ if ($searched){ additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}{value}, authorised_value_category => $additional_field_filters->{$_}{authorised_value_category} } } keys %$additional_field_filters ], location => $location, expiration_date => $expiration_date_dt, - } - ); + }); + } } -# to toggle between create or edit routing list options -if ($routing) { - for my $subscription ( @subscriptions) { - $subscription->{routingedit} = check_routing( $subscription->{subscriptionid} ); - } +if ($mana) { + $template->param( + subscriptions => \@subscriptions, + total => scalar @subscriptions, + title_filter => $title, + ISSN_filter => $ISSN, + EAN_filter => $EAN, + callnumber_filter => $callnumber, + publisher_filter => $publisher, + bookseller_filter => $bookseller, + branch_filter => $branch, + location_filter => $location, + expiration_date_filter => $expiration_date_dt, + done_searched => $searched, + routing => $routing, + additional_field_filters => $additional_field_filters, + additional_fields_for_subscription => $additional_fields, + marcflavour => (uc(C4::Context->preference("marcflavour"))), + mana => $mana + ); } +else +{ + # to toggle between create or edit routing list options + if ($routing) { + for my $subscription ( @subscriptions) { + $subscription->{routingedit} = check_routing( $subscription->{subscriptionid} ); + } + } -my (@openedsubscriptions, @closedsubscriptions); -for my $sub ( @subscriptions ) { - unless ( $sub->{closed} ) { - push @openedsubscriptions, $sub - unless $sub->{cannotdisplay}; - } else { - push @closedsubscriptions, $sub - unless $sub->{cannotdisplay}; + my (@openedsubscriptions, @closedsubscriptions); + for my $sub ( @subscriptions ) { + unless ( $sub->{closed} ) { + push @openedsubscriptions, $sub + unless $sub->{cannotdisplay}; + } else { + push @closedsubscriptions, $sub + unless $sub->{cannotdisplay}; + } } -} -$template->param( - openedsubscriptions => \@openedsubscriptions, - closedsubscriptions => \@closedsubscriptions, - total => @openedsubscriptions + @closedsubscriptions, - title_filter => $title, - ISSN_filter => $ISSN, - EAN_filter => $EAN, - callnumber_filter => $callnumber, - publisher_filter => $publisher, - bookseller_filter => $bookseller, - branch_filter => $branch, - location_filter => $location, - expiration_date_filter => $expiration_date_dt, - done_searched => $searched, - routing => $routing, - additional_field_filters => $additional_field_filters, - additional_fields_for_subscription => $additional_fields, - marcflavour => (uc(C4::Context->preference("marcflavour"))) -); + my $branches = GetBranches(); + my @branches_loop; + foreach (sort keys %$branches){ + my $selected = 0; + $selected = 1 if( defined $branch and $branch eq $_ ); + push @branches_loop, { + branchcode => $_, + branchname => $branches->{$_}->{'branchname'}, + selected => $selected, + }; + } + $template->param( + openedsubscriptions => \@openedsubscriptions, + closedsubscriptions => \@closedsubscriptions, + total => @openedsubscriptions + @closedsubscriptions, + title_filter => $title, + ISSN_filter => $ISSN, + EAN_filter => $EAN, + callnumber_filter => $callnumber, + publisher_filter => $publisher, + bookseller_filter => $bookseller, + branch_filter => $branch, + location_filter => $location, + expiration_date_filter => $expiration_date_dt, + branches_loop => \@branches_loop, + done_searched => $searched, + routing => $routing, + additional_field_filters => $additional_field_filters, + additional_fields_for_subscription => $additional_fields, + marcflavour => (uc(C4::Context->preference("marcflavour"))), + mana => $mana + ); +} output_html_with_http_headers $query, $cookie, $template->output; -- 2.7.4