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

Annotation of /FigWebServices/cv.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (view) (download)

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3