]> git.pld-linux.org Git - projects/buildlogs.git/blob - index.php
Separate dists.
[projects/buildlogs.git] / index.php
1 <?php
2 ob_start("ob_gzhandler", 1);
3 $buildlogs_server = "buildlogs.pld-linux.org";
4 $url = "index.php";
5 $fail_or_ok = array( "FAIL", "OK" );
6 /*
7 $database = 'sqlite:/home/services/ftp/buildlogs2.db';
8 $root_directory = "/home/services/ftp/pub/pld-buildlogs";
9 */
10
11 // $database, $root_directory and others are taken from buildlogs.inc
12 include('buildlogs.inc');
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";
20 if (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
33 if (isset($lang_detected) && isset($langs[$lang_detected]))
34 {
35   $lang=$lang_detected;
36 }
37
38 if (isset($_GET["lang"]))$_SESSION["lang"]=$_GET["lang"];
39 if (isset($_SESSION["lang"]))$lang=$_SESSION["lang"];
40
41 putenv("LANG=$lang");
42 setlocale(LC_ALL,$lang);
43 bindtextdomain("messages","locale");
44 textdomain("messages");
45
46 if (isset($_GET["dist"]) && isset($_GET["arch"]))
47 {
48         $dist = basename($_GET["dist"]);
49         $arch = basename($_GET["arch"]);
50 }
51
52 if (isset($_POST["dist"])) $dist = basename($_POST["dist"]);
53 if (isset($_POST["arch"])) $arch = basename($_POST["arch"]);
54
55 if (isset($_GET["name"])) {
56   $name_url = urlencode($_GET["name"]);
57         $name = basename($_GET["name"]);
58 }
59 if (isset($_GET["ok"]))$ok=(int)$_GET["ok"];
60 else $ok="";
61 if (isset($_GET["ns"]))$ns=(int)$_GET["ns"];
62 else $ns="";
63 if (isset($_GET["cnt"]))$cnt=(int)$_GET["cnt"];
64 else $cnt = 50;
65 if (isset($_GET["action"]))$action=$_GET["action"];
66 else $action="";
67 if (isset($_GET["off"]))$off=(int)$_GET["off"];
68 else $off = 0;
69 if (isset($_GET["id"]))$id=$_GET["id"];
70
71 if (isset($_POST["str"]))$str=$_POST["str"];
72 if (isset($_POST["action"]))$action=$_POST["action"];
73
74 if ($arch == "src")
75         $arch = "SRPMS";
76
77 function myheader()
78 {
79 echo '<' . '?xml version="1.0" encoding="' . _("ISO-8859-1") .'"?' . ">\n";
80 echo '<' . '?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"><!--
89 A { text-decoration: none; }
90 A:hover { text-decoration: underline; }
91 H1 { font-family: arial,helvetica,sans-serif;
92      font-size: 20pt;
93      font-weight: bold;}
94 H2 { font-family: arial,helvetica,sans-serif;
95      font-size: 18pt;
96      font-weight: bold;}
97 BODY,TD { font-family: arial,helvetica,sans-serif;
98           font-size: 13pt; }
99 TH { font-family: arial,helvetica,sans-serif;
100      font-size: 13pt;
101      font-weight: bold; }
102 /* error lines from build logs */
103 .error {
104         background-color: #b00;
105 }
106 .verbose {
107         color: #886;
108 }
109 .section {
110         color: #111;
111         background-color: #161;
112 }
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
123 function start_pre()
124 {
125         echo "<table cellpadding=\"10\"><tr><td bgcolor=\"#000000\">".
126                 "<font color=\"#cccccc\"><pre style=\"white-space: pre-line; word-break: break-all;\">";
127 }
128
129 function end_pre()
130 {
131         echo "</pre></font></td></tr></table>\n";
132 }
133
134 function trailer()
135 {
136         echo "</body></html>";
137 }
138
139
140 function mydie($msg)
141 {
142         echo "Fatal error: $msg";
143 }
144
145
146
147 function 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) {
192     $name = $row["name"];
193     $id = $row["id"];
194     $dist = $row["dist"];
195     $arch = $row["arch"];
196                 $f = $name;
197     $name_url = urlencode($name);
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                 }
217                 $u = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;name=$name_url&amp;id=$id";
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
267 function file_name()
268 {
269         global $ok, $dist, $arch, $name, $name_url, $id;
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
280 function dump_log($tail)
281 {
282         global $ok, $url, $dist, $arch, $name, $name_url;
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\" width="\100%\">";
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
307         one_item(_("Status"), ($ok == 1 ?
308                                 "<font color=\"green\"><b>"._("OK")."</b></font>" :
309                                 "<font color=\"red\"><b>"._("Failed")."</b></a>"));
310         one_item(_("Source URL"),
311                  href("ftp://$buildlogs_server/$f",
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
317         one_item(_("text/plain URL"),
318                  href("$bu&amp;name=$name_url&amp;id=$id&amp;action=text",
319                       _("View!")));
320         if ($tail) {
321                 one_item(_("full text"),
322                          href("$bu&amp;name=$name_url&amp;id=$id",
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         }
331         one_item("Date", date("Y/m/d H:i:s", filemtime("$root_directory/$f")));
332         /*
333         echo "<tr><td>Here:</td><td>" .
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
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
352         $cmd = "$filter '$root_directory/$f'";
353         $fd = popen($cmd, "r");
354         $toc = array();
355         $err = array();
356         $first_cut = false;
357         $first_cut_done = false;
358         $time = "";
359         $out_buf = array();
360         $out_buf_size = 0;
361         while (($s = fgets($fd, 102400)) != false) {
362
363                 if (strlen($s) > 800) {
364                         $s = chunk_split($s, 800, "\n    ");
365                         $s = trim($s);
366                 }
367
368                 $toc_elem = false;
369                 $err_elem = false;
370
371                 $s = htmlspecialchars($s);
372                 // highlight errors
373                 if (preg_match("/(?:fail|error(s|\sCS\d+)?):/i", $s)) {
374                         $first_cut = true;
375                         $err_count++;
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                         $first_cut = true;
381                         $err_count++;
382                         $toc_elem = "error $err_count";
383                         $err_elem = $s;
384                         $s = "<span class=error id=error-$err_count>$s</span>";
385                 } elseif (preg_match("#^\+ /usr/bin/make\b.*\b(?P<target>check)\b#", $s, $m)) {
386                         // rpm build section
387                         $toc_elem = "make {$m['target']}";
388                         $err_elem = $s;
389                         $s = "<span class=line id=make-{$m['target']}>$s</span>";
390                 } elseif (substr($s, 0, 2) == "+ ") {
391                         // shell verbose
392                         $s = "<span class=verbose>$s</span>";
393                 } elseif (preg_match("/^Executing\(%(?P<section>\w+)\)/", $s, $m)) {
394                         // rpm build section
395                         $toc_elem = $m['section'];
396                         $err_elem = $s;
397                         $s = "<span class=section id={$m['section']}>$s</span>";
398                 } elseif (preg_match("/^Processing files: (?P<pkg>(?P<name>.+)-[^-]+-[^-]+)/", $s, $m)) {
399                         $first_cut = true;
400                         // processing files
401                         $toc_elem = "files ".$m['name'];
402                         $err_elem = $s;
403                         $s = "<span class=section id=files-{$m['name']}>$s</span>";
404                 } elseif (preg_match("/^ended at: (?P<date>.+), done in (?P<time>[\d:.]+)/", $s, $m)) {
405                         $time = $m['time'];
406                 }
407
408                 $out_buf[] = $s;
409                 $out_buf_size++;
410
411                 // if error/processing found truncate early but keep last 100 lines before error
412                 if ($tail && $first_cut && !$first_cut_done && $out_buf_size > 100) {
413                         array_splice($out_buf, 0, $out_buf_size - 100);
414                         $out_buf_size = 100;
415                         $first_cut_done = true;
416                 }
417
418                 // if (not in tail mode) or (in tail mode but we have an error)
419                 if (!$tail || $first_cut) {
420                         if ($toc_elem)
421                                 $toc[] = $toc_elem;
422                         if ($err_elem)
423                                 $err[] = $err_elem;
424                 }
425         }
426         pclose($fd);
427
428         // no errors found, no processing found but we are in tail mode
429         if ($tail && !$first_cut_done && $out_buf_size > 100) {
430                 array_splice($out_buf, 0, $out_buf_size - 100);
431                 $out_buf_size = 100;
432         }
433
434         $code = join('', $out_buf);
435
436         if ($time) {
437                 one_item(_("Runtime"), $time);
438         }
439
440         echo "</table>";
441
442         if (!empty($toc)) {
443                 echo "<h2>"._("Toc:")."</h2>";
444                 echo "<ul class=toc>";
445                 foreach ($toc as $i => $section) {
446                         $id = str_replace(" ", "-", $section);
447                         echo "<li><a href=#{$id}>{$section}</a></li>";
448                         echo "<code>{$err[$i]}</code>";
449                 }
450                 echo "</ul>";
451         }
452
453         echo "<h2>"._("Content:")."</h2>";
454
455         start_pre();
456         echo $code;
457         end_pre();
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>
466            [<a href="<?php echo "$bu&amp;action=qa"
467                 ?>"><?=_("View rpm -qa of builder")?></a>]
468           </td>
469          </tr>
470         </table>
471 <?php
472
473 }
474
475 function 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";
487         echo "# date   : " .
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
498   $cmd = "$filter '$root_directory/$f'";
499         $fd = popen($cmd, "r");
500         while (($s = fgets($fd, 1000)) != false) {
501                 echo $s;
502         }
503         pclose($fd);
504 }
505
506 function 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";
517         foreach ($addr as $dist => $ddist) {
518                 echo "<tr><td colspan=2 nowrap=\"nowrap\"><hr/></td></tr>\n";
519                 foreach ($ddist as $arch) {
520                         echo "<tr><td nowrap=\"nowrap\">".
521                                 "<a href=\"$url?dist=$dist&amp;arch=$arch&amp;ok=0&amp;cnt=$cnt\">
522                                 $dist/$arch</a></td><td nowrap=\"nowrap\">".
523                                 "[<a href=\"$url?dist=$dist&amp;arch=$arch&amp;ok=1&amp;cnt=$cnt\">OK</a>]</td>".
524                                 #"<td>[<a href=\"$url?idx=$i&amp;action=qa\">qa</a>]</td>".
525                                 "</tr>\n";
526                 }
527         }
528         echo "</table><hr />\n";
529         
530         echo "<div align=\"center\">";
531         echo "<a href=\"$big_url&amp;action=adv_search\">"._("Advanced Search")."</a><br />\n";
532         
533         echo "<a href=\"$url\">main()</a><hr />\n";
534         echo "<a href=\"http://www.pld-linux.org/\"><img src=\"powpld.png\" ".
535              "alt=\""._("Powered by PLD Linux")."\" border=\"0\" /></a><br />\n" .
536              "<small>(c) 2002-". date("Y") . " ". 
537              "<a href=\"mailto:feedback@pld-linux.org\">PLD&nbsp;Team</a><br />\n".
538              '$Revision: 1.34 $'.
539              "</small></div>\n";
540
541         # smile ;)
542         echo "<div align=\"center\"><small>";
543         $pow = array("vim", "php", "brain", "power", "electricity",
544                      "coffee", "ufo", "penguin", "GNOME", "ELF", "DWARF",
545                      "voodoo magic", "Linux", "x-files", "X", "foobar",
546                      "/dev/null", "/dev/zero", "/dev/drzewo",
547                      "Leppe'", "matrix", "Neo", "PDP-11",
548                      "Ken", "GNU antilope", "PDP-7", "ITS", "Multics",
549                      "foobarbaz", "ed", "Joe", "Unix conspiracy",
550                      "overclock", "The Right Thing",
551                      "The Bad Thing", "Star Treck", "NSA", "NASA",
552                      "achelon", "VAX", "Real Programmer",
553                      "Real Operating System", "Real Computer",
554                      "computron", "bogon", "quantum bogodynamics",
555                      "BOFH", "/dev/ill", "nasi tu byli",
556                      "Paranoid Android", "Lunatic Corp", "Parallel thinking",
557                      "sfistak", "Linus", "The Golden Path", "Dark Side of the Force",
558                      "Przewodniczacego Lepper-a", "KDE", "Microsoft Windows 2003", "sqlite3",
559          "synergy", "six Cray XMT Supercomputers"
560                      # feel free to add sth if you change this file ;)
561                      );
562         echo _("Powered by")." ";
563         $max = 1;
564         for ($i = 0; $i < $max; $i++) {
565                 $x = rand(0, count($pow) - 1);
566                 if ($pow[$x] == "") $i--;
567                 else echo $pow[$x] . ($i == $max - 1 ? "." : ", ");
568                 $pow[$x] = "";
569         }
570         echo "</small></div>";
571
572         echo "<div align=\"center\"><small>";
573                 echo "Your IP: " . $_SERVER['REMOTE_ADDR'];
574         echo "</small></div>";
575
576         if (isset($dist) && isset($arch)) {
577         echo "<form action=\"index.php\" method=\"post\">";
578         echo "<input type=\"hidden\" name=\"dist\" value=\"$dist\" />";
579         echo "<input type=\"hidden\" name=\"arch\" value=\"$arch\" />";
580         echo "<input type=\"hidden\" name=\"action\" value=\"sqa\" />";
581         echo "<input type=\"text\" size=\"14\" name=\"str\" /><br />";
582         echo "<input type=\"submit\" name=\"submit\" value=\""._("Search rpmqa!")."\" />";
583         echo "</form>";
584         }
585 }
586
587 function get_qa()
588 {
589     global $dist, $arch;
590
591         if (!isset($dist) || !isset($arch))
592                 return false;
593         $addr = "http://ftp1.pld-linux.org/dists/$dist/.stat/builder/$dist/rpmqa-$arch.txt";
594     return fopen("$addr", "r");
595 }
596
597 function search_qa()
598 {
599         global $url, $str, $dist, $arch;
600
601         $f = get_qa();
602         echo "<h1>"._("Search results for")." '$str' "._("in")." $dist/$arch</h1>";
603
604         start_pre();
605
606         if ($f == 0) {
607                 echo _("Sorry, cannot open.");
608         } else {
609                 while (($s = fgets($f, 1000)) != false) {
610                         if (stristr($s, "Query done at:")) {
611                                 echo "rpmqa database from " . strstr($s, ":") . "\n";
612                                 continue;
613                         }
614
615                         if (stristr($s, $str))
616                                 echo $s;
617                 }
618                 echo "\n/* EOF */";
619         }
620         end_pre();
621 }
622
623 function dump_qa($plain)
624 {
625         global $url, $dist, $arch;
626
627         $f = get_qa();
628
629         if ($plain) {
630                 header("Content-type: text/plain");
631                 echo _("# rpm -qa of")." $dist/$arch\n";
632         } else {
633                 echo "<h1>"._("rpm -qa of")." $a</h1>";
634                 echo "<a href=\"$url?dist=$dist&amp;arch=$arch&amp;action=qatxt\">"._("text/plain version")."</a>";
635                 start_pre();
636         }
637
638         if ($f == 0) {
639                 echo _("Sorry, cannot open.");
640         } else {
641                 while (($s = fgets($f, 1000)) != false) {
642                         echo $s;
643                 }
644         }
645
646         if (!$plain)
647                 end_pre();
648 }
649
650
651 function adv_search()
652 {
653   global $database, $addr, $fail_or_ok, $url, $_POST, $off, $cnt, $root_directory, $ok, $ns;
654
655   $big_url = "$url?ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
656
657   echo "<script><!--\n".
658        "function checkboxToggle() {\n".
659        "for (var i=0;i<document.forms[0].elements.length;i++) {\n".
660        "var e = document.forms[0].elements[i];\n".
661        "if ((e.name != 'all') && (e.type=='checkbox'))\n".
662        "e.checked = document.forms[0].all.checked;\n".
663        "}\n }\n -->\n </script>\n";
664
665 /* Shut up warnings */
666   if (!isset($_POST["n2"])) $_POST["n2"] = "";
667   if (!isset($_POST["age1"])) $_POST["age1"] = "";
668   if (!isset($_POST["age2"])) $_POST["age2"] = "";
669   if (!isset($_POST["size1"])) $_POST["size1"] = "";
670   if (!isset($_POST["size2"])) $_POST["size2"] = "";
671
672   echo "<form action=\"index.php?action=adv_search\" method=\"post\">";
673
674   echo "<div align=\"center\">";
675   echo "<table border=\"0\">\n";
676   echo "<tr>\n";
677   echo "<td>"._("Package name")."</td>\n";
678   echo "<td><input type=\"text\" size=\"20\" name=\"n2\" value=\"". $_POST["name"] ."\"/></td>\n";
679   echo "</tr>\n";
680
681   echo "<tr>\n";
682   echo "<td>"._("Days")."</td>\n";
683   echo "<td>"._("From").": <input type=\"text\" size=\"20\" name=\"age1\" value=\"". $_POST["age1"] ."\" /></td>\n";
684   echo "<td>"._("To").": <input type=\"text\" size=\"20\" name=\"age2\" value=\"". $_POST["age2"] ."\" /></td>\n";
685   echo "</tr>\n";
686
687   echo "<tr>\n";
688   echo "<td>"._("Size")."</td>\n";
689   echo "<td>"._("From").": <input type=\"text\" size=\"20\" name=\"size1\" value=\"". $_POST["size1"] ."\" /></td>\n";
690   echo "<td>"._("To").": <input type=\"text\" size=\"20\" name=\"size2\" value=\"". $_POST["size2"] ."\" /></td>\n";
691   echo "</tr>\n";
692
693   echo "<tr>\n";
694   echo "<td>"._("Search logs:")."</td>\n";
695   echo "</tr>\n";
696
697   echo "<tr>\n";
698   echo "<td>"._("Failed")."</td>\n";
699   echo "<td>"._("OK")."</td>\n";
700   echo "</tr>\n";
701
702   $i = 1;
703   foreach ($addr as $dist => $ddist) {
704     foreach ($ddist as $arch) {
705     echo "<tr>\n";
706     $name="as0_".$i;
707     if (!isset($_POST["$name"])) {
708         $check = " ";
709     } else {
710         $check=" checked='checked'";
711     }
712     echo "<td><input name=\"$name\" id=\"$name\" type=\"checkbox\"$check /><label for=\"$name\">". "$dist/$arch" ."</label></td>\n";
713     $name="as1_".$i;
714     if (!isset($_POST["$n2"])) {
715         $check = " ";
716     } else {
717         $check=" checked='checked'";
718     }
719     echo "<td><input name=\"$name\" id=\"$name\" type=\"checkbox\"$check /><label for=\"$name\">". "$dist/$arch" ."</label></td>\n";
720     echo "</tr>\n";
721     $i++;
722     }
723   }
724         
725   echo "<tr>\n";
726   echo "<td><label><input name=\"all\" type=\"checkbox\" checked=\"on\" onClick=\"checkboxToggle()\">"._("Toggle checkboxes")."</label>&nbsp;<input type=\"submit\" name=\"submit\" value=\""._("Search!")."\" /></td>";
727   echo "</tr>\n";
728
729   echo "</table>\n";
730
731 //      if (isset($_POST["name"]) || isset($_POST["age1"]) || isset($_POST["age2"]) ||
732 //        isset($_POST["size1"]) || isset($_POST["size2"])
733   if (($_POST["n2"]!="") || ($_POST["age1"]!="") || ($_POST["age2"]!="") ||
734     ($_POST["size1"]!="") || ($_POST["size2"]!=""))
735   {
736         $query = "SELECT log_id, dist, arch, ok, name, size, mtime, id FROM logs WHERE 1 ";
737         if ($_POST["n2"] != "") {
738                 $n = addslashes($_POST["n2"]);
739                 $query .= "AND name LIKE '$n%' ";
740         }
741         $now = time();
742
743         if ($_POST["age1"] != "") {
744                 $age = $now - (int)$_POST["age1"] * 24 * 3600;
745                 $query .= "AND mtime > $age ";
746         }
747
748         if ($_POST["age2"] != "") {
749                 $age = $now - (int)$_POST["age2"] * 24 * 3600;
750                 $query .= "AND mtime < $age ";
751         }
752
753         if ($_POST["size1"] != "") {
754                 $size = (int)$_POST["size1"];
755                 $query .= "AND size > $size ";
756         }
757
758         if ($_POST["size2"] != "") {
759                 $size = (int)$_POST["size2"];
760                 $query .= "AND size < $size ";
761         }
762
763         $or = "AND (";
764   $i = 1;
765   foreach ($addr as $dist => $ddist) {
766     foreach ($ddist as $arch) {
767       for ($j = 0; $j < 2; $j++) {
768                           if (isset($_POST["as" . $j . "_" .$i])) {
769                                 $query .= "$or (dist = '$dist' AND arch = '$arch' AND ok = $j)";
770                                 $or = " OR ";
771                         }
772                 }
773     $i++;
774     }
775         }
776         if ($or == " OR ") $query .= ")";
777 //      if (!isset($cnt)) $cnt = 50;
778 //      if (!isset($off)) $off = 0;
779         if (!isset($ns)) $ns = 0;
780         switch ($ns) {
781                 case 0:
782                         $query .= " ORDER BY mtime DESC";
783                         break;
784                 case 1:
785                         $query .= " ORDER BY name";
786                         break;
787                 case 2:
788                         $query .= " ORDER BY dist, arch, name";
789                         break;
790         }
791         $query .= " LIMIT $cnt OFFSET $off ";
792
793         try {
794                 $dbh = new PDO("$database");
795         } catch (PDOException $e) {
796                 mydie("new PDO: " . $e->getMessage());
797         }
798         $result = $dbh->query("$query")->fetchAll();
799
800         if ($result == FALSE) {
801                 echo _("Nothing found");
802         } else {
803                 echo "<table border=\"0\" cellspacing=\"1\" ".
804                         "cellpadding=3 bgcolor=\"#000000\" width=\"90%\">\n";
805                 echo "<tr><th bgcolor=\"#CCCCFF\" align=\"left\" width=\"10%\">"._("Builder").
806                         "[<a href=\"$big_url&amp;ns=2\">"._("sort")."</a>]</th>";
807                 echo "<th bgcolor=\"#CCCCFF\" align=\"left\" width=\"60%\">"._("Log File").
808                         "[<a href=\"$big_url&amp;ns=1\">"._("sort")."</a>]</th>".
809                         "<th bgcolor=\"#CCCCFF\" align=\"right\" width=\"15%\">"._("Size")."</th> ".
810                          "<th bgcolor=\"#CCCCFF\" align=\"left\">"._("Age").
811                          "[<a href=\"$big_url&amp;ns=0\">"._("sort")."</a>]</th>".
812                          "</th></tr>";
813                 $i = $off;
814 //              for ($i = $off; $i < $off + $count; $i++) {
815                 foreach ($result as $row) {
816       $dist = $row["dist"];
817       $arch = $row["arch"];
818       $name = $row["name"];
819       $name_url = urlencode($name);
820       $id = $row["id"];
821                         $f = $name;
822                         $t = $now - $row["mtime"];
823                         $s = $row["size"];
824                         $t /= 60;
825                         if ($t >= 60) {
826                                 $t /= 60;
827                                 if ($t >= 24) {
828                                         $t /= 24;
829                                         $t = round($t);
830                                         $t = $t . "&nbsp;" . ngettext("day","days",$t);
831                                 } else {
832                                         $t = round($t);
833                                         $t = $t . "&nbsp;" . ngettext("hour","hours",$t);
834                                 }
835                         } else {
836                                 $t = round($t);
837                                 $t = $t . "&nbsp;" . ngettext("minute","minutes",$t);
838                         }
839                         
840 //                $big_url = "$url?idx=$i&amp;ok=$j&amp;ns=$ns&amp;cnt=$cnt";
841       $ok = $row["ok"];
842                         $u = "$url?dist=$dist&amp;arch=$arch&amp;name=$name_url&amp;ok=$ok&amp;id=$id";
843                         $b = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;ns=$ns&amp;off=$off&amp;cnt=$cnt";
844
845                         $builder = "$dist/$arch/". $fail_or_ok[$ok];
846                         echo "<tr>";
847                         echo "<td bgcolor=\"#CCCCCC\"><a href=\"$b\">$builder</a></td>";
848                         echo "<td bgcolor=\"#CCCCCC\"><a href=\"$u\">$f</a> ".
849                         "[<a href=\"$u&amp;action=text\">"._("text")."</a> | ".
850                         "<a href=\"$u&amp;action=tail\">"._("tail")."</a>]".
851                         "</td><td bgcolor=\"#CCCCCC\" align=\"right\">".
852                         "$s</td><td bgcolor=\"#CCCCCC\">$t</td></tr>\n";
853                         $i++;
854                 }
855                 echo "</table></div>\n";
856
857                 $backarr = "&lt;&lt;&lt;&nbsp;";
858                 $back = _("Page back");
859                 $forward = _("Page forward");
860                 $forwardarr = "&nbsp;&gt;&gt;&gt;";
861
862         }
863 // FIXME
864 /*
865         echo "<p><table width=\"90%\" align=\"center\"><tr><td align=left width=1%>";
866
867         if ($off > 0) {
868                 $noff = $off - $cnt;
869                 if ($noff < 0)  
870                         $noff = 0;
871                 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
872                 echo "$hrefurl$backarr</a></td><td align=left>$hrefurl$back</a>";
873         } else {
874                 echo "$backarr</td><td align=left>$back";
875         }
876
877     echo "</td>\n<td align=\"center\">";
878     echo "</td>\n<td align=\"right\">";
879
880     if ($off + $cnt < count($list))
881     {
882       $noff = $off + $cnt;
883       if ($noff < 0)    
884         $noff = 0;
885       $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
886       echo "$hrefurl$forward</a></td><td align=\"right\" width=\"1%\">$hrefurl$forwardarr</a>";
887     }
888     else
889     {
890       echo "$forward</td><td align=\"right\" width=\"1%\">$forwardarr";
891     }
892
893     echo "</td>\n</tr></table></p>";
894 */
895   } else
896   {
897     echo _("Enter something!");
898   }
899   echo "</div></form>\n";
900 }
901
902 function welcome()
903 {
904 ?>
905 <table border="0" width="100%"><tr><td width="20%">&nbsp;</td><td>
906 <h1><?=_("Welcome!")?></h1>
907 <p><?=_("Welcome to PLD Build Logs WWW interface.")?></p><p>
908 <?=_("Feel free to email bug reports, complaints and feature requests ")?>
909 <!-- ech... niech strace... -->
910 <a href="mailto:feedback@pld-linux.org"><?=_("to us")?></a>. <?=_("Positive opinions are also")?>
911 <a href="mailto:feedback@pld-linux.org"><?=_("welcome")?></a> ;)</p>
912 <p>Version: $Id: index.php,v 1.34 2014/10/18 10:15:22 arekm Exp $</p>
913 </td><td width="20%">&nbsp;</td></tr>
914 </table>
915 <?php
916 }
917
918 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
919 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
920 header("Cache-Control: no-cache, must-revalidate");
921 header("Pragma: no-cache");
922
923 //phpinfo();
924 if ($action == "text") {
925         dump_text();
926 } else if ($action == "adv_search") {
927         myheader();
928         adv_search();
929         trailer();
930 } else if ($action == "qatxt") {
931         dump_qa(1);
932 } else {
933         myheader();
934         echo "<table cellpadding=\"10\" width=\"100%\"><tr><td valign=\"top\" width=\"10%\">";
935         list_archs();
936         echo "</td><td valign=\"top\">";
937         flush();
938         if ($action == "qa")
939                 dump_qa(0);
940         else if ($action == "sqa")
941                 search_qa();
942         else if (isset($id) || isset($name))
943                 dump_log($action == "tail");
944         else if (isset($dist))
945                 list_logs();
946         else
947                 welcome();
948         echo "</td></tr></table>";
949         trailer();
950 }
951 ?>
This page took 0.145273 seconds and 4 git commands to generate.