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

Annotation of /FigWebServices/get_dlits.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (view) (download)

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3