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

Annotation of /FigWebServices/cv.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (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 : mkubal 1.6 print STDERR "NEW LOAD of PAGE\n";
14 :    
15 : mkubal 1.1 my $cgi = new CGI;
16 :    
17 :     use HTML;
18 :     use raelib;
19 :     my $raelib=new raelib;
20 :    
21 :     use LWP::Simple qw(!head); # see the caveat in perldoc LWP about importing two head methods.
22 :    
23 :    
24 : efrank 1.3 my $peg;
25 : mkubal 1.6 if ($cgi->param('prot') )
26 :     {
27 : efrank 1.3 $peg = $cgi->param('prot');
28 : mkubal 1.6 }
29 :     else
30 :     {
31 : efrank 1.3 $peg = $cgi->param('prot');
32 :     my(@html);
33 :     push(@html, $cgi->p("Parameter error- prot is required."));
34 :     &HTML::show_page($cgi, \@html, 1);
35 :     exit;
36 :     }
37 :    
38 :     # a global for the results of a search. overridden by an actual search
39 :    
40 :     my $search_results= [];
41 :    
42 : efrank 1.4 my $error_message = "";
43 : efrank 1.3
44 :    
45 :     my $user = "";
46 :     if ($cgi->param('user') ) {
47 :     $user = $cgi->param('user');
48 :     }
49 : mkubal 1.1
50 :     my $fig;
51 :     eval {
52 :     $fig = new FIG;
53 :     };
54 :    
55 :     if ($@ ne "")
56 :     {
57 :     my $err = $@;
58 :    
59 :     my(@html);
60 :    
61 :     push(@html, $cgi->p("Error connecting to SEED database."));
62 :     if ($err =~ /Could not connect to DBI:.*could not connect to server/)
63 :     {
64 :     push(@html, $cgi->p("Could not connect to relational database of type $FIG_Config::dbms named $FIG_Config::db on port $FIG_Config::dbport."));
65 :     }
66 :     else
67 :     {
68 :     push(@html, $cgi->pre($err));
69 :     }
70 :     &HTML::show_page($cgi, \@html, 1);
71 :     exit;
72 :     }
73 :    
74 :     my $html = [];
75 :    
76 :     my $ids;
77 :     my $tag_to_id;
78 :     my $inputs;
79 :    
80 :     if ($cgi->param('request') eq "Delete Checked Terms")
81 :     {
82 : mkubal 1.7 if (!$cgi->param('user'))
83 :     {
84 :     my(@html);
85 :     push(@html, $cgi->p("You must be logged in as a user to edit controlled vocabulary terms."));
86 :     &HTML::show_page($cgi, \@html, 1);
87 :     exit;
88 :     }
89 :     else
90 :     {
91 :     my %id_term_to_source;
92 :     my @checked;
93 :     my @param_list = $cgi->param();
94 :     if (@param_list)
95 : mkubal 1.1 {
96 : mkubal 1.7 foreach my $p (@param_list)
97 :     {
98 :     if ( $p=~/delete_checked/)
99 :     {
100 :     if($cgi->param($p))
101 :     {
102 :     $value = $cgi->param($p);
103 :     push(@checked,$value)
104 :     }
105 :     }
106 :     }
107 : mkubal 1.6
108 : mkubal 1.7 for my $c (@checked)
109 :     {
110 :     @temp = split('split_here',$c);
111 :     $id_term_to_source{$temp[1]} = $temp[0];
112 :     }
113 :     }
114 :     &delete_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
115 :     }
116 : mkubal 1.1 }
117 :     elsif ($cgi->param('request') eq "Search Selected Controlled Vocabulary")
118 :     {
119 : efrank 1.3 if ( $cgi->param('search_term') && $cgi->param('select_cv') ) {
120 :     $search_term=$cgi->param('search_term');
121 :     $cv=$cgi->param('select_cv');
122 :     $search_results = &search($fig,$cgi,$html,$peg,$cv,$search_term);
123 :     }
124 : mkubal 1.1 }
125 : mkubal 1.2 elsif ($cgi->param('request') eq "Add New Terms")
126 :     {
127 : mkubal 1.7 if (!$cgi->param('user'))
128 :     {
129 :     my(@html);
130 :     push(@html, $cgi->p("You must be logged in as a user to edit controlled vocabulary terms."));
131 :     &HTML::show_page($cgi, \@html, 1);
132 :     exit;
133 :     }
134 :     else
135 :     {
136 :     my %id_term_to_source;
137 :     my @checked;
138 :     my @param_list = $cgi->param();
139 :     if (@param_list)
140 : mkubal 1.2 {
141 : mkubal 1.7 foreach my $p (@param_list)
142 :     {
143 :     if ( $p=~/add_checked/)
144 :     {
145 :     if($cgi->param($p))
146 :     {
147 :     $value = $cgi->param($p);
148 :     push(@checked,$value)
149 :     }
150 :     }
151 :     }
152 :    
153 :     for my $c (@checked)
154 :     {
155 :     @temp = split("split_here",$c);
156 :     $source = $temp[0];
157 :     $id_term = $temp[1];
158 :     $id_term_to_source{$id_term} =$source ;
159 :     }
160 :     }
161 :     &add_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
162 :    
163 : mkubal 1.2 }
164 :     }
165 :    
166 : efrank 1.4 elsif ($cgi->param('request') eq "Add Manual Term")
167 : mkubal 1.1 {
168 : mkubal 1.7 if (!$cgi->param('user'))
169 :     {
170 :     my(@html);
171 :     push(@html, $cgi->p("You must be logged in as a user to edit controlled vocabulary terms."));
172 :     &HTML::show_page($cgi, \@html, 1);
173 :     exit;
174 :     }
175 :     else
176 :     {
177 :     my %id_term_to_source;
178 :     my $id_term;
179 :     if ( $cgi->param('manual_source') && $cgi->param('manual_id') && $cgi->param('manual_term') ) {
180 :     $manual_source=$cgi->param('manual_source');
181 :     $manual_id=$cgi->param('manual_id');
182 :     $manual_term=$cgi->param('manual_term');
183 : efrank 1.10 $id_term = $manual_id."; ".$manual_term;
184 : mkubal 1.7 $id_term_to_source{$id_term} = $manual_source;
185 :     &add_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
186 :     }
187 :     else
188 :     {
189 :     $error_message = "Error in 'Add Terms Manually': supply all three items correctly.";
190 :     }
191 : efrank 1.3 }
192 : mkubal 1.1 }
193 :     else
194 :     {
195 : efrank 1.5 #no op. Initial page display
196 : mkubal 1.1 }
197 :    
198 : efrank 1.3 &build_page($fig,$cgi,$html,$peg,$search_results);
199 : mkubal 1.1 &HTML::show_page($cgi,$html,1);
200 :     exit;
201 :    
202 :     sub delete_terms
203 :     {
204 :     my ($fig,$cgi,$html,$peg,$id_term_to_source) = @_;
205 : mkubal 1.6 my @id_term = keys(%{$id_term_to_source});
206 :     foreach my $it (@id_term)
207 :     {
208 : mkubal 1.7 $fig->delete_attribute($peg,$id_term_to_source->{$it},$it)
209 : mkubal 1.6 }
210 : mkubal 1.1 }
211 :    
212 :     sub search
213 :     {
214 :     my ($fig,$cgi,$html,$peg,$cv,$search_term) =@_;
215 : efrank 1.4 $file = $FIG_Config::global."/cv_search_".$cv.".txt";
216 :     if (! open(LOOKUP,"$file") ) {
217 :     $error_message="Search could not find vocabulary file, $file";
218 :     return;
219 :     }
220 : mkubal 1.1 my @lines = <LOOKUP>;
221 : mkubal 1.2 my @grep_results = grep(/$search_term/i,@lines);
222 : mkubal 1.7 return [@grep_results];
223 : efrank 1.3 #my $search_results = [@grep_results];
224 :     #&show_search_results($fig,$cgi,$html,$peg,$cv,$search_results);
225 : mkubal 1.1 }
226 :    
227 : mkubal 1.2 sub add_terms
228 : mkubal 1.1 {
229 : mkubal 1.2 my ($fig,$cgi,$html,$peg,$id_term_to_source) =@_ ;
230 :     my @id_term = keys(%{$id_term_to_source});
231 : mkubal 1.11 #my %sources={}; #in case someday we allow adds from >1 vocab at once
232 : mkubal 1.8 my $source;
233 : mkubal 1.11 my $user = $cgi->param('user');
234 :    
235 : mkubal 1.2 foreach my $it (@id_term)
236 :     {
237 : mkubal 1.11 $source = $id_term_to_source->{$it};
238 :     my @temp = split("; ",$it);
239 :     my $id = $temp[0];
240 :     my $term = $temp[1];
241 :     my $status = $fig->add_cv_term( $user, $peg, $source, $id, $term);
242 :     if (!$status) {
243 :     print "$peg- Added ($source, $id, $term)\n";
244 :     }
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 :     #&HTML::show_page($cgi, \@html, 1);
251 :     #exit;
252 :     }
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 : efrank 1.4 "<h4>Add Terms 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