[Bio] / Sprout / SearchHelper.pm Repository:
ViewVC logotype

Diff of /Sprout/SearchHelper.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.18, Sat Nov 18 20:36:49 2006 UTC revision 1.25, Wed Dec 20 20:06:17 2006 UTC
# Line 257  Line 257 
257    
258  =over 4  =over 4
259    
260  =item query  =item cgi
261    
262  The CGI query object for the current script.  The CGI query object for the current script.
263    
# Line 267  Line 267 
267    
268  sub new {  sub new {
269      # Get the parameters.      # Get the parameters.
270      my ($class, $query) = @_;      my ($class, $cgi) = @_;
271      # Check for a session ID.      # Check for a session ID.
272      my $session_id = $query->param("SessionID");      my $session_id = $cgi->param("SessionID");
273      my $type = "old";      my $type = "old";
274      if (! $session_id) {      if (! $session_id) {
275          # Here we're starting a new session. We create the session ID and          # Here we're starting a new session. We create the session ID and
276          # store it in the query object.          # store it in the query object.
277          $session_id = NewSessionID();          $session_id = NewSessionID();
278          $type = "new";          $type = "new";
279          $query->param(-name => 'SessionID', -value => $session_id);          $cgi->param(-name => 'SessionID', -value => $session_id);
280      }      }
281      # Compute the subclass name.      # Compute the subclass name.
282      $class =~ /SH(.+)$/;      my $subClass;
283      my $subClass = $1;      if ($class =~ /SH(.+)$/) {
284            # Here we have a real search class.
285            $subClass = $1;
286        } else {
287            # Here we have a bare class. The bare class cannot search, but it can
288            # process search results.
289            $subClass = 'SearchHelper';
290        }
291      # Insure everybody knows we're in Sprout mode.      # Insure everybody knows we're in Sprout mode.
292      $query->param(-name => 'SPROUT', -value => 1);      $cgi->param(-name => 'SPROUT', -value => 1);
293      # Generate the form name.      # Generate the form name.
294      my $formName = "$class$formCount";      my $formName = "$class$formCount";
295      $formCount++;      $formCount++;
# Line 290  Line 297 
297      # as well as an indicator as to whether or not the session is new, plus the      # as well as an indicator as to whether or not the session is new, plus the
298      # class name and a placeholder for the Sprout object.      # class name and a placeholder for the Sprout object.
299      my $retVal = {      my $retVal = {
300                    query => $query,                    query => $cgi,
301                    type => $type,                    type => $type,
302                    class => $subClass,                    class => $subClass,
303                    sprout => undef,                    sprout => undef,
# Line 672  Line 679 
679          push @colNames, $self->DefaultFeatureColumns();          push @colNames, $self->DefaultFeatureColumns();
680          # Add any additional columns requested by the feature filter.          # Add any additional columns requested by the feature filter.
681          push @colNames, FeatureQuery::AdditionalColumns($self);          push @colNames, FeatureQuery::AdditionalColumns($self);
682            Trace("Full column list determined.") if T(3);
683          # Save the full list.          # Save the full list.
684          $self->{cols} = \@colNames;          $self->{cols} = \@colNames;
685          # Write out the column headers. This also prepares the cache file to receive          # Write out the column headers. This also prepares the cache file to receive
686          # output.          # output.
687            Trace("Writing column headers.") if T(3);
688          $self->WriteColumnHeaders(map { $self->FeatureColumnTitle($_) } @{$self->{cols}});          $self->WriteColumnHeaders(map { $self->FeatureColumnTitle($_) } @{$self->{cols}});
689            Trace("Column headers written.") if T(3);
690      }      }
691      # Get the feature ID.      # Get the feature ID.
692      my $fid = $fd->FID();      my $fid = $fd->FID();
# Line 979  Line 989 
989    
990  sub ComputeFASTA {  sub ComputeFASTA {
991      # Get the parameters.      # Get the parameters.
992      my ($self, $incomingType, $desiredType, $sequence) = @_;      my ($self, $desiredType, $sequence) = @_;
993      # Declare the return variable. If an error occurs, it will remain undefined.      # Declare the return variable. If an error occurs, it will remain undefined.
994      my $retVal;      my $retVal;
995      # This variable will be cleared if an error is detected.      # This variable will be cleared if an error is detected.
# Line 1035  Line 1045 
1045          $fastaData =~ s/\n//g;          $fastaData =~ s/\n//g;
1046          $fastaData =~ s/\s+//g;          $fastaData =~ s/\s+//g;
1047          # Finally, verify that it's DNA if we're doing DNA stuff.          # Finally, verify that it's DNA if we're doing DNA stuff.
1048          if ($desiredType eq 'dna' && $fastaData =~ /[^agct]/i) {          if ($desiredType eq 'dna' && $fastaData =~ /[^agctxn]/i) {
1049              $self->SetMessage("Invaid characters detected. Is the input really a DNA sequence?");              $self->SetMessage("Invalid characters detected. Is the input really a DNA sequence?");
1050              $okFlag = 0;              $okFlag = 0;
1051          }          }
1052      }      }
# Line 1512  Line 1522 
1522      my $retVal = $cgi->Tr($cgi->td("Results/Page"),      my $retVal = $cgi->Tr($cgi->td("Results/Page"),
1523                            $cgi->td($cgi->popup_menu(-name => 'PageSize',                            $cgi->td($cgi->popup_menu(-name => 'PageSize',
1524                                                      -values => [10, 25, 50, 100, 1000],                                                      -values => [10, 25, 50, 100, 1000],
1525                                                      -default => $pageSize) . " " .                                                      -default => $pageSize)),
                                    $cgi->checkbox(-name => 'ShowURL',  
                                                   -value => 1,  
                                                   -label => 'Show URL')),  
1526                            $cgi->td($cgi->submit(-class => 'goButton',                            $cgi->td($cgi->submit(-class => 'goButton',
1527                                                  -name => 'Search',                                                  -name => 'Search',
1528                                                  -value => $realCaption)));                                                  -value => $realCaption)));
# Line 1705  Line 1712 
1712    
1713  =head3 ComputeSearchURL  =head3 ComputeSearchURL
1714    
1715  C<< my $url = $shelp->ComputeSearchURL(); >>  C<< my $url = $shelp->ComputeSearchURL(%overrides); >>
1716    
1717  Compute the GET-style URL for the current search. In order for this to work, there  Compute the GET-style URL for the current search. In order for this to work, there
1718  must be a copy of the search form on the current page. This will always be the  must be a copy of the search form on the current page. This will always be the
# Line 1715  Line 1722 
1722  main complication is that if the user specified all genomes, we'll want to  main complication is that if the user specified all genomes, we'll want to
1723  remove the parameter entirely from a get-style URL.  remove the parameter entirely from a get-style URL.
1724    
1725    =over 4
1726    
1727    =item overrides
1728    
1729    Hash containing override values for the parameters, where the parameter name is
1730    the key and the parameter value is the override value. If the override value is
1731    C<undef>, the parameter will be deleted from the result.
1732    
1733    =item RETURN
1734    
1735    Returns a GET-style URL for invoking the search with the specified overrides.
1736    
1737    =back
1738    
1739  =cut  =cut
1740    
1741  sub ComputeSearchURL {  sub ComputeSearchURL {
1742      # Get the parameters.      # Get the parameters.
1743      my ($self) = @_;      my ($self, %overrides) = @_;
1744      # Get the database and CGI query object.      # Get the database and CGI query object.
1745      my $cgi = $self->Q();      my $cgi = $self->Q();
1746      my $sprout = $self->DB();      my $sprout = $self->DB();
# Line 1760  Line 1781 
1781              if ($allFlag) {              if ($allFlag) {
1782                  @values = ();                  @values = ();
1783              }              }
1784            } elsif (exists $overrides{$parmKey}) {
1785                # Here the value is being overridden, so we skip it for now.
1786                @values = ();
1787          }          }
1788          # If we still have values, create the URL parameters.          # If we still have values, create the URL parameters.
1789          if (@values) {          if (@values) {
1790              push @urlList, map { "$parmKey=" . uri_escape($_) } @values;              push @urlList, map { "$parmKey=" . uri_escape($_) } @values;
1791          }          }
1792      }      }
1793        # Now do the overrides.
1794        for my $overKey (keys %overrides) {
1795            # Only use this override if it's not a delete marker.
1796            if (defined $overrides{$overKey}) {
1797                push @urlList, "$overKey=" . uri_escape($overrides{$overKey});
1798            }
1799        }
1800      # Add the parameters to the URL.      # Add the parameters to the URL.
1801      $retVal .= "?" . join(";", @urlList);      $retVal .= "?" . join(";", @urlList);
1802      # Return the result.      # Return the result.
# Line 2197  Line 2228 
2228    
2229  =head2 Feature Column Methods  =head2 Feature Column Methods
2230    
2231  The methods in this column manage feature column data. If you want to provide the  The methods in this section manage feature column data. If you want to provide the
2232  capability to include new types of data in feature columns, then all the changes  capability to include new types of data in feature columns, then all the changes
2233  are made to this section of the source file. Technically, this should be implemented  are made to this section of the source file. Technically, this should be implemented
2234  using object-oriented methods, but this is simpler for non-programmers to maintain.  using object-oriented methods, but this is simpler for non-programmers to maintain.
# Line 2272  Line 2303 
2303      } elsif ($colName =~ /^keyword:(.+)$/) {      } elsif ($colName =~ /^keyword:(.+)$/) {
2304          $retVal = ucfirst $1;          $retVal = ucfirst $1;
2305      } elsif ($colName eq 'orgName') {      } elsif ($colName eq 'orgName') {
2306          $retVal = "Gene Name";          $retVal = "Organism and Gene ID";
2307      } elsif ($colName eq 'protlink') {      } elsif ($colName eq 'protlink') {
2308          $retVal = "NMPDR Protein Page";          $retVal = "NMPDR Protein Page";
2309      } elsif ($colName eq 'subsystem') {      } elsif ($colName eq 'subsystem') {
# Line 2345  Line 2376 
2376          ($retVal) = $record->Value('Feature(assignment)');          ($retVal) = $record->Value('Feature(assignment)');
2377      } elsif ($colName eq 'gblink') {      } elsif ($colName eq 'gblink') {
2378          # Here we want a link to the GBrowse page using the official GBrowse button.          # Here we want a link to the GBrowse page using the official GBrowse button.
2379          $retVal = Formlet('GBrowse', "GetGBrowse.cgi", undef,          $retVal = FakeButton('GBrowse', "GetGBrowse.cgi", undef,
2380                            fid => $fid);                            fid => $fid);
2381      } elsif ($colName eq 'group') {      } elsif ($colName eq 'group') {
2382          # Get the NMPDR group name.          # Get the NMPDR group name.
# Line 2363  Line 2394 
2394          $retVal = $self->FeatureName($fid);          $retVal = $self->FeatureName($fid);
2395      } elsif ($colName eq 'protlink') {      } elsif ($colName eq 'protlink') {
2396          # Here we want a link to the protein page using the official NMPDR button.          # Here we want a link to the protein page using the official NMPDR button.
2397          $retVal = Formlet('NMPDR', "protein.cgi", undef,          $retVal = FakeButton('NMPDR', "protein.cgi", undef,
2398                            prot => $fid, SPROUT => 1, new_framework => 0,                            prot => $fid, SPROUT => 1, new_framework => 0,
2399                            user => '');                            user => '');
2400      }elsif ($colName eq 'subsystem') {      }elsif ($colName eq 'subsystem') {
# Line 2432  Line 2463 
2463          # Get the subsystems.          # Get the subsystems.
2464          Trace("Generating subsystems for feature $fid.") if T(4);          Trace("Generating subsystems for feature $fid.") if T(4);
2465          my %subs = $sprout->SubsystemsOf($fid);          my %subs = $sprout->SubsystemsOf($fid);
2466          # Convert them to links.          # Extract the subsystem names.
2467          my @links = map { HTML::sub_link($cgi, $_) } sort keys %subs;          my @names = map { HTML::sub_link($cgi, $_) } sort keys %subs;
2468          # String them into a list.          # String them into a list.
2469          $retVal = join(", ", @links);          $retVal = join(", ", @names);
2470      } elsif ($type =~ /^keyword:(.+)$/) {      } elsif ($type =~ /^keyword:(.+)$/) {
2471          # Here the caller wants the value of the named keyword. The text is the          # Here the caller wants the value of the named keyword. The text is the
2472          # feature ID.          # feature ID.
# Line 2557  Line 2588 
2588      if (! @wordList) {      if (! @wordList) {
2589          if ($required) {          if ($required) {
2590              $self->SetMessage("No search words specified.");              $self->SetMessage("No search words specified.");
2591            } else {
2592                $retVal = 1;
2593          }          }
2594      } elsif (! @plusWords) {      } elsif (! @plusWords) {
2595          $self->SetMessage("At least one keyword must be positive. All the keywords entered are preceded by minus signs.");          $self->SetMessage("At least one keyword must be positive. All the keywords entered are preceded by minus signs.");
# Line 2567  Line 2600 
2600      return $retVal;      return $retVal;
2601  }  }
2602    
2603    =head3 FakeButton
2604    
2605    C<< my $html = SearchHelper::FakeButton($caption, $url, $target, %parms); >>
2606    
2607    Create a fake button that hyperlinks to the specified URL with the specified parameters.
2608    Unlike a real button, this one won't visibly click, but it will take the user to the
2609    correct place.
2610    
2611    The parameters of this method are deliberately identical to L</Formlet> so that we
2612    can switch easily from real buttons to fake ones in the code.
2613    
2614    =over 4
2615    
2616    =item caption
2617    
2618    Caption to be put on the button.
2619    
2620    =item url
2621    
2622    URL for the target page or script.
2623    
2624    =item target
2625    
2626    Frame or target in which the new page should appear. If C<undef> is specified,
2627    the default target will be used.
2628    
2629    =item parms
2630    
2631    Hash containing the parameter names as keys and the parameter values as values.
2632    These will be appended to the URL.
2633    
2634    =back
2635    
2636    =cut
2637    
2638    sub FakeButton {
2639        # Get the parameters.
2640        my ($caption, $url, $target, %parms) = @_;
2641        # Declare the return variable.
2642        my $retVal;
2643        # Compute the target URL.
2644        my $targetUrl = "$url?" . join(";", map { "$_=" . uri_escape($parms{$_}) } keys %parms);
2645        # Compute the target-frame HTML.
2646        my $targetHtml = ($target ? " target=\"$target\"" : "");
2647        # Assemble the result.
2648        return "<a href=\"$targetUrl\" $targetHtml><div class=\"button2 button\">$caption</div></a>";
2649    }
2650    
2651  =head3 Formlet  =head3 Formlet
2652    
2653  C<< my $html = SearchHelper::Formlet($caption, $url, $target, %parms); >>  C<< my $html = SearchHelper::Formlet($caption, $url, $target, %parms); >>

Legend:
Removed from v.1.18  
changed lines
  Added in v.1.25

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3