]> git.pld-linux.org Git - projects/buildlogs.git/blame - index.php
Current year.
[projects/buildlogs.git] / index.php
CommitLineData
a7f1713c 1<?php
2ob_start("ob_gzhandler", 1);
3$buildlogs_server = "buildlogs.pld-linux.org";
a6cc6dd6 4$url = "index.php";
a7f1713c 5$fail_or_ok = array( "FAIL", "OK" );
6/*
9dcdc6b4 7$database = 'sqlite:/home/services/ftp/buildlogs2.db';
a7f1713c 8$root_directory = "/home/services/ftp/pub/pld-buildlogs";
9*/
10
11// $database, $root_directory and others are taken from buildlogs.inc
f27dac56 12include('buildlogs.inc');
a7f1713c 13
14/* It should be set */
15
16$langs["en_US"]["charset"]="ISO-8859-1";
17$langs["pl_PL"]["charset"]="ISO-8859-2";
18
19$lang="en_US";
20if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
21{
22 $rows=explode(";",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
23 $rows=explode(",",$rows[0]);
24 $lang_detected=rtrim($rows[0]);
25} else if (preg_match("/opera/i",$_SERVER["HTTP_USER_AGENT"]))
26{
27 $lang_detected=preg_replace("/.*\[(.*)\].*/i","\\1",$_SERVER["HTTP_USER_AGENT"]);
28}
29
30// FIXME - some array
31$lang_detected=preg_replace("/^pl$/i","pl_PL",$lang_detected);
32
33if (isset($lang_detected) && isset($langs[$lang_detected]))
34{
35 $lang=$lang_detected;
36}
37
38if (isset($_GET["lang"]))$_SESSION["lang"]=$_GET["lang"];
39if (isset($_SESSION["lang"]))$lang=$_SESSION["lang"];
40
41putenv("LANG=$lang");
42setlocale(LC_ALL,$lang);
43bindtextdomain("messages","locale");
44textdomain("messages");
45
46if (isset($_GET["dist"]) && isset($_GET["arch"]))
47{
48 $dist = basename($_GET["dist"]);
49 $arch = basename($_GET["arch"]);
50}
51
52if (isset($_POST["dist"])) $dist = basename($_POST["dist"]);
53if (isset($_POST["arch"])) $arch = basename($_POST["arch"]);
54
55if (isset($_GET["name"])) {
8f0e31ba 56 $name_url = urlencode($_GET["name"]);
a7f1713c 57 $name = basename($_GET["name"]);
58}
59if (isset($_GET["ok"]))$ok=(int)$_GET["ok"];
60else $ok="";
61if (isset($_GET["ns"]))$ns=(int)$_GET["ns"];
62else $ns="";
63if (isset($_GET["cnt"]))$cnt=(int)$_GET["cnt"];
64else $cnt = 50;
65if (isset($_GET["action"]))$action=$_GET["action"];
66else $action="";
67if (isset($_GET["off"]))$off=(int)$_GET["off"];
68else $off = 0;
69if (isset($_GET["id"]))$id=$_GET["id"];
70
71if (isset($_POST["str"]))$str=$_POST["str"];
72if (isset($_POST["action"]))$action=$_POST["action"];
73
dbb4d4ae
AM
74if ($arch == "src")
75 $arch = "SRPMS";
76
a7f1713c 77function myheader()
78{
79echo '<' . '?xml version="1.0" encoding="' . _("ISO-8859-1") .'"?' . ">\n";
80echo '<' . '?xml-stylesheet href="#internalStyle" type="text/css"?' . ">\n";
81?>
82<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
83 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
84<html xmlns="http://www.w3.org/1999/xhtml">
85 <head>
86 <title>PLD Build Logs</title>
87 <?php echo '<meta http-equiv="Content-type" content="text/html; charset=' . _("ISO-8859-1") .'"/>' ."\n";?>
88 <style type="text/css"><!--
89A { text-decoration: none; }
90A:hover { text-decoration: underline; }
2ba2cc91
ER
91H1 { font-family: arial,helvetica,sans-serif;
92 font-size: 20pt;
a7f1713c 93 font-weight: bold;}
2ba2cc91
ER
94H2 { font-family: arial,helvetica,sans-serif;
95 font-size: 18pt;
a7f1713c 96 font-weight: bold;}
2ba2cc91 97BODY,TD { font-family: arial,helvetica,sans-serif;
a7f1713c 98 font-size: 13pt; }
2ba2cc91
ER
99TH { font-family: arial,helvetica,sans-serif;
100 font-size: 13pt;
a7f1713c 101 font-weight: bold; }
2ba2cc91
ER
102/* error lines from build logs */
103.error {
104 background-color: #b00;
105}
e926de50
ER
106.verbose {
107 color: #886;
108}
109.section {
110 color: #111;
111 background-color: #161;
112}
a7f1713c 113//-->
114</style>
115 </head>
116 <!-- Diffrent color for visited link doesn't make much sense here...
117 this page is autogenerated and it might be misleading after some
118 build log changes. -->
119 <body bgcolor="#ffffff" text="#000000" link="#5f26cd" vlink="#5f26cd">
120<?php
121}
122
123function start_pre()
124{
125 echo "<table cellpadding=\"10\"><tr><td bgcolor=\"#000000\">".
126 "<font color=\"#cccccc\"><pre style=\"width: 2048px;overflow: scroll\">";
127}
128
129function end_pre()
130{
131 echo "</pre></font></td></tr></table>\n";
132}
133
134function trailer()
135{
136 echo "</body></html>";
137}
138
139
140function mydie($msg)
141{
142 echo "Fatal error: $msg";
143}
144
145
146
147function list_logs()
148{
149 global $database;
150 global $arch, $dist, $ok;
151 global $big_url, $ns;
152 global $off, $cnt, $root_directory, $url;
153
154 $big_url = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
155
156 if ($ok == 1) {
157 echo "<h1>"._("Listing of")." $dist/$arch/OK "
158 ."(<a href=\"$big_url&amp;ok=0\">"._("fail")."</a>)</h1>\n";
159 } else {
160 echo "<h1>"._("Listing of")." $dist/$arch/FAIL "
161 ."(<a href=\"$big_url&amp;ok=1\">"._("ok")."</a>)</h1>\n";
162 }
163
164 echo "<div align=\"center\"><table cols=\"4\" border=\"0\" cellspacing=\"1\" ".
165 "cellpadding=\"3\" bgcolor=\"#000000\" width=\"90%\">\n";
166 echo "<tr><th bgcolor=\"#CCCCFF\" align=\"right\" width=\"1%\">"._("No.")."</th>".
167 "<th bgcolor=\"#CCCCFF\" align=\"left\" width=\"80%\">"._("Log File").
168 "[<a href=\"$big_url&amp;ns=1\">"._("sort")."</a>]</th>".
169 "<th bgcolor=\"#CCCCFF\" align=\"right\" width=\"15%\">"._("Size")."</th> ".
170 "<th bgcolor=\"#CCCCFF\" align=\"left\">"._("Age").
171 "[<a href=\"$big_url&amp;ns=0\">"._("sort")."</a>]</th>".
172 "</tr>";
173
174 if ($ns != 1) $ns = 0;
175 if (!isset($ok)) $ok = 0;
176// if (!isset($off)) $off = 0;
177// if (!isset($cnt)) $cnt = 50;
178 if ($ns == 0) $order = "mtime DESC";
179 else $order = "name";
180
181 $query = "SELECT log_id, dist, arch, ok, name, mtime, size, id FROM logs WHERE "
182 . "dist = '$dist' AND arch = '$arch' AND ok = $ok ORDER BY $order LIMIT $cnt OFFSET $off";
183
184 try {
185 $dbh = new PDO("$database");
186 } catch (PDOException $e) {
187 mydie("new PDO: " . $e->getMessage());
188 }
189 $now = time();
190 $i = $off;
191 foreach ($dbh->query("$query") as $row) {
8f0e31ba 192 $name = $row["name"];
193 $id = $row["id"];
194 $dist = $row["dist"];
195 $arch = $row["arch"];
196 $f = $name;
197 $name_url = urlencode($name);
a7f1713c 198 $t = $now - $row["mtime"];
199 $s = $row["size"];
200 $h = $row["log_id"];
201
202 $t /= 60;
203 if ($t >= 60) {
204 $t /= 60;
205 if ($t >= 24) {
206 $t /= 24;
207 $t = round($t);
208 $t = $t . "&nbsp;" . ngettext("day","days",$t);
209 } else {
210 $t = round($t);
211 $t = $t . "&nbsp;" . ngettext("hour","hours",$t);
212 }
213 } else {
214 $t = round($t);
215 $t = $t . "&nbsp;" . ngettext("minute","minutes",$t);
216 }
8f0e31ba 217 $u = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;name=$name_url&amp;id=$id";
a7f1713c 218 echo "<tr><td bgcolor=\"#CCCCCC\" align=\"right\">".($i+1).".</td>".
219 "<td bgcolor=\"#CCCCCC\"><a href=\"$u\">$f</a> ".
220 "[<a href=\"$u&amp;action=text\">"._("text")."</a> | ".
221 "<a href=\"$u&amp;action=tail\">"._("tail")."</a>]".
222 "</td><td bgcolor=\"#CCCCCC\" align=\"right\">".
223 "$s</td><td bgcolor=\"#CCCCCC\">$t</td></tr>\n";
224 $i++;
225 }
226 $count = $i - $off;
227 echo "</table></div>\n";
228
229 $backarr = "&lt;&lt;&lt;&nbsp;";
230 $back = _("Page back");
231 $forward = _("Page forward");
232 $forwardarr = "&nbsp;&gt;&gt;&gt;";
233
234 echo "<p><table width=\"90%\" align=\"center\"><tr><td align=\"left\" width=\"1%\">";
235
236 if ($off > 0) {
237 $noff = $off - $count;
238 if ($noff < 0)
239 $noff = 0;
240 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
241 echo "$hrefurl$backarr</a></td><td align=\"left\">$hrefurl$back</a>";
242 } else {
243 echo "$backarr</td><td align=\"left\">$back";
244 }
245
246 echo "</td>\n<td align=\"center\">";
247
248 if (isset($dist) && isset($arch)) {
249 echo "[<a href=\"$big_url&amp;action=qa\">"._("View <quot>rpm&nbsp;-qa</quot> of builder")."</a>]";
250 } else {
251 echo "&nbsp;";
252 }
253
254 echo "</td>\n<td align=right>";
255 if ($cnt == $count) {
256 $noff = $off + $cnt;
257 if ($noff < 0)
258 $noff = 0;
259 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
260 echo "$hrefurl$forward</a></td><td align=right width=1%>$hrefurl$forwardarr</a>";
261 } else {
262 echo "$forward</td><td align=right width=1%>$forwardarr";
263 }
264 echo "</td>\n</tr></table></p>";
265}
266
267function file_name()
268{
8f0e31ba 269 global $ok, $dist, $arch, $name, $name_url, $id;
a7f1713c 270
271 if (isset($name) && isset($ok) && isset($arch) && isset($dist)) {
272 if (isset($id) && $id != '') {
273 $name = $name . ",$id";
274 }
275 $w = $ok ? "OK" : "FAIL";
276 return "$dist/$arch/$w/$name.bz2";
277 }
278}
279
280function dump_log($tail)
281{
8f0e31ba 282 global $ok, $url, $dist, $arch, $name, $name_url;
a7f1713c 283 global $root_directory, $big_url, $ns, $id, $cnt, $off;
284 global $buildlogs_server;
285
286 $f = file_name();
287
288 if ($f == false)
289 return;
290
291 $df = preg_replace("/.*\/([^\/]*)$/", "\\1", $f);
292 $df = preg_replace("/\.(bz2|gz)$/", "", $df);
293
294 echo "<h1>$df</h1>";
295
296 echo "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#000000\">";
297
298 function one_item($h, $t) {
299 echo "<tr><td bgcolor=\"#ccccff\">$h:</td>".
300 "<td bgcolor=\"#cccccc\">$t</td></tr>";
301 }
302
303 function href($h, $c) {
304 return "<a href=\"$h\">$c</a>";
305 }
306
2ba2cc91
ER
307 one_item(_("Status"), ($ok == 1 ?
308 "<font color=\"green\"><b>"._("OK")."</b></font>" :
a7f1713c 309 "<font color=\"red\"><b>"._("Failed")."</b></a>"));
2ba2cc91
ER
310 one_item(_("Source URL"),
311 href("ftp://$buildlogs_server/$f",
a7f1713c 312 "ftp://$buildlogs_server/$f"));
313
314 $big_url = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
315 $bu = "$big_url&amp;off=$off";
316
2ba2cc91 317 one_item(_("text/plain URL"),
8f0e31ba 318 href("$bu&amp;name=$name_url&amp;id=$id&amp;action=text",
a7f1713c 319 _("View!")));
320 if ($tail) {
2ba2cc91 321 one_item(_("full text"),
8f0e31ba 322 href("$bu&amp;name=$name_url&amp;id=$id",
a7f1713c 323 _("View!")));
324 }
325
326 if (isset($dist) && isset($arch)) {
327 one_item(_("rpm -qa of builder"), href("$bu&amp;action=qa", _("View!")));
328 } else {
329 one_item(_("rpm -qa of builder"), _("Not available"));
330 }
35a4c15e 331 one_item("Date", date("Y/m/d H:i:s", filemtime("$root_directory/$f")));
a7f1713c 332 /*
2ba2cc91 333 echo "<tr><td>Here:</td><td>" .
a7f1713c 334 "<a href=\"$url?idx=$idx&amp;ok=$ok&amp;id=$id\">".
335 "http://" . getenv("SERVER_NAME") .
336 getenv("SCRIPT_NAME") . "?idx=$idx&amp;ok=$ok&amp;id=$id</a>" .
337 "</td></tr>"; */
338
a7f1713c 339
340
341 # what can I say beside PHP suxx? how the fuck should I create
342 # bidirectional pipe? gotta use wget
343
344 if (preg_match("/\.bz2$/", $f)) {
345 $filter = "bzcat";
346 } elseif (preg_match("/\.gz$/", $f)) {
347 $filter = "zcat";
348 } else {
349 $filter = "cat";
350 }
351
8f0e31ba 352 $cmd = "$filter '$root_directory/$f'";
a7f1713c 353 $fd = popen($cmd, "r");
015d7b6a
AM
354 $line_idx = 0;
355 $processing_idx = 0;
e926de50 356 $toc = array();
e69f53b7 357 $err = array();
283f4590 358 $err_count = 0;
b530f30e 359 $time = "";
e69f53b7 360 $out_buf = array();
77aded7c 361 $out_buf_size = 0;
a7f1713c 362 while (($s = fgets($fd, 102400)) != false) {
015d7b6a 363
a7f1713c 364 if (strlen($s) > 800) {
365 $s = chunk_split($s, 800, "\n ");
366 $s = trim($s);
367 }
e69f53b7
AM
368
369 $toc_elem = false;
370 $err_elem = false;
371
a7f1713c 372 $s = htmlspecialchars($s);
2ba2cc91 373 // highlight errors
1c26089b 374 if (preg_match("/(?:fail|error(s|\sCS\d+)?):/i", $s)) {
283f4590 375 $err_count++;
e69f53b7
AM
376 $toc_elem = "error $err_count";
377 $err_elem = $s;
378 $s = "<span class=error id=error-$err_count>$s</span>";
379 } elseif (preg_match("/(?:undefined reference to)/i", $s)) {
380 $err_count++;
381 $toc_elem = "error $err_count";
382 $err_elem = $s;
98e99288 383 $s = "<span class=error id=error-$err_count>$s</span>";
1c26089b
ER
384 } elseif (preg_match("#^\+ /usr/bin/make\b.*\b(?P<target>check)\b#", $s, $m)) {
385 // rpm build section
e69f53b7
AM
386 $toc_elem = "make {$m['target']}";
387 $err_elem = $s;
1c26089b 388 $s = "<span class=line id=make-{$m['target']}>$s</span>";
e926de50
ER
389 } elseif (substr($s, 0, 2) == "+ ") {
390 // shell verbose
391 $s = "<span class=verbose>$s</span>";
392 } elseif (preg_match("/^Executing\(%(?P<section>\w+)\)/", $s, $m)) {
393 // rpm build section
e69f53b7
AM
394 $toc_elem = $m['section'];
395 $err_elem = $s;
98e99288 396 $s = "<span class=section id={$m['section']}>$s</span>";
901abf2c 397 } elseif (preg_match("/^Processing files: (?P<pkg>(?P<name>.+)-[^-]+-[^-]+)/", $s, $m)) {
015d7b6a 398 $processing_idx = $line_idx;
901abf2c 399 // processing files
e69f53b7
AM
400 $toc_elem = "files ".$m['name'];
401 $err_elem = $s;
98e99288 402 $s = "<span class=section id=files-{$m['name']}>$s</span>";
b530f30e
ER
403 } elseif (preg_match("/^ended at: (?P<date>.+), done in (?P<time>[\d:.]+)/", $s, $m)) {
404 $time = $m['time'];
2ba2cc91 405 }
e69f53b7 406
015d7b6a 407 $out_buf[$line_idx] = $s;
77aded7c 408 $out_buf_size++;
015d7b6a
AM
409
410 // if error/processing found truncate early but keep last 100 lines before error
411 if ($tail && ($err_count == 1 || ($err_count == 0 && $processing_idx == $line_idx)) && $out_buf_size > 100) {
412 array_splice($out_buf, 0, $out_buf_size - 100);
413 $out_buf_size = 100;
414 }
415
e69f53b7 416 // if (not in tail mode) or (in tail mode but we have an error)
015d7b6a 417 if (!$tail || $err_count || $processing_idx) {
e69f53b7
AM
418 if ($toc_elem)
419 $toc[] = $toc_elem;
420 if ($err_elem)
421 $err[] = $err_elem;
e69f53b7 422 }
015d7b6a
AM
423
424 $line_idx++;
a7f1713c 425 }
a7f1713c 426 pclose($fd);
e69f53b7 427
015d7b6a
AM
428 // no errors found, no processing found but we are in tail mode
429 if ($tail && $err_count == 0 && $processing_idx == 0 && $out_buf_size > 100) {
430 array_splice($out_buf, 0, $out_buf_size - 100);
431 $out_buf_size = 100;
432 }
433
77aded7c 434 $code = join('', $out_buf);
e926de50 435
b530f30e
ER
436 if ($time) {
437 one_item(_("Runtime"), $time);
438 }
439
f43fc7b7
ER
440 echo "</table>";
441
e926de50
ER
442 if (!empty($toc)) {
443 echo "<h2>"._("Toc:")."</h2>";
444 echo "<ul class=toc>";
98e99288 445 foreach ($toc as $i => $section) {
901abf2c
ER
446 $id = str_replace(" ", "-", $section);
447 echo "<li><a href=#{$id}>{$section}</a></li>";
98e99288 448 echo "<code>{$err[$i]}</code>";
e926de50
ER
449 }
450 echo "</ul>";
451 }
452
453 echo "<h2>"._("Content:")."</h2>";
454
455 start_pre();
456 echo $code;
457 end_pre();
a7f1713c 458
459?>
460 <table width="100%">
461 <tr>
462 <td align=left>
463 [<a href="<?php echo $bu; ?>"><?=_("Back to list of logs")?></a>]
464 </td>
465 <td align=right>
2ba2cc91 466 [<a href="<?php echo "$bu&amp;action=qa"
a7f1713c 467 ?>"><?=_("View rpm -qa of builder")?></a>]
468 </td>
469 </tr>
470 </table>
471<?php
472
473}
474
475function dump_text()
476{
477 global $root_directory;
478 global $buildlogs_server;
479
480 header("Content-type: text/plain");
481
482 $f = file_name();
483 if ($f == false)
484 return;
485
486 echo "# src : ftp://$buildlogs_server/$f\n";
2ba2cc91 487 echo "# date : " .
a7f1713c 488 date("Y/m/d H:i:s", filemtime("$root_directory/$f")) . "\n";
489
490 if (preg_match("/\.bz2$/", $f)) {
491 $filter = "bzcat";
492 } elseif (preg_match("/\.gz$/", $f)) {
493 $filter = "zcat";
494 } else {
495 $filter = "cat";
496 }
497
8f0e31ba 498 $cmd = "$filter '$root_directory/$f'";
a7f1713c 499 $fd = popen($cmd, "r");
500 while (($s = fgets($fd, 1000)) != false) {
501 echo $s;
502 }
503 pclose($fd);
504}
505
506function list_archs()
507{
508 global $addr, $url, $cnt,$ok,$ns;
509
510 if (!isset($cnt))
511 $cnt = 50;
512
513 $big_url = "$url?ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
514
515 echo "<table width=\"100%\" border=\"0\">\n";
516 echo "<tr><td bgcolor=\"#cccccc\" nowrap=\"nowrap\">"._("Failed")."</td><td bgcolor=\"#cccccc\">"._("Ok")."</td></tr>\n";
8f0e31ba 517 foreach ($addr as $dist => $ddist) {
506bb488 518 foreach ($ddist as $arch) {
a7f1713c 519 echo "<tr><td nowrap=\"nowrap\">".
506bb488 520 "<a href=\"$url?dist=$dist&amp;arch=$arch&amp;ok=0&amp;cnt=$cnt\">
521 $dist/$arch</a></td><td nowrap=\"nowrap\">".
a7f1713c 522 "[<a href=\"$url?dist=$dist&amp;arch=$arch&amp;ok=1&amp;cnt=$cnt\">OK</a>]</td>".
523 #"<td>[<a href=\"$url?idx=$i&amp;action=qa\">qa</a>]</td>".
524 "</tr>\n";
506bb488 525 }
a7f1713c 526 }
527 echo "</table><hr />\n";
528
529 echo "<div align=\"center\">";
530 echo "<a href=\"$big_url&amp;action=adv_search\">"._("Advanced Search")."</a><br />\n";
531
532 echo "<a href=\"$url\">main()</a><hr />\n";
533 echo "<a href=\"http://www.pld-linux.org/\"><img src=\"powpld.png\" ".
534 "alt=\""._("Powered by PLD Linux")."\" border=\"0\" /></a><br />\n" .
007b0dfd 535 "<small>(c) ". date("Y") . " ".
a7f1713c 536 "<a href=\"mailto:feedback@pld-linux.org\">PLD&nbsp;Team</a><br />\n".
007b0dfd 537 '$Revision: 1.28 $'.
a7f1713c 538 "</small></div>\n";
539
540 # smile ;)
541 echo "<div align=\"center\"><small>";
542 $pow = array("vim", "php", "brain", "power", "electricity",
543 "coffee", "ufo", "penguin", "GNOME", "ELF", "DWARF",
544 "voodoo magic", "Linux", "x-files", "X", "foobar",
2ba2cc91 545 "/dev/null", "/dev/zero", "/dev/drzewo",
a7f1713c 546 "Leppe'", "matrix", "Neo", "PDP-11",
547 "Ken", "GNU antilope", "PDP-7", "ITS", "Multics",
2ba2cc91 548 "foobarbaz", "ed", "Joe", "Unix conspiracy",
a7f1713c 549 "overclock", "The Right Thing",
550 "The Bad Thing", "Star Treck", "NSA", "NASA",
551 "achelon", "VAX", "Real Programmer",
552 "Real Operating System", "Real Computer",
553 "computron", "bogon", "quantum bogodynamics",
554 "BOFH", "/dev/ill", "nasi tu byli",
555 "Paranoid Android", "Lunatic Corp", "Parallel thinking",
556 "sfistak", "Linus", "The Golden Path", "Dark Side of the Force",
557 "Przewodniczacego Lepper-a", "KDE", "Microsoft Windows 2003", "sqlite3",
3cf4f3e8 558 "synergy", "six Cray XMT Supercomputers"
a7f1713c 559 # feel free to add sth if you change this file ;)
560 );
561 echo _("Powered by")." ";
562 $max = 1;
563 for ($i = 0; $i < $max; $i++) {
564 $x = rand(0, count($pow) - 1);
565 if ($pow[$x] == "") $i--;
566 else echo $pow[$x] . ($i == $max - 1 ? "." : ", ");
567 $pow[$x] = "";
568 }
569 echo "</small></div>";
570
774eb927
AM
571 echo "<div align=\"center\"><small>";
572 echo "Your IP: " . $_SERVER['REMOTE_ADDR'];
573 echo "</small></div>";
574
a7f1713c 575 if (isset($dist) && isset($arch)) {
a6cc6dd6 576 echo "<form action=\"index.php\" method=\"post\">";
a7f1713c 577 echo "<input type=\"hidden\" name=\"dist\" value=\"$dist\" />";
578 echo "<input type=\"hidden\" name=\"arch\" value=\"$arch\" />";
579 echo "<input type=\"hidden\" name=\"action\" value=\"sqa\" />";
580 echo "<input type=\"text\" size=\"14\" name=\"str\" /><br />";
581 echo "<input type=\"submit\" name=\"submit\" value=\""._("Search rpmqa!")."\" />";
582 echo "</form>";
583 }
584}
585
586function get_qa()
587{
588 global $dist, $arch;
589
590 if (!isset($dist) || !isset($arch))
591 return false;
f0694a44 592 $addr = "http://ftp1.pld-linux.org/dists/$dist/.stat/builder/$dist/rpmqa-$arch.txt";
a7f1713c 593 return fopen("$addr", "r");
594}
595
596function search_qa()
597{
598 global $url, $str, $dist, $arch;
599
600 $f = get_qa();
601 echo "<h1>"._("Search results for")." '$str' "._("in")." $dist/$arch</h1>";
602
603 start_pre();
604
605 if ($f == 0) {
606 echo _("Sorry, cannot open.");
607 } else {
608 while (($s = fgets($f, 1000)) != false) {
609 if (stristr($s, $str))
610 echo $s;
611 }
612 echo "/* EOF */";
613 }
614 end_pre();
615}
616
617function dump_qa($plain)
618{
619 global $url, $dist, $arch;
620
621 $f = get_qa();
622
623 if ($plain) {
2ba2cc91 624 header("Content-type: text/plain");
a7f1713c 625 echo _("# rpm -qa of")." $dist/$arch\n";
626 } else {
627 echo "<h1>"._("rpm -qa of")." $a</h1>";
628 echo "<a href=\"$url?dist=$dist&amp;arch=$arch&amp;action=qatxt\">"._("text/plain version")."</a>";
629 start_pre();
630 }
631
632 if ($f == 0) {
633 echo _("Sorry, cannot open.");
634 } else {
635 while (($s = fgets($f, 1000)) != false) {
636 echo $s;
637 }
638 }
639
640 if (!$plain)
641 end_pre();
642}
643
644
645function adv_search()
646{
647 global $database, $addr, $fail_or_ok, $url, $_POST, $off, $cnt, $root_directory, $ok, $ns;
648
649 $big_url = "$url?ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
650
651 echo "<script><!--\n".
652 "function checkboxToggle() {\n".
653 "for (var i=0;i<document.forms[0].elements.length;i++) {\n".
654 "var e = document.forms[0].elements[i];\n".
655 "if ((e.name != 'all') && (e.type=='checkbox'))\n".
656 "e.checked = document.forms[0].all.checked;\n".
657 "}\n }\n -->\n </script>\n";
658
659/* Shut up warnings */
8f0e31ba 660 if (!isset($_POST["n2"])) $_POST["n2"] = "";
a7f1713c 661 if (!isset($_POST["age1"])) $_POST["age1"] = "";
662 if (!isset($_POST["age2"])) $_POST["age2"] = "";
663 if (!isset($_POST["size1"])) $_POST["size1"] = "";
664 if (!isset($_POST["size2"])) $_POST["size2"] = "";
665
a6cc6dd6 666 echo "<form action=\"index.php?action=adv_search\" method=\"post\">";
a7f1713c 667
668 echo "<div align=\"center\">";
669 echo "<table border=\"0\">\n";
670 echo "<tr>\n";
671 echo "<td>"._("Package name")."</td>\n";
8f0e31ba 672 echo "<td><input type=\"text\" size=\"20\" name=\"n2\" value=\"". $_POST["name"] ."\"/></td>\n";
a7f1713c 673 echo "</tr>\n";
674
675 echo "<tr>\n";
676 echo "<td>"._("Days")."</td>\n";
677 echo "<td>"._("From").": <input type=\"text\" size=\"20\" name=\"age1\" value=\"". $_POST["age1"] ."\" /></td>\n";
678 echo "<td>"._("To").": <input type=\"text\" size=\"20\" name=\"age2\" value=\"". $_POST["age2"] ."\" /></td>\n";
679 echo "</tr>\n";
680
681 echo "<tr>\n";
682 echo "<td>"._("Size")."</td>\n";
683 echo "<td>"._("From").": <input type=\"text\" size=\"20\" name=\"size1\" value=\"". $_POST["size1"] ."\" /></td>\n";
684 echo "<td>"._("To").": <input type=\"text\" size=\"20\" name=\"size2\" value=\"". $_POST["size2"] ."\" /></td>\n";
685 echo "</tr>\n";
686
687 echo "<tr>\n";
688 echo "<td>"._("Search logs:")."</td>\n";
689 echo "</tr>\n";
690
691 echo "<tr>\n";
692 echo "<td>"._("Failed")."</td>\n";
693 echo "<td>"._("OK")."</td>\n";
694 echo "</tr>\n";
695
506bb488 696 $i = 1;
8f0e31ba 697 foreach ($addr as $dist => $ddist) {
506bb488 698 foreach ($ddist as $arch) {
a7f1713c 699 echo "<tr>\n";
700 $name="as0_".$i;
a7f1713c 701 if (!isset($_POST["$name"])) {
702 $check = " ";
703 } else {
1b44998a 704 $check=" checked='checked'";
a7f1713c 705 }
8f0e31ba 706 echo "<td><input name=\"$name\" id=\"$name\" type=\"checkbox\"$check /><label for=\"$name\">". "$dist/$arch" ."</label></td>\n";
a7f1713c 707 $name="as1_".$i;
8f0e31ba 708 if (!isset($_POST["$n2"])) {
a7f1713c 709 $check = " ";
710 } else {
1b44998a 711 $check=" checked='checked'";
a7f1713c 712 }
8f0e31ba 713 echo "<td><input name=\"$name\" id=\"$name\" type=\"checkbox\"$check /><label for=\"$name\">". "$dist/$arch" ."</label></td>\n";
a7f1713c 714 echo "</tr>\n";
506bb488 715 $i++;
716 }
a7f1713c 717 }
718
719 echo "<tr>\n";
8f0e31ba 720 echo "<td><label><input name=\"all\" type=\"checkbox\" checked=\"on\" onClick=\"checkboxToggle()\">"._("Toggle checkboxes")."</label>&nbsp;<input type=\"submit\" name=\"submit\" value=\""._("Search!")."\" /></td>";
a7f1713c 721 echo "</tr>\n";
722
723 echo "</table>\n";
724
725// if (isset($_POST["name"]) || isset($_POST["age1"]) || isset($_POST["age2"]) ||
726// isset($_POST["size1"]) || isset($_POST["size2"])
8f0e31ba 727 if (($_POST["n2"]!="") || ($_POST["age1"]!="") || ($_POST["age2"]!="") ||
a7f1713c 728 ($_POST["size1"]!="") || ($_POST["size2"]!=""))
729 {
730 $query = "SELECT log_id, dist, arch, ok, name, size, mtime, id FROM logs WHERE 1 ";
8f0e31ba 731 if ($_POST["n2"] != "") {
732 $n = addslashes($_POST["n2"]);
a7f1713c 733 $query .= "AND name LIKE '$n%' ";
734 }
735 $now = time();
736
737 if ($_POST["age1"] != "") {
738 $age = $now - (int)$_POST["age1"] * 24 * 3600;
739 $query .= "AND mtime > $age ";
740 }
741
742 if ($_POST["age2"] != "") {
743 $age = $now - (int)$_POST["age2"] * 24 * 3600;
744 $query .= "AND mtime < $age ";
745 }
746
747 if ($_POST["size1"] != "") {
748 $size = (int)$_POST["size1"];
749 $query .= "AND size > $size ";
750 }
751
752 if ($_POST["size2"] != "") {
753 $size = (int)$_POST["size2"];
754 $query .= "AND size < $size ";
755 }
756
757 $or = "AND (";
506bb488 758 $i = 1;
8f0e31ba 759 foreach ($addr as $dist => $ddist) {
506bb488 760 foreach ($ddist as $arch) {
761 for ($j = 0; $j < 2; $j++) {
762 if (isset($_POST["as" . $j . "_" .$i])) {
8f0e31ba 763 $query .= "$or (dist = '$dist' AND arch = '$arch' AND ok = $j)";
a7f1713c 764 $or = " OR ";
765 }
766 }
506bb488 767 $i++;
768 }
a7f1713c 769 }
770 if ($or == " OR ") $query .= ")";
771// if (!isset($cnt)) $cnt = 50;
772// if (!isset($off)) $off = 0;
773 if (!isset($ns)) $ns = 0;
774 switch ($ns) {
775 case 0:
776 $query .= " ORDER BY mtime DESC";
777 break;
778 case 1:
779 $query .= " ORDER BY name";
780 break;
781 case 2:
782 $query .= " ORDER BY dist, arch, name";
783 break;
784 }
785 $query .= " LIMIT $cnt OFFSET $off ";
2ba2cc91 786
a7f1713c 787 try {
788 $dbh = new PDO("$database");
789 } catch (PDOException $e) {
790 mydie("new PDO: " . $e->getMessage());
791 }
792 $result = $dbh->query("$query")->fetchAll();
793
794 if ($result == FALSE) {
795 echo _("Nothing found");
796 } else {
797 echo "<table border=\"0\" cellspacing=\"1\" ".
798 "cellpadding=3 bgcolor=\"#000000\" width=\"90%\">\n";
799 echo "<tr><th bgcolor=\"#CCCCFF\" align=\"left\" width=\"10%\">"._("Builder").
800 "[<a href=\"$big_url&amp;ns=2\">"._("sort")."</a>]</th>";
801 echo "<th bgcolor=\"#CCCCFF\" align=\"left\" width=\"60%\">"._("Log File").
802 "[<a href=\"$big_url&amp;ns=1\">"._("sort")."</a>]</th>".
803 "<th bgcolor=\"#CCCCFF\" align=\"right\" width=\"15%\">"._("Size")."</th> ".
804 "<th bgcolor=\"#CCCCFF\" align=\"left\">"._("Age").
805 "[<a href=\"$big_url&amp;ns=0\">"._("sort")."</a>]</th>".
806 "</th></tr>";
807 $i = $off;
808// for ($i = $off; $i < $off + $count; $i++) {
809 foreach ($result as $row) {
810 $dist = $row["dist"];
811 $arch = $row["arch"];
812 $name = $row["name"];
8f0e31ba 813 $name_url = urlencode($name);
a7f1713c 814 $id = $row["id"];
815 $f = $name;
a7f1713c 816 $t = $now - $row["mtime"];
817 $s = $row["size"];
818 $t /= 60;
819 if ($t >= 60) {
820 $t /= 60;
821 if ($t >= 24) {
822 $t /= 24;
823 $t = round($t);
824 $t = $t . "&nbsp;" . ngettext("day","days",$t);
825 } else {
826 $t = round($t);
827 $t = $t . "&nbsp;" . ngettext("hour","hours",$t);
828 }
829 } else {
830 $t = round($t);
831 $t = $t . "&nbsp;" . ngettext("minute","minutes",$t);
832 }
833
834// $big_url = "$url?idx=$i&amp;ok=$j&amp;ns=$ns&amp;cnt=$cnt";
835 $ok = $row["ok"];
8f0e31ba 836 $u = "$url?dist=$dist&amp;arch=$arch&amp;name=$name_url&amp;ok=$ok&amp;id=$id";
a7f1713c 837 $b = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;ns=$ns&amp;off=$off&amp;cnt=$cnt";
838
839 $builder = "$dist/$arch/". $fail_or_ok[$ok];
840 echo "<tr>";
841 echo "<td bgcolor=\"#CCCCCC\"><a href=\"$b\">$builder</a></td>";
842 echo "<td bgcolor=\"#CCCCCC\"><a href=\"$u\">$f</a> ".
843 "[<a href=\"$u&amp;action=text\">"._("text")."</a> | ".
844 "<a href=\"$u&amp;action=tail\">"._("tail")."</a>]".
845 "</td><td bgcolor=\"#CCCCCC\" align=\"right\">".
846 "$s</td><td bgcolor=\"#CCCCCC\">$t</td></tr>\n";
847 $i++;
848 }
849 echo "</table></div>\n";
850
851 $backarr = "&lt;&lt;&lt;&nbsp;";
852 $back = _("Page back");
853 $forward = _("Page forward");
854 $forwardarr = "&nbsp;&gt;&gt;&gt;";
855
856 }
857// FIXME
858/*
859 echo "<p><table width=\"90%\" align=\"center\"><tr><td align=left width=1%>";
860
861 if ($off > 0) {
862 $noff = $off - $cnt;
863 if ($noff < 0)
864 $noff = 0;
865 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
866 echo "$hrefurl$backarr</a></td><td align=left>$hrefurl$back</a>";
867 } else {
868 echo "$backarr</td><td align=left>$back";
869 }
870
871 echo "</td>\n<td align=\"center\">";
872 echo "</td>\n<td align=\"right\">";
873
874 if ($off + $cnt < count($list))
875 {
876 $noff = $off + $cnt;
877 if ($noff < 0)
878 $noff = 0;
879 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
880 echo "$hrefurl$forward</a></td><td align=\"right\" width=\"1%\">$hrefurl$forwardarr</a>";
881 }
882 else
883 {
884 echo "$forward</td><td align=\"right\" width=\"1%\">$forwardarr";
885 }
886
887 echo "</td>\n</tr></table></p>";
888*/
889 } else
890 {
891 echo _("Enter something!");
892 }
4086dafb 893 echo "</div></form>\n";
a7f1713c 894}
895
896function welcome()
897{
898?>
899<table border="0" width="100%"><tr><td width="20%">&nbsp;</td><td>
900<h1><?=_("Welcome!")?></h1>
901<p><?=_("Welcome to PLD Build Logs WWW interface.")?></p><p>
902<?=_("Feel free to email bug reports, complaints and feature requests ")?>
903<!-- ech... niech strace... -->
2ba2cc91 904<a href="mailto:feedback@pld-linux.org"><?=_("to us")?></a>. <?=_("Positive opinions are also")?>
a7f1713c 905<a href="mailto:feedback@pld-linux.org"><?=_("welcome")?></a> ;)</p>
007b0dfd 906<p>Version: $Id: index.php,v 1.28 2014/10/12 22:38:52 arekm Exp $</p>
a7f1713c 907</td><td width="20%">&nbsp;</td></tr>
908</table>
909<?php
910}
911
912header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
913header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
914header("Cache-Control: no-cache, must-revalidate");
915header("Pragma: no-cache");
916
917//phpinfo();
918if ($action == "text") {
919 dump_text();
920} else if ($action == "adv_search") {
921 myheader();
922 adv_search();
923 trailer();
924} else if ($action == "qatxt") {
925 dump_qa(1);
926} else {
927 myheader();
928 echo "<table cellpadding=\"10\" width=\"100%\"><tr><td valign=\"top\" width=\"10%\">";
929 list_archs();
930 echo "</td><td valign=\"top\">";
931 flush();
932 if ($action == "qa")
933 dump_qa(0);
934 else if ($action == "sqa")
935 search_qa();
936 else if (isset($id) || isset($name))
937 dump_log($action == "tail");
938 else if (isset($dist))
939 list_logs();
940 else
941 welcome();
942 echo "</td></tr></table>";
943 trailer();
944}
945?>
This page took 0.156259 seconds and 4 git commands to generate.