[Bio] / FigWebServices / get_dlits.cgi Repository:
ViewVC logotype

Diff of /FigWebServices/get_dlits.cgi

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

revision 1.4, Sat Jun 28 20:56:11 2008 UTC revision 1.10, Wed Jul 9 15:59:57 2008 UTC
# Line 1  Line 1 
1  # -*- perl -*-  # -*- perl -*-
2  #  #
3  # Copyright (c) 2003-2006 University of Chicago and Fellowship  # Copyright (c) 2003-2008 University of Chicago and Fellowship
4  # for Interpretations of Genomes. All Rights Reserved.  # for Interpretations of Genomes. All Rights Reserved.
5  #  #
6  # This file is part of the SEED Toolkit.  # This file is part of the SEED Toolkit.
# Line 16  Line 16 
16  # http://www.theseed.org/LICENSE.TXT.  # http://www.theseed.org/LICENSE.TXT.
17  #  #
18    
19    #
20    #  DBMS tables used:
21    #
22    #     dlit
23    #     flds => "status char(1), md5_hash varchar(32), pubmed varchar(16), curator varchar(30), go_code varchar(15)"
24    #
25    #     titles
26    #     flds => "pubmed varchar(16), title varchar(1000)"
27    #
28    #     hash_role
29    #     flds => "md5_hash char(32), role varchar(1000)"
30    #
31    #     curr_role
32    #     flds => "curator varchar(30), role varchar(1000)"
33    #
34    #     genome_hash
35    #     flds => "genome varchar(32), md5_hash char(32)"
36    #
37    
38  use FIG;  use FIG;
39  my $fig = new FIG;  my $fig = new FIG;
# Line 60  Line 78 
78  my $html = [];  my $html = [];
79  unshift @$html, "<TITLE>Get Dlits</TITLE>\n";  unshift @$html, "<TITLE>Get Dlits</TITLE>\n";
80    
81  my $user      = $cgi->param('user');  my $user      = $cgi->param('user');           #  Current user
82  my $curator   = $cgi->param('curator');  my $curator   = $cgi->param('curator') || '';  #  Filter roles by subsystem curator
83  my $role      = $cgi->param('role');  my $genomeD   = $cgi->param('genomeD');        #  Find lit by genome
84  my $submit1   = $cgi->param('Show Genomes');  my $ref_id    = $cgi->param('ref_id');         #  Show data by reference
85  my $submit2   = $cgi->param('Show Roles');  my $role      = $cgi->param('role');           #  Find lit by role
86  my $submit3   = $cgi->param('Show Genome');  my $show_just = $cgi->param('show_just');      #  Filter lit by status
 my $submit4   = $cgi->param('Show Role');  
 my $show_just = $cgi->param('show_just');  
