1 package Koha
::SharedContent
;
3 # Copyright 2016 BibLibre Morgane Alonso
5 # This file is part of Koha.
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 3 of the License, or (at your option) any later
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.
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.
31 Koha::SharedContent - Set of methods for querying Mana KB server
35 Package for accessing shared content via Mana KB. Methods here are intended
36 to build and process queries for requesting from Mana KB server.
40 =head2 process_request
42 Koha::SharedContent::process_request($request);
44 Send a request to Mana KB server. URL is defined in koha-conf.xml in mana_config
45 tag. $request parameter must be a HTTP::Request object. See build_request method.
50 my $mana_request = shift;
52 $mana_request->content_type('application/json');
53 my $userAgent = LWP
::UserAgent
->new;
54 if ( $mana_request->method eq "POST" ){
56 if ($mana_request->content) {$content = from_json
( $mana_request->content )};
57 $content->{securitytoken
} = C4
::Context
->preference("ManaToken");
58 $mana_request->content( to_json
($content) );
61 my $response = $userAgent->request($mana_request);
63 eval { $result = from_json
( $response->decoded_content, { utf8
=> 1} ); };
64 $result->{code
} = $response->code;
68 if ($response->is_error){
69 $result->{msg
} = "An error occurred, mana server returned: " . $response->message;
74 =head2 increment_entity_value
76 Koha::SharedContent::increment_entity_value($entity_type, $mana_entity_id, $field);
78 Increment by 1 the field $field of a Mana entity. I.e, this is used to count the number
79 of Koha instances using a specific entity.
83 sub increment_entity_value
{
84 return process_request
(build_request
('increment', @_));
89 my $result = Koha::SharedContent::send_entity($language, $borrowernumber, $mana_entity_id, $entity_type);
91 Share a Koha entity (i.e subscription or report) to Mana KB.
96 my ($lang, $loggedinuser, $resourceid, $resourcetype) = @_;
98 my $content = prepare_entity_data
($lang, $loggedinuser, $resourceid, $resourcetype);
100 my $result = process_request
(build_request
('post', $resourcetype, $content));
102 if ( $result and ($result->{code
} eq "200" or $result->{code
} eq "201") ) {
103 my $packages = "Koha::".ucfirst($resourcetype)."s";
104 my $resource = $packages->find($resourceid);
105 eval { $resource->set( { mana_id
=> $result->{id
} } )->store };
110 =head3 comment_entity
112 my $result = Koha::SharedContent::comment_entity($resource_id, $resource_type, $comment);
114 Send a comment about a Mana entity.
119 my ($resourceid, $resourcetype, $comment) = @_;
121 my $result = process_request
(build_request
('post', 'resource_comment',
122 { resource_id
=> $resourceid, resource_type
=> $resourcetype, message
=> $comment }));
127 =head2 prepare_entity_data
129 $data = prepare_entity_data($language, $borrowernumber, $mana_entity_id, $entity_type);
131 Prepare Koha entity data to be sent to Mana KB.
135 sub prepare_entity_data
{
136 my ($lang, $loggedinuser, $ressourceid, $ressourcetype) = @_;
137 $lang ||= C4
::Context
->preference('language');
140 if ( $loggedinuser ne 0 ) {
141 my $borrower = Koha
::Patrons
->find($loggedinuser);
142 $mana_email = $borrower->first_valid_email_address
143 || Koha
::Libraries
->find( C4
::Context
->userenv->{'branch'} )->branchemail
145 $mana_email = C4
::Context
->preference('KohaAdminEmailAddress')
146 if ( ( not defined($mana_email) ) or ( $mana_email eq '' ) );
148 my %versions = C4
::Context
::get_versions
();
152 kohaversion
=> $versions{'kohaVersion'},
153 exportemail
=> $mana_email
156 my $ressource_mana_info;
157 my $packages = "Koha::".ucfirst($ressourcetype)."s";
158 my $package = "Koha::".ucfirst($ressourcetype);
159 $ressource_mana_info = $package->get_sharable_info($ressourceid);
160 $ressource_mana_info = { %$ressource_mana_info, %$mana_info };
162 return $ressource_mana_info;
165 =head2 get_entity_by_id
167 my $entity = Koha::SharedContent::get_entity_by_id($entity_type, $mana_entity_id, [{usecomments => 1}]);
169 Retrieve a Mana entity to be imported into Koha. Add {usecomments => 1} to tell Mana to
170 embed all user reviews.
174 sub get_entity_by_id
{
175 return process_request
(build_request
('getwithid', @_));
178 =head2 search_entities
180 my $result = Koha::SharedContent::search_entities( $entity_type, $search_params );
181 my $entities = $result->{data};
183 Search entities on ManaKB.
187 sub search_entities
{
188 return process_request
(build_request
('get', @_));
193 $request = build_request($mana_method, [$param1, $param2, ...]);
195 Create a HTTP::Request object to be passed to process_request.
201 my $resource = shift;
202 my $mana_url = get_sharing_url
();
204 if ( $type eq 'get' ) {
207 map { defined $params->{$_} && $params->{$_} ne '' ?
$_ . "=" . $params->{$_} : () }
209 my $url = "$mana_url/$resource.json?$params";
210 return HTTP
::Request
->new( GET
=> $url );
213 if ( $type eq 'getwithid' ) {
217 map { defined $params->{$_} && $params->{$_} ne '' ?
$_ . "=" . $params->{$_} : () }
220 my $url = "$mana_url/$resource/$id.json?$params";
221 return HTTP
::Request
->new( GET
=> $url );
224 if ( $type eq 'post' ) {
227 my $url = "$mana_url/$resource.json";
228 my $request = HTTP
::Request
->new( POST
=> $url );
230 my $json = to_json
( $content, { utf8
=> 1 } );
231 $request->content($json);
236 if ( $type eq 'increment' ) {
242 $param->{step
} = $step || 1;
244 $param->{resource
} = $resource;
246 map { defined $param->{$_} ?
$_ . "=" . $param->{$_} : () }
248 my $url = "$mana_url/$resource/$id.json/increment/$field?$param";
249 my $request = HTTP
::Request
->new( POST
=> $url );
254 =head2 get_sharing_url
256 my $mana_url = get_sharing_url();
258 Get the Mana KB server URL set in koha config file.
262 sub get_sharing_url
{
263 return C4
::Context
->config('mana_config');