4 * AMPS - AMule PHP Statistics
5 * Written by überpenguin, AMPS is an adaptation of BigBob's aStats
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 // If you want to mess with these settings, do so at your OWN RISK
23 // They are not all fully documented and it may not be obvious to anyone
24 // except myself what they do!
26 define(VERSION
, "0.7.6");
27 define(AMULESIGDAT
, "/tmp/amulesig.dat");
28 define(IMAGEPATH
, "./images");
29 define(IMAGETYPE
, "png");
30 define(CLEANSIGIMG
, "baseimage.png");
31 define(RUNNINGIMG
, "running.png");
32 define(RX0TX0IMG
, "rx0tx0.png");
33 define(RX0TX1IMG
, "rx0tx1.png");
34 define(RX1TX0IMG
, "rx1tx0.png");
35 define(RX1TX1IMG
, "rx1tx1.png");
36 define(HIGHIDIMGKADON
, "conn_highid_kad_on.png");
37 define(HIGHIDIMGKADOFF
, "conn_highid_kad_off.png");
38 define(HIGHIDIMGKADFW
, "conn_highid_kad_fw.png");
39 define(LOWIDIMGKADFW
, "conn_lowid_kad_fw.png");
40 define(LOWIDIMGKADOFF
, "conn_lowid_kad_off.png");
41 define(LOWIDIMGKADON
, "conn_lowid_kad_on.png");
42 define(NOCONNIMGKADON
, "noconn_kad_on.png");
43 define(NOCONNIMGKADFW
, "noconn_kad_fw.png");
44 define(NOCONNIMGKADOFF
, "noconn_kad_off.png");
45 define(TIMEGENIMG
, "clock.png");
46 define(SERVERIMG
, "serverbox.png");
47 define(SHAREDFILESIMG
, "files.png");
48 define(QUEUEIMG
, "queue.png");
49 define(ERRFONTPADDING
, 5);
51 define(FONTFILE
, "./LucidaSansRegular.ttf");
52 define(IMAGETEXTCOLOR
, "ffffff");
53 $completelangs = array("ca", "de", "en", "es", "eu", "fr", "fi", "hu", "it",
54 "nl", "pl", "pt", "pt_BR");
57 // initialize values array
59 $values = array("running"=>false, "psuptime"=>"", "connected"=>"0",
60 "servername"=>"", "serverip"=>"0.0.0.0", "highlowid"=>"", "rxspeed"=>
61 "0.0", "txspeed"=>"0.0", "queuedclients"=>"0", "sharedfiles"=>"0",
62 "nick"=>"", "rxtotal"=>"0.0", "txtotal"=>"0.0", "muleversion"=>"0.0.0"
65 // make sure gd and freetype are loaded; we need them for the signature image
66 if (!extension_loaded("gd"))
68 echo "gd extension missing";
72 if (!in_array("imagettftext", get_extension_funcs("gd")))
74 echo "FreeType extensions missing from gd";
78 // lang can come from two places; as an argument to the script (i.e.
79 // index.php?lang=xx or as an HTTP POST variable. The latter takes prescedence
82 if (isset($_GET["lang"]))
83 $lang = $_GET["lang"];
85 if (isset($_POST["lang"]))
86 $lang = $_POST["lang"];
90 $temp = @fopen
("./langs/".$lang.".inc", "r");
93 $lang = strtolower($lang);
94 $temp = @fopen
("./langs/".$lang.".inc", "r");
99 require("./langs/en.inc");
103 require("./langs/".$lang.".inc");
110 require("./langs/en.inc");
113 // if the variable $sig_image is set, only output the signature image
115 if (isset($_GET["sig_image"]))
119 output_error_img($text["sigfileerr"]." (".AMULESIGDAT
.
128 * Retrieves the statistics, of course! First checks to see if the process is
129 * actually running. If not, the function returns true without attempting to
130 * read the aMule signature file. If the process IS running, the function reads
131 * the appropriate data from the aMule signiture file, stores them in the
132 * associative array $values and returns true on success, and false if there
133 * is a failure reading the signature file.
138 global $values, $text;
140 // the ps command should output something like 1-05:23:45, in
141 // days-hours:minutes:seconds format.
143 // alternative ps command; doesn't work on *BSD!
144 // $values["psuptime"] = trim(exec("ps --no-header -C amule -o etime"));
146 $values["psuptime"] = trim(exec("ps ax -o etime,comm --no-header | ".
147 "awk '/amule$/ {print $1}' | head -n 1"));
149 if (!$values["psuptime"])
151 $values["running"] = false;
156 $values["running"] = true;
158 // Uncomment to test etime parser...
159 // $values["psuptime"] = "3442-12:34:55";
160 if (strlen($values["psuptime"]) >= 5)
161 $uptimestr = substr($values["psuptime"], -5, 2).
162 $text["minabbr"]." ".substr($values["psuptime"],
163 -2).$text["secabbr"];
164 if (strlen($values["psuptime"]) >= 8)
165 $uptimestr = substr($values["psuptime"], -8, 2).
166 $text["hourabbr"]." ".$uptimestr;
167 if (strlen($values["psuptime"]) >= 10)
168 $uptimestr = substr($values["psuptime"], 0, strlen(
169 $values["psuptime"]) - 9).$text["dayabbr"]." ".
172 $values["psuptime"] = $uptimestr;
174 $sigfile = @fopen
(AMULESIGDAT
, "r");
180 $values["connected"] = trim(fgets($sigfile));
181 $values["servername"] = trim(fgets($sigfile));
182 $values["serverip"] = trim(fgets($sigfile));
183 $values["serverport"] = trim(fgets($sigfile));
184 $values["highlowid"] = trim(fgets($sigfile));
185 $values["kad"] = trim(fgets($sigfile));
186 $values["rxspeed"] = trim(fgets($sigfile));
187 $values["txspeed"] = trim(fgets($sigfile));
188 $values["queuedclients"] = trim(fgets($sigfile));
189 $values["sharedfiles"] = trim(fgets($sigfile));
190 $values["nick"] = trim(fgets($sigfile));
191 $values["rxtotal"] = trim(fgets($sigfile));
192 $values["txtotal"] = trim(fgets($sigfile));
193 $values["muleversion"] = trim(fgets($sigfile));
202 * This function creates the signiture image and writes out in JPEG format (may
203 * change this to PNG or add an option for image time in the future). The
204 * function assumes get_stats() has already been called and will use whatever
205 * values are in the $values array.
208 function output_sig_image()
210 global $values, $text;
212 // open the base image for writing on. If unsuccessful, exit with an
215 $finalimg = @imagecreatefrompng
(IMAGEPATH
."/".CLEANSIGIMG
);
219 output_error_img($text["baseimgerr"]);
223 // open up all the icons
225 $runningimg = @imagecreatefrompng
(IMAGEPATH
."/".RUNNINGIMG
);
226 $sharedfilesimg = @imagecreatefrompng
(IMAGEPATH
."/".SHAREDFILESIMG
);
227 $serverimg = @imagecreatefrompng
(IMAGEPATH
."/".SERVERIMG
);
228 $queueimg = @imagecreatefrompng
(IMAGEPATH
."/".QUEUEIMG
);
229 $timegenimg = @imagecreatefrompng
(IMAGEPATH
."/".TIMEGENIMG
);
231 if($values["kad"] == "2") {
232 if ($values["highlowid"] == "H" && $values["connected"] == "1")
233 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".HIGHIDIMGKADON
);
234 else if ($values["highlowid"] == "L" && $values["connected"] == "1")
235 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".LOWIDIMGKADON
);
237 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".NOCONNIMGKADON
);
238 } else if ($values["kad"] == "1") {
239 if ($values["highlowid"] == "H" && $values["connected"] == "1")
240 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".HIGHIDIMGKADFW
);
241 else if ($values["highlowid"] == "L" && $values["connected"] == "1")
242 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".LOWIDIMGKADFW
);
244 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".NOCONNIMGKADFW
);
246 if ($values["highlowid"] == "H" && $values["connected"] == "1")
247 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".HIGHIDIMGKADOFF
);
248 else if ($values["highlowid"] == "L" && $values["connected"] == "1")
249 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".LOWIDIMGKADOFF
);
251 $idimg = @imagecreatefrompng
(IMAGEPATH
."/".NOCONNIMGKADOFF
);
254 if (($values["rxspeed"] == "0.0" && $values["txspeed"] == "0.0") ||
256 $speedimg = @imagecreatefrompng
(IMAGEPATH
."/".RX0TX0IMG
);
257 else if ($values["rxspeed"] == "0.0" && $values["txspeed"] != "0.0")
258 $speedimg = @imagecreatefrompng
(IMAGEPATH
."/".RX0TX1IMG
);
259 else if ($values["rxspeed"] != "0.0" && $values["txspeed"] == "0.0")
260 $speedimg = @imagecreatefrompng
(IMAGEPATH
."/".RX1TX0IMG
);
261 else if ($values["rxspeed"] != "0.0" && $values["txspeed"] != "0.0")
262 $speedimg = @imagecreatefrompng
(IMAGEPATH
."/".RX1TX1IMG
);
264 // check to make sure all the icons were successfully opened. If not,
265 // output an image containing the appropriate error message and exit
268 if (! ($runningimg && $sharedfilesimg && $serverimg && $queueimg &&
269 $timegenimg && $idimg && $speedimg))
271 output_error_img($text["iconerr"]);
275 // place the icons onto the base image
277 imagecopy($finalimg, $runningimg, 5, 5, 0, 0, imagesx($runningimg) - 1,
278 imagesy($runningimg) - 1);
279 imagecopy($finalimg, $sharedfilesimg, 249, 71, 0, 0,
280 imagesy($sharedfilesimg) - 1, imagesy($sharedfilesimg) - 1);
281 imagecopy($finalimg, $idimg, 5, 27, 0, 0, imagesx($idimg) - 1,
282 imagesy($idimg) - 1);
283 imagecopy($finalimg, $serverimg, 5, 49, 0, 0, imagesx($serverimg) - 1,
284 imagesy($serverimg) - 1);
285 imagecopy($finalimg, $speedimg, 5, 71, 0, 0, imagesx($speedimg) - 1,
286 imagesy($speedimg) - 1);
287 imagecopy($finalimg, $queueimg, 249, 93, 0, 0, imagesx($queueimg) - 1,
288 imagesy($queueimg) - 1);
289 imagecopy($finalimg, $timegenimg, 5, 93, 0, 0, imagesx($timegenimg) -
290 1, imagesy($timegenimg) - 1);
292 // allocate white for the text color
294 sscanf(IMAGETEXTCOLOR
, "%2x%2x%2x", $red, $green, $blue);
295 $fgcolor = imagecolorallocate($finalimg, $red, $green, $blue);
297 // aMule version and process status
299 if ($values["running"])
300 imagettftext($finalimg, FONTSIZE
, 0, 26, 19, $fgcolor,
301 FONTFILE
, "aMule ".$values["muleversion"].
302 " ".$text["runtimemsg"]." ".$values["psuptime"]);
304 imagettftext($finalimg, FONTSIZE
, 0, 26, 19, $fgcolor,
305 FONTFILE
, "aMule ".$text["norunmsg"]);
307 // connection status and nickname
309 if($values["kad"] == "2")
311 if ($values["running"] && $values["connected"] == "2")
312 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
313 "aMule ".$text["connmsg"]." ".$text["kadonmsg"]);
314 else if ($values["running"] && $values["connected"] != "0" &&
315 $values["highlowid"] == "H")
316 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
317 $values["nick"]." ".$text["highidmsg"]." ".$text["kadonmsg"]);
318 else if ($values["running"] && $values["connected"] != "0" &&
319 $values["highlowid"] != "H")
320 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
321 $values["nick"]." ".$text["lowidmsg"]." ".$text["kadonmsg"]);
322 else if ($values["running"] && $values["connected"] == "0")
323 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
324 $values["nick"]." ".$text["offrunmsg"]." ".
325 $text["amulenorun"]." ".$text["kadonmsg"]);
327 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
328 $text["offline"]." ".$text["amulenorun"]);
329 } else if($values["kad"] == "1")
331 if ($values["running"] && $values["connected"] == "2")
332 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
333 "aMule ".$text["connmsg"]." ".$text["kadfwmsg"]);
334 else if ($values["running"] && $values["connected"] != "0" &&
335 $values["highlowid"] == "H")
336 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
337 $values["nick"]." ".$text["highidmsg"]." ".$text["kadfwmsg"]);
338 else if ($values["running"] && $values["connected"] != "0" &&
339 $values["highlowid"] != "H")
340 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
341 $values["nick"]." ".$text["lowidmsg"]." ".$text["kadfwmsg"]);
342 else if ($values["running"] && $values["connected"] == "0")
343 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
344 $values["nick"]." ".$text["offrunmsg"]." ".
345 $text["amulenorun"]." ".$text["kadfwmsg"]);
347 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
348 $text["offline"]." ".$text["amulenorun"]);
350 if ($values["running"] && $values["connected"] == "2")
351 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
352 "aMule ".$text["connmsg"]." ".$text["kadoffmsg"]);
353 else if ($values["running"] && $values["connected"] != "0" &&
354 $values["highlowid"] == "H")
355 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
356 $values["nick"]." ".$text["highidmsg"]." ".$text["kadoffmsg"]);
357 else if ($values["running"] && $values["connected"] != "0" &&
358 $values["highlowid"] != "H")
359 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
360 $values["nick"]." ".$text["lowidmsg"]." ".$text["kadoffmsg"]);
361 else if ($values["running"] && $values["connected"] == "0")
362 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
363 $values["nick"]." ".$text["offrunmsg"]." ".
364 $text["amulenorun"]." ".$text["kadoffmsg"]);
366 imagettftext($finalimg, FONTSIZE
, 0, 25, 41, $fgcolor, FONTFILE
,
367 $text["offline"]." ".$text["amulenorun"]);
374 if ($values["running"] && $values["connected"] == "1")
375 imagettftext($finalimg, FONTSIZE
, 0, 270, 85, $fgcolor,
376 FONTFILE
, $text["sharedfiles"].": ".
377 $values["sharedfiles"]);
379 imagettftext($finalimg, FONTSIZE
, 0, 270, 85, $fgcolor,
380 FONTFILE
, $text["sharedfiles"].": ".$text["na"]);
382 // server name, ip, port
384 if ($values["running"] && $values["connected"] == "1")
385 imagettftext($finalimg, FONTSIZE
, 0, 25, 63, $fgcolor, FONTFILE
,
386 $values["servername"]." (".$values["serverip"].":".
387 $values["serverport"].")");
389 imagettftext($finalimg, FONTSIZE
, 0, 25, 63, $fgcolor, FONTFILE
,
394 if ($values["running"])
395 imagettftext($finalimg, FONTSIZE
, 0, 25, 85, $fgcolor, FONTFILE
,
396 $text["rx"].": ".$values["rxspeed"].$text["transrate"].
397 " | ".$text["tx"].": ".$values["txspeed"].
400 imagettftext($finalimg, FONTSIZE
, 0, 25, 85, $fgcolor, FONTFILE
,
401 $text["rx"].": ".$text["na"]." | ".$text["tx"].": ".
406 if ($values["running"])
407 imagettftext($finalimg, FONTSIZE
, 0, 270, 107, $fgcolor,
408 FONTFILE
, $text["queuedclients"].": ".
409 $values["queuedclients"]);
411 imagettftext($finalimg, FONTSIZE
, 0, 270, 107, $fgcolor,
412 FONTFILE
, $text["queuedclients"].": ".$text["na"]);
414 // RFC 2822 Datestamp
416 imagettftext($finalimg, FONTSIZE
, 0, 25, 107, $fgcolor, FONTFILE
,
419 // outputs the signature image based on the value of IMAGETYPE. The case
420 // for png and default are the same; in other words, PNG is the default
421 // image output type. Note that your installation of GD has to support
422 // the type of image you are outputting here.
429 header("Content-type: image/jpeg");
430 imagejpeg($finalimg, "", 100);
434 header("Content-type: image/gif");
440 header("Content-type: image/png");
447 * This function outputs a simple image containing an error message specified
448 * by the only parameter, $err_message. The image is black text and border on
449 * a white background.
452 function output_error_img($err_message)
454 // determine the size of the text string and add to it the amount of
455 // padding specified earlier.
457 $fontdims = imagettfbbox(FONTSIZE
, 0, FONTFILE
, $err_message);
459 $min_x = min($fontdims[0], $fontdims[2], $fontdims[4], $fontdims[6]);
460 $max_x = max($fontdims[0], $fontdims[2], $fontdims[4], $fontdims[6]);
461 $min_y = min($fontdims[1], $fontdims[3], $fontdims[5], $fontdims[7]);
462 $max_y = max($fontdims[1], $fontdims[3], $fontdims[5], $fontdims[7]);
464 $width = ($max_x - $min_x) +
(2 * ERRFONTPADDING
);
465 $height = ($max_y - $min_y) +
(2 * ERRFONTPADDING
);
467 $img = @imagecreate
($width, $height);
469 $bgcolor = imagecolorallocate($img, 255, 255, 255);
470 $fgcolor = imagecolorallocate($img, 0, 0, 0);
471 imagesetthickness($img, 2);
475 imagerectangle($img, 1, 1, $width - 2, $height - 2, $fgcolor);
479 imagettftext($img, FONTSIZE
, 0, ERRFONTPADDING
, ERRFONTPADDING +
0.5 *
480 $height, $fgcolor, FONTFILE
, $err_message);
482 header("Content-type: image/jpeg");
483 imagejpeg($img, "", 100);
487 * Writes the non-dynamic leading part of the HTML that makes up the statistics
488 * page. Right now this is just a stub for future theme support.
491 function write_header()
495 <!DOCTYPE HTML
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
499 <title
>AMPS
- AMule PHP Statistics
</title
>
500 <link href
="./style.css" rel
="stylesheet" type
="text/css">
502 <body
class="thebody">
506 <table
class="toplevel">
515 * Writes the non-dynamic trailing part of the HTML that makes up the statistics
516 * page. Right now this is just a stub for future theme support.
519 function write_footer()
530 <i
>Generated by AMPS version
<?php
echo VERSION
; ?
></i
><br
>
531 <i
><a href
="http://www.amule-project.net/">http
://www.amule-project.net/</a></i><br>
532 <i
><
;uberpenguin at hotpop dot com
>
;</i
>
541 * Write out the stats to the browser. I will probably change this later on
542 * to be themable, but for now I lack the motivation...
549 echo $text["sigfileerr"];
552 // html strings that are used over and over
554 $nastring = "\t\t\t\t\t<td class=\"organize\">".$text["na"].
555 "</td>\n\t\t\t\t</tr>\n";
556 $titlecolstart = "\t\t\t\t<tr>\n\t\t\t\t\t<td class=\"organize\">";
557 $titlecolend = "</td>\n";
558 $datacolstart = "\t\t\t\t\t<td class=\"organize\">";
559 $datacolend = "</td>\n\t\t\t\t</tr>\n";
561 $sectiontablestart = "\t<table class=\"sec\">\n\t\t".
562 "<tr class=\"secheader\">\n\t\t\t<td class=\"secheader\">";
563 $sectiontablenext = "</td>\n\t\t</tr>\n";
564 $sectionend = "\t\t\t</table>\n\t\t\t</td>\n\t\t</tr>\n\t</table>".
566 $innertable = "\t\t<tr class=\"secbody\">\n\t\t\t".
567 "<td class=\"secbody\">\n";
568 $organizetable = "\t\t\t<table class=\"organize\">\n";
572 echo "\t<table class=\"sec\">\n\t\t<tr class=\"secheader\">\n\t\t\t".
573 "<td class=\"secheader\"><center><h2>AMPS - ".
574 "AMule PHP Statistics</h2></center></td>\n\t\t</tr>\n\t".
579 echo $sectiontablestart.$text["general"].$sectiontablenext;
586 echo $titlecolstart.$text["client"].$titlecolend;
588 if ($values["running"])
589 echo $datacolstart."aMule ".$values["muleversion"]." ".
590 $text["runtimemsg"]." ".$values["psuptime"].$datacolend;
592 echo $datacolstart."aMule ".$text["norunmsg"].$datacolend;
596 echo $titlecolstart.$text["ed2kstatus"].$titlecolend;
598 if ($values["connected"] == "2")
599 echo $datacolstart.$text["connecting"];
600 else if ($values["connected"] == "1")
601 echo $datacolstart.$text["online"];
603 echo $datacolstart.$text["offline"];
605 if (!$values["running"])
606 echo " ".$text["amulenorun"].$datacolend;
612 echo $titlecolstart.$text["kadstatus"].$titlecolend;
614 if ($values["kad"] == "2")
615 echo $datacolstart.$text["kadon"];
616 else if ($values["kad"] == "1")
617 echo $datacolstart.$text["kadfw"];
619 echo $datacolstart.$text["kadoff"];
621 if (!$values["running"])
622 echo " ".$text["amulenorun"].$datacolend;
628 echo $titlecolstart.$text["nick"].$titlecolend;
630 if ($values["running"])
631 echo $datacolstart.$values["nick"].$datacolend;
635 // RFC 2282 datestamp
637 echo $titlecolstart.$text["localtime"].$titlecolend;
638 echo $datacolstart.date("r").$datacolend;
642 echo $titlecolstart.$text["rxspeed"].$titlecolend;
644 if ($values["running"])
645 echo $datacolstart.$values["rxspeed"].$text["transrate"].
652 echo $titlecolstart.$text["txspeed"].$titlecolend;
654 if ($values["running"])
655 echo $datacolstart.$values["txspeed"].$text["transrate"].
662 echo $titlecolstart.$text["queuedclients"].$titlecolend;
664 if ($values["running"])
665 echo $datacolstart.$values["queuedclients"].$datacolend;
671 echo $titlecolstart.$text["txtotal"].$titlecolend;
673 if ($values["running"])
674 echo $datacolstart.round($values["txtotal"] / 1073741824, 2).
675 $text["gigabytes"].$datacolend;
681 echo $titlecolstart.$text["rxtotal"].$titlecolend;
683 if ($values["running"])
684 echo $datacolstart.round($values["rxtotal"] / 1073741824, 2).
685 $text["gigabytes"].$datacolend;
691 echo $titlecolstart.$text["sharedfiles"].$titlecolend;
693 if ($values["running"] && $values["connected"] == "1")
694 echo $datacolstart.$values["sharedfiles"].$datacolend;
700 echo $titlecolstart.$text["osversion"].$titlecolend;
701 echo $datacolstart.exec("uname -sr").$datacolend;
705 echo $titlecolstart.$text["hostuptime"].$titlecolend;
706 echo $datacolstart.exec("uptime").$datacolend;
708 // break into next section
711 echo $sectiontablestart.$text["server"].$sectiontablenext;
717 echo $titlecolstart.$text["servername"].$titlecolend;
719 if ($values["running"] && $values["connected"] == "1")
720 echo $datacolstart.$values["servername"].$datacolend;
726 echo $titlecolstart.$text["serveraddr"].$titlecolend;
728 if ($values["running"] && $values["connected"] == "1")
729 echo $datacolstart.$values["serverip"].":".
730 $values["serverport"].$datacolend;
736 echo $titlecolstart.$text["ed2klink"].$titlecolend;
738 if ($values["running"] && $values["connected"] == "1")
739 echo $datacolstart."<a href=\"ed2k://".$values["servername"].
740 "|".$values["serverip"]."|".$values["serverport"].
741 "|/\">ed2k://".$values["servername"]."|".
742 $values["serverip"]."|".$values["serverport"].
743 "|/</a>".$datacolend;
747 // break into next section
750 echo $sectiontablestart.$text["signature"].$sectiontablenext;
758 echo "\t\t\t\t<tr><td><a href=\"".$_SERVER['PHP_SELF']."?lang=".$lang."&sig_image\"><img border=\"0\"".
759 "src=\"".$_SERVER['PHP_SELF']."?lang=".$lang."&sig_image\" alt=\"\"></a></td></tr>\n";
761 // language selection
764 echo $sectiontablestart;
766 echo "\n\t\t\t\t<form method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\">\n\t\t\t\t\t".
767 $text["language"].": <select name=\"lang\">\n";
768 foreach ($completelangs as $langcode)
769 if ($langcode == $lang)
770 echo "\t\t\t\t\t\t<option value=\"".$langcode."\" selected>".$langcode.
773 echo "\t\t\t\t\t\t<option value=\"".$langcode."\">".$langcode."</option>\n";
774 echo "\t\t\t\t\t</select>\n\t\t\t\t\t <input type=\"submit\" value=\"".
775 $text["submit"]."\">\n\t\t\t\t</form>\n";
776 echo "\t\t\t</td>\n\t\t</tr>\n\t</table>";