koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] CVS: koha/search.marc search.pl,1.9,1.10


From: Jerome Vizcaino
Subject: [Koha-cvs] CVS: koha/search.marc search.pl,1.9,1.10
Date: Tue, 08 Jul 2003 05:00:37 -0700

Update of /cvsroot/koha/koha/search.marc
In directory sc8-pr-cvs1:/tmp/cvs-serv24733

Modified Files:
        search.pl 
Log Message:
Support for SearchMarc.pm v1.8
Added support for results per page and naviguation through results.
Added functionnality to add criterias to the search.


Index: search.pl
===================================================================
RCS file: /cvsroot/koha/koha/search.marc/search.pl,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** search.pl   2 May 2003 13:06:33 -0000       1.9
--- search.pl   8 Jul 2003 12:00:34 -0000       1.10
***************
*** 33,45 ****
  use C4::Koha; # XXX subfield_is_koha_internal_p
  
  my $query=new CGI;
  my $type=$query->param('type');
  my $op = $query->param('op');
- 
  my $dbh = C4::Context->dbh;
  
  my $startfrom=$query->param('startfrom');
! ($startfrom) || ($startfrom=0);
  my ($template, $loggedinuser, $cookie);
  
  if ($op eq "do_search") {
--- 33,103 ----
  use C4::Koha; # XXX subfield_is_koha_internal_p
  
+ # Creates the list of active tags using the active MARC configuration
+ sub create_marclist {
+ 
+       my $dbh = C4::Context->dbh;
+       my $tagslib = &MARCgettagslib($dbh,1);
+       my @marcarray;
+       push @marcarray,"";
+       my $widest_menu_item_width = 0;
+       for (my $pass = 1; $pass <= 2; $pass += 1)
+       {
+               for (my $tabloop = 0; $tabloop<=9;$tabloop++)
+               {
+                       my $separator_inserted_p = 0; # FIXME... should not 
use!!
+                       foreach my $tag (sort(keys (%{$tagslib})))
+                       {
+                               foreach my $subfield (sort(keys 
%{$tagslib->{$tag}}))
+                               {
+                                       next if 
subfield_is_koha_internal_p($subfield);
+                                       next unless 
($tagslib->{$tag}->{$subfield}->{tab} eq $tabloop);
+                                       my $menu_item = "$tag$subfield - 
$tagslib->{$tag}->{$subfield}->{lib}";
+                                       if ($pass == 1)
+                                       {
+                                               $widest_menu_item_width = 
length $menu_item if($widest_menu_item_width < length $menu_item);
+                                       } else {
+                                               if (!$separator_inserted_p)
+                                               {
+                                                       my $w = 
int(($widest_menu_item_width - 3 + 0.5)/2);
+                                                       my $s = ('-' x ($w * 
4/5));
+                                                       push @marcarray,  "$s 
$tabloop $s";
+                                                       $separator_inserted_p = 
1;
+                                               }
+                                       push @marcarray, $menu_item;
+                                       }
+                               }
+                       }
+               }
+       }
+       return address@hidden;
+ }
+ 
+ # Creates a scrolling list with the associated default value.
+ # Using more than one scrolling list in a CGI assigns the same default value 
to all the
+ # scrolling lists on the page !?!? That's why this function was written.
+ sub create_scrolling_list {
+       my ($params) = @_;
+       my $scrollist = sprintf("<select name=\"%s\" size=\"%d\" 
onChange='%s'>\n", $params->{'name'}, $params->{'size'}, $params->{'onChange'});
+ 
+       foreach my $tag (@{$params->{'values'}})
+       {
+               my $selected = "selected " if($params->{'default'} eq $tag);
+               $scrollist .= sprintf("<option %svalue=\"%s\">%s</option>\n", 
$selected, $tag, $tag);
+       }
+ 
+       $scrollist .= "</select>\n";
+ 
+       return $scrollist;
+ }
+ 
  my $query=new CGI;
  my $type=$query->param('type');
  my $op = $query->param('op');
  my $dbh = C4::Context->dbh;
  
  my $startfrom=$query->param('startfrom');
! $startfrom=0 if(!defined $startfrom);
  my ($template, $loggedinuser, $cookie);
+ my $resultsperpage;
  
  if ($op eq "do_search") {
***************
*** 49,62 ****
        my @operator = $query->param('operator');
        my @value = $query->param('value');
        # builds tag and subfield arrays
        my @tags;
        my @subfields;
        foreach my $marc (@marclist) {
                push @tags, substr($marc,0,3);
                push @subfields, substr($marc,3,1);
        }
!       my @results = catalogsearch($dbh, address@hidden, address@hidden, 
address@hidden,
                                                                                
        address@hidden, address@hidden, address@hidden,
!                                                                               
        $startfrom, 20);
        ($template, $loggedinuser, $cookie)
                = get_template_and_user({template_name => 
"search.marc/result.tmpl",
--- 107,126 ----
        my @operator = $query->param('operator');
        my @value = $query->param('value');
+ 
+       $resultsperpage= $query->param('resultsperpage');
+       $resultsperpage = 19 if(!defined $resultsperpage);
+ 
        # builds tag and subfield arrays
        my @tags;
        my @subfields;
+ 
        foreach my $marc (@marclist) {
                push @tags, substr($marc,0,3);
                push @subfields, substr($marc,3,1);
        }
!       my ($results,$total) = catalogsearch($dbh, address@hidden, 
address@hidden, address@hidden,
                                                                                
        address@hidden, address@hidden, address@hidden,
!                                                                               
        $startfrom*$resultsperpage, $resultsperpage);
! 
        ($template, $loggedinuser, $cookie)
                = get_template_and_user({template_name => 
"search.marc/result.tmpl",
***************
*** 65,74 ****
                                authnotrequired => 0,
                                flagsrequired => {borrowers => 1},
! #                             flagsrequired => {catalogue => 1},
                                debug => 1,
                                });
-       $template->param(result => address@hidden);
  
! } else {
        ($template, $loggedinuser, $cookie)
                = get_template_and_user({template_name => 
"search.marc/search.tmpl",
--- 129,199 ----
                                authnotrequired => 0,
                                flagsrequired => {borrowers => 1},
!                               flagsrequired => {catalogue => 1},
                                debug => 1,
                                });
  
!       # multi page display gestion
!       my $displaynext=0;
!       my $displayprev=$startfrom;
!       if(($total - (($startfrom+1)*($resultsperpage))) > 0 ){
!               $displaynext = 1;
!       }
! 
!       my @field_data = ();
! 
! 
!       for(my $i = 0 ; $i <= $#marclist ; $i++)
!       {
!               push @field_data, { term => "marclist", val=>$marclist[$i] };
!               push @field_data, { term => "and_or", val=>$and_or[$i] };
!               push @field_data, { term => "excluding", val=>$excluding[$i] };
!               push @field_data, { term => "operator", val=>$operator[$i] };
!               push @field_data, { term => "value", val=>$value[$i] };
!       }
! 
!       my @numbers = ();
! 
!       if ($total>$resultsperpage)
!       {
!               for (my $i=1; $i<$total/$resultsperpage+1; $i++)
!               {
!                       if ($i<16)
!                       {
!                       my $highlight=0;
!                       ($startfrom==($i-1)) && ($highlight=1);
!                       push @numbers, { number => $i,
!                                       highlight => $highlight ,
!                                       searchdata=> address@hidden,
!                                       startfrom => ($i-1)};
!                       }
!       }
!       }
! 
!       my $from = $startfrom*$resultsperpage+1;
!       my $to;
! 
!       if($total < (($startfrom+1)*$resultsperpage))
!       {
!               $to = $total;
!       } else {
!               $to = (($startfrom+1)*$resultsperpage);
!       }
! 
!       $template->param(result => $results,
!                                                       startfrom=> $startfrom,
!                                                       displaynext=> 
$displaynext,
!                                                       displayprev=> 
$displayprev,
!                                                       resultsperpage => 
$resultsperpage,
!                                                       startfromnext => 
$startfrom+1,
!                                                       startfromprev => 
$startfrom-1,
!                                                       
searchdata=>address@hidden,
!                                                       total=>$total,
!                                                       from=>$from,
!                                                       to=>$to,
!                                                       numbers=>address@hidden
!                                                       );
! 
! } elsif ($op eq "AddStatement") {
! 
        ($template, $loggedinuser, $cookie)
                = get_template_and_user({template_name => 
"search.marc/search.tmpl",
***************
*** 79,127 ****
                                debug => 1,
                                });
!       #$template->param(loggedinuser => $loggedinuser);
!       my $tagslib;
!       if ($type eq "opac") {
!               $tagslib = &MARCgettagslib($dbh,1);
!       } else {
!               $tagslib = &MARCgettagslib($dbh,1);
!       }
!       my @marcarray;
!       push @marcarray,"";
!       my $widest_menu_item_width = 0;
!       for (my $pass = 1; $pass <= 2; $pass += 1) {
!               for (my $tabloop = 0; $tabloop<=9;$tabloop++) {
!                       my $separator_inserted_p = 0; # FIXME... should not 
use!!
!                       foreach my $tag (sort(keys (%{$tagslib}))) {
!                               foreach my $subfield (sort(keys 
%{$tagslib->{$tag}})) {
!                                       next if 
subfield_is_koha_internal_p($subfield);
!                                       next unless 
($tagslib->{$tag}->{$subfield}->{tab} eq $tabloop);
!                                       my $menu_item = "$tag$subfield - 
$tagslib->{$tag}->{$subfield}->{lib}";
!                                       if ($pass == 1) {
!                                               $widest_menu_item_width = 
length $menu_item
!                                                               if 
$widest_menu_item_width < length $menu_item;
!                                       } else {
!                                               if (!$separator_inserted_p) {
!                                                       my $w = 
int(($widest_menu_item_width - 3 + 0.5)/2);
!                                                       my $s = ('-' x ($w * 
4/5));
!                                                       push @marcarray,  "$s 
$tabloop $s";
!                                                       $separator_inserted_p = 
1;
!                                               }
!                                               push @marcarray, $menu_item;
!                                       }
!                               }
!                       }
!               }
        }
        my $marclist = CGI::scrolling_list(-name=>"marclist",
!                                       -values=> address@hidden,
                                        -size=>1,
                                        -multiple=>0,
                                        -onChange => "sql_update()",
                                        );
!       $template->param("marclist" => $marclist);
  }
  # Print the page
  output_html_with_http_headers $query, $cookie, $template->output;
- 
  
  # Local Variables:
--- 204,304 ----
                                debug => 1,
                                });
! 
!       # Gets the entered information
!       my @marcfields = $query->param('marclist');
!       my @and_or = $query->param('and_or');
!       my @excluding = $query->param('excluding');
!       my @operator = $query->param('operator');
!       my @value = $query->param('value');
! 
!       my @statements = ();
! 
!       # List of the marc tags to display
!       my $marcarray = create_marclist();
! 
!       my $nbstatements = $query->param('nbstatements');
!       $nbstatements = 1 if(!defined $nbstatements);
! 
!       for(my $i = 0 ; $i < $nbstatements ; $i++)
!       {
!               my %fields = ();
! 
!               # Recreates the old scrolling lists with the previously 
selected values
!               my $marclist = create_scrolling_list({name=>"marclist",
!                                       values=> $marcarray,
!                                       size=> 1,
!                                       default=>$marcfields[$i],
!                                       onChange => "sql_update()"}
!                                       );
! 
!               $fields{'marclist'} = $marclist;
!               $fields{'first'} = 1 if($i == 0);
! 
!               # Restores the and/or parameters (no need to test the 'and' for 
activation because it's the default value)
!               $fields{'or'} = 1 if($and_or[$i] eq "or");
! 
!               #Restores the "not" parameters
!               $fields{'not'} = 1 if($excluding[$i]);
! 
!               #Restores the operators (most common operators first);
!               if($operator[$i] eq "=") { $fields{'eq'} = 1; }
!               elsif($operator[$i] eq "contains") { $fields{'contains'} = 1; }
!               elsif($operator[$i] eq "start") { $fields{'start'} = 1; }
!               elsif($operator[$i] eq ">") { $fields{'gt'} = 1; }      
#greater than
!               elsif($operator[$i] eq ">=") { $fields{'ge'} = 1; } #greater or 
equal
!               elsif($operator[$i] eq "<") { $fields{'lt'} = 1; } #lower than
!               elsif($operator[$i] eq "<=") { $fields{'le'} = 1; } #lower or 
equal
! 
!               #Restores the value
!               $fields{'value'} = $value[$i];
! 
!               push @statements, \%fields;
        }
+       $nbstatements++;
+ 
+       # The new scrolling list
+       my $marclist = create_scrolling_list({name=>"marclist",
+                               values=> $marcarray,
+                               size=>1,
+                               onChange => "sql_update()"});
+       push @statements, {"marclist" => $marclist };
+ 
+       $template->param("statements" => address@hidden,
+                                               "nbstatements" => 
$nbstatements);
+ 
+ }
+ else {
+       ($template, $loggedinuser, $cookie)
+               = get_template_and_user({template_name => 
"search.marc/search.tmpl",
+                               query => $query,
+                               type => $type,
+                               authnotrequired => 0,
+                               flagsrequired => {catalogue => 1},
+                               debug => 1,
+                               });
+       #$template->param(loggedinuser => $loggedinuser);
+ 
+       my $marcarray = create_marclist();
+ 
        my $marclist = CGI::scrolling_list(-name=>"marclist",
!                                       -values=> $marcarray,
                                        -size=>1,
                                        -multiple=>0,
                                        -onChange => "sql_update()",
                                        );
! 
!       my @statements = ();
! 
!       # Considering initial search with 3 criterias
!       push @statements, { "marclist" => $marclist, "first" => 1 };
!       push @statements, { "marclist" => $marclist, "first" => 0 };
!       push @statements, { "marclist" => $marclist, "first" => 0 };
! 
!       $template->param("statements" => address@hidden, "nbstatements" => 3);
  }
+ 
+ 
  # Print the page
  output_html_with_http_headers $query, $cookie, $template->output;
  
  # Local Variables:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]