3 # Copyright 2011 KohaAloha, NZ
4 # Parts copyright 2011, Catalyst IT, NZ.
6 # This file is part of Koha.
8 # Koha is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
13 # Koha is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with Koha; if not, see <http://www.gnu.org/licenses>.
31 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
45 C4::Ratings - a module to manage user ratings of Koha biblios
49 Ratings.pm provides simple functionality for a user to 'rate' a biblio, and to retrieve a biblio's rating info
51 the 4 subroutines allow a user to add, delete modify and retrieve rating info for a biblio.
53 The rating can be from 1 to 5 stars, (5 stars being the highest rating)
57 Get a rating for a bib
58 my $rating_hashref = GetRating( $biblionumber, undef );
59 my $rating_hashref = GetRating( $biblionumber, $borrowernumber );
61 Mod a rating for a bib
62 my $rating_hashref = ModRating( $biblionumber, $borrowernumber, $rating_value );
64 Delete a rating for a bib
65 my $rating_hashref = DelRating( $biblionumber, $borrowernumber );
68 All subroutines in Ratings.pm return a hashref which contain 4 keys
70 for example, after executing this statement below...
72 my $rating_hashref = GetRating ( $biblionumber, $borrowernumber ) ;
74 $rating_hashref now contains a hashref that looks like this...
78 rating_avg_int => '2.3',
79 rating_total => '432',
83 they 4 keys returned in the hashref are...
85 rating_avg: average rating of a biblio
86 rating_avg_int: average rating of a biblio, rounded to 1dp
87 rating_total: total number of ratings of a biblio
88 rating_value: logged-in user's rating of a biblio
92 Please use bugs.koha-community.org for tracking bugs.
94 =head1 SOURCE AVAILABILITY
96 The source is available from the koha-community.org git server
97 L<http://git.koha-community.org>
101 Original code: Mason James <mtj@kohaaloha.com>
105 Copyright (c) 2011 Mason James <mtj@kohaaloha.com>
109 C4::Ratings is free software. You can redistribute it and/or
110 modify it under the same terms as Koha itself.
114 Mason James <mtj@kohaaloha.com>
115 Koha Dev Team <http://koha-community.org>
120 GetRating($biblionumber, [$borrowernumber])
122 Get a rating for a bib
123 my $rating_hashref = GetRating( $biblionumber, undef );
124 my $rating_hashref = GetRating( $biblionumber, $borrowernumber );
126 This returns the rating for the supplied biblionumber. It will also return
127 the rating that the supplied user gave to the provided biblio. If a particular
128 value can't be supplied, '0' is returned for that value.
132 A hashref containing:
136 =item * rating_avg - average rating of a biblio
138 =item * rating_avg_int - average rating of a biblio, rounded to 1dp
140 =item * rating_total - total number of ratings of a biblio
142 =item * rating_value - logged-in user's rating of a biblio
149 my ( $biblionumber, $borrowernumber ) = @_;
151 my $ratings = Koha::Database->new()->schema->resultset('Rating')->search(
153 biblionumber => $biblionumber,
157 my $sum = $ratings->get_column('rating_value')->sum();
158 my $total = $ratings->count();
160 my ( $avg, $avg_int ) = 0;
162 if ( $sum and $total ) {
163 eval { $avg = $sum / $total };
166 $avg_int = sprintf( "%.1f", $avg );
167 $avg = sprintf( "%.0f", $avg );
170 $rating_hash{rating_total} = $total || 0;
171 $rating_hash{rating_avg} = $avg || 0;
172 $rating_hash{rating_avg_int} = $avg_int || 0;
174 if ($borrowernumber) {
175 my $rating = Koha::Database->new()->schema->resultset('Rating')->find(
177 biblionumber => $biblionumber,
178 borrowernumber => $borrowernumber,
181 return unless $rating;
182 $rating_hash{'rating_value'} = $rating->rating_value();
185 $rating_hash{rating_value} = undef;
188 return \%rating_hash;
193 my $rating_hashref = ModRating( $biblionumber, $borrowernumber, $rating_value );
195 Mod a rating for a bib
200 my ( $biblionumber, $borrowernumber, $rating_value ) = @_;
202 my $rating = Koha::Database->new()->schema->resultset('Rating')->find(
204 borrowernumber => $borrowernumber,
205 biblionumber => $biblionumber
209 $rating->update( { rating_value => $rating_value } );
211 return GetRating( $biblionumber, $borrowernumber );
216 my $rating_hashref = DelRating( $biblionumber, $borrowernumber );
218 Delete a rating for a bib
223 my ( $biblionumber, $borrowernumber ) = @_;
225 my $rating = Koha::Database->new()->schema->resultset('Rating')->find(
227 borrowernumber => $borrowernumber,
228 biblionumber => $biblionumber
232 $rating->delete() if $rating;
234 return GetRating($biblionumber);