source: trunk/MagicSoft/Mars/datacenter/db/include.php@ 9505

Last change on this file since 9505 was 9505, checked in by Daniela Dorner, 16 years ago
*** empty log message ***
  • Property svn:executable set to *
File size: 20.7 KB
Line 
1<?php
2
3function EnumQuery($name)
4{
5 $var = $name . "Enum";
6 $txt = "";
7 switch ($_GET[$var])
8 {
9 case 0: $txt .= ""; break;
10 case 1: $txt .= $name . "='yes' AND "; break;
11 case 2: $txt .= $name . "='no' AND "; break;
12 case 3: $txt .= ""; break;
13 }
14 return $txt;
15}
16
17function PrintEnumMenu($name, $text)
18{
19 $var = $name . "Enum";
20
21 if ($_GET[$name]=="On")
22 $checked = "checked";
23 else
24 $checked = "";
25
26 printf(" <input type='checkbox' name='%s' value='On' %s>%s\n", $name, $checked, $text);
27 printf("<BR>");
28
29 printf(" <select name='%s'>\n", $var);
30
31 $status = array
32 ( 0 => "all",
33 1 => "yes",
34 2 => "no",
35 3 => "group by"
36 );
37
38 $stat=$_GET[$var];
39 for ($i=0; $i<4; $i++)
40 {
41 if ($stat==$i)
42 printf("<option value='%d' selected>%s</option>\n", $i, $status[$i]);
43 else
44 printf("<option value='%d'>%s</option>\n", $i, $status[$i]);
45 }
46
47 printf(" </select>\n");
48 printf(" &nbsp;&nbsp;&nbsp;\n");
49
50}
51
52function StatusQuery($name, $needs, $timelimits)
53{
54 if (empty($timelimits[$name]))
55 $timelimit="12";
56 else
57 $timelimit=$timelimits[$name];
58 $var = $name . "Status";
59 $txt = "";
60 switch ($_GET[$var])
61 {
62 case 0: $txt .= ""; break;
63 case 1: $txt .= "NOT (IsNull(" . $name . ") OR " . $name . "='1970-01-01 00:00:00') AND "; break;
64// case 2: $txt .= "IsNull(" . $name . ") AND IsNull(fStartTime) AND IsNull(fFailedTime) AND NOT IsNull(" . $needs[$name] . ") AND "; break; //not done but step before is done
65 case 2: $txt .= "IsNull(" . $name . ") AND "; break; //not done no matter what status of previous step is
66 case 3: $txt .= $name ."='1970-01-01 00:00:00' AND "; break;
67 case 4: $txt .= " (IsNull(" . $name . ") AND IsNull(fFailedTime) AND NOT IsNull(fStartTime) AND date_sub(Now(),interval " . $timelimit . " hour) < fStartTime AND NOT IsNull(" . $needs[$name] . ")) AND "; break;
68 case 5: $txt .= " (IsNull(" . $name . ") AND NOT IsNull(fFailedTime) AND NOT IsNull(fStartTime) AND NOT IsNull(" . $needs[$name] . ")) AND "; break;
69 case 6: $txt .= " (IsNull(" . $name . ") AND IsNull(fFailedTime) AND NOT IsNull(fStartTime) AND date_sub(Now(),interval " . $timelimit . " hour) > fStartTime AND NOT IsNull(" . $needs[$name] . ")) AND "; break;
70// case 6: $txt .= "crashed"; break;
71 case 7: $txt .= ""; break;
72 }
73 return $txt;
74}
75
76function PrintStatusMenu($name, $text)
77{
78 $var = $name . "Status";
79
80 if ($_GET[$name]=="On")
81 $checked = "checked";
82 else
83 $checked = "";
84
85 printf(" <input type='checkbox' name='%s' value='On' %s>%s\n", $name, $checked, $text);
86 printf("<BR>");
87
88 printf(" <select name='%s'>\n", $var);
89
90 $status = array
91 ( 0 => "ALL",
92 1 => "done",
93 2 => "not done",
94 3 => "not to be done",
95 4 => "running",
96 5 => "failed",
97 6 => "crashed",
98 7 => "GROUP BY",
99 );
100
101 $stat=$_GET[$var];
102 for ($i=0; $i<8; $i++)
103 {
104 if ($stat==$i)
105 printf("<option value='%d' selected>%s</option>\n", $i, $status[$i]);
106 else
107 printf("<option value='%d'>%s</option>\n", $i, $status[$i]);
108 }
109
110 /*
111 $status = array("all", "done", "not done", "not to be done");
112 $counter = 0;
113 foreach ($status as $element)
114 {
115 if ($counter==$_GET[$var])
116 printf("<option value=\"%d\" selected>%3s</option>\n", $counter++, $element);
117 else
118 printf("<option value=\"%d\">%3s</option>\n", $counter++, $element);
119 }*/
120 printf(" </select>\n");
121 printf(" &nbsp;&nbsp;&nbsp;\n");
122
123}
124
125function PrintPullDown($host, $user, $pw, $db, $table, $name, $index, $descr)
126{
127 $db_id = mysql_connect($host, $user, $pw);
128 if ($db_id==FALSE)
129 {
130 printf("mysql_connect returned the following error:<br>");
131 printf("%s<br>", mysql_error());
132 die("");
133 }
134
135 $query = "SELECT " . $index . ", " . $name . " FROM " . $db . "." . $table . " ORDER BY " . $name;
136 $result = mysql_query($query);
137
138 if (!$result)
139 {
140 printf("-N/A-");
141 return;
142 }
143
144 $numrows = mysql_num_rows($result);
145
146 if ($_GET[$name]=="On")
147 $checked = "checked";
148 else
149 $checked = "";
150
151 printf(" <input type='checkbox' name='%s' value='On' %s><A HREF='printtable.php?fTable=%s'>%s</A>\n", $name, $checked, $table, $descr);
152
153 printf(" <BR>\n");
154
155 printf(" <select name='%s' size='1' class='Width'>\n", $index);
156
157 if (empty($_GET[$index]) || $_GET[$index]==0)
158 printf(" <option value='0' selected>--- ALL ---</option>\n");
159 else
160 printf(" <option value='0'>--- ALL ---</option>\n");
161
162 if (!empty($_GET[$index]) && $_GET[$index]==-1)
163 printf(" <option value='-1' selected>--- GROUP BY ---</option>\n");
164 else
165 printf(" <option value='-1'>--- GROUP BY ---</option>\n");
166
167 while ($row = mysql_fetch_row($result))
168 {
169 if (!empty($_GET[$index]) && $_GET[$index]==$row[0])
170 printf(" <option value='%s' selected>%s</option>\n", $row[0], $row[1]);
171 else
172 printf(" <option value='%s'>%s</option>\n", $row[0], $row[1]);
173 }
174 printf(" </select>\n");
175 printf(" &nbsp;\n", $index);
176
177 mysql_free_result($result);
178
179 mysql_close($db_id);
180}
181
182function GetMin($field, $table, $host, $user, $pw, $db)
183{
184 $db_id = mysql_connect($host, $user, $pw);
185 if ($db_id==FALSE)
186 {
187 printf("mysql_connect returned the following error:<br>");
188 printf("%s<br>", mysql_error());
189 die("");
190 }
191
192 $query = "SELECT MIN(" . $field . ") FROM " . $db . "." . $table;
193 $result = mysql_query($query);
194 if (!$result)
195 return "0";
196
197 $row = mysql_fetch_row($result);
198
199 $min = $row[0];
200
201 mysql_free_result($result);
202 mysql_close($db_id);
203
204 return $min;
205}
206
207function GetMax($field, $table, $host, $user, $pw, $db)
208{
209 $db_id = mysql_connect($host, $user, $pw);
210 if ($db_id==FALSE)
211 {
212 printf("mysql_connect returned the following error:<br>");
213 printf("%s<br>", mysql_error());
214 die("");
215 }
216
217 $query = "SELECT MAX(" . $field . ") FROM " . $db . "." . $table;
218 $result = mysql_query($query);
219 if (!$result)
220 return "0";
221
222 $row = mysql_fetch_row($result);
223
224 $max = $row[0];
225
226 mysql_free_result($result);
227 mysql_close($db_id);
228
229 return $max;
230}
231
232function GetMaxDate($field, $table, $host, $user, $pw, $db)
233{
234 $db_id = mysql_connect($host, $user, $pw);
235 if ($db_id==FALSE)
236 {
237 printf("mysql_connect returned the following error:<br>");
238 printf("%s<br>", mysql_error());
239 die("");
240 }
241
242 $query = "SELECT DATE_FORMAT(if(MAX(" . $field . ")<'13:00:00', MAX(" . $field . "), ADDDATE(MAX(" . $field . "), INTERVAL +1 DAY)), '%Y-%m-%d') FROM " . $db . "." . $table;
243 $result = mysql_query($query);
244 if (!$result)
245 return "0";
246
247 $row = mysql_fetch_row($result);
248
249 $maxdate = $row[0];
250
251 mysql_free_result($result);
252 mysql_close($db_id);
253
254 return $maxdate;
255}
256
257//for download of output
258function PrintText($result0)
259{
260 while ($row0 = mysql_fetch_assoc($result0))
261 {
262 foreach ($row0 as $key => $element)
263 printf("%s\t", $element);
264 printf("\n");
265 }
266}
267
268function PrintSubmittedQuery($query0, $html, $db, $old)
269{
270 //diplay query on old websites
271 if (empty($old))
272 printf("<tr class='Block' id='showquery' style='display:none'><td>");
273 else
274 printf("<tr class='Block' id='showquery' style='display:block'><td>");
275 if ($html=="1")
276 {
277 printf("<b>DB:</b> %s <br>", $db);
278 printf("<U><B>submitted query:</B></U><BR>%s<BR>", htmlspecialchars($query0));
279 }
280 printf("</td></tr>");
281}
282
283function Checkbox($value, $text)
284{
285 if ($_GET[$value]=="On")
286 $checked = "checked";
287 else
288 $checked = "";
289
290 printf(" <td><input type='checkbox' name='%s' value='On' %s>%s</td>\n", $value, $checked, $text);
291}
292
293function Checkbox2($value, $text)
294{
295 if ($_SESSION[$value]=="On")
296 $checked = "checked";
297 else
298 $checked = "";
299
300 printf(" <td><input type='checkbox' name='%s' value='On' %s>%s</td>\n", $value, $checked, $text);
301}
302
303function RadioButton($name, $value, $text)
304{
305 if ($_SESSION[$name]==$value)
306 $checked = "checked";
307 else
308 $checked = "";
309
310 printf(" <td><input type='radio' name='%s' value='%s' %s>%s</td>\n", $name, $value, $checked, $text);
311}
312
313function CheckWhere($column)
314{
315 foreach ($_GET as $key => $element)
316 {
317 if ($key==$column)
318 {
319// if ($element>0)
320// printf ("FIXED: %s<BR>", $column);
321 return $element;
322 }
323 }
324 return 0;
325}
326
327function CheckGroup($column)
328{
329 foreach ($_GET as $key => $element)
330 {
331 if ($key==$column)
332 {
333 //if ($element==-1)
334 // printf ("GROUP: %s<BR>", $column);
335 return $element;
336 }
337 }
338 return 0;
339}
340
341function CheckStatusGroup($column)
342{
343 foreach ($_GET as $key => $element)
344 if ($key==$column)
345 if ($element==7)
346 return -1;
347 return 0;
348}
349
350function CheckEnumGroup($column)
351{
352 foreach ($_GET as $key => $element)
353 if ($key==$column)
354 if ($element==3)
355 return -1;
356 return 0;
357}
358
359function RemoveSortBy()
360{
361 $menu = "";
362
363 $uri = $_SERVER["REQUEST_URI"];
364 $pos = strpos($uri, "fSortBy");
365 $amp3=FALSE;
366 if ($pos!=FALSE)
367 {
368 $amp1 = substr($uri, 0, $pos-1);
369 $amp2 = substr($uri, $pos);
370 $amp3 = strchr($amp2, "&");
371
372 $uri = $amp1;
373 }
374
375 return $uri;
376}
377
378function FindAlias($alias, $search)
379{
380 foreach ($alias as $key => $element)
381 if ($element==$search)
382 return $key;
383
384 if ($search=="# Runs")
385 return "NumRuns";
386 if ($search=="# Sequ")
387 return "NumSequ";
388 if ($search=="# Datasets")
389 return "NumDS";
390 if ($search=="# days")
391 return "NumDays";
392 return $search;
393 return "";
394}
395
396//function for button in builddatasets.php
397function GetClearedURL($all)
398{
399// $url=htmlspecialchars($_SERVER["REQUEST_URI"]);
400 $url=$_SERVER["REQUEST_URI"];
401// echo "before:".$url."<br>";
402 if ($all=="yes")
403 {
404// echo "replace <br>";
405// $url=str_replace("&DisplaySelected", "halo", $url);
406 $url=str_replace("&DisplaySelected=yes", "", $url);
407 $url=str_replace("&DisplaySelected=no", "", $url);
408 }
409 $url=str_replace("&insert=yes", "", $url);
410 $url=str_replace("&fSendTxt=2", "", $url);
411 $url=str_replace("&fSendTxt=1", "", $url);
412// echo "after:".$url."<br>";
413 $url=htmlspecialchars($url);
414 return $url;
415}
416
417function PrintUpdateDataSetButton()
418{
419 if (empty($_SESSION["insert"]))
420 printf("<input type='submit' value='Update Data Set'>&nbsp;&nbsp;&nbsp;\n");
421 else
422 printf("<input type='button' value='Continue' onClick='self.location.href=\"%s\"'>&nbsp;&nbsp;&nbsp;\n", GetClearedURL());
423
424}
425
426//function for button in builddatasets.php
427function PrintDisplaySequencesButtons()
428{
429 if ((empty($_SESSION["DisplaySelected"]) || $_SESSION["DisplaySelected"]=="no")
430 && !(empty($_SESSION["sequon"]) && empty($_SESSION["sequoff"])))
431 {
432 PrintUpdateDataSetButton();
433 printf("<input type='button' value='Display Selected Sequences' onClick='self.location.href=\"%s&DisplaySelected=yes\"'>\n", GetClearedURL("yes"));
434 printf("&nbsp;&nbsp;&nbsp;<input type='button' value='Display Not-Selected Sequences' onClick='self.location.href=\"%s&DisplaySelected=inverse\"'>\n", GetClearedURL("yes"));
435 printf("<br><br>\n");
436 }
437
438 if ($_SESSION["DisplaySelected"]=="yes")
439 {
440 PrintUpdateDataSetButton();
441 printf("<input type='button' value='Display Not-Selected Sequences' onClick='self.location.href=\"%s&DisplaySelected=inverse\"'>\n", GetClearedURL("yes"));
442 printf("&nbsp;&nbsp;&nbsp;<input type='button' value='Display All Sequences' onClick='self.location.href=\"%s&DisplaySelected=no\"'>\n", GetClearedURL("yes"));
443 printf("&nbsp;&nbsp;&nbsp;<i>Currently only selected sequences are displayed.</i><br><br>\n");
444 }
445
446 if ($_SESSION["DisplaySelected"]=="inverse")
447 {
448 PrintUpdateDataSetButton();
449 printf("<input type='button' value='Display Selected Sequences' onClick='self.location.href=\"%s&DisplaySelected=yes\"'>\n", GetClearedURL("yes"));
450 printf("&nbsp;&nbsp;&nbsp;<input type='button' value='Display All Sequences' onClick='self.location.href=\"%s&DisplaySelected=no\"'>\n", GetClearedURL("yes"));
451 printf("&nbsp;&nbsp;&nbsp;<i>Currently only NOT selected sequences are displayed.</i><br><br>\n");
452 }
453}
454
455
456function ReplaceInUri($name, $rows, $direction, $totalnumrows=0)
457{
458 //direction:
459 // 0: Prev Link
460 // 1: Next Link
461 // 2: First Link
462 // 3: Last Link
463
464 $uri = htmlspecialchars($_SERVER["REQUEST_URI"]);
465 $pos = strpos($uri, "fNumStart");
466 $amp3=FALSE;
467 if ($pos!=FALSE)
468 {
469 $amp1 = substr($uri, 0, $pos-1);
470 $amp2 = substr($uri, $pos);
471 $amp3 = strchr($amp2, "&");
472
473 $uri = $amp1;
474 }
475
476 switch($direction)
477 {
478 case 0:
479 $pos = $_GET["fNumStart"]-$rows;
480 if ($pos<0)
481 $pos=0;
482 break;
483 case 1:
484 $pos = $_GET["fNumStart"]+$rows;
485 break;
486 case 2:
487 $pos = 0;
488 break;
489 case 3:
490 $pos = $totalnumrows-$rows+1;
491 break;
492 }
493
494 $uri .= "&fNumStart=" . $pos;
495 if ($amp3!=FALSE)
496 $uri .= $amp3;
497
498 switch($direction)
499 {
500 case 0:
501 $link .= " <A HREF='" . $uri . "'>< Prev</A> \n";
502 break;
503 case 1:
504 $link .= " <A HREF='" . $uri . "'>Next ></A> \n";
505 break;
506 case 2:
507 $link .= " <A HREF='" . $uri . "'><< First</A> \n";
508 break;
509 case 3:
510 $link .= " <A HREF='" . $uri . "'>Last >></A> \n";
511 break;
512 }
513 return $link;
514}
515
516function CreateMenu($rows, $totalnumrows)
517{
518 $menu = "";
519
520 if (empty($_GET["fNumResults"]))
521 return;
522
523 if ($_GET["fNumStart"]!=0)
524 {
525 $menu .= ReplaceInUri("fNumStart", $rows, 2);
526 $menu .= ReplaceInUri("fNumStart", $rows, 0);
527 }
528
529 $menu .= "&nbsp;&nbsp;&nbsp;---&nbsp;<B>";
530 if (empty($_GET["fNumStart"]))
531 $menu .= "0";
532 else
533 $menu .= $_GET["fNumStart"];
534 $menu .= "</B>&nbsp;---&nbsp;&nbsp;&nbsp;\n";
535
536 if ($rows==$_GET["fNumResults"])
537 {
538 $menu .= ReplaceInUri("fNumStart", $rows, 1);
539 $menu .= ReplaceInUri("fNumStart", $rows, 3, $totalnumrows);
540 }
541 return $menu;
542}
543
544function PrintMagicTable($result0, $alias, $rightalign, $limitsmean, $limitsmin, $limitsmax, $result1, $form="")
545{
546 $row1 = mysql_fetch_assoc($result1);
547 $totalnumrows=$row1["FOUND_ROWS()"];
548// echo "res0: " . $row . " res1: " . $row1["FOUND_ROWS()"] . "<br>";
549
550 $col = FALSE;
551 $first = TRUE;
552
553 $sigma = array
554 (
555 1 => "#33CC00",
556 2 => "#FFFF66",
557 3 => "#FF9900",
558 5 => "#FF0000",
559 );
560 $okcolour="#006600";
561
562
563 $menu = CreateMenu(mysql_num_rows($result0), $totalnumrows);
564
565 if ($form)
566 {
567 printf("<form method='POST'>");
568 PrintDisplaySequencesButtons();
569 }
570 printf("\n<center>\n");
571 if (empty($_GET["fPrintTable"]))
572 printf("%s\n", $menu);
573
574 printf("<table BORDER='0' style='margin-top:1ex'>\n");
575 $counter=0;
576 while ($row0 = mysql_fetch_assoc($result0))
577 {
578 if ($first)
579 {
580 printf(" <tr BGCOLOR='#C0C0C0'>\n<td BGCOLOR='#F0F0F0'><img src='plus.png' alt='+' onClick='showalllines(%d)'></td>\n", mysql_num_rows($result0));
581 $first = FALSE;
582 if ($form)
583 printf("<td>ON</td><td>Off</td><td>Not</td>");
584 foreach ($row0 as $key => $element)
585 {
586 $col = FindAlias($alias, $key);
587
588 $ord="-";
589 $issort = "";
590 if (!empty($_GET["fSortBy"]) && substr($_GET["fSortBy"], 0, -1)==$col)
591 {
592 if (substr($_GET["fSortBy"], -1)=="-")
593 {
594 $ord="+";
595 $issort="&nbsp;<IMG SRC='down.gif'>";
596 }
597 else
598 $issort="&nbsp;<IMG SRC='up.gif'>";
599 }
600 printf(" <th>&nbsp;<A HREF='%s&amp;fSortBy=%s%s'>%s</A>%s&nbsp;</th>\n",
601 htmlspecialchars(RemoveSortBy()), $col, $ord, $key, $issort);
602 }
603 printf(" </tr>\n\n");
604 }
605
606 $counter++;
607 if (!$col)
608 printf(" <tr id='line%s' BGCOLOR='#E0E0E0'>\n<td BGCOLOR='#F0F0F0'>\n<img id='line%sbutton' src='minus.png' alt='-' onClick='showhide(\"line%s\")'>\n</td>\n", $counter, $counter, $counter);
609 else
610 printf(" <tr id='line%s' BGCOLOR='#D0D0D0'>\n<td BGCOLOR='#F0F0F0'>\n<img id='line%sbutton' src='minus.png' alt='-' onClick='showhide(\"line%s\")'>\n</td>\n", $counter, $counter, $counter);
611 $col = !$col;
612
613 if ($form)
614 {
615// CheckBox2($row0["Sequ"]."ON","");
616// CheckBox2($row0["Sequ"]."Off","");
617 RadioButton("DSSeq".$row0["Sequ"], "ON", "");
618 RadioButton("DSSeq".$row0["Sequ"], "Off", "");
619 RadioButton("DSSeq".$row0["Sequ"], "Not", "");
620 }
621 foreach ($row0 as $key => $element)
622 {
623 if (empty($rightalign[$key]))
624 printf(" <td align='left' valign='top'>");
625 else
626 printf(" <td align='right' valign='top'>");
627
628 $colour='#000000';
629 //determine color of text in cell
630 if (!empty($limitsmean))
631 {
632 foreach($limitsmean as $key2 => $element2)
633 {
634 $mean=$key2 . "Mean";
635 $rms2=$key2 . "Rms";
636 if ($key==$alias[$element2] && !empty($_GET[$mean]) && !empty($_GET[$rms2]))
637 {
638 $colour=$okcolour;
639 foreach ($sigma as $margin => $newcolour)
640 {
641 $min=$_GET[$mean] - ($margin * $_GET[$rms2]);
642 $max=$_GET[$mean] + ($margin * $_GET[$rms2]);
643 if (!($min < $element && $element < $max))
644 $colour=$newcolour;
645 }
646 }
647 }
648 }
649 if (!empty($limitsmin))
650 {
651 foreach($limitsmin as $key2 => $element2)
652 {
653 $limit1=$key2 . "1";
654 $limit2=$key2 . "2";
655 if ($key==$alias[$element2] && !empty($_GET[$limit1]))
656 {
657 if ($colour=='#000000')
658 $colour=$okcolour;
659
660 if (!empty($_GET[$limit2]) && $_GET[$limit2] > $element)
661 $colour=$sigma[5];
662
663 if ($_GET[$limit1] > $element && $_GET[$limit2] <= $element)
664 $colour=$sigma[3];
665 }
666 }
667 }
668
669 if (!empty($limitsmax))
670 {
671 foreach($limitsmax as $key2 => $element2)
672 {
673 $limit1=$key2 . "1";
674 $limit2=$key2 . "2";
675 if ($key==$alias[$element2] && !empty($_GET[$limit1]))
676 {
677 if ($colour=='#000000')
678 $colour=$okcolour;
679
680 if (!empty($_GET[$limit2]) && $_GET[$limit2] < $element)
681 $colour=$sigma[5];
682
683 if ($_GET[$limit1] < $element && $_GET[$limit2] >= $element)
684 $colour=$sigma[3];
685 }
686 }
687 }
688 if ($colour!='#000000' && (!empty($limitsmean) || !empty($limitsmin) || !empty($limitsmax)))
689 printf("<font color='%s' style='font-weight:bold'>", $colour);
690
691 //fill text in cell
692 printf("&nbsp;%s&nbsp;</td>\n", str_replace("&ws;", " ", str_replace(" ", "&nbsp;", $element)));
693
694 if ($colour!='#000000' && (!empty($limitsmean) || !empty($limitsmin) || !empty($limitsmax)))
695 printf("</font>");
696 }
697 printf(" </tr>\n");
698 }
699 printf("</table>\n");
700
701 /*
702 $info = mysql_info();
703 if (!empty($info))
704 printf("%s<BR>\n", $info);
705 */
706
707 printf("<P><B>Number of displayed results: %d of %s in total</B><P><P>\n", mysql_num_rows($result0), $totalnumrows);
708 if (empty($_GET["fPrintTable"]))
709 printf("%s\n", $menu);
710 printf("<P>\n");
711 printf("</center>\n");
712
713 if (!$form)
714 {
715 printf("</td>\n");
716 printf("</tr>\n");
717 }
718 else
719 PrintDisplaySequencesButtons();
720}
721
722?>
Note: See TracBrowser for help on using the repository browser.