87     $show_just = ($show_just eq "all") ? '' : $show_just;     $show_just = ($show_just eq "all") ? '' : $show_just;
88    
89  my $genomeD   = $cgi->param('genomeD');  #  Requested actions:
90  my $submit5   = $cgi->param('Process Changes');  
91    my ( $submit1, $submit2, $submit3, $submit4, $submit5 );
92    if    ( $cgi->param( 'Process Changes' )          ) { $submit5 = 1 }
93    if    ( $ref_id                                   ) {}
94    elsif ( $cgi->param( 'Change subsystem curator' ) ) {}
95    elsif ( $cgi->param( 'Show Genomes' )             ) { $submit1 = 1 }
96    elsif ( $cgi->param( 'Show Roles' )               ) { $submit2 = 1 }
97    elsif ( $cgi->param( 'Show Genome' )              ) { $submit3 = 1 }
98    elsif ( $cgi->param( 'Show Role' )                ) { $submit4 = 1 }
99    
100    my $done = 0;
101    
102  my $rdbH  = $fig->db_handle;  my $rdbH  = $fig->db_handle;
103    
104  if (! $user)  if (! -d "$FIG_Config::data/Dlits")
105  {  {
106      push(@$html,$cgi->h1('you need to set user= in the URL'));      push( @$html, $cgi->h1("dlit data are not installed") );
107        $done = 1;
108  }  }
109  elsif (! -d "$FIG_Config::data/Dlits")  elsif ( ! $user )
110  {  {
111      push(@$html,$cgi->h1("dlit data not installed"));      push( @$html, $cgi->h2('To curate literature, please provide a user name') );
112        push( @$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
113                      'Username: ',
114                      $cgi->textfield( -name=>"user", -size => 20 ),
115                      $cgi->br,
116                      $cgi->submit( 'Set user' ),
117                      $cgi->end_form
118            );
119        $done = 1;
120  }  }
121  elsif ($submit5)  
122    #  Process a page of curated literature ----------------------------------------
123    
124    if ( $submit5 && ! $done )
125  {  {
126      &process_changes($fig,$cgi,$html);      &process_changes($fig,$cgi,$html);
127        my $prev_req = $cgi->param( 'prev_req' );
128        $submit3 = 1 if $prev_req eq 'Show Genome';
129        $submit4 = 1 if $prev_req eq 'Show Role';
130  }  }
131  elsif ($submit1)  
132    #  If there is a problem, skip the rest of the action tests --------------------
133    #  This is organized this way so that a useful page can be
134    #  provided after processing a curated page.
135    
136    if ( $done ) { }
137    
138    #  All sequences in a reference ------------------------------------------------
139    
140    elsif ( $ref_id )
141  {  {
142      my $where   = $show_just ? "AND (dlits.status = '$show_just ') " : "";      my $and_status = $show_just ? " AND ( dlits.status = '$show_just' )" : '';
143      my $genomes = $rdbH->SQL("select DISTINCT genome_hash.genome from genome_hash,dlits WHERE genome_hash.md5_hash = dlits.md5_hash $where");      my $tuples = $rdbH->SQL( "SELECT DISTINCT status,md5_hash,curator
144      my @genomes = sort map { &compute_genome_label($fig,$_->[0]) } @$genomes;                                FROM dlits
145                                  WHERE ( pubmed = '$ref_id' )"
146                                  . $and_status
147                               );
148        my @to_display = ();
149        foreach my $x ( @$tuples )
150        {
151            my( $status, $hash, $prev_curator ) = @$x;
152            my @pegs = grep { $fig->is_real_feature($_) }
153                       $fig->pegs_with_md5( $hash );
154            if ( @pegs > 0 )
155            {
156                push( @to_display, [ $status, $pegs[0], $ref_id, $prev_curator ] );
157            }
158        }
159    
160      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),      &display_set( $fig, $cgi, $html, \@to_display, "Genes linked to Reference: $ref_id", 'Show Reference' ) ;
161                   $cgi->hidden(-name => 'user', -value=>$user),  }
162                   $cgi->hidden(-name => 'show_just', -value=>$show_just),  
163                   $cgi->hidden(-name => 'curator', -value=> $curator),  #  Literature selected by role -------------------------------------------------
164                   $cgi->scrolling_list( -name   => 'genomeD',  
165                                         -values => [@genomes],  elsif ( $submit4 && $role )
166                                         -size   => 30  {
167                                       ),      my $roleQ = quotemeta $role;
168                   $cgi->br,      my $and_status = $show_just ? " AND ( dlits.status = '$show_just' )" : '';
169                   $cgi->submit( 'Show Genome' ),      my $tuples = $rdbH->SQL( "SELECT DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed,dlits.curator
170                   $cgi->end_form                                FROM hash_role,dlits
171                                  WHERE hash_role.role = '$roleQ' AND hash_role.md5_hash = dlits.md5_hash"
172                                  . $and_status
173           );           );
174        my @to_display = ();
175        foreach my $x ( @$tuples )
176        {
177            my( $status, $hash, $pubmed, $prev_curator ) = @$x;
178            my @pegs = grep { $fig->is_real_feature($_) }
179                       $fig->pegs_with_md5( $hash );
180            if ( @pegs > 0 )
181            {
182                push( @to_display, [ $status, $pegs[0], $pubmed, $prev_curator ] );
183            }
184        }
185    
186        &display_set( $fig, $cgi, $html, \@to_display, "Genes for Role: $role", 'Show Role' );
187  }  }
188  elsif ($submit2)  
189    #  Show the role list ----------------------------------------------------------
190    
191    elsif ( $submit2 || $submit4 )
192  {  {
193        #  Did user request role literature, and not select a role?
194        push @$html, $cgi->h3( '<FONT Color=red>Please select a role.</FONT>' ) if $submit4;
195    
196      my $where1   = $show_just ? "AND (dlits.status = '$show_just ') " : "";      my $where1   = $show_just ? "AND (dlits.status = '$show_just ') " : "";
197      my $where2   = $curator ? "AND (curr_role.curator = '$curator' AND curr_role.role = hash_role.role) " : "";      my $where2   = $curator ? "AND (curr_role.curator = '$curator' AND curr_role.role = hash_role.role) " : "";
198    
199      my @roles = map { $_->[0] } @{$rdbH->SQL("select DISTINCT hash_role.role from hash_role,dlits,curr_role WHERE hash_role.md5_hash = dlits.md5_hash $where1  $where2")};      my @roles = sort { lc $a cmp lc $b }  #  Make sort case insensitive
200                    map { $_->[0] }
201                    @{ $rdbH->SQL( "SELECT DISTINCT hash_role.role
202                                    FROM hash_role,dlits,curr_role
203                                    WHERE hash_role.md5_hash = dlits.md5_hash $where1 $where2"
204                                 ) };
205      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
206                   $cgi->hidden(-name => 'user', -value=>$user),                   $cgi->hidden(-name => 'user', -value=>$user),
207                   $cgi->hidden(-name => 'show_just', -value=>$show_just),                    $cgi->hidden( -name => 'curator',  -value => $curator )
208                   $cgi->hidden(-name => 'curator', -value=> $curator),          );
209                   $cgi->scrolling_list( -name   => 'role',  
210        my $whom   = $curator ? "'$curator'" : "any one";
211        my $status = $show_just ? " with literature of status code '$show_just':" : ":";
212        push( @$html, $cgi->h3( "Subsystem roles curated by $whom" . $status ) );
213    
214        push( @$html, $cgi->scrolling_list( -name   => 'role',
215                                         -values => [@roles],                                         -values => [@roles],
216                                         -size   => 30                                         -size   => 30
217                                       ),                                       ),
218                   $cgi->br,                    $cgi->br, &show_just_selector( $cgi ),
219                   $cgi->submit( 'Show Role' ),                    $cgi->br, $cgi->submit( 'Show Role' ),
220                      $cgi->br, $cgi->submit( 'Show Genomes' ),
221                      $cgi->br, $cgi->submit( 'Change subsystem curator' ), " currently '$curator'.",
222                   $cgi->end_form                   $cgi->end_form
223           );           );
224  }  }
225  elsif ($submit3 && $genomeD && ($genomeD =~ /\((\d+\.\d+)\)/))  
226    #  Literature selected by genome -----------------------------------------------
227    
228    elsif ( $submit3 && $genomeD && ( $genomeD =~ /\((\d+\.\d+)\)$/ ) )
229  {  {
     my $where = $show_just ? " AND dlits.status = '$show_just'" : '';  
230      my $genome = $1;      my $genome = $1;
231      my $tuples = $rdbH->SQL("select DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed      my $where  = $show_just ? " AND (dlits.status = '$show_just')" : '';
232        my $tuples = $rdbH->SQL( "SELECT DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed,dlits.curator
233                                FROM genome_hash,dlits                                FROM genome_hash,dlits
234                                WHERE genome_hash.genome = '$genome' AND genome_hash.md5_hash = dlits.md5_hash $where");                                WHERE genome_hash.genome = '$genome' AND genome_hash.md5_hash = dlits.md5_hash $where"
235                               );
236      my @to_display = ();      my @to_display = ();
237      foreach my $x (@$tuples)      foreach my $x (@$tuples)
238      {      {
239          my($status,$hash,$pubmed) = @$x;          my ( $status, $hash, $pubmed, $prev_curator ) = @$x;
240          foreach my $peg ($fig->pegs_with_md5($hash))          push @to_display, map  { [ $status, $_, $pubmed, $prev_curator ] }
241          {                            grep { &FIG::genome_of($_) eq $genome && $fig->is_real_feature($_) }
242              if (&FIG::genome_of($peg) eq $genome)                            $fig->pegs_with_md5($hash);
             {  
                 push(@to_display,[$status,$peg,$pubmed]);  
243              }              }
244    
245        &display_set( $fig, $cgi, $html, \@to_display, "Genes for $genomeD", 'Show Genome' );
246          }          }
247      }  
248      &display_set($fig,$cgi,$html,\@to_display,'Genes for $genomeD','Show Genome');  #  Show genome list ------------------------------------------------------------
249  }  
250  elsif ($submit4)  elsif ( $submit1 || $submit3 )
 {  
     my $where = $show_just ? " AND dlits.status = '$show_just'" : '';  
     my $roleQ = quotemeta $role;  
     my $tuples = $rdbH->SQL("select DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed  
                               FROM hash_role,dlits,pubmed_titles  
                               WHERE hash_role.role = '$roleQ' AND hash_role.md5_hash = dlits.md5_hash $where");  
     my @to_display = ();  
     foreach my $x (@$tuples)  
     {  
         my($status,$hash,$pubmed) = @$x;  
         my @pegs = $fig->pegs_with_md5($hash);  
         if (@pegs > 0)  
251          {          {
252              push(@to_display,[$status,$pegs[0],$pubmed]);      #  Did user request genome literature, and not select a genome?
253          }      push @$html, $cgi->h3( '<FONT Color=red>Please select a genome.</FONT>' ) if $submit3;
254      }  
255      &display_set($fig,$cgi,$html,\@to_display,'Genes for Role: $role','Show Role');      my $where   = $show_just ? " AND (dlits.status = '$show_just')" : "";
256    
257        my $genomes = $rdbH->SQL( "SELECT DISTINCT genome_hash.genome
258                                   FROM genome_hash,dlits
259                                   WHERE genome_hash.md5_hash = dlits.md5_hash $where"
260                                );
261        my @genomes = sort { lc $a cmp lc $b }  #  Make sort case insensitive
262                      map { &compute_genome_label( $fig, $_->[0] ) }
263                      @$genomes;
264    
265        push( @$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
266                      $cgi->hidden( -name => 'user',     -value => $user ),
267                      $cgi->hidden( -name => 'curator',  -value => $curator ),
268                      $cgi->scrolling_list( -name   => 'genomeD',
269                                            -values => [@genomes],
270                                            -size   => 30
271                                          ),
272                      $cgi->br, &show_just_selector( $cgi ),
273                      $cgi->br, $cgi->submit( 'Show Genome' ),
274                      $cgi->br, $cgi->submit( 'Show Roles' ),
275                      $cgi->br, $cgi->submit( 'Change subsystem curator' ), " currently '$curator'.",
276                      $cgi->end_form
277             );
278  }  }
279    
280    #  Default = display subsystem curators ----------------------------------------
281    
282  else  else
283  {  {
284      my @cur  = map { $_->[0]} @{$rdbH->SQL( "SELECT DISTINCT curator FROM dlits" )};      my @cur  = map  { $_->[0] }
285                   sort { $a->[1] cmp $b->[1] || length $a->[0] <=> length $b->[0] }
286                   map  { my $cur = $_->[0];
287                          my $nam = lc $cur;
288                          $nam =~ s/^master[:_]?//;
289                          [ $cur, $nam ]
290                        }
291                   @{ $rdbH->SQL( "SELECT DISTINCT curator FROM dlits" ) };
292      my $curN = @cur;      my $curN = @cur;
293    
     my $show_just_opt =  $cgi->scrolling_list( -name   => 'show_just',  
                                                -values => ['all',' ','D','R','N','G'],  
                                                -default => 'all',  
                                                -override => 1,  
                                                -size   => 1  
                                      ),  
   
294      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
295                   $cgi->hidden(-name => 'user', -value=>$user),                   $cgi->hidden(-name => 'user', -value=>$user),
296                   $cgi->scrolling_list( -name   => 'curator',                   $cgi->scrolling_list( -name   => 'curator',
297                                         -values => [ @cur ],                                         -values => [ @cur ],
298                                              -size   => $curN                                              -size   => $curN
299                                              ),                                              ),
                  $cgi->scrolling_list( -name   => 'show_just',  
                                        -values => ['all',' ','D','R','N','G'],  
                                        -default => 'all',  
                                        -override => 1,  
                                        -size   => 1  
                                        ),  
300                   $cgi->br,                   $cgi->br,
301                      &show_just_selector( $cgi ),
302                   $cgi->submit( 'Show Roles' ),                   $cgi->submit( 'Show Roles' ),
303                   $cgi->br,                   $cgi->br,
304                   $cgi->submit( 'Show Genomes' ),                   $cgi->submit( 'Show Genomes' ),
305                   $cgi->end_form                   $cgi->end_form
306           );           );
307  }  }
   
308  &HTML::show_page($cgi,$html);  &HTML::show_page($cgi,$html);
309    exit;
310    
311    
312    sub show_just_selector
313    {
314        my ( $cgi, $html ) = @_;
315        my $default = $cgi->param( 'show_just' );
316        $default =~ /^[ A-Z]$/ or $default = 'all';
317        return 'Show literature links with all status codes, or pick a specific one: '
318              . $cgi->scrolling_list( -name     => 'show_just',
319                                      -values   => ['all',' ','D','R','N','G'],
320                                      -default  => $default,
321                                      -override => 1,
322                                      -size     => 1
323                                    )
324              . $cgi->br;
325    }
326    
327    
328  sub compute_genome_label  sub compute_genome_label
329  {  {
# Line 207  Line 333 
333      return "$gs ($org)";      return "$gs ($org)";
334  }  }
335    
336    
337  sub title_of {  sub title_of {
338      my($fig,$pubmed) = @_;      my($fig,$pubmed) = @_;
339    
340      my $rdbH  = $fig->db_handle;      my $rdbH  = $fig->db_handle;
341      my $retval = $rdbH->SQL( "SELECT title FROM pubmed_titles WHERE (pubmed = $pubmed)");      my $retval = $rdbH->SQL( "SELECT title
342                                  FROM pubmed_titles
343                                  WHERE (pubmed = $pubmed)"
344                               );
345      return (@$retval > 0) ? $retval->[0]->[0] : "";      return (@$retval > 0) ? $retval->[0]->[0] : "";
346  }  }
347    
348    
349    sub pubmed_link
350    {
351        return "<a target=_blank href=http://www.ncbi.nlm.nih.gov/sites/entrez?db=pubmed&cmd=search&term=$_[0]>$_[0]</a>";
352    }
353    
354    
355  sub display_set {  sub display_set {
356      my($fig,$cgi,$html,$to_display,$tab_title,$submit) = @_;      my($fig,$cgi,$html,$to_display,$tab_title,$submit) = @_;
357    
     my $from = $cgi->param('from_line');  
     if (! $from) { $from = 0 }  
     my $lines_left = 100;  
   
358      my %status_code = ( 'D' => 1, ' ' => 2, 'N' => 3, 'R' => 4, 'G' => 5);      my %status_code = ( 'D' => 1, ' ' => 2, 'N' => 3, 'R' => 4, 'G' => 5);
359    
360      my $col_hdrs = [' ','G','N','R','D','PEG','Function','Genus/Species','PubMed','Title'];      #  @$to_distplay items are [ $status, $peg, $pubmed ]
361      my $tab = [];  
362      foreach $_ (@$to_display) { $_->[0] =~ s/^\s*$/ /; }      foreach $_ ( @$to_display ) { $_->[0] =~ s/^\s*$/ /; }  # fix empty status strings
363      my @tuples = sort { ($status_code{$a->[0]} <=> $status_code{$b->[0]}) or &FIG::by_fig_id($a->[1],$b->[1]) } @$to_display;      my @tuples = sort { ( $status_code{$a->[0]} <=> $status_code{$b->[0]} )
364                         or &FIG::by_fig_id( $a->[1], $b->[1] )
365                         or ( $a->[2] <=> $b->[2] )  # Numeric sort of PMID
366                          }
367                     @$to_display;
368      my $total_tuples = @tuples;      my $total_tuples = @tuples;
369    
370      if (@tuples > 0) { splice(@tuples,0,$from); $from = $from + $lines_left; splice(@tuples,$lines_left) }      my $from;                    #  Offset to first item displayed
371        my $n_per_page = 100;        #  Really the lines per page
372    
373        if ( $cgi->param( 'Go to item numbers' ) )
374        {
375            $from = $cgi->param( 'offset_select' );
376        }
377        else
378        {
379            $from  = $cgi->param( 'from_line' ) || 0;
380            $from -= $n_per_page if $cgi->param( 'Previous page' );
381            $from += $n_per_page if $cgi->param( 'Next page' );
382        }
383    
384        #  Cut down the array to that to be displayed
385    
386        if ( $total_tuples > 0 )
387        {
388            if ( $from < 0 ) { $from = 0 }
389            if ( $from > $total_tuples )
390            {
391                $from = $n_per_page * int( ( $total_tuples - 1 ) / $n_per_page );
392            }
393            splice( @tuples, 0, $from );
394            splice( @tuples, $n_per_page );
395        }
396      else      else
397      {      {
398          undef $from;          undef $from;
399      }      }
400    
401      my $i;      # Add status code key at top of page
402    
403      &desc($html);      &desc($html);
404    
405        # Build the html form
406    
407        push( @$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post') );
408    
409        #  Current user
410        my $user = $cgi->param('user');
411        push( @$html, $cgi->hidden( -name => 'user', -value => $user, -override => 1 ) );
412    
413        #  Filter roles by subsystem curator
414        my $curator = $cgi->param('curator');
415        push( @$html, $cgi->hidden( -name => 'curator', -value => $curator, -override => 1 ) ) if $curator;
416    
417        #  Find lit by genome
418        my $genomeD = $cgi->param('genomeD');
419        push( @$html, $cgi->hidden( -name => 'genomeD', -value => $genomeD, -override => 1 ) ) if $genomeD;
420    
421        #  Show sequences associated with a reference
422        my $ref_id = $cgi->param('ref_id');
423        push( @$html, $cgi->hidden( -name => 'ref_id', -value => $ref_id, -override => 1 ) ) if $ref_id;
424    
425        #  Find lit by role
426        my $role = $cgi->param('role');
427        push( @$html, $cgi->hidden( -name => 'role', -value => $role, -override => 1 ) ) if $role;
428    
429        #  Requested action
430        push( @$html, $cgi->hidden( -name => 'prev_req', -value => $submit, -override => 1 ) ) if $submit;
431    
432        #  Used to inherit action
433        push( @$html, $cgi->hidden( -name => $submit, -value => 1, -override => 1 ) ) if $submit;
434    
435        push( @$html, $cgi->br );
436    
437        #  If this is not a table built around one reference, we want to append
438        #  links to all proteins associated with the reference.  We will
439        #  compute this on a unique set of the references:
440    
441        my %genes_in_pub;
442        if ( ! $ref_id )
443        {
444            foreach ( @tuples )
445            {
446                my $pub = $_->[2];
447                next if defined $genes_in_pub{ $pub };
448                #  This count intentionally omits filtering by status
449                $genes_in_pub{ $pub } = scalar ( &all_seqs_in_pub( $fig, $pub ) );
450            }
451        }
452    
453        #  Build the status selection table
454    
455        my $col_hdrs = [' ','G','N','R','D','Curator','PEG','Function','Genus/Species','PubMed','Title'];
456        my $tab = [];
457        my $i;
458      for ($i=0; ($i < @tuples); $i++)      for ($i=0; ($i < @tuples); $i++)
459      {      {
460          my $tuple = $tuples[$i];          my $tuple = $tuples[$i];
461          my($status,$peg,$pubmed) = @$tuple;          my( $status, $peg, $pubmed, $prev_curator ) = @$tuple;
462          next if (! $fig->is_real_feature($peg));          next if ( ! $fig->is_real_feature($peg) );   # This should never fail
463    
464            $prev_curator =~ s/^master://i;  #  Remove master from displayed curator
465          my $gs = $fig->genus_species(&FIG::genome_of($peg));          my $gs = $fig->genus_species(&FIG::genome_of($peg));
466          $gs =~ s/^(\S+)\s+(\S+).*$/$1/;          $gs =~ s/^(\S+\s+\S+).*$/$1/;
467          my $title = &title_of($fig,$pubmed);          my $title = &title_of($fig,$pubmed);
468          my $func = $fig->function_of($peg);          my $func = $fig->function_of($peg);
469          my @codes = $cgi->radio_group(-name => "tuple:$peg:$pubmed:$status",          my @codes = $cgi->radio_group(-name => "tuple:$peg:$pubmed:$status",
470                                        -values => [' ','G','N','R','D'],                                        -values => [' ','G','N','R','D'],
471                                        -default => "$status",                                        -default => "$status",
472                                        -nolabels => 1);                                         -nolabels => 1
473                                         );
474    
475            my $pub_link = &pubmed_link( $pubmed );
476    
477            #  Does this paper cover more than one protein?
478    
479            if ( $genes_in_pub{ $pubmed } > 1 )
480            {
481                #  This link intentionally omits filtering by status
482                my $href = "get_dlits.cgi?user=$user&ref_id=$pubmed";
483                $pub_link .= "<BR />(<A HRef='$href' Target=_blank>$genes_in_pub{$pubmed} seqs</A>)";
484            }
485          if (($i % 15) == 14) { push(@$tab,$col_hdrs) }          if (($i % 15) == 14) { push(@$tab,$col_hdrs) }
486          push(@$tab,[@codes,&HTML::fid_link($cgi,$peg),$func,$gs,          push( @$tab, [ @codes, $prev_curator, &HTML::fid_link( $cgi, $peg ), $func, $gs, $pub_link, $title ] );
                     "<a target=_blank href=http://www.ncbi.nlm.nih.gov/sites/entrez?db=pubmed&cmd=search&term=$pubmed>$pubmed</a>",  
                     $title]);  
487      }      }
     push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),  
                  $cgi->hidden(-name => 'user', -value=>$user),  
                  $cgi->br,  
          );  
488    
489      push(@$html,&HTML::make_table($col_hdrs,$tab,$tab_title));      push(@$html,&HTML::make_table($col_hdrs,$tab,$tab_title));
490      if (defined($from))  
491        push( @$html, $cgi->br, &show_just_selector( $cgi ) );
492    
493        #  Navigation controls through long lists
494    
495        if ( defined( $from ) && ( $total_tuples > $n_per_page ) )
496      {      {
497          my $genomeD = $cgi->param('genomeD');          my $i1 = $from + 1;
498          $genomeD = $genomeD ? $genomeD : "none";          my $i2 = $from + $n_per_page;
499          push(@$html,"<br>To get the next 100 (out of $total_tuples)",          $i2 = $total_tuples if $i2 > $total_tuples;
500                      $cgi->hidden(-name => 'from_line', -value => $from, -override => 1),          push( @$html, $cgi->hidden( -name => 'from_line', -value => $from, -override => 1 ) );
501                      $cgi->hidden(-name => 'genomeD', -value => "$genomeD"),          push( @$html, $cgi->br, "Currently displaying items $i1 - $i2 of $total_tuples.", $cgi->br );
502                      $cgi->submit($submit));          push( @$html, $cgi->submit( 'Previous page' ) ) if $from > 0;
503            push( @$html, $cgi->submit( 'Next page' ) ) if $i2 < $total_tuples;
504    
505            my @offsets;
506            my %labels;
507            for ( my $i = 0; $i < $total_tuples; $i += $n_per_page )
508            {
509                push @offsets, $i;
510                my $imax = $i + $n_per_page;
511                $imax = $total_tuples if $imax > $total_tuples;
512                $labels{ $i } = ( $i+1 ) . " - $imax";
513            }
514            push( @$html, $cgi->submit( 'Go to item numbers' ),
515                          $cgi->scrolling_list( -name     => 'offset_select',
516                                                -values   => \@offsets,
517                                                -labels   => \%labels,
518                                                -default  => $from,
519                                                -size     => 1,
520                                                -override => 1
521                                              ),
522                          $cgi->br );
523        }
524    
525        #  Some action buttons:
526    
527        push( @$html, $cgi->br, $cgi->submit( 'Process Changes' ), "entered on this page." );
528    
529        #  Display some general navigation buttons.  However, these are not
530        #  consistent with the intended use of the publication-based view.
531    
532        if ( ! $ref_id )
533        {
534            push( @$html, $cgi->br, $cgi->submit( 'Show Genomes' ), "discarding any changes made on this page." );
535            if ( $curator )
536            {
537                push( @$html, $cgi->br, $cgi->submit( 'Show Roles' ),
538                                        "for subsystem curator '$curator', discarding any changes made on this page." );
539            }
540            push( @$html, $cgi->br, $cgi->submit( 'Change subsystem curator' ), " currently '$curator', discarding any changes made on this page." );
541      }      }
542      push(@$html,$cgi->br,$cgi->submit('Process Changes'));  
543      push(@$html,$cgi->end_form);      push(@$html,$cgi->end_form);
544  }  }
545    
546    
547    #     dlit
548    #     flds => "status char(1), md5_hash varchar(32), pubmed varchar(16), curator varchar(30), go_code varchar(15)"
549    
550    sub all_seqs_in_pub {
551        my ( $fig, $pubmed, $status ) = @_;
552        my $rdbH = $fig->db_handle;
553        my $and_status = $status ? " AND ( status = '$status' )" : "";
554        my $response = $rdbH->SQL( "SELECT DISTINCT md5_hash
555                                    FROM dlits
556                                    WHERE ( pubmed = '$pubmed' )"
557                                        . $and_status
558                                 );
559        return ( ref $response ) ? map { $_->[0] } @$response : ();
560    }
561    
562    
563  sub desc {  sub desc {
564      my($html) = @_;      my($html) = @_;
565    
566      my $col_hdrs = ["Code","Meaning"];      my $col_hdrs = ["Code","Meaning"];
567      my $tab      = [[" ","No one has looked at it yet"],      my $tab      = [ [ [" ","TD Align=center"], "No one has curated this link yet" ],
568                      ["G","Genome paper - mark it irrelevant everywhere"],                       [ ["G","TD Align=center"], "Genome paper - marks all uncurated protein links of this paper to 'G' (implicitly irrelevant)" ],
569                      ["N","Not relevant"],                       [ ["N","TD Align=center"], "Not relevant to this protein" ],
570                      ["R","Relevant, but not strong enough to determine function"],                       [ ["R","TD Align=center"], "Relevant, but not strong enough to determine function" ],
571                      ["D","Direct reference that can be used to support function assertion"]                       [ ["D","TD Align=center"], "Direct reference that can be used to support function assertion" ]
572                     ];                     ];
573      push(@$html,&HTML::make_table($col_hdrs,$tab,"Code Meanings"),"<hr>");      push(@$html,&HTML::make_table($col_hdrs,$tab,"Code Meanings"),"<hr>");
574  }  }
575    
576    
577  sub process_changes {  sub process_changes {
578      my($fig,$cgi,$html) = @_;      my($fig,$cgi,$html) = @_;
579        my $user = $cgi->param('user');
580    
581      my @tuples = grep { $_->[2] ne $_->[3] }      my @tuples = grep { $_->[2] ne $_->[3] }
582                   map { ($_ =~ /^tuple:(fig\|\d+\.\d+\.peg\.\d+)\s*:\s*(\d+)\s*:([ RDGN])/) ? [$1,$2,$3,$cgi->param($_)] : () }                   map { ($_ =~ /^tuple:(fig\|\d+\.\d+\.peg\.\d+)\s*:\s*(\d+)\s*:([ RDGN])/) ? [$1,$2,$3,$cgi->param($_)] : () }
583                   $cgi->param();                   $cgi->param();
584      my $user = $cgi->param('user');      my $n_change = 0;
585      foreach my $tuple (@tuples)      foreach my $tuple (@tuples)
586      {      {
587          my($peg,$pubmed,$from,$to) = @$tuple;          my($peg,$pubmed,$from,$to) = @$tuple;
# Line 306  Line 591 
591                          -curator  => $user,                          -curator  => $user,
592                          -override => 1                          -override => 1
593                        );                        );
594            $n_change++;
595      }      }
596      push(@$html,$cgi->h2('made the requested changes'));  
597        push( @$html, $cgi->h2( "<FONT Color=green>Made $n_change requested changes.</FONT>" ) );
598  }  }
599    
600    

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.10

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3