projects
/
koha-ffzg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Bug 31162: (follow-up) Fix Mocks/Zebra.pm
[koha-ffzg.git]
/
C4
/
Tags.pm
diff --git
a/C4/Tags.pm
b/C4/Tags.pm
index
d74dbf8
..
e01244f
100644
(file)
--- a/
C4/Tags.pm
+++ b/
C4/Tags.pm
@@
-5,75
+5,67
@@
package C4::Tags;
#
# This file is part of Koha.
#
#
# 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 2 of the License, or (at your option) any late
r
-# version.
+# 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, o
r
+#
(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.
+# 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.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
use strict;
use warnings;
use strict;
use warnings;
-use Carp;
+use Carp
qw( carp )
;
use Exporter;
use C4::Context;
use Exporter;
use C4::Context;
-use
C4::Debug
;
+use
Module::Load::Conditional qw( check_install )
;
#use Data::Dumper;
#use Data::Dumper;
+use constant TAG_FIELDS => qw(tag_id borrowernumber biblionumber term language date_created);
+use constant TAG_SELECT => "SELECT " . join(',', TAG_FIELDS) . "\n FROM tags_all\n";
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-use vars qw($ext_dict $select_all @fields);
-
+our (@ISA, @EXPORT_OK);
BEGIN {
BEGIN {
- $VERSION = 3.07.00.049;
- @ISA = qw(Exporter);
+ @ISA = qw(Exporter);
@EXPORT_OK = qw(
@EXPORT_OK = qw(
- &get_tag &get_tags &get_tag_rows
- &add_tags &add_tag
- &delete_tag_row_by_id
- &remove_tag
- &delete_tag_rows_by_ids
- &get_approval_rows
- &blacklist
- &whitelist
- &is_approved
- &approval_counts
- &get_count_by_tag_status
- &get_filters
+ get_tag get_tags get_tag_rows
+ add_tags
+ add_tag
+ add_tag_approval
+ add_tag_index
+ delete_tag_row_by_id
+ remove_tag
+ delete_tag_rows_by_ids
+ get_approval_rows
+ blacklist
+ whitelist
+ is_approved
+ approval_counts
+ get_count_by_tag_status
+ get_filters
stratify_tags
);
stratify_tags
);
- # %EXPORT_TAGS = ();
- $ext_dict = C4::Context->preference('TagsExternalDictionary');
- if ($debug) {
- require Data::Dumper;
- import Data::Dumper qw(:DEFAULT);
- print STDERR __PACKAGE__ . " external dictionary = " . ($ext_dict||'none') . "\n";
- }
+ my $ext_dict = C4::Context->preference('TagsExternalDictionary');
+ if ( $ext_dict && ! check_install( module => 'Lingua::Ispell' ) ) {
+ warn "Ignoring TagsExternalDictionary, because Lingua::Ispell is not installed.";
+ $ext_dict = q{};
+ }
if ($ext_dict) {
require Lingua::Ispell;
if ($ext_dict) {
require Lingua::Ispell;
- import Lingua::Ispell qw(spellcheck add_word_lc save_dictionary);
+ import Lingua::Ispell qw(spellcheck add_word_lc);
+ $Lingua::Ispell::path = $ext_dict;
}
}
=head1 C4::Tags.pm - Support for user tagging of biblios.
}
}
=head1 C4::Tags.pm - Support for user tagging of biblios.
-More verose debugging messages are sent in the presence of non-zero $ENV{"DEBUG"}.
-
=cut
=cut
-INIT {
- $ext_dict and $Lingua::Ispell::path = $ext_dict;
- $debug and print STDERR "\$Lingua::Ispell::path = $Lingua::Ispell::path\n";
- @fields = qw(tag_id borrowernumber biblionumber term language date_created);
- $select_all = "SELECT " . join(',',@fields) . "\n FROM tags_all\n";
-}
-
sub get_filters {
my $query = "SELECT * FROM tags_filters ";
my ($sth);
sub get_filters {
my $query = "SELECT * FROM tags_filters ";
my ($sth);
@@
-100,7
+92,6
@@
sub approval_counts {
$sth->execute;
my $result = $sth->fetchrow_hashref();
$result->{approved_total} = $result->{approved_count} + $result->{rejected_count} + $result->{unapproved_count};
$sth->execute;
my $result = $sth->fetchrow_hashref();
$result->{approved_total} = $result->{approved_count} + $result->{rejected_count} + $result->{unapproved_count};
- $debug and warn "counts returned: " . Dumper $result;
return $result;
}
return $result;
}
@@
-134,9
+125,6
@@
sub remove_tag {
($tag_id == $row->{tag_id}) or return 0;
my $tags = get_tags({term=>$row->{term}, biblionumber=>$row->{biblionumber}});
my $index = shift(@$tags);
($tag_id == $row->{tag_id}) or return 0;
my $tags = get_tags({term=>$row->{term}, biblionumber=>$row->{biblionumber}});
my $index = shift(@$tags);
- $debug and print STDERR
- sprintf "remove_tag: tag_id=>%s, biblionumber=>%s, weight=>%s, weight_total=>%s\n",
- $row->{tag_id}, $row->{biblionumber}, $index->{weight}, $index->{weight_total};
if ($index->{weight} <= 1) {
delete_tag_index($row->{term},$row->{biblionumber});
} else {
if ($index->{weight} <= 1) {
delete_tag_index($row->{term},$row->{biblionumber});
} else {
@@
-181,18
+169,17
@@
sub delete_tag_rows_by_ids {
sub get_tag_rows {
my $hash = shift || {};
sub get_tag_rows {
my $hash = shift || {};
-
my @ok_fields = @fields
;
+
my @ok_fields = TAG_FIELDS
;
push @ok_fields, 'limit'; # push the limit! :)
my $wheres;
my $limit = "";
my @exe_args = ();
foreach my $key (keys %$hash) {
push @ok_fields, 'limit'; # push the limit! :)
my $wheres;
my $limit = "";
my @exe_args = ();
foreach my $key (keys %$hash) {
- $debug and print STDERR "get_tag_rows arg. '$key' = ", $hash->{$key}, "\n";
unless (length $key) {
carp "Empty argument key to get_tag_rows: ignoring!";
next;
}
unless (length $key) {
carp "Empty argument key to get_tag_rows: ignoring!";
next;
}
- unless (1 == scalar grep {
/^ $key $/x
} @ok_fields) {
+ unless (1 == scalar grep {
$_ eq $key
} @ok_fields) {
carp "get_tag_rows received unreconized argument key '$key'.";
next;
}
carp "get_tag_rows received unreconized argument key '$key'.";
next;
}
@@
-208,9
+195,7
@@
sub get_tag_rows {
push @exe_args, $hash->{$key};
}
}
push @exe_args, $hash->{$key};
}
}
- my $query = $select_all . ($wheres||'') . $limit;
- $debug and print STDERR "get_tag_rows query:\n $query\n",
- "get_tag_rows query args: ", join(',', @exe_args), "\n";
+ my $query = TAG_SELECT . ($wheres||'') . $limit;
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
$sth->execute(@exe_args);
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
$sth->execute(@exe_args);
@@
-228,12
+213,11
@@
sub get_tags { # i.e., from tags_index
my $order = "";
my @exe_args = ();
foreach my $key (keys %$hash) {
my $order = "";
my @exe_args = ();
foreach my $key (keys %$hash) {
- $debug and print STDERR "get_tags arg. '$key' = ", $hash->{$key}, "\n";
unless (length $key) {
carp "Empty argument key to get_tags: ignoring!";
next;
}
unless (length $key) {
carp "Empty argument key to get_tags: ignoring!";
next;
}
- unless (1 == scalar grep {
/^ $key $/x
} @ok_fields) {
+ unless (1 == scalar grep {
$_ eq $key
} @ok_fields) {
carp "get_tags received unreconized argument key '$key'.";
next;
}
carp "get_tags received unreconized argument key '$key'.";
next;
}
@@
-278,8
+262,6
@@
sub get_tags { # i.e., from tags_index
LEFT JOIN tags_approval
ON tags_index.term = tags_approval.term
" . ($wheres||'') . $order . $limit;
LEFT JOIN tags_approval
ON tags_index.term = tags_approval.term
" . ($wheres||'') . $order . $limit;
- $debug and print STDERR "get_tags query:\n $query\n",
- "get_tags query args: ", join(',', @exe_args), "\n";
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
$sth->execute(@exe_args);
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
$sth->execute(@exe_args);
@@
-297,12
+279,11
@@
sub get_approval_rows { # i.e., from tags_approval
my $order = "";
my @exe_args = ();
foreach my $key (keys %$hash) {
my $order = "";
my @exe_args = ();
foreach my $key (keys %$hash) {
- $debug and print STDERR "get_approval_rows arg. '$key' = ", $hash->{$key}, "\n";
unless (length $key) {
carp "Empty argument key to get_approval_rows: ignoring!";
next;
}
unless (length $key) {
carp "Empty argument key to get_approval_rows: ignoring!";
next;
}
- unless (1 == scalar grep {
/^ $key $/x
} @ok_fields) {
+ unless (1 == scalar grep {
$_ eq $key
} @ok_fields) {
carp "get_approval_rows received unreconized argument key '$key'.";
next;
}
carp "get_approval_rows received unreconized argument key '$key'.";
next;
}
@@
-353,8
+334,6
@@
sub get_approval_rows { # i.e., from tags_approval
LEFT JOIN borrowers
ON tags_approval.approved_by = borrowers.borrowernumber ";
$query .= ($wheres||'') . $order . $limit;
LEFT JOIN borrowers
ON tags_approval.approved_by = borrowers.borrowernumber ";
$query .= ($wheres||'') . $order . $limit;
- $debug and print STDERR "get_approval_rows query:\n $query\n",
- "get_approval_rows query args: ", join(',', @exe_args), "\n";
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
$sth->execute(@exe_args);
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
$sth->execute(@exe_args);
@@
-368,6
+347,7
@@
sub is_approved {
my $term = shift or return;
my $sth = C4::Context->dbh->prepare("SELECT approved FROM tags_approval WHERE term = ?");
$sth->execute($term);
my $term = shift or return;
my $sth = C4::Context->dbh->prepare("SELECT approved FROM tags_approval WHERE term = ?");
$sth->execute($term);
+ my $ext_dict = C4::Context->preference('TagsExternalDictionary');
unless ($sth->rows) {
$ext_dict and return (spellcheck($term) ? 0 : 1); # spellcheck returns empty on OK word
return 0;
unless ($sth->rows) {
$ext_dict and return (spellcheck($term) ? 0 : 1); # spellcheck returns empty on OK word
return 0;
@@
-391,6
+371,7
@@
sub get_tag_index {
sub whitelist {
my $operator = shift;
defined $operator or return; # have to test defined to allow =0 (kohaadmin)
sub whitelist {
my $operator = shift;
defined $operator or return; # have to test defined to allow =0 (kohaadmin)
+ my $ext_dict = C4::Context->preference('TagsExternalDictionary');
if ($ext_dict) {
foreach (@_) {
spellcheck($_) or next;
if ($ext_dict) {
foreach (@_) {
spellcheck($_) or next;
@@
-440,7
+421,6
@@
sub remove_filter {
}
sub add_tag_approval { # or disapproval
}
sub add_tag_approval { # or disapproval
- $debug and warn "add_tag_approval(" . join(", ",map {defined($_) ? $_ : 'UNDEF'} @_) . ")";
my $term = shift or return;
my $query = "SELECT * FROM tags_approval WHERE term = ?";
my $sth = C4::Context->dbh->prepare($query);
my $term = shift or return;
my $query = "SELECT * FROM tags_approval WHERE term = ?";
my $sth = C4::Context->dbh->prepare($query);
@@
-458,7
+438,6
@@
sub add_tag_approval { # or disapproval
} else {
$query = "INSERT INTO tags_approval (term,date_approved) VALUES (?,NOW())";
}
} else {
$query = "INSERT INTO tags_approval (term,date_approved) VALUES (?,NOW())";
}
- $debug and print STDERR "add_tag_approval query: $query\nadd_tag_approval args: (" . join(", ", @exe_args) . ")\n";
$sth = C4::Context->dbh->prepare($query);
$sth->execute(@exe_args);
return $sth->rows;
$sth = C4::Context->dbh->prepare($query);
$sth->execute(@exe_args);
return $sth->rows;
@@
-470,7
+449,6
@@
sub mod_tag_approval {
my $term = shift or return;
my $approval = (scalar @_ ? shift : 1); # default is to approve
my $query = "UPDATE tags_approval SET approved_by=?, approved=?, date_approved=NOW() WHERE term = ?";
my $term = shift or return;
my $approval = (scalar @_ ? shift : 1); # default is to approve
my $query = "UPDATE tags_approval SET approved_by=?, approved=?, date_approved=NOW() WHERE term = ?";
- $debug and print STDERR "mod_tag_approval query: $query\nmod_tag_approval args: ($operator,$approval,$term)\n";
my $sth = C4::Context->dbh->prepare($query);
$sth->execute($operator,$approval,$term);
}
my $sth = C4::Context->dbh->prepare($query);
$sth->execute($operator,$approval,$term);
}
@@
-483,7
+461,6
@@
sub add_tag_index {
$sth->execute($term,$biblionumber);
($sth->rows) and return increment_weight($term,$biblionumber);
$query = "INSERT INTO tags_index (term,biblionumber) VALUES (?,?)";
$sth->execute($term,$biblionumber);
($sth->rows) and return increment_weight($term,$biblionumber);
$query = "INSERT INTO tags_index (term,biblionumber) VALUES (?,?)";
- $debug and print STDERR "add_tag_index query: $query\nadd_tag_index args: ($term,$biblionumber)\n";
$sth = C4::Context->dbh->prepare($query);
$sth->execute($term,$biblionumber);
return $sth->rows;
$sth = C4::Context->dbh->prepare($query);
$sth->execute($term,$biblionumber);
return $sth->rows;
@@
-491,7
+468,7
@@
sub add_tag_index {
sub get_tag { # by tag_id
(@_) or return;
sub get_tag { # by tag_id
(@_) or return;
-
my $sth = C4::Context->dbh->prepare("$select_all
WHERE tag_id = ?");
+
my $sth = C4::Context->dbh->prepare(TAG_SELECT . "
WHERE tag_id = ?");
$sth->execute(shift);
return $sth->fetchrow_hashref;
}
$sth->execute(shift);
return $sth->fetchrow_hashref;
}
@@
-546,10
+523,7
@@
sub add_tag { # biblionumber,term,[borrowernumber,approvernumber]
my $query = "INSERT INTO tags_all
(borrowernumber,biblionumber,term,date_created)
VALUES (?,?,?,NOW())";
my $query = "INSERT INTO tags_all
(borrowernumber,biblionumber,term,date_created)
VALUES (?,?,?,NOW())";
- $debug and print STDERR "add_tag query: $query\n",
- "add_tag query args: ($borrowernumber,$biblionumber,$term)\n";
if (scalar @$rows) {
if (scalar @$rows) {
- $debug and carp "Duplicate tag detected. Tag not added.";
return;
}
# add to tags_all regardless of approaval
return;
}
# add to tags_all regardless of approaval
@@
-559,15
+533,12
@@
sub add_tag { # biblionumber,term,[borrowernumber,approvernumber]
# then
if (scalar @_) { # if arg remains, it is the borrowernumber of the approver: tag is pre-approved.
my $approver = shift;
# then
if (scalar @_) { # if arg remains, it is the borrowernumber of the approver: tag is pre-approved.
my $approver = shift;
- $debug and print STDERR "term '$term' pre-approved by borrower #$approver\n";
add_tag_approval($term,$approver,1);
add_tag_index($term,$biblionumber,$approver);
} elsif (is_approved($term) >= 1) {
add_tag_approval($term,$approver,1);
add_tag_index($term,$biblionumber,$approver);
} elsif (is_approved($term) >= 1) {
- $debug and print STDERR "term '$term' approved by whitelist\n";
add_tag_approval($term,0,1);
add_tag_index($term,$biblionumber,1);
} else {
add_tag_approval($term,0,1);
add_tag_index($term,$biblionumber,1);
} else {
- $debug and print STDERR "term '$term' NOT approved (yet)\n";
add_tag_approval($term);
add_tag_index($term,$biblionumber);
}
add_tag_approval($term);
add_tag_index($term,$biblionumber);
}
@@
-581,14
+552,14
@@
sub add_tag { # biblionumber,term,[borrowernumber,approvernumber]
# ($min, $max) = stratify_tags($strata, $tags);
# $stratum: the number of divisions you want
# $tags: the tags, as provided by get_approval_rows
# ($min, $max) = stratify_tags($strata, $tags);
# $stratum: the number of divisions you want
# $tags: the tags, as provided by get_approval_rows
-# $min: the min
u
mum stratum value
+# $min: the min
i
mum stratum value
# $max: the maximum stratum value. This may be the same as $min if there
# is only one weight. Beware of divide by zeros.
# This will add a field to the tag called "stratum" containing the calculated
# value.
sub stratify_tags {
my ( $strata, $tags ) = @_;
# $max: the maximum stratum value. This may be the same as $min if there
# is only one weight. Beware of divide by zeros.
# This will add a field to the tag called "stratum" containing the calculated
# value.
sub stratify_tags {
my ( $strata, $tags ) = @_;
-
+ return (0,0) if !@$tags;
my ( $min, $max );
foreach (@$tags) {
my $w = $_->{weight_total};
my ( $min, $max );
foreach (@$tags) {
my $w = $_->{weight_total};
@@
-666,7
+637,7
@@
This could be called an "approved terms" table. See above regarding the Externa
approved - Negative, 0 or positive if tag is rejected, pending or approved.
date_approved - date of last action
approved_by - staffer performing the last action
approved - Negative, 0 or positive if tag is rejected, pending or approved.
date_approved - date of last action
approved_by - staffer performing the last action
-
weight_total - total occura
nce of term in any biblio by any users
+
weight_total - total occurre
nce of term in any biblio by any users
tags_index - This table is for performance, because by far the most common operation will
be fetching tags for a list of search results. We will have a set of biblios, and we will
tags_index - This table is for performance, because by far the most common operation will
be fetching tags for a list of search results. We will have a set of biblios, and we will