Bug 28290: Don't send subfields to 'as_string' if none to send
[koha-ffzg.git] / C4 / Tags.pm
index 33d77d4..e01244f 100644 (file)
@@ -20,59 +20,52 @@ package C4::Tags;
 
 use strict;
 use warnings;
-use Carp;
+use Carp qw( carp );
 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(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-
+our (@ISA, @EXPORT_OK);
 BEGIN {
-       @ISA = qw(Exporter);
+    @ISA       = qw(Exporter);
     @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
     );
-       # %EXPORT_TAGS = ();
     my $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";
-       }
+    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;
-               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.
 
-More verose debugging messages are sent in the presence of non-zero $ENV{"DEBUG"}.
-
 =cut
 
-INIT {
-    my $ext_dict = C4::Context->preference('TagsExternalDictionary');
-    $ext_dict and $Lingua::Ispell::path = $ext_dict;
-    $debug and print STDERR "\$Lingua::Ispell::path = $Lingua::Ispell::path\n";
-}
-
 sub get_filters {
        my $query = "SELECT * FROM tags_filters ";
        my ($sth);
@@ -99,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};
-       $debug and warn "counts returned: " . Dumper $result;
        return $result;
 }
 
@@ -133,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);
-       $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 {
@@ -186,12 +175,11 @@ sub get_tag_rows {
        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 (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;
                }
@@ -208,8 +196,6 @@ sub get_tag_rows {
                }
        }
     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);
        if (@exe_args) {
                $sth->execute(@exe_args);
@@ -227,12 +213,11 @@ sub get_tags {            # i.e., from tags_index
        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 (1 == scalar grep {/^ $key $/x} @ok_fields) {
+               unless (1 == scalar grep { $_ eq $key } @ok_fields) {
                        carp "get_tags received unreconized argument key '$key'.";
                        next;
                }
@@ -277,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;
-       $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);
@@ -296,12 +279,11 @@ sub get_approval_rows {           # i.e., from tags_approval
        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 (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;
                }
@@ -352,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;
-       $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);
@@ -441,7 +421,6 @@ sub remove_filter {
 }
 
 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);
@@ -459,7 +438,6 @@ sub add_tag_approval {      # or disapproval
        } 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;
@@ -471,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 = ?";
-       $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);
 }
@@ -484,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 (?,?)";
-       $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;
@@ -547,10 +523,7 @@ sub add_tag {      # biblionumber,term,[borrowernumber,approvernumber]
        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) {
-               $debug and carp "Duplicate tag detected.  Tag not added.";      
                return;
        }
        # add to tags_all regardless of approaval
@@ -560,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;
-               $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) {
-               $debug and print STDERR "term '$term' approved by whitelist\n";
                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);
        }