X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FTags.pm;h=1db7accc06bed815795019c63357883edec423ee;hb=12a8dfb934bf3819d6581f9df82987475334a302;hp=d74dbf87777d4e210fb4eb09101b5481545fd830;hpb=a8c5497b8da7de25b7c4787ee5540e4e1b48704d;p=koha.git diff --git a/C4/Tags.pm b/C4/Tags.pm index d74dbf8777..1db7accc06 100644 --- a/C4/Tags.pm +++ b/C4/Tags.pm @@ -5,18 +5,18 @@ package C4::Tags; # # 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 later -# 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, 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. +# 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 . use strict; use warnings; @@ -25,13 +25,14 @@ use Exporter; use C4::Context; use C4::Debug; +use Module::Load::Conditional qw/check_install/; #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); +use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); BEGIN { - $VERSION = 3.07.00.049; @ISA = qw(Exporter); @EXPORT_OK = qw( &get_tag &get_tags &get_tag_rows @@ -49,7 +50,11 @@ BEGIN { stratify_tags ); # %EXPORT_TAGS = (); - $ext_dict = C4::Context->preference('TagsExternalDictionary'); + 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 ($debug) { require Data::Dumper; import Data::Dumper qw(:DEFAULT); @@ -57,7 +62,9 @@ BEGIN { } 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; + $debug and print STDERR "\$Lingua::Ispell::path = $Lingua::Ispell::path\n"; } } @@ -67,13 +74,6 @@ More verose debugging messages are sent in the presence of non-zero $ENV{"DEBUG" =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); @@ -181,7 +181,7 @@ sub delete_tag_rows_by_ids { 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 = ""; @@ -208,7 +208,7 @@ sub get_tag_rows { push @exe_args, $hash->{$key}; } } - my $query = $select_all . ($wheres||'') . $limit; + my $query = TAG_SELECT . ($wheres||'') . $limit; $debug and print STDERR "get_tag_rows query:\n $query\n", "get_tag_rows query args: ", join(',', @exe_args), "\n"; my $sth = C4::Context->dbh->prepare($query); @@ -368,6 +368,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 $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; @@ -391,6 +392,7 @@ sub get_tag_index { 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; @@ -491,7 +493,7 @@ sub add_tag_index { 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; } @@ -581,14 +583,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: the minumum stratum value +# $min: the minimum 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 ) = @_; - + return (0,0) if !@$tags; my ( $min, $max ); foreach (@$tags) { my $w = $_->{weight_total}; @@ -666,7 +668,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 - weight_total - total occurance of term in any biblio by any users + weight_total - total occurrence 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