Merge remote branch 'kc/new/biblibre_reports' into kcmaster
[koha.git] / C4 / Search / PazPar2.pm
1 package C4::Search::PazPar2;
2
3 # Copyright (C) 2007 LibLime
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 use strict;
21 #use warnings; FIXME - Bug 2505
22
23 use LWP::UserAgent;
24 use URI;
25 use URI::QueryParam;
26 use XML::Simple;
27
28 =head1 NAME
29
30 C4::Search::PazPar2 - implement client for PazPar2
31
32 [Note: may rename to Net::PazPar2 or somesuch if decide to put on CPAN separate
33  from Koha]
34
35 =head1 SYNOPSIS
36
37 =cut
38
39 =head1 DESCRIPTION
40
41 =cut
42
43 sub new {
44     my $class = shift;
45     my $endpoint = shift;
46
47     my $self = {};
48     $self->{'endpoint'} = $endpoint;
49     $self->{'session'} = '';
50     $self->{'ua'} = LWP::UserAgent->new;
51     bless $self, $class;
52
53     return $self;
54 }
55
56 sub init {
57     my $self = shift;
58
59     my $uri = URI->new($self->{'endpoint'});
60     $uri->query_param(command => 'init');
61     my $response = $self->{'ua'}->get($uri);
62     if ($response->is_success) {
63         my $message = XMLin($response->content);
64         if ($message->{'status'} eq 'OK') {
65             $self->{'session'} = $message->{'session'};
66         }
67     } else {
68         warn $response->status_line;
69     }
70 }
71
72 sub search {
73     my $self = shift;
74     my $query = shift;
75
76     my $uri = URI->new($self->{'endpoint'});
77     $uri->query_param(command => 'search');
78     $uri->query_param(session => $self->{'session'});
79     $uri->query_param(query => $query);
80     my $response = $self->{'ua'}->get($uri);
81     if ($response->is_success) {
82         #print $response->content, "\n";
83     } else {
84         warn $response->status_line;
85     }
86
87 }
88
89 sub stat {
90     my $self = shift;
91
92     my $uri = URI->new($self->{'endpoint'});
93     $uri->query_param(command => 'stat');
94     $uri->query_param(session => $self->{'session'});
95     my $response = $self->{'ua'}->get($uri);
96     if ($response->is_success) {
97         return $response->content;
98     } else {
99         warn $response->status_line;
100         return;
101     }
102 }
103
104 sub show {
105     my $self = shift;
106     my $start = shift;
107     my $count = shift;
108     my $sort = shift;
109
110     my $uri = URI->new($self->{'endpoint'});
111     $uri->query_param(command => 'show');
112     $uri->query_param(start => $start);
113     $uri->query_param(num => $count);
114     $uri->query_param(block => 1);
115     $uri->query_param(session => $self->{'session'});
116     $uri->query_param(sort => $sort);
117     my $response = $self->{'ua'}->get($uri);
118     if ($response->is_success) {
119         return $response->content;
120     } else {
121         warn $response->status_line;
122         return;
123     }
124     
125 }
126
127 sub record {
128     my $self = shift;
129     my $id = shift;
130     my $offset = shift;
131
132     my $uri = URI->new($self->{'endpoint'});
133     $uri->query_param(command => 'record');
134     $uri->query_param(id => $id);
135     $uri->query_param(offset => $offset);
136     $uri->query_param(binary => 1);
137     $uri->query_param(session => $self->{'session'});
138     my $response = $self->{'ua'}->get($uri);
139     if ($response->is_success) {
140         return $response->content;
141     } else {
142         warn $response->status_line;
143         return;
144     }
145 }
146
147 sub termlist {
148     my $self = shift;
149     my $name = shift;
150
151     my $uri = URI->new($self->{'endpoint'});
152     $uri->query_param(command => 'termlist');
153     $uri->query_param(name => $name);
154     $uri->query_param(session => $self->{'session'});
155     my $response = $self->{'ua'}->get($uri);
156     if ($response->is_success) {
157         return $response->content;
158     } else {
159         warn $response->status_line;
160         return;
161     }
162
163 }
164
165 1;
166
167 =head1 AUTHOR
168
169 Koha Development Team <http://koha-community.org/>
170
171 Galen Charlton <galen.charlton@liblime.com>
172
173 =cut