Adding some fields in GetSubscriptions
authorHenri-Damien LAURENT <henridamien.laurent@biblibre.com>
Tue, 15 Sep 2009 09:03:45 +0000 (11:03 +0200)
committerHenri-Damien LAURENT <henridamien.laurent@biblibre.com>
Wed, 30 Sep 2009 09:30:33 +0000 (11:30 +0200)
GetSubscriptions now searches string in
notes
internalnotes
callnumber
title

C4/Serials.pm
koha-tmpl/intranet-tmpl/prog/en/includes/serials-search.inc
t/db_dependent/Serials.t [new file with mode: 0644]

index 5077d83..f7e90e0 100644 (file)
@@ -619,66 +619,52 @@ a table of hashref. Each hash containt the subscription.
 =cut
 
 sub GetSubscriptions {
-    my ( $title, $ISSN, $biblionumber ) = @_;
+    my ( $string, $issn,$biblionumber) = @_;
     #return unless $title or $ISSN or $biblionumber;
     my $dbh = C4::Context->dbh;
     my $sth;
-    if ($biblionumber) {
-        my $query = qq(
+    my $sql = qq(
             SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber
             FROM   subscription
             LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
             LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
-            WHERE biblio.biblionumber=?
-        );
-        $query.=" ORDER BY title";
-        $debug and warn "GetSubscriptions query: $query";
-        $sth = $dbh->prepare($query);
-        $sth->execute($biblionumber);
-    }
-    else {
-        if ( $ISSN and $title ) {
-            my $query = qq|
-                SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber        
-                FROM   subscription
-                LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
-                LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
-                WHERE (biblioitems.issn = ? or|. join('and ',map{"biblio.title LIKE \"%$_%\""}split (" ",$title))." )";
-            $query.=" ORDER BY title";
-               $debug and warn "GetSubscriptions query: $query";
-            $sth = $dbh->prepare($query);
-            $sth->execute( $ISSN );
-        }
-        else {
-            if ($ISSN) {
-                my $query = qq(
-                    SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber
-                    FROM   subscription
-                    LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
-                    LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
-                    WHERE biblioitems.issn LIKE ?
-                );
-                $query.=" ORDER BY title";
-                       $debug and warn "GetSubscriptions query: $query";
-                $sth = $dbh->prepare($query);
-                $sth->execute( "%" . $ISSN . "%" );
-            }
-            else {
-                my $query = qq(
-                    SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber
-                    FROM   subscription
-                    LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
-                    LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
-                    WHERE 1
-                    ).($title?" and ":""). join('and ',map{"biblio.title LIKE \"%$_%\""} split (" ",$title) );
-                
-                $query.=" ORDER BY title";
-                       $debug and warn "GetSubscriptions query: $query";
-                $sth = $dbh->prepare($query);
-                $sth->execute;
-            }
-        }
+    );
+       my @bind_params;
+       my $sqlwhere;
+    if ($biblionumber) {
+        $sqlwhere="   WHERE biblio.biblionumber=?";
+               push @bind_params,$biblionumber;
     }
+    if ($string){
+               my @sqlstrings; 
+               my @strings_to_search;
+               @strings_to_search=map {"%$_%"} split (/ /,$string);
+               foreach my $index qw(biblio.title subscription.callnumber subscription.location subscription.notes subscription.internalnotes){
+                               push @bind_params,@strings_to_search; 
+                               my $tmpstring= "AND $index LIKE ? "x scalar(@strings_to_search);
+                               $debug && warn "$tmpstring";
+                               $tmpstring=~s/^AND //;
+                               push @sqlstrings,$tmpstring;
+               }
+               $sqlwhere.= ($sqlwhere?" AND ":" WHERE ")."(".join(") OR (",@sqlstrings).")";
+       }
+    if ($issn){
+               my @sqlstrings; 
+               my @strings_to_search;
+               @strings_to_search=map {"%$_%"} split (/ /,$issn);
+               foreach my $index qw(biblioitems.issn){
+                               push @bind_params,@strings_to_search; 
+                               my $tmpstring= "OR $index LIKE ? "x scalar(@strings_to_search);
+                               $debug && warn "$tmpstring";
+                               $tmpstring=~s/^OR //;
+                               push @sqlstrings,$tmpstring;
+               }
+               $sqlwhere.= ($sqlwhere?" AND ":" WHERE ")."(".join(") OR (",@sqlstrings).")";
+       }    
+       $sql.="$sqlwhere ORDER BY title";
+    $debug and warn "GetSubscriptions query: $sql params : ", join (" ",@bind_params);
+    $sth = $dbh->prepare($sql);
+    $sth->execute(@bind_params);
     my @results;
     my $previoustitle = "";
     my $odd           = 1;
index c4ed7bf..e0e3e15 100644 (file)
@@ -3,7 +3,7 @@
 <div id="header_search">
        <div id="subscription_search" class="residentsearch">
        <p class="tip">Search Subscriptions:</p>
- <form action="/cgi-bin/koha/serials/serials-home.pl" method="get"><!-- TMPL_IF NAME="routing" --><input type="hidden" name="routing" value="<!-- TMPL_VAR NAME="routing" -->" /><!-- /TMPL_IF --><input type="hidden" name="searched" value="1" /> <label for="ISSN_filter">ISSN:</label> <input type="text" size="10" maxlength="11" name="ISSN_filter" id="ISSN_filter" value="<!-- TMPL_VAR name="ISSN_filter" -->" /> <label for="title_filter">Title:</label> <input type="text" size="20" maxlength="40" name="title_filter" id="title_filter" value="<!-- TMPL_VAR name="title_filter" -->" /><input type="submit" value="Search" class="submit" />
+ <form action="/cgi-bin/koha/serials/serials-home.pl" method="get"><!-- TMPL_IF NAME="routing" --><input type="hidden" name="routing" value="<!-- TMPL_VAR NAME="routing" -->" /><!-- /TMPL_IF --><input type="hidden" name="searched" value="1" /> <label for="ISSN_filter">Standard Number:</label> <input type="text" size="10" maxlength="11" name="ISSN_filter" id="ISSN_filter" value="<!-- TMPL_VAR name="ISSN_filter" -->" /> <label for="title_filter">String:</label> <input type="text" size="20" maxlength="40" name="title_filter" id="title_filter" value="<!-- TMPL_VAR name="title_filter" -->" /><input type="submit" value="Search" class="submit" />
 </form>
        </div>
     <!-- TMPL_INCLUDE NAME="patron-search-box.inc" -->
diff --git a/t/db_dependent/Serials.t b/t/db_dependent/Serials.t
new file mode 100644 (file)
index 0000000..e1d3815
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+#
+# This Koha test module is a stub!
+# Add more tests here!!!
+
+use strict;
+use warnings;
+use YAML;
+
+use C4::Serials;
+use C4::Debug;
+use Test::More tests => 4;
+
+BEGIN {
+    use_ok('C4::Serials');
+}
+
+my $subscriptionid = 1;
+my $subscriptioninformation = GetSubscription( $subscriptionid );
+$debug && warn Dump($subscriptioninformation);
+my @subscriptions = GetSubscriptions( $$subscriptioninformation{bibliotitle} );
+isa_ok( \@subscriptions, 'ARRAY' );
+$debug && warn scalar(@subscriptions);
+@subscriptions = GetSubscriptions( undef, $$subscriptioninformation{issn} );
+isa_ok( \@subscriptions, 'ARRAY' );
+$debug && warn scalar(@subscriptions);
+@subscriptions = GetSubscriptions( undef,undef ,$$subscriptioninformation{bibnum} );
+isa_ok( \@subscriptions, 'ARRAY' );
+$debug && warn scalar(@subscriptions);