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

Annotation of /FigWebServices/cv.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (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 :     if ($cgi->param('prot') ) {
24 :     $peg = $cgi->param('prot');
25 :     } else {
26 :     $peg = $cgi->param('prot');
27 :     my(@html);
28 :     push(@html, $cgi->p("Parameter error- prot is required."));
29 :     &HTML::show_page($cgi, \@html, 1);
30 :     exit;
31 :     }
32 :    
33 :     # a global for the results of a search. overridden by an actual search
34 :    
35 :     my $search_results= [];
36 :    
37 : efrank 1.4 my $error_message = "";
38 : efrank 1.3
39 :    
40 :     my $user = "";
41 :     if ($cgi->param('user') ) {
42 :     $user = $cgi->param('user');
43 :     }
44 : mkubal 1.1
45 :     my $fig;
46 :     eval {
47 :     $fig = new FIG;
48 :     };
49 :    
50 :     if ($@ ne "")
51 :     {
52 :     my $err = $@;
53 :    
54 :     my(@html);
55 :    
56 :     push(@html, $cgi->p("Error connecting to SEED database."));
57 :     if ($err =~ /Could not connect to DBI:.*could not connect to server/)
58 :     {
59 :     push(@html, $cgi->p("Could not connect to relational database of type $FIG_Config::dbms named $FIG_Config::db on port $FIG_Config::dbport."));
60 :     }
61 :     else
62 :     {
63 :     push(@html, $cgi->pre($err));
64 :     }
65 :     &HTML::show_page($cgi, \@html, 1);
66 :     exit;
67 :     }
68 :    
69 :     my $html = [];
70 :    
71 :     my $ids;
72 :     my $tag_to_id;
73 :     my $inputs;
74 :    
75 :     if ($cgi->param('request') eq "Delete Checked Terms")
76 :     {
77 :     my %id_term_to_source;
78 :     my @checked;
79 :     my @param_list = $cgi->param();
80 :     if (@param_list)
81 :     {
82 :     foreach my $p (@param_list)
83 :     {
84 :     if ( $p=~/delete_checked/)
85 :     {
86 :     if($cgi->param($p))
87 :     {
88 :     $value = $cgi->param($p);
89 :     push(@checked,$value)
90 :     }
91 :     }
92 :     }
93 :    
94 :     for my $c (@checked)
95 :     {
96 :     @temp = split('\t',$c);
97 :     $id_term_to_source{$temp[1]} = $temp[0];
98 :     }
99 :     }
100 :     &delete_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
101 :     }
102 :     elsif ($cgi->param('request') eq "Search Selected Controlled Vocabulary")
103 :     {
104 : efrank 1.3 if ( $cgi->param('search_term') && $cgi->param('select_cv') ) {
105 :     $search_term=$cgi->param('search_term');
106 :     $cv=$cgi->param('select_cv');
107 :     $search_results = &search($fig,$cgi,$html,$peg,$cv,$search_term);
108 :     }
109 : mkubal 1.1 }
110 : mkubal 1.2 elsif ($cgi->param('request') eq "Add New Terms")
111 :     {
112 :     my %id_term_to_source;
113 :     my @checked;
114 :     my @param_list = $cgi->param();
115 :     if (@param_list)
116 :     {
117 :     foreach my $p (@param_list)
118 :     {
119 :     if ( $p=~/add_checked/)
120 :     {
121 :     print STDERR "checked_param:$p\n";
122 :     if($cgi->param($p))
123 :     {
124 :     $value = $cgi->param($p);
125 :     push(@checked,$value)
126 :     }
127 :     }
128 :     }
129 :    
130 :     for my $c (@checked)
131 :     {
132 :     @temp = split("split_here",$c);
133 :     $source = $temp[0];
134 :     $id_term = $temp[1];
135 :     $id_term_to_source{$id_term} =$source ;
136 :     print STDERR "checked_source:$source\n";
137 :     print STDERR "checked_value:$c\n";
138 :     }
139 :     }
140 :     &add_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
141 :    
142 :     }
143 :    
144 : efrank 1.4 elsif ($cgi->param('request') eq "Add Manual Term")
145 : mkubal 1.1 {
146 : mkubal 1.2 my %id_term_to_source;
147 :     my $id_term;
148 : efrank 1.4 if ( $cgi->param('manual_source') && $cgi->param('manual_id') && $cgi->param('manual_term') ) {
149 :     $manual_source=$cgi->param('manual_source');
150 :     $manual_id=$cgi->param('manual_id');
151 :     $manual_term=$cgi->param('manual_term');
152 :     $id_term = $manual_id.": ".$manual_term;
153 :     $id_term_to_source{$id_term} = $manual_source;
154 : efrank 1.3 &add_terms($fig,$cgi,$html,$peg,\%id_term_to_source);
155 :     } else {
156 : efrank 1.4 $error_message = "Error in 'Add Terms Manually': supply all three items correctly.";
157 : efrank 1.3 }
158 : mkubal 1.1 }
159 :     else
160 :     {
161 : efrank 1.3 my(@html);
162 :     push(@html, $cgi->p("Program error- unexpected request or logic error."));
163 :     &HTML::show_page($cgi, \@html, 1);
164 :     exit;
165 : mkubal 1.1 }
166 :    
167 : efrank 1.3 &build_page($fig,$cgi,$html,$peg,$search_results);
168 : mkubal 1.1 &HTML::show_page($cgi,$html,1);
169 :     exit;
170 :    
171 :     sub delete_terms
172 :     {
173 :     my ($fig,$cgi,$html,$peg,$id_term_to_source) = @_;
174 :     my @id_term = keys(%{$id_term_to_source});
175 :     foreach my $it (@id_term){$fig->delete_attribute($peg,$id_term_to_source->{$it},$it)}
176 :     }
177 :    
178 :     sub search
179 :     {
180 :     my ($fig,$cgi,$html,$peg,$cv,$search_term) =@_;
181 : efrank 1.4 $file = $FIG_Config::global."/cv_search_".$cv.".txt";
182 :     if (! open(LOOKUP,"$file") ) {
183 :     $error_message="Search could not find vocabulary file, $file";
184 :     return;
185 :     }
186 : mkubal 1.1 my @lines = <LOOKUP>;
187 : mkubal 1.2 my @grep_results = grep(/$search_term/i,@lines);
188 :     print STDERR "$grep_results[0]\n";
189 : efrank 1.3 return [@grep_results];
190 :     #my $search_results = [@grep_results];
191 :     #&show_search_results($fig,$cgi,$html,$peg,$cv,$search_results);
192 : mkubal 1.1 }
193 :    
194 : mkubal 1.2 sub add_terms
195 : mkubal 1.1 {
196 : mkubal 1.2 my ($fig,$cgi,$html,$peg,$id_term_to_source) =@_ ;
197 :     my @id_term = keys(%{$id_term_to_source});
198 :     foreach my $it (@id_term)
199 :     {
200 :     print STDERR "added_source:$id_term_to_source->{$it}\n";
201 :     print STDERR "added_value:$it\n";
202 :    
203 :     $fig->add_attribute($peg,$id_term_to_source->{$it},$it);
204 :    
205 :     }
206 : efrank 1.3 #&show_initial($fig,$cgi,$html,$peg);
207 : mkubal 1.1 }
208 :    
209 : efrank 1.3
210 :     sub build_page {
211 :     my ($fig,$cgi,$html,$peg,$search_results)=@_;
212 :    
213 :    
214 :     unshift(@$html, "<TITLE>Controlled Vocabulary Workbench for $peg</TITLE>\n");
215 :    
216 :     # Build seach results table
217 :    
218 :     @sr = @$search_results;
219 :     my $add_col_hdrs = ["Add","Source","ID: Term"];
220 :     my $add_table_rows;
221 :     my $counter = 0;
222 :     for my $r (@sr)
223 :     {
224 :     @temp = split("\t",$r);
225 :     $row = [];
226 :     $cv=$cgi->param('select_cv');
227 :     $source = $cv;
228 :     $id= $temp[1];
229 :     print STDERR "id:$id\n";
230 :     $term = $temp[2];
231 :     print STDERR "term:$term\n";
232 :     $id_and_term = $id.": ".$term;
233 :     $cb_value = $cv."split_here".$id.": ".$term;
234 :     print STDERR "iandt:$id_and_term\n";
235 :     $cb ="<input type=checkbox name=add_checked_$counter value='$cb_value'>" ;
236 :     push(@$row,$cb);
237 :     push(@$row,$source);
238 :     push(@$row,$id_and_term);
239 :     push(@$add_table_rows,$row);
240 :     $counter = $counter + 1;
241 :     }
242 :    
243 :     my $add_terms_button="";
244 :     if ($counter > 0) {
245 :     $add_terms_button= $cgi->submit(-name=>'request', -value=>'Add New Terms');
246 :     }
247 :    
248 :     # build term deletions stuff
249 : mkubal 1.1
250 : efrank 1.3 my $delete_col_hdrs = ["Delete","Source","ID: Term"];
251 :     my @results = $fig->get_attributes($peg);
252 :     print STDERR "@results\n";
253 :     print STDERR "peg:$peg\n";
254 :     my $delete_table_rows;
255 :     my $counter =0;
256 :     for my $r (@results)
257 :     {
258 :     $row = [];
259 :     $source = $r->[1];
260 :     print STDERR "source:$source\n";
261 :     $id_and_term = $r->[2];
262 :     $cb ="<input type=checkbox name=delete_checked_$counter value=$source\t$id_and_term>" ;
263 :     push(@$row,$cb);
264 :     push(@$row,$source);
265 :     push(@$row,$id_and_term);
266 :     push(@$delete_table_rows,$row);
267 :     $counter = $counter + 1;
268 :     }
269 :    
270 :    
271 :     # build the page
272 :    
273 :     my $link = "protein.cgi?prot=$peg";
274 :     push @$html,
275 :     #$cgi->start_multipart_form(),
276 :     $cgi->start_form(),
277 :     $cgi->hidden(-name=>'prot', -value=>'$peg'),
278 :     $cgi->hidden(-name=>'user', -value=>'$user'),
279 :     $cgi->br,
280 :     "<a href=$link>Back to protein page</a>",
281 :     $cgi->br,
282 :     "<h2>Controlled Vocabulary Workbench for $peg</h2>",
283 :     $cgi->hr,
284 : efrank 1.4 "<h1>$error_message</h1>",
285 :     $cgi->hr,
286 : efrank 1.3 "<h4>Current Terms Assigned To $peg </h4>\n",
287 :     &HTML::make_table($delete_col_hdrs,$delete_table_rows),
288 :     $cgi->br,
289 :     $cgi->submit(-name=>'request', -value=>'Delete Checked Terms'),
290 :     $cgi->end_form;
291 :    
292 :     push @$html,
293 :     $cgi->start_form(),
294 :     $cgi->hidden(-name=>'prot', -value=>'$peg'),
295 :     $cgi->hidden(-name=>'user', -value=>'$user'),
296 :     $cgi->hr,
297 :     $cgi->br,
298 :     "<h4>Search for New Terms to Add </h4>\n",
299 :     "<select name=select_cv>
300 : mkubal 1.2 <option value=GO >Gene Ontology</option>
301 : efrank 1.3 </select> &nbsp;&nbsp",
302 :     $cgi->textfield(-name => 'search_term', -size => 20),
303 :     $cgi->submit(-name=>'request', -value=>'Search Selected Controlled Vocabulary'),
304 :     $cgi->br,
305 :     $cgi->br,
306 :     &HTML::make_table($add_col_hdrs,$add_table_rows),
307 :     $cgi->br,
308 :     $add_terms_button,
309 :     $cgi->end_form;
310 :    
311 :     push @$html,
312 :     $cgi->start_form(),
313 :     $cgi->hidden(-name=>'prot', -value=>'$peg'),
314 :     $cgi->hidden(-name=>'user', -value=>'$user'),
315 :     $cgi->hr,
316 : efrank 1.4 "<h4>Add Terms Manually (WARNING: This is strongly discouraged to avoid data entry errors.)</h5>",
317 : efrank 1.3 "<h5>Vocabulary Name (single word, no spaces or punctuation), e.g., MyVocab </h5>\n",
318 : efrank 1.4 $cgi->textfield(-name => 'manual_source', -size => 48, -default=>'', -override=>1 ),
319 : efrank 1.3 "<h5>Term ID (single word, no spaces or punctuation), e.g., A147</h5>\n",
320 : efrank 1.4 $cgi->textfield(-name => 'manual_id', -size => 32, -default=>'', -override=>1),
321 : efrank 1.3 "<h5>Term text, e.g., catalytic activity</h5>\n",
322 : efrank 1.4 $cgi->textfield(-name => 'manual_term', -size => 70, -default=>'', -override=>1 ),
323 : efrank 1.3 $cgi->br,$cgi->br,
324 : efrank 1.4 $cgi->submit(-name=>'request', -value=>'Add Manual Term'),
325 : efrank 1.3 $cgi->br,
326 :     $cgi->hr,
327 :     $cgi->end_form;
328 : mkubal 1.1
329 : efrank 1.3 return $html;
330 : mkubal 1.2 }
331 : mkubal 1.1

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3