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

Annotation of /FigWebServices/cv.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.16 - (view) (download)

1 : mkubal 1.1 # -*- perl -*-
2 : olson 1.16 #
3 :     # Copyright (c) 2003-2006 University of Chicago and Fellowship
4 :     # 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 : mkubal 1.1 use InterfaceRoutines;
20 :     use FIG;
21 :     use FIG_Config;
22 :     use URI::Escape; # uri_escape
23 :     use HTML;
24 :     use Data::Dumper;
25 :     #use strict;
26 :     use GenoGraphics;
27 :     use CGI;
28 :     use Tracer;
29 :    
30 :     my $cgi = new CGI;
31 :    
32 :     use HTML;
33 :     use raelib;
34 :     my $raelib=new raelib;
35 :    
36 :     use LWP::Simple qw(!head); # see the caveat in perldoc LWP about importing two head methods.
37 :    
38 :    
39 : efrank 1.3 my $peg;
40 : mkubal 1.6 if ($cgi->param('prot') )
41 :     {
42 : efrank 1.3 $peg = $cgi->param('prot');
43 : mkubal 1.6 }
44 :     else
45 :     {
46 : efrank 1.3 $peg = $cgi->param('prot');
47 :     my(@html);
48 :     push(@html, $cgi->p("Parameter error- prot is required."));
49 :     &HTML::show_page($cgi, \@html, 1);
50 :     exit;
51 :     }
52 :    
53 :     # a global for the results of a search. overridden by an actual search
54 :    
55 :     my $search_results= [];
56 :    
57 : efrank 1.4 my $error_message = "";
58 : efrank 1.3
59 :    
60 :     my $user = "";
61 :     if ($cgi->param('user') ) {
62 :     $user = $cgi->param('user');
63 :     }
64 : mkubal 1.1
65 :     my $fig;
66 :     eval {
67 :     $fig = new FIG;
68 :     };
69 :    
70 :     if ($@ ne "")
71 :     {
72 :     my $err = $@;
73 :    
74 :     my(@html);
75 :    
76 :     push(@html, $cgi->p("Error connecting to SEED database."));
77 :     if ($err =~ /Could not connect to DBI:.*could not connect to server/)
78 :     {
79 :     push(@html, $cgi->p("Could not connect to relational database of type $FIG_Config::dbms named $FIG_Config::db on port $FIG_Config::dbport."));
80 :     }
81 :     else
82 :     {
83 :     push(@html, $cgi->pre($err));
84 :     }
85 :     &HTML::show_page($cgi, \@html, 1);
86 :     exit;
87 :     }
88 :    
89 :     my $html = [];
90 :    
91 :     my $ids;
92 :     my $tag_to_id;
93 :     my $inputs;
94 :    
95 :     if ($cgi->param('request') eq "Delete Checked Terms")
96 :     {
97 : mkubal 1.7 if (!$cgi->param('user'))
98 :     {
99 :     my(@html);
100 :     push(@html, $cgi->p("You must be logged in as a user to edit controlled vocabulary terms."));
101 :     &HTML::show_page($cgi, \@html, 1);
102 :     exit;
103 :     }
104 :     else
105 :     {
106 :     my %id_term_to_source;
107 :     my @checked;
108 :     my @param_list = $cgi->param();
109 :     if (@param_list)
110 : mkubal 1.1 {
111 : mkubal 1.7 foreach my $p (@param_list)
112 :     {
113 :     if ( $p=~/delete_checked/)
114 :     {
115 :     if($cgi->param($p))
116 :     {
117 :     $value = $cgi->param($p);
118 :     push(@checked,$value)
119 :     }
120 :     }
121 :     }
122 : mkubal 1.6
123 : mkubal 1.7 for my $c (@checked)
124 :     {
125 :     @temp = split('split_here',$c);
126 :     $id_term_to_source{$temp[1]} = $temp[0];
127 :     }
128 :     }
129 :     &delete_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
130 :     }
131 : mkubal 1.1 }
132 :     elsif ($cgi->param('request') eq "Search Selected Controlled Vocabulary")
133 :     {
134 : efrank 1.3 if ( $cgi->param('search_term') && $cgi->param('select_cv') ) {
135 :     $search_term=$cgi->param('search_term');
136 :     $cv=$cgi->param('select_cv');
137 : efrank 1.14 $search_results = $fig->search_cv_file($cv,$search_term);
138 : efrank 1.3 }
139 : mkubal 1.1 }
140 : mkubal 1.2 elsif ($cgi->param('request') eq "Add New Terms")
141 :     {
142 : mkubal 1.7 if (!$cgi->param('user'))
143 :     {
144 :     my(@html);
145 :     push(@html, $cgi->p("You must be logged in as a user to edit controlled vocabulary terms."));
146 :     &HTML::show_page($cgi, \@html, 1);
147 :     exit;
148 :     }
149 :     else
150 :     {
151 :     my %id_term_to_source;
152 :     my @checked;
153 :     my @param_list = $cgi->param();
154 :     if (@param_list)
155 : mkubal 1.2 {
156 : mkubal 1.7 foreach my $p (@param_list)
157 :     {
158 :     if ( $p=~/add_checked/)
159 :     {
160 :     if($cgi->param($p))
161 :     {
162 :     $value = $cgi->param($p);
163 :     push(@checked,$value)
164 :     }
165 :     }
166 :     }
167 :    
168 :     for my $c (@checked)
169 :     {
170 :     @temp = split("split_here",$c);
171 :     $source = $temp[0];
172 :     $id_term = $temp[1];
173 :     $id_term_to_source{$id_term} =$source ;
174 :     }
175 :     }
176 :     &add_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
177 :    
178 : mkubal 1.2 }
179 :     }
180 :    
181 : mkubal 1.13 elsif ($cgi->param('request') eq "Add Term Manually")
182 : mkubal 1.1 {
183 : mkubal 1.7 if (!$cgi->param('user'))
184 :     {
185 :     my(@html);
186 :     push(@html, $cgi->p("You must be logged in as a user to edit controlled vocabulary terms."));
187 :     &HTML::show_page($cgi, \@html, 1);
188 :     exit;
189 :     }
190 :     else
191 :     {
192 :     my %id_term_to_source;
193 :     my $id_term;
194 :     if ( $cgi->param('manual_source') && $cgi->param('manual_id') && $cgi->param('manual_term') ) {
195 :     $manual_source=$cgi->param('manual_source');
196 :     $manual_id=$cgi->param('manual_id');
197 :     $manual_term=$cgi->param('manual_term');
198 : efrank 1.10 $id_term = $manual_id."; ".$manual_term;
199 : mkubal 1.7 $id_term_to_source{$id_term} = $manual_source;
200 :     &add_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
201 :     }
202 :     else
203 :     {
204 :     $error_message = "Error in 'Add Terms Manually': supply all three items correctly.";
205 :     }
206 : efrank 1.3 }
207 : mkubal 1.1 }
208 :     else
209 :     {
210 : efrank 1.5 #no op. Initial page display
211 : mkubal 1.1 }
212 :    
213 : efrank 1.3 &build_page($fig,$cgi,$html,$peg,$search_results);
214 : mkubal 1.1 &HTML::show_page($cgi,$html,1);
215 :     exit;
216 :    
217 :     sub delete_terms
218 :     {
219 :     my ($fig,$cgi,$html,$peg,$id_term_to_source) = @_;
220 : mkubal 1.6 my @id_term = keys(%{$id_term_to_source});
221 :     foreach my $it (@id_term)
222 :     {
223 : mkubal 1.7 $fig->delete_attribute($peg,$id_term_to_source->{$it},$it)
224 : mkubal 1.6 }
225 : mkubal 1.1 }
226 :    
227 : efrank 1.14 # moved to FIG.pm
228 :     #sub search_cv_file
229 :     #{
230 :     ## my ($fig,$cgi,$html,$peg,$cv,$search_term) =@_;
231 :     # my ($cv,$search_term) =@_;
232 : efrank 1.15 # $file = $FIG_Config::global."/CV/cv_search_".$cv.".txt";
233 : efrank 1.14 # if (! open(LOOKUP,"$file") ) {
234 :     # print STDERR "Search could not find vocabulary file, $file";
235 :     # return;
236 :     # }
237 :     # my @lines = <LOOKUP>;
238 :     # my @grep_results = grep(/$search_term/i,@lines);
239 :     # return [@grep_results];
240 :     #}
241 : mkubal 1.1
242 : mkubal 1.2 sub add_terms
243 : mkubal 1.1 {
244 : mkubal 1.13 print STDERR "add_terms called!\n";
245 : mkubal 1.2 my ($fig,$cgi,$html,$peg,$id_term_to_source) =@_ ;
246 :     my @id_term = keys(%{$id_term_to_source});
247 : mkubal 1.11 #my %sources={}; #in case someday we allow adds from >1 vocab at once
248 : mkubal 1.8 my $source;
249 : mkubal 1.11 my $user = $cgi->param('user');
250 :    
251 : mkubal 1.2 foreach my $it (@id_term)
252 :     {
253 : mkubal 1.11 $source = $id_term_to_source->{$it};
254 :     my @temp = split("; ",$it);
255 :     my $id = $temp[0];
256 :     my $term = $temp[1];
257 :     my $status = $fig->add_cv_term( $user, $peg, $source, $id, $term);
258 :     if (!$status) {
259 : mkubal 1.13 #print STDERR "$peg- Added ($source, $id, $term)\n";
260 :     #&HTML::show_page($cgi, \@html);
261 : mkubal 1.11 }
262 :     else
263 :     {
264 :     print STDERR "$peg- Error for ($source, $id, $term):\t$status\n";
265 :     my(@html);
266 :     push(@html, $cgi->p("$peg- Error for ($source, $id, $term):\t$status\n"));
267 : mkubal 1.13 &HTML::show_page($cgi, \@html, 1);
268 :     exit;
269 : mkubal 1.11 }
270 :    
271 :    
272 :     }
273 :    
274 :     #$sources{$source}=1; #build unique list of source names
275 :    
276 :    
277 :    
278 :     #my %key_info_hash;
279 :     #$key_info_hash{"is_cv"} = 1;
280 :     #$key_info_hash{"single"} = 0;
281 :     #$key_info_hash{"readonly"} = 1;
282 : mkubal 1.8
283 : mkubal 1.11 #$fig->key_info($source,\%key_info_hash);
284 : mkubal 1.8
285 : efrank 1.3 #&show_initial($fig,$cgi,$html,$peg);
286 : mkubal 1.1 }
287 :    
288 : efrank 1.3
289 :     sub build_page {
290 :     my ($fig,$cgi,$html,$peg,$search_results)=@_;
291 :    
292 :    
293 :     unshift(@$html, "<TITLE>Controlled Vocabulary Workbench for $peg</TITLE>\n");
294 :    
295 :     # Build seach results table
296 :    
297 :     @sr = @$search_results;
298 : efrank 1.10 my $add_col_hdrs = ["Add","Vocab. Name","ID; Term"];
299 : efrank 1.3 my $add_table_rows;
300 :     my $counter = 0;
301 :     for my $r (@sr)
302 :     {
303 :     @temp = split("\t",$r);
304 :     $row = [];
305 :     $cv=$cgi->param('select_cv');
306 :     $source = $cv;
307 :     $id= $temp[1];
308 :     $term = $temp[2];
309 : efrank 1.10 $id_and_term = $id."; ".$term;
310 : mkubal 1.6 $cb_value = $cv."split_here".$id."; ".$term;
311 : efrank 1.3 $cb ="<input type=checkbox name=add_checked_$counter value='$cb_value'>" ;
312 :     push(@$row,$cb);
313 :     push(@$row,$source);
314 :     push(@$row,$id_and_term);
315 :     push(@$add_table_rows,$row);
316 :     $counter = $counter + 1;
317 :     }
318 :    
319 :     my $add_terms_button="";
320 :     if ($counter > 0) {
321 :     $add_terms_button= $cgi->submit(-name=>'request', -value=>'Add New Terms');
322 :     }
323 :    
324 :     # build term deletions stuff
325 : mkubal 1.1
326 : efrank 1.10 my $delete_col_hdrs = ["Delete","Vocab. Name","ID; Term"];
327 : efrank 1.3 my @results = $fig->get_attributes($peg);
328 :     my $delete_table_rows;
329 :     my $counter =0;
330 :     for my $r (@results)
331 :     {
332 :     $row = [];
333 :     $source = $r->[1];
334 : mkubal 1.8 $cv_key_hash = $fig->key_info($source);
335 :     if($cv_key_hash->{"is_cv"} == 1)
336 :     {
337 :     $id_and_term = $r->[2];
338 :     $value = $source."split_here".$id_and_term;
339 :     $cb ="<input type=checkbox name='delete_checked_$counter' value='$value'>" ;
340 :     push(@$row,$cb);
341 :     push(@$row,$source);
342 :     push(@$row,$id_and_term);
343 :     push(@$delete_table_rows,$row);
344 :     $counter = $counter + 1;
345 :     }
346 : efrank 1.3 }
347 :    
348 :    
349 :     # build the page
350 : mkubal 1.9 my $user = $cgi->param('user');
351 : mkubal 1.8 my $link = "protein.cgi?prot=$peg&user=$user";
352 : efrank 1.3 push @$html,
353 :     #$cgi->start_multipart_form(),
354 :     $cgi->start_form(),
355 :     $cgi->hidden(-name=>'prot', -value=>'$peg'),
356 :     $cgi->hidden(-name=>'user', -value=>'$user'),
357 :     $cgi->br,
358 : efrank 1.10 "<a href=$link> Back to protein page</a>",
359 : efrank 1.3 $cgi->br,
360 :     "<h2>Controlled Vocabulary Workbench for $peg</h2>",
361 :     $cgi->hr,
362 : efrank 1.4 "<h1>$error_message</h1>",
363 :     $cgi->hr,
364 : efrank 1.3 "<h4>Current Terms Assigned To $peg </h4>\n",
365 :     &HTML::make_table($delete_col_hdrs,$delete_table_rows),
366 :     $cgi->br,
367 :     $cgi->submit(-name=>'request', -value=>'Delete Checked Terms'),
368 :     $cgi->end_form;
369 :    
370 :     push @$html,
371 :     $cgi->start_form(),
372 :     $cgi->hidden(-name=>'prot', -value=>'$peg'),
373 :     $cgi->hidden(-name=>'user', -value=>'$user'),
374 :     $cgi->hr,
375 :     $cgi->br,
376 :     "<h4>Search for New Terms to Add </h4>\n",
377 :     "<select name=select_cv>
378 : mkubal 1.2 <option value=GO >Gene Ontology</option>
379 : efrank 1.12 <option value=HUGO >HUGO Gene Nomenclature Committee</option>
380 : efrank 1.3 </select> &nbsp;&nbsp",
381 :     $cgi->textfield(-name => 'search_term', -size => 20),
382 :     $cgi->submit(-name=>'request', -value=>'Search Selected Controlled Vocabulary'),
383 :     $cgi->br,
384 :     $cgi->br,
385 :     &HTML::make_table($add_col_hdrs,$add_table_rows),
386 :     $cgi->br,
387 :     $add_terms_button,
388 :     $cgi->end_form;
389 :    
390 :     push @$html,
391 :     $cgi->start_form(),
392 :     $cgi->hidden(-name=>'prot', -value=>'$peg'),
393 :     $cgi->hidden(-name=>'user', -value=>'$user'),
394 :     $cgi->hr,
395 : mkubal 1.13 "<h4>Add Term Manually (WARNING: This is strongly discouraged to avoid data entry errors.)</h5>",
396 : efrank 1.3 "<h5>Vocabulary Name (single word, no spaces or punctuation), e.g., MyVocab </h5>\n",
397 : efrank 1.4 $cgi->textfield(-name => 'manual_source', -size => 48, -default=>'', -override=>1 ),
398 : efrank 1.3 "<h5>Term ID (single word, no spaces or punctuation), e.g., A147</h5>\n",
399 : efrank 1.4 $cgi->textfield(-name => 'manual_id', -size => 32, -default=>'', -override=>1),
400 : efrank 1.3 "<h5>Term text, e.g., catalytic activity</h5>\n",
401 : efrank 1.4 $cgi->textfield(-name => 'manual_term', -size => 70, -default=>'', -override=>1 ),
402 : efrank 1.3 $cgi->br,$cgi->br,
403 : efrank 1.10 $cgi->submit(-name=>'request', -value=>'Add Term Manually'),
404 : efrank 1.3 $cgi->br,
405 :     $cgi->hr,
406 :     $cgi->end_form;
407 : mkubal 1.1
408 : efrank 1.3 return $html;
409 : mkubal 1.2 }
410 : mkubal 1.1

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3