cvs: php-bugs-web / bug-pwd-finder.php bugform.inc bugs-dos-and-donts.php bugs-generating-backtrace.php bugs.sql bugstats.php bugtypes.inc credits.php
index.php lbugs.php lstats.php source.php style.css /gifs black.gif checkerboard.gif logo-bug.gif php-logo.gif small_submit.gif
small_submit_black.gif small_submit_white.gif /include cvs-auth.inc layout.inc prepend.inc

From: Date: Fri, 21 Sep 2001 00:59:45 +0000
Subject: cvs: php-bugs-web / bug-pwd-finder.php bugform.inc bugs-dos-and-donts.php bugs-generating-backtrace.php bugs.sql bugstats.php bugtypes.inc credits.php
index.php lbugs.php lstats.php source.php style.css /gifs black.gif checkerboard.gif logo-bug.gif php-logo.gif small_submit.gif
small_submit_black.gif small_submit_white.gif /include cvs-auth.inc layout.inc prepend.inc
Groups: php.mirrors 
Request: Send a blank email to php-mirrors+get-6509@lists.php.net to get a copy of this message
jimw Thu Sep 20 20:59:45 2001 EDT Added files: /php-bugs-web bug-pwd-finder.php bugform.inc bugs-dos-and-donts.php bugs-generating-backtrace.php bugs.sql bugstats.php bugtypes.inc credits.php index.php lbugs.php lstats.php source.php style.css /php-bugs-web/gifs black.gif checkerboard.gif logo-bug.gif php-logo.gif small_submit.gif small_submit_black.gif small_submit_white.gif /php-bugs-web/include cvs-auth.inc layout.inc prepend.inc Log: initial checkin. mostly copied, with some cleaning up, from phpweb.

Index: php-bugs-web/bug-pwd-finder.php +++ php-bugs-web/bug-pwd-finder.php <?php require_once 'prepend.inc'; /* See bugs.php for the table layout of bugdb. */ if ($bug_id) { mysql_connect ("localhost","nobody","") or die("Unable to connect to SQL server. Please try again later."); mysql_select_db ("php3"); // Clean up the bug id $bug_id = ereg_replace ("[^0-9]+", "", $bug_id); if ($bug_id != "") { // Try to find the email and the password $query = "SELECT email, passwd FROM bugdb WHERE id = $bug_id"; // Run the query $result = mysql_query ($query) or die ("Sorry. No information could be found for bug report #$bug_id"); } else { $msg = "The provided #$bug_id bug id is invalid."; } if (mysql_num_rows($result) != 1) { $msg = "No password found for #$bug_id bug report, sorry."; } else { list ($email, $passwd) = mysql_fetch_row ($result); $passwd = stripslashes ($passwd); mail ($email, "Password for bug report #$bug_id", "The password for bug report #$bug_id is $passwd.", "From: noreply@php.net") or die ("Sorry. Mail could not be sent at this time. Please try again later."); $msg = "The password for bug report #$bug_id has been sent to $email."; } } commonHeader("Bug Report Password Finder"); ?> <h1>Bug Report Password Finder</h1> <p> If you need to modify a bug report that you submitted, but have forgotten what password you used, this utility can help you. </p> <p> Enter in the number of the bug report, press the Send button and the password will be mailed to the email address specified in the bug report. </p> <?php if ($msg) { echo "<p><font color=\"#cc0000\">$msg</font></p>"; } ?> <form method="post" action="<?php echo $PHP_SELF;?>"> <p><b>Bug Report ID:</b> #<input type="text" size="20" name="bug_id"> <input type="submit" value="Send"></p> </form> <?php commonFooter(); ?> Index: php-bugs-web/bugform.inc +++ php-bugs-web/bugform.inc <form method="POST" action="<?php echo $PHP_SELF;?>"> <input type="hidden" name="cmd" value="send" /> <table> <tr> <th align="right">Your email address:</th> <td colspan="2"> <input type="text" size="20" maxlength="40" name="email" value="<?php echo htmlspecialchars(stripslashes($email));?>" /> </td> </tr><tr> <th align="right">PHP version:</th> <td> <select name="php_version"><?php show_version_options($php_version);?></select> </td> </tr><tr> <th align="right">Type of bug:</th> <td colspan="2"> <select name="bug_type"><?php show_types($bug_type,0);?></select> </td> </tr><tr> <th align="right">Operating system:</th> <td colspan="2"> <input type="text" size="20" maxlength="32" name="php_os" value="<?php echo htmlspecialchars(stripslashes($operating_system));?>" /> </td> </tr><tr> <th align="right">Summary:</th> <td colspan="2"> <input type="text" size="40" maxlength="79" name="sdesc" value="<?php echo htmlspecialchars(stripslashes($sdesc));?>" /> </td></tr> </tr><tr> <th align="right">Password:</th> <td> <input type="text" size="20" maxlength="20" name="passwd" value="<?php echo htmlspecialchars(stripslashes($passwd));?>" /> </td> <td><font size="-2"> You may enter any password here. This password allows you to come back and modify your submitted bug report at a later date. [<a href="/bug-pwd-finder.php">Lost your password?</a>] </font></td> </tr> </table> <table> <tr> <td valign="top"> <b>Description:</b><br /> Please supply any information that may be helpful in fixing the bug: <ul> <li>A short script that reproduces the problem.</li> <li>The list of modules you compiled PHP with (your configure line).</li> <li>Any other information unique or specific to your setup.</li> <li>A <a href="bugs-generating-backtrace.php">gdb backtrace</a>.</li> </ul> <div align="center"><input type="submit" value="Send bug report" /></div> </td> <td> <textarea cols="60" rows="15" name="ldesc" wrap="physical"><?php echo htmlspecialchars(stripslashes($ldesc));?></textarea> </td> </tr> </table> <p></p> </form> Index: php-bugs-web/bugs-dos-and-donts.php +++ php-bugs-web/bugs-dos-and-donts.php <?php require_once 'prepend.inc'; commonHeader("Bugs Database Dos and Don'ts"); ?> <h1>PHP Bug reporting Dos And Don'ts</h1> <ul> <li>Please don't report bugs in versions older than two revisions before the latest one available. E.g., if the latest revision is 4.0.6, please don't report problems in versions earlier than 4.0.4. Instead, upgrade first to the latest version, and see if the problem isn't solved. Only if it isn't - submit a bug report here.</li> <li>Don't report missing functions in the documentation as a 'documentation problem', or as anything else. We have an uptodate list of which functions are missing from the documentation, and the only reason they're missing from there is that nobody had the time to document them just yet. Consult the PHP mailing list (<a href="mailto:php-general@lists.php.net">php-general@lists.php.net</a>) instead, and if you gather enough information - feel free to submit your own documentation of the function to us.</li> <li>Don't group more than one issue (problem report or change request) in one problem report. Instead, separate them into multiple problem reports.</li> <li>Always check the <a href="/FAQ.php">PHP FAQ</a> before submitting bug reports.</li> <li>Always search the bug database first for similar problem you are experiencing. It might have already been reported and fixed. Or it isn't a bug at all.</li> <li>If PHP is crashing for you, please <a href="bugs-generating-backtrace.php">generate a gdb backtrace</a> and submit it with your bug report.</li> <li>Never submit bug reports when it is obvious that there aren't nearly enough details for us to solve it. For example, "phpinfo() dumps core" makes a pretty useless bug report, unless you at least provide us with the gdb backtrace, the switches you've compiled PHP with, etc.</li> <li>Never add the php.ini file into the bug report.</li> <li>Never add over 15 lines long example scripts into bug report. If you are unable to create a short script that shows what the problem is, put the long script into some place where it can be accessed and add an URL for it into the report.</li> <li>Never submit the same bug report more than once.</li> <li>Always report bugs in the English language.</li> <li>If you are trying to report bugs in PHP 4.0, please go <a href="http://bugs.php.net/">here</a>.</li> </ul> <?php commonFooter(); ?> Index: php-bugs-web/bugs-generating-backtrace.php +++ php-bugs-web/bugs-generating-backtrace.php <?php require_once 'prepend.inc'; commonHeader("Generating a gdb backtrace"); ?> <h1>Generating a gdb backtrace</h1> <h3>Noticing PHP crashes</h3> There's no absolute way to know that PHP is crashing, but there may be signs. Typically, if you access a page that is always supposed to generate output (has a leading HTML block, for example), and suddenly get "Document contains no data" from your browser, it may mean that PHP crashes somewhere along the execution of the script. Another way to tell that PHP is crashing is by looking at the Apache error logs, and looking for SEGV (Apache 1.2) or Segmentation Fault (Apache 1.3). <h3>Important!</h3> To get a backtrace with correct information you must have PHP configured with <code>--enable-debug</code>! <h3>If you don't have a core file yet:</h3> <ul> <li>Remove any limits you may have on core dump size from your shell: <ul> <li>tcsh: unlimit coredumpsize</li> <li>bash/sh: ulimit -c unlimited</li> </ul> </li> <li>Ensure that the directory in which you're running PHP, or the PHP-enabled httpd, has write permissions for the user who's running PHP.</li> <li>Cause PHP to crash: <ul> <li>PHP CGI: Simply run php with the script that crashes it</li> <li>PHP Apache Module: Run httpd -X, and access the script that crashes PHP</li> </ul> </li> </ul> <h3>Once you have the core file:</h3> <ul> <li>Run gdb with the path to the PHP or PHP-enabled httpd binary, and path to the core file, for example: <ul> <li><code>gdb /usr/local/apache/sbin/httpd /usr/local/apache/sbin/core</code></li> </ul> </li> <li>At the gdb prompt, run: <ul> <li><code>(gdb) bt</code></li> </ul> </li> </ul> <h3>If you can't get a core file:</h3> <ul> <li>Run httpd -X under gdb with something like: <ul> <li><code>gdb /usr/local/apache/sbin/httpd</code></li> <li>(gdb) run -X</li> </ul> </li> <li>Then use your web browser and access your server to force the crash. You should see a gdb prompt appear and some message indicating that there was a crash. At this gdb prompt, type: <ul> <li><code>(gdb) bt</code></li> </ul> </li> </ul> <p>This should generate a backtrace, that you should submit in the bug report, along with any other details you can give us about your setup, and offending script.</p> <?php commonFooter(); ?> Index: php-bugs-web/bugs.sql +++ php-bugs-web/bugs.sql # MySQL dump 4.0 # # Host: localhost Database: php3 #-------------------------------------------------------- DROP table bugdb; CREATE TABLE bugdb ( id int(8) NOT NULL AUTO_INCREMENT, bug_type char(32), email varchar(40) NOT NULL, sdesc varchar(80), ldesc text, php_version char(16), php_os varchar(32), status varchar(16), ts1 datetime, # bug created date ts2 datetime, # bug last updated date dev_id varchar(16),# developer who last commented assign varchar(16), passwd varchar(20),# user password PRIMARY KEY (id) ); CREATE TABLE bugdb_comments ( id int(8) NOT NULL AUTO_INCREMENT, bug int(8) NOT NULL, email varchar(40) NOT NULL, ts datetime NOT NULL, comment text, PRIMARY KEY (id) ); Index: php-bugs-web/bugstats.php +++ php-bugs-web/bugstats.php <?php /* vim: set noet ts=4 sw=4: : */ require_once 'prepend.inc'; function ShowTime($sec) { if($sec<60) { return "$sec seconds"; } else if($sec<120) { return (int)($sec/60)." minute ".($sec%60)." seconds"; } else if($sec<3600) { return (int)($sec/60)." minutes ".($sec%60)." seconds"; } else if($sec<7200) { return (int)($sec/3600)." hour ".(int)(($sec%3600)/60)." minutes ".(($sec%3600)%60)." seconds"; } else if($sec<86400) { return (int)($sec/3600)." hours ".(int)(($sec%3600)/60)." minutes ".(($sec%3600)%60)." seconds"; } else if($sec<172800) { return (int)($sec/86400)." day ".(int)(($sec%86400)/3600)." hours ".(int)((($sec%86400)%3600)/60)." minutes ".((($sec%86400)%3600)%60)." seconds"; } else { return (int)($sec/86400)." days ".(int)(($sec%86400)/3600)." hours ".(int)((($sec%86400)%3600)/60)." minutes ".((($sec%86400)%3600)%60)." seconds"; } } commonHeader("Bug Stats"); if ($phpver > 0) { $other = ($phpver == 4 ? 3 : 4); echo '<p>Currently displaying PHP'. $phpver . ' bugs only. Display <a href="bugstats.php">all bugs</a> or <a href="bugstats.php?phpver=' . $other . '">only PHP' . $other . ' bugs</a>.</p>' . "\n"; } else { echo '<p>Currently displaying all bugs. Display <a href="bugstats.php?phpver=3">only PHP3 bugs</a> or <a href="bugstats.php?phpver=4">only PHP4 bugs</a>.</p>' . "\n"; } mysql_connect("localhost","nobody",""); mysql_select_db("php3"); $query = "SELECT *,UNIX_TIMESTAMP(ts2)-UNIX_TIMESTAMP(ts1) AS timetoclose FROM bugdb"; if ($phpver > 0) { $query .= " WHERE SUBSTRING(php_version,1,1) = '$phpver'"; } $query .= " ORDER BY bug_type"; $result = mysql_unbuffered_query($query); while($row=mysql_fetch_array($result)) { $bug_type['all'][$row[bug_type]]++; switch (strtolower($row[status])) { case "closed": if ($row[timetoclose] > 0) { $time_to_close[] = $row[timetoclose]; } /* falls through */ case "bogus": $closed_by[$row[dev_id]]++; break; } $bug_type[strtolower($row[status])][$row[bug_type]]++; $bug_type[strtolower($row[status])]['all']++; $email[$row[email]]++; $php_version[$row[php_version]]++; $php_os[$row[php_os]]++; $status[$row[status]]++; $total++; } function bugstats($status, $type) { global $bug_type, $phpver; if ($bug_type[$status][$type] > 0) { return '<a href="bugs.php?cmd=display&amp;status=' . ucfirst($status) . "&amp;phpver=" . $phpver . '&amp;bug_type=' . ($type == 'all' ? 'Any' : urlencode($type)) . '&amp;by=Any">' . $bug_type[$status][$type] . "</a>\n"; } } mysql_freeresult($result); echo "<table>\n"; /* prepare for sorting by bug report count */ foreach($bug_type['all'] as $type => $value) { if(!isset($bug_type['closed'][$type])) $bug_type['closed'][$type] = 0; if(!isset($bug_type['bogus'][$type])) $bug_type['bogus'][$type] = 0; if(!isset($bug_type['open'][$type])) $bug_type['open'][$type] = 0; if(!isset($bug_type['critical'][$type])) $bug_type['critical'][$type] = 0; if(!isset($bug_type['analyzed'][$type])) $bug_type['analyzed'][$type] = 0; if(!isset($bug_type['suspended'][$type])) $bug_type['suspended'][$type] = 0; if(!isset($bug_type['duplicate'][$type])) $bug_type['duplicate'][$type] = 0; if(!isset($bug_type['assigned'][$type])) $bug_type['assigned'][$type] = 0; if(!isset($bug_type['feedback'][$type])) $bug_type['feedback'][$type] = 0; } if(!isset($sort_by)) $sort_by = 'open'; if(!isset($rev)) $rev = 1; if($rev == 1) { arsort($bug_type[$sort_by]); } else { asort($bug_type[$sort_by]); } reset($bug_type); function sort_url($type) { global $sort_by,$rev,$phpver; if($type == $sort_by) { $reve = ($rev == 1) ? 0 : 1; } else { $reve = 1; } $ver = ($phpver != 0) ? "phpver=$phpver&amp;" : ''; return '<A href="./bugstats.php?'.$ver.'sort_by='.$type.'&amp;rev='.$reve.'">'.ucfirst($type).'</a>'; } echo "<tr bgcolor=#aabbcc><th align=right>Total bug entries in system:</th><td>$total</td>"; echo "<th>".sort_url('closed')."</th>"; echo "<th>".sort_url('open')."</th>"; echo "<th>".sort_url('critical')."</th>"; echo "<th>".sort_url('analyzed')."</th>"; echo "<th>".sort_url('suspended')."</th>"; echo "<th>".sort_url('duplicate')."</th>"; echo "<th>".sort_url('assigned')."</th>"; echo "<th>".sort_url('feedback')."</th>"; echo "<th>".sort_url('bogus')."</th>"; echo "</tr>\n"; echo "<tr><th align=right bgcolor=#aabbcc>All:</th>", "<td align=center bgcolor=#ccddee>$total</td>", "<td align=center bgcolor=#ddeeff>".bugstats('closed','all')."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('open', 'all')."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('critical', 'all')."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('analyzed', 'all')."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('suspended','all')."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('duplicate', 'all')."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('assigned','all')."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('feedback','all')."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('bogus', 'all')."&nbsp;</td>", "</tr>\n"; foreach ($bug_type[$sort_by] as $type => $value) { if(($bug_type['open'][$type] > 0 || $bug_type['critical'][$type] > 0 || $bug_type['analyzed'][$type] > 0 || $bug_type['suspended'][$type] > 0 || $bug_type['duplicate'][$type] > 0 || $bug_type['assigned'][$type] > 0 || $bug_type['feedback'][$type] > 0 ) && $type != 'all') { echo "<tr><th align=right bgcolor=#aabbcc>$type:</th>", "<td align=center bgcolor=#ccddee>".$bug_type['all'][$type]."</td>", "<td align=center bgcolor=#ddeeff>".bugstats('closed', $type)."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('open', $type)."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('critical',$type)."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('analyzed', $type)."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('suspended',$type)."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('duplicate', $type)."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('assigned',$type)."&nbsp;</td>", "<td align=center bgcolor=#ccddee>".bugstats('feedback',$type)."&nbsp;</td>", "<td align=center bgcolor=#ddeeff>".bugstats('bogus', $type)."&nbsp;</td>", "</tr>\n"; } } echo "</table>\n"; sort($time_to_close); $c=count($time_to_close); $sum=0; for($i=0;$i<$c;$i++) { $sum+=$time_to_close[$i]; } $median = $time_to_close[(int)($c/2)]; echo "<p><b>Bug Report Time to Close Stats</b>\n"; echo "<table>\n"; echo "<tr bgcolor=#aabbcc><th align=right>Average life of a report:</th><td bgcolor=#ccddee>".ShowTime((int)($sum/$c))."</td></tr>\n"; echo "<tr bgcolor=#aabbcc><th align=right>Median life of a report:</th><td bgcolor=#ccddee>".ShowTime($median)."</td></tr>\n"; echo "<tr bgcolor=#aabbcc><th align=right>Slowest report closure:</th><td bgcolor=#ccddee>".ShowTime($time_to_close[$c-1])."</td></tr>\n"; echo "<tr bgcolor=#aabbcc><th align=right>Quickest report closure:</th><td bgcolor=#ccddee>".ShowTime($time_to_close[0])."</td></tr>\n"; echo "</table>\n"; echo "<p><b>Who is closing the bug reports?</b>\n"; echo "<table>\n"; arsort($closed_by); $i=0; while($i < 20) { list($who,$value)=each($closed_by); echo "<tr bgcolor=#aabbcc><th>$who</th><td bgcolor=#ccddee>$value</td></tr>\n"; $i++; } echo "</table>\n"; commonFooter(); ?> Index: php-bugs-web/bugtypes.inc +++ php-bugs-web/bugtypes.inc <?php $items = array ( "Any" => "Any (except Feature Requests)", "*General Issues" => "General Issues", "Website problem" => "&nbsp;&nbsp;&nbsp;&nbsp;Website problem", "Feature/Change Request" => "&nbsp;&nbsp;&nbsp;&nbsp;Feature/Change Request", "Documentation problem" => "&nbsp;&nbsp;&nbsp;&nbsp;Documentation problem", "Output Control" => "&nbsp;&nbsp;&nbsp;&nbsp;Output Control", "Performance problem" => "&nbsp;&nbsp;&nbsp;&nbsp;Performance problem", "Reproducible crash" => "&nbsp;&nbsp;&nbsp;&nbsp;Reproducible crash", "Scripting Engine problem" => "&nbsp;&nbsp;&nbsp;&nbsp;Scripting Engine problem", "Session related" => "&nbsp;&nbsp;&nbsp;&nbsp;Session related", "*Compile Issues" => "&nbsp;&nbsp;&nbsp;&nbsp;Compile Issues", "Compile Failure" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compile Failure", "Compile Warning" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compile Warning", "*Configuration Issues" => "&nbsp;&nbsp;&nbsp;&nbsp;Configuration Issues", "Dynamic loading" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dynamic loading", "PHP options/info functions" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PHP options/info functions", "*Web Server problem" => "&nbsp;&nbsp;&nbsp;&nbsp;Web Server problem", "Apache related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache related", "IIS related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IIS related", "iPlanet related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iPlanet related", "PWS related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PWS related", "Other web server" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Other web server", "*Calendar problems" => "&nbsp;&nbsp;&nbsp;&nbsp;Calendar problems", "Date/time related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date/time related", "Calendar related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar related", "ICAP related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ICAP related", "MCAL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MCAL related", "*Compression related" => "&nbsp;&nbsp;&nbsp;&nbsp;Compression related", "Bzip2 Related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bzip2 Related", "ZZiplib Related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZZiplib Related", "Zlib Related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Zlib Related", "*Directory/Filesystem functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Directory/Filesystem functions", "Directory function related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Directory function related", "Filesystem function related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Filesystem function related", "*Directory Services problems" => "&nbsp;&nbsp;&nbsp;&nbsp;Directory Services problems", "YP/NIS related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YP/NIS related", "LDAP related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LDAP related", "*Database Functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Database Functions", "Adabas-D related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Adabas-D related", "dBase related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dBase related", "DBM/DBA related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBM/DBA related", "DBX related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBX related", "filePro related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filePro related", "FrontBase related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FrontBase related", "Hyperwave related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hyperwave related", "Informix related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Informix related", "InterBase related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InterBase related", "Sybase-ct (ctlib) related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sybase-ct (ctlib) related", "Sybase (dblib) related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sybase (dblib) related", "mSQL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mSQL related", "MSSQL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSSQL related", "MySQL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MySQL related", "OCI8 related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OCI8 related", "Oracle related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oracle related", "ODBC related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ODBC related", "Ovrimos related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ovrimos related", "PostgreSQL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostgreSQL related", "Solid related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Solid related", "*Data Exchange functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Data Exchange functions", "WDDX related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WDDX related", "YAZ related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YAZ related", "*Extensibility Functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Extensibility Functions", "COM related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COM related", "Java related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java related", "Program Execution" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Program Execution", "POSIX related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POSIX functions related", "Readline related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Readline related", "Satellite CORBA related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Satellite CORBA related", "Semaphore related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Semaphore related", "*E-commerce functions" => "&nbsp;&nbsp;&nbsp;&nbsp;E-commerce functions", "CCVS related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CCVS related", "Cybercash related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cybercash related", "Verisign Payflow Pro related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Verisign Payflow Pro related", "*Graphics related" => "&nbsp;&nbsp;&nbsp;&nbsp;Graphics related", "GD related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GD related", "GetImageSize related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetImageSize related", "Ming related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ming related", "SWF related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SWF related", "*Languages/Translation" => "&nbsp;&nbsp;&nbsp;&nbsp;Languages/Translation", "Gettext related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Gettext related", "ICONV related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ICONV related", "Recode related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Recode related", "*Mail Related" => "&nbsp;&nbsp;&nbsp;&nbsp;Mail Related", "IMAP related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMAP related", "Mailparse related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mailparse related", "Mail related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mail function related", "*Math Functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Math Functions", "BC math related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BC math related", "Math related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Math related", "*Encryption and hash functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Encryption and hash functions", "mcrypt related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mcrypt related", "mhash related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mhash related", "OpenSSL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OpenSSL related", "*Network Functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Network Functions", "Network related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Network related", "SNMP related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SNMP related", "FTP related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FTP related", "HTTP related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HTTP related", "Sockets related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sockets related", "*PDF functions" => "&nbsp;&nbsp;&nbsp;&nbsp;PDF functions", "ClibPDF related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClibPDF related", "FDF related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FDF related", "PDF related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PDF related", "*Programming Data Structures" => "&nbsp;&nbsp;&nbsp;&nbsp;Programming Data Structures", "Class/Object related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class/Object related", "Arrays related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Arrays related", "Strings related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Strings related", "Variables related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Variables related", "*Regular Expressions" => "&nbsp;&nbsp;&nbsp;&nbsp;Regular Expressions", "PCRE related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PCRE related", "Regexps related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Regexps related", "*Spelling functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Spelling functions", "Aspell related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Aspell related", "Pspell related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pspell related", "*Search functions" => "&nbsp;&nbsp;&nbsp;&nbsp;Search functions", "mnoGoSearch related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mnoGoSearch related", "*XML functions" => "&nbsp;&nbsp;&nbsp;&nbsp;XML functions", "DOM XML related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOM XML related", "XML related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XML related", "Sablotron XSL" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sablotron XSL", "XSLT related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XSLT related", "*URL Functions" => "&nbsp;&nbsp;&nbsp;&nbsp;URL Functions", "cURL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cURL related", "URL related" => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL related", "Unknown/Other Function" => "Unknown/Other Function", ); ?> Index: php-bugs-web/credits.php +++ php-bugs-web/credits.php <?php commonHeader('Credits'); ?> <h1>Credits</h1> <P> Coming soon ... </P> <?php commonFooter(); ?> Index: php-bugs-web/index.php +++ php-bugs-web/index.php <?php /* vim: set noet ts=4 sw=4: : */ require_once 'prepend.inc'; require_once 'cvs-auth.inc'; if (isset($save) && isset($pw)) { # non-developers don't have $user set setcookie("MAGIC_COOKIE",base64_encode("$user:$pw"),time()+3600*24*12,'/'); } if (isset($MAGIC_COOKIE) && !isset($user) && !isset($pw)) { list($user,$pw) = explode(":", base64_decode($MAGIC_COOKIE)); } /* See bugs.sql for the table layout. */ $mail_bugs_to = "php-dev@lists.php.net"; mysql_connect("localhost","nobody","") or die("Unable to connect to SQL server."); mysql_select_db("php3"); commonHeader("Bug Reporting"); echo "<font size=\"-1\">\n"; ?> <table bgcolor="#ccccff" border="0" cellspacing="1"> <form method="POST" action="<?php echo $PHP_SELF?>"> <input type="hidden" name="cmd" value="display" /> <tr> <td><input type="submit" value="Display" /></td> <td><select name="status"><?php show_state_options($status);?></select></td> <td align="right">bugs of type: </td> <td><select name="bug_type"><?php show_types($bug_type,1);?></select></td> <td align="right">reported since:</td> <td><select name="bug_age"><?php show_byage_options($bug_age);?></select></td> </tr> <tr> <td colspan=2 align=right>OS (substr search):</td> <td colspan="4"><input type="text" name="php_os" value="<?echo htmlspecialchars($php_os);?>"> </tr> <tr> <td align="right">with text:</td> <td colspan="3"><input type="text" name="search_for" value="<?echo htmlspecialchars($search_for);?>"> in the report or email address</td> <td colspan="2">max. <select name="limit"><?php show_limit_options($limit);?></select> entries / page.</td> </tr> </form> <tr> <td bgcolor="#000000" colspan="6"><?echo spacer(1,1);?></td> </tr> <form method="GET" action="<?php echo $PHP_SELF;?>"> <tr> <td align="right"><input type="submit" value="Edit" /></td> <td align="right">bug number:</td> <td colspan="3"><input type="text" name="id" value="<?echo $id?>"></td> <input type="hidden" name="edit" value="<?php echo isset($MAGIC_COOKIE) ? 1 : 2;?>"> <td align="center"><a href="bugstats.php">Statistics</a></td> </tr> </form> </table> <?php echo hdelim(); if ($cmd == "send") { if (incoming_details_are_valid(1,1)) { $ret = mysql_query("INSERT INTO bugdb (bug_type,email,sdesc,ldesc,php_version,php_os,status,ts1,passwd) VALUES ('$bug_type','$email','$sdesc','$ldesc','$php_version','$php_os','Open',NOW(),'$passwd')"); $cid = mysql_insert_id(); $report = ""; $ldesc = stripslashes($ldesc); $sdesc = stripslashes($sdesc); echo "<pre>\n"; $report .= "From: $email\n"; $report .= "Operating system: $php_os\n"; $report .= "PHP version: $php_version\n"; $report .= "PHP Bug Type: $bug_type\n"; $report .= "Bug description: "; echo $report; echo htmlspecialchars($sdesc), "\n\n"; echo wordwrap(htmlspecialchars($ldesc)); echo "</pre>\n"; $ascii_report = "$report$sdesc\n\n".wordwrap($ldesc); $ascii_report.= "\n-- \nEdit bug report at: http://bugs.php.net/?id=$cid&edit=1\n"; list($mailto,$mailfrom) = get_bugtype_mail($bug_type); if (mail($mailto, "Bug #$cid: $sdesc", $ascii_report, "From: $email\nX-PHP-Bug: $cid\nMessage-ID: <bug-$cid@bugs.php.net>")) { @mail($email, "Bug #$cid: $sdesc", $ascii_report, "From: PHP Bug Database <$mailfrom>\nX-PHP-Bug: $cid\nMessage-ID: <bug-$cid@bugs.php.net>"); echo "<p><h2>Mail sent to $mailto...</h2></p>\n"; echo "<p>Thank you for your help!</p>"; echo "<p><i>The password for this report is</i>: <b>".htmlentities($passwd)."</b><br>"; echo "If the status of the bug report you submitted\n"; echo "changes, you will be notified. You may return here and check on the status\n"; echo "or update your report at any time. The URL for your bug report is: <a href=\"http://bugs.php.net/?id=$cid\">"; echo "http://bugs.php.net/?id=$cid</a></p>\n"; } else { echo "<p><h2>Mail not sent!</h2>\n"; echo "Please send this page in a mail to " . "<a href=\"mailto:$mailto\">$mailto</a> manually.</p>\n"; } commonFooter(); exit; } } elseif ($cmd == "display") { if (!$bug_type) $bug_type = "Any"; $query = "SELECT *,TO_DAYS(NOW())-TO_DAYS(ts2) AS unchanged FROM bugdb "; if($bug_type=="Any") { $where_clause = "WHERE bug_type != 'Feature/Change Request'"; } else { $where_clause = "WHERE bug_type = '$bug_type'"; } /* Treat assigned, analyzed and critical bugs as open */ if ($status == "Open") { $where_clause .= " AND (status='Open' OR status='Assigned' OR status='Analyzed' OR status='Critical')"; } elseif ($status == "Old Feedback") { $where_clause .= " AND status='Feedback' AND TO_DAYS(NOW())-TO_DAYS(ts2)>60"; } elseif ($status == "Stale") { $where_clause .= " AND status != 'Closed' AND status != 'Duplicate' AND status != 'Bogus' AND TO_DAYS(NOW())-TO_DAYS(ts2) > 30"; } elseif ($status != "All") { $where_clause .= " AND status='$status'"; } if (strlen($search_for)) { $where_clause .= " AND (email like '%$search_for%' OR sdesc LIKE '%$search_for%' OR ldesc LIKE '%$search_for%')"; } if ($bug_age) { $where_clause .= " AND ts1 >= DATE_SUB(NOW(), INTERVAL $bug_age DAY)"; } if ($php_os) { $where_clause .= " AND php_os like '%$php_os%'"; } if (!isset($phpver)) $phpver = "4"; if ($phpver) $where_clause .= " AND SUBSTRING(php_version,1,1) = '$phpver'"; /* not in the header, but someone can build a query manually with it. */ if(strlen($by) and $by!='Any') $where_clause .= " AND dev_id = '$by' "; $query .= "$where_clause "; if (!$order_by) $order_by = "id"; if (!$direction) $direction = "ASC"; if ($reorder_by) { if ($order_by == $reorder_by) { $direction = $direction == "ASC" ? "DESC" : "ASC"; } else { $direction = "ASC"; } $order_by = $reorder_by; } $query .= " ORDER BY $order_by $direction"; if (!$begin) $begin = 0; if (!isset($limit)) $limit = 30; if($limit!='All') $query .= " LIMIT $begin,$limit"; $res = @mysql_query($query); if (!$res) die(htmlspecialchars($query)."<br>".mysql_error()); $rows = mysql_numrows($res); if (!$rows) { echo "<h2 class=\"error\">No bugs with the specified criteria were found.</h2>"; } else { $link = "$PHP_SELF?cmd=display&amp;bug_type=" . urlencode ($bug_type) . "&amp;status=$status&amp;search_for=".htmlspecialchars(stripslashes($search_for))."&amp;php_os=".htmlspecialchars(stripslashes($php_os))."&amp;bug_age=$bug_age&amp;by=$by&amp;order_by=$order_by&amp;direction=$direction&amp;phpver=$phpver&amp;limit=$limit"; ?> <table align="center" border="0" cellspacing="2" width="95%"> <?php show_prev_next($begin,$rows,$link,$limit);?> <tr bgcolor="#aaaaaa"> <th><a href="<?php echo $link;?>&amp;reorder_by=id">ID#</a></th> <?php if ($bug_type == "Any") {?> <th><a href="<?php echo $link;?>&amp;reorder_by=bug_type">Type</a></th> <?php }?> <th><a href="<?php echo $link;?>&amp;reorder_by=status">Status</a></th> <th><a href="<?php echo $link;?>&amp;reorder_by=php_version">Version</a></th> <th><a href="<?php echo $link;?>&amp;reorder_by=php_os">OS</a></th> <th><a href="<?php echo $link;?>&amp;reorder_by=sdesc">Description</a></th> <th>Mod</th> <th><a href="<?php echo $link;?>&amp;reorder_by=assign">Assigned</a></th> </tr> <?php while ($row = mysql_fetch_array($res)) { echo '<tr bgcolor="', get_row_color($row), '">'; echo "<td><a href=\"$PHP_SELF?id=$row[id]\">$row[id]</a></td>"; if ($bug_type == "Any") { echo "<td>", htmlspecialchars($row[bug_type]), "</td>"; } echo "<td>", htmlspecialchars($row[status]); if ($row[status] == "Feedback" && $row[unchanged] > 0) { printf ("<br>%d day%s", $row[unchanged], $row[unchanged] > 1 ? "s" : ""); } echo "</td>"; echo "<td>", htmlspecialchars($row[php_version]), "</td>"; echo "<td>", $row[php_os] ? htmlspecialchars($row[php_os]) : "&nbsp;", "</td>"; echo "<td>", $row[sdesc] ? htmlspecialchars($row[sdesc]) : "&nbsp;", "</td>"; echo "<td align=\"center\"><a href=\"$PHP_SELF?id=$row[id]&amp;edit=1\"><img src=\"gifs/small_submit.gif\" border=\"0\" width=\"11\" height=\"11\" alt=\"edit\" /></a></td>"; echo "<td>", $row[assign] ? htmlspecialchars($row[assign]) : "&nbsp;", "</td>"; echo "</tr>\n"; } show_prev_next($begin,$rows,$link,$limit); ?> </table> <?php } echo "<p align=\"center\"><a href=\"$PHP_SELF\">Submit a Bug Report</a></p>"; commonFooter(); exit; } elseif (!isset($cmd) && isset($id)) { # fetch the original bug into $original $res = mysql_query("SELECT * FROM bugdb WHERE id=$id"); if ($res) $original = mysql_fetch_array($res); if (!$res || !$original) { echo "<h1 class=\"error\">No such bug #$id!</h1>"; commonFooter(); exit; } # handle any updates, displaying errors if there were any $success = 0; if ($modify == "user") { if (!$original[passwd] || $original[passwd] != stripslashes($pw)) { echo "<h2 class=\"error\">The password you supplied was incorrect.</h2>\n"; } elseif (incoming_details_are_valid()) { /* update bug record */ $success = @mysql_query("UPDATE bugdb SET status='$status', bug_type='$bug_type', php_version='$php_version', php_os='$php_os', ts2=NOW(), email='$email' WHERE id=$id"); /* add comment */ if ($success && !empty($ncomment)) { $success = @mysql_query("INSERT INTO bugdb_comments (bug, email, ts, comment) VALUES ($id,'$email',NOW(),'$ncomment')"); } } $from = $email; } elseif ($modify == "developer") { if (!verify_password($user,$pw)) { echo "<h2 class=\"error\">The username or password you supplied was incorrect.</h2>\n"; } elseif (incoming_details_are_valid()) { $success = @mysql_query("UPDATE bugdb SET sdesc='$sdesc',status='$status', bug_type='$bug_type', assign='$assign', dev_id='$user', php_version='$php_version', php_os='$php_os', ts2=NOW() WHERE id=$id"); if ($success && !empty($ncomment)) { $success = @mysql_query("INSERT INTO bugdb_comments (bug, email, ts, comment) VALUES ($id,'$user@php.net',NOW(),'$ncomment')"); } } $from = "$user@php.net"; } if ($modify && $success) { # mail out the updated bug $text = "ID: $id\n"; if ($modify == "developer") { $text .= "Updated by: $user\n"; } else { $text .= "User updated by: $email\n"; } $text.= "Reported By: $original[email]\n"; if (stripslashes($sdesc) != $original[sdesc]) $text .= "Old Summary: $original[sdesc]\n"; if ($status!=$original[status]) $text .= "Old Status: $original[status]\n"; $text.= "Status: $status\n"; if ($bug_type != $original[bug_type]) $text .= "Old Bug Type: $original[bug_type]\n"; $text.= "Bug Type: $bug_type\n"; if ($php_os != $original[php_os]) $text .= "Old Operating System: $original[php_os]\n"; $text.= "Operating System: $php_os\n"; if ($php_version != $original[php_version]) $text .= "Old PHP Version: $original[php_version]\n"; $text.= "PHP Version: $php_version\n"; if ($assign != $original[assign]) $text .= "Old Assigned To: $original[assign]\n"; if ($assign || $original[assign]) $text.= "Assigned To: $assign\n"; if ($ncomment) $text .= "New Comment:\n\n".stripslashes($ncomment); $text.= get_old_comments($id); $user_text = $text . "\n\nATTENTION! Do NOT reply to this email!\n"; $user_text.= "To reply, use the web interface found at http://bugs.php.net/?id=$id&edit=2\n"; $dev_text .= $text . "\n\nEdit this bug report at http://bugs.php.net/?id=$id&edit=1\n"; list($mailto,$mailfrom) = get_bugtype_mail($bug_type); /* send mail if status was changed or there is a comment */ if ($status != $original[status] || $ncomment != "") { @mail($original[email], "Bug #$id Updated: ".stripslashes($sdesc), $user_text, "From: Bug Database <$mailfrom>\nX-PHP-Bug: $id\nIn-Reply-To: <bug-$id@bugs.php.net>"); @mail($mailto, "Bug #$id Updated: ".stripslashes($sdesc), $dev_text, "From: $from\nX-PHP-Bug: $id\nIn-Reply-To: <bug-$id@bugs.php.net>"); } # display a happy success message echo "<h2>Bug #$id updated successfully.</h2>\n"; unset($ncomment); } elseif ($modify && !$success) { echo "<h2 class=\"error\">Something went wrong updating the database.</h2>"; } /* DISPLAY BUG */ if ($edit) { echo "<form method=\"POST\" action=\"$PHP_SELF?id=$id\">\n"; echo "<input type=\"hidden\" name=\"edit\" value=\"$edit\">\n"; } if ($edit==1) echo '<input type="hidden" name="modify" value="developer">',"\n"; if ($edit==2) echo '<input type="hidden" name="modify" value="user">',"\n"; ?> <br> <h1>Bug id #<?php echo $id?></h1> <table border="0"> <tr> <th align="right">Status:</th> <?php if ($edit) {?> <td><select name="status"><?php show_state_options($status,$edit,$original[status])?></select> <?php if ($edit == 1) {?> <b>Assign To:</b> <input type="text" name="assign" size="10" maxlength="16" value="<?php echo $assign ? htmlspecialchars(stripslashes($assign)) : htmlspecialchars($original[assign])?>"> <input type="submit" value="Submit Changes"></td> <small><a href="<?php echo "$PHP_SELF?id=$id";?>&amp;edit=2"><tt>User Modify</tt></a></small></td> <?php } else { ?> <small><a href="<?php echo "$PHP_SELF?id=$id";?>&amp;edit=1"><tt>Dev Modify</tt></a></small></td> <?php }?> <?php } else { ?> <td><?php echo $original[status]?></td> <td><td><small><a href="<?php echo "$PHP_SELF?id=$id";?>&amp;edit=2"><tt>User Modify</tt></a> &nbsp; <a href="<?php echo "$PHP_SELF?id=$id";?>&amp;edit=1"><tt>Dev Modify</tt></a></small></td> <?php }?> </tr> <tr> <th align="right">From:</th> <?php if ($edit) {?> <td><input type="text" name="email" size="20" maxlength="40" value="<?php echo $email ? htmlspecialchars(stripslashes($email)) : htmlspecialchars($original[email])?>"></td> <?php } else { ?> <td><?php echo $original[email]?></td> <?php }?> </tr> <tr> <th align="right">Reported:</th> <td><?php echo $original[ts1]?></td> </tr> <tr> <th align="right">Type:</th> <?php if ($edit) {?> <td><select name="bug_type"><?php show_types($bug_type,0,$original[bug_type])?></select></td> <?php } else { ?> <td><?php echo $original[bug_type]?></td> <?php }?> </tr> <tr> <th align="right">OS:</th> <?php if ($edit) {?> <td><input type="text" name="php_os" size="20" maxlength="32" value="<?php echo $php_os ? htmlspecialchars(stripslashes($php_os)) : htmlspecialchars($original[php_os])?>"></td> <?php } else { ?> <td><?php echo $original[php_os]?></td> <?php }?> </tr> <tr> <th align="right">PHP Version:</th> <?php if ($edit) {?> <td><input type="text" name="php_version" size="20" maxlength="100" value="<?php echo $php_version ? htmlspecialchars(stripslashes($php_version)) : htmlspecialchars($original[php_version])?>"></td> <?php } else { ?> <td><?php echo $original[php_version]?></td> <?php }?> </tr> <?php if ($original[assign] && !$edit) {?> <tr> <th align="right">Assigned To:</th> <td><?php echo $original[assign]?></td> </tr> <?php }?> <tr> <th align="right">Summary:</th> <?php if ($edit) {?> <td><input type="text" name="sdesc" size="40" maxlength="80" value="<?php echo $sdesc ? htmlspecialchars(stripslashes($sdesc)) : htmlspecialchars($original[sdesc])?>"></td> <?php } else { ?> <td><?php echo $original[sdesc]?></td> <?php }?> </tr> <?php if ($edit) {?> <tr> <th align="right">New Comment:</th> </tr> <tr> <td colspan="2"> <textarea name="ncomment" wrap="physical" cols="60" rows="15"><?php echo htmlspecialchars(stripslashes($ncomment));?></textarea> </td> </tr> <?php if ($edit == 1) { /* developer */?> <tr> <th align="right">CVS Username:</th> <td> <input type="text" name="user" size="10" maxlength="20" value="<?php echo htmlspecialchars(stripslashes($user));?>"> </td> </tr> <?php }?> <tr> <th align="right">Password:</th> <td> <input type="password" name="pw" size="10" maxlength="20" value="<?php echo htmlspecialchars(stripslashes($pw));?>"> <?php if ($edit == 2) {?> [<a href="bug-pwd-finder.php">Lost your password?</a>] <?php }?> </td> </tr> <tr> <th align="right">Remember me:</th> <td> <input type="checkbox" name="save"> (Check here to remember your password for next time.) </td> </tr> <tr> <td colspan="2"> &nbsp; &nbsp; &nbsp; <input type="submit" value="Submit Changes"> </td> </tr> <?php }?> </table> <?php if ($edit) echo "</form>\n"; echo hdelim(); /* ORIGINAL REPORT */ echo "<b><i>[$original[ts1]] $original[email]</i></b><br>\n"; echo "<blockquote><blockquote><pre>"; echo wordwrap(addlinks($original[ldesc]),90); echo "</pre></blockquote></blockquote>\n"; /* COMMENTS */ $query = "SELECT * FROM bugdb_comments WHERE bug=$id ORDER BY ts"; if ($comresult = mysql_query($query)) { while ($com = mysql_fetch_array($comresult)) { echo "<b><i>[$com[ts]] $com[email]</i></b><br>\n"; echo "<blockquote><blockquote><pre>"; echo wordwrap(addlinks($com[comment]),90); echo "</pre></blockquote></blockquote>\n"; } } commonFooter(); exit; } elseif (!isset($cmd)) { ?> <h1>Report a Bug</h1> <br /> <strong>Please</strong> read the <a href="bugs-dos-and-donts.php">Dos & Don'ts</a> before submitting a bug report!<br /> If you are not sure if the problem you're experiencing is a bug at all it most likely isn't. Please ask support questions on the <a href="support.php">mailing lists</a>. <br /> <?php } require_once 'bugform.inc'; ?> </font> <?php commonFooter(); # FUNCTIONS function show_byage_options($current) { $opts = array( "0" => "the beginning", "1" => "yesterday", "7" => "7 days ago", "15" => "15 days ago", "30" => "30 days ago", "90" => "90 days ago", ); while (list($k,$v) = each($opts)) { echo "<option value=\"$k\"", ($current==$k ? " selected" : ""), ">$v</option>\n"; } } function show_limit_options($limit=30) { for($i=10;$i<100;) { echo "<option value=\"$i\"", ($limit==$i ? " selected" : ""),">$i</option>\n"; $i=$i+10; } echo '<option value="All"', ($limit=='All' ? " selected": ""),">All</option>\n"; } function show_state_options($state, $user_mode=0, $default="") { if (!$state && !$default) { $state = "Open"; } elseif (!$state) { $state = $default; } $state_types = array ( "Open" => 2, "Closed" => 2, "Duplicate" => 2, "Critical" => 1, "Assigned" => 1, "Analyzed" => 1, "Suspended" => 1, "Feedback" => 1, "Old Feedback" => 0, "Stale" => 0, "Bogus" => 1, "All" => 0 ); /* regular users can only pick states with type 2 for unclosed bugs */ if($state != "All" && $state_types[$state] == 1 && $user_mode == 2) { /* If state was 'Feedback', set state to 'Open' automatically. */ if($state == "Feedback") { echo "<option>Open</option>\n"; } else { echo "<option>$state</option>\n"; } if($state != "Bogus") echo "<option>Closed</option>\n"; } else { foreach($state_types as $type => $mode) { if ($mode >= $user_mode) { echo "<option"; if($type == $state) echo " selected"; echo ">$type</option>\n"; } } } } function show_version_options($current,$default="") { $versions = array("4.0.6","4.0.5","4.0.4pl1","4.0.4","4.0CVS-".date("Y-m-d")); while (list(,$v) = each($versions)) { echo "<option", ($current == $v ? " selected" : ""), ">$v</option>\n"; if ($current == $v) $use++; } if (!$use && $current) echo "<option selected>$current</option>\n"; echo "<option value=\"earlier\">Earlier? Upgrade first!</option>\n"; } function show_types($current,$show_any,$default="") { require_once 'bugtypes.inc'; if (!$current && !$default && !$show_any) { echo "<option value=\"Unknown/Other Function\">--Please Select--</option>\n"; } elseif (!$current && $show_any) { $current = "Any"; } elseif (!$current) { $current = $default; } while (list($key,$value) = each($items)) { if ($show_any || $key != "Any") { echo "<option value=\"$key\"", ($key == $current? " selected" : ""), ">$value</option>\n"; if ($key == $current) $use++; } } if (!$use && $current) { echo "<option selected>$current</option>\n"; } } function get_old_comments ($bug_id) { $divider = str_repeat("-", 72); $max_message_length = 10 * 1024; $max_comments = 5; $output = ""; $count = 0; $res = @mysql_query("SELECT ts, email, comment FROM bugdb_comments WHERE bug=$bug_id ORDER BY ts DESC"); if (!$res) return ""; # skip the most recent (this is get_old_comments, not get_all_comments!) $row = mysql_fetch_row($res); if (!$row) return ""; while (($row = mysql_fetch_row($res)) && strlen($output) < $max_message_length && $count++ < $max_comments) { $output .= "[$row[0]] $row[1]\n\n$row[2]\n\n$divider\n\n"; } if (strlen($output) < $max_message_length && $count < $max_comments) { $res=@mysql_query("SELECT ts1,email,ldesc FROM bugdb WHERE id=$bug_id"); if (!$res) return $output; $row = mysql_fetch_row($res); if (!$row) return $output; return ("\n\nPrevious Comments:\n$divider\n\n" . $output . "[$row[0]] $row[1]\n\n$row[2]\n\n$divider\n\n"); } else { return ("\n\nPrevious Comments:\n$divider\n\n" . $output . "The remainder of the comments for this report are too long. To view\nthe rest of the comments, please view the bug report online at\n http://bugs.php.net/?id=$bug_id\n"); } return ""; } function addlinks($text) { $text = htmlspecialchars($text); $text = preg_replace("/((mailto|http|ftp|nntp|news):.+?)(&gt;|\\s|\\)|\\.\\s|$)/i","<a href=\"\\1\">\\1</a>\\3",$text); # what the heck is this for? $text = preg_replace("/[.,]?-=-\"/", '"', $text); return $text; } /* validate an incoming bug report */ function incoming_details_are_valid($require_ldesc=0,$require_passwd=0) { global $email,$bug_type,$php_version,$sdesc,$ldesc,$passwd; $valid = 1; if(!preg_match("/[.\\w+-]+@[.\\w-]+\\.\\w{2,}/i",$email)) { echo "<h2 class=\"error\">Please provide a valid email address.</h2>"; $valid = 0; } if ($bug_type=="none") { echo "<h2 class=\"error\">Please select an appropriate bug type.</h2>"; $valid = 0; } if ($php_version=='earlier') { echo "<h2 class=\"error\">Please select a valid PHP version. If your PHP version is too old, please upgrade first and see if the problem has not already been fixed.</h2>"; $valid = 0; } if (!$sdesc) { echo "<h2 class=\"error\">You must supply a short description of the bug you are reporting.</h2>"; $valid = 0; } if ($require_ldesc && !$ldesc) { echo "<h2 class=\"error\">You must supply a long description of the bug you are reporting.</h2>"; $valid = 0; } if ($require_passwd && empty($passwd)) { echo "<h2 class=\"error\">You must supply a password for this bug report.</h2>"; $valid = 0; } return $valid; } function get_bugtype_mail($bug_type) { global $mail_bugs_to; if (eregi("documentation", $bug_type)) { return array("$mail_bugs_to,phpdoc@lists.php.net",$mail_bugs_to); } elseif (eregi("website", $bug_type)) { return array("php-mirrors@lists.php.net","php-mirrors@lists.php.net"); } else { return array($mail_bugs_to,$mail_bugs_to); } } function get_row_color($row) { if ($row["bug_type"]=="Feature/Change Request") { return "#aaaaaa"; } switch($row["status"]) { case "Open": return "#ffbbaa"; break; case "Critical": return "#ff0000"; break; case "Closed": return "#aaffbb"; break; case "Suspended": return "#ffccbb"; break; case "Assigned": return "#bbaaff"; break; case "Feedback": return "#bbeeff"; break; case "Analyzed": return "#99bbaa"; break; case "Duplicate": return "#bbbbbb"; break; default: return "#aaaaaa"; break; } } function show_prev_next($begin,$rows,$link,$limit) { if($limit=='All') return; if ($begin == 0 && $rows < $limit) return; echo "<tr bgcolor=\"#cccccc\"><td align=\"center\" colspan=\"9\">"; echo '<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr>'; if ($begin > 0) { echo "<td align=\"left\"><a href=\"$link&amp;begin=",max(0,$begin-$limit),"\">&laquo; Show Previous $limit Entries</a></td>"; } if ($rows >= $limit) { echo "<td align=\"right\"><a href=\"$link&amp;begin=",$begin+$limit,"\">Show Next $limit Entries &raquo;</a></td>"; } echo "</tr></table></td></tr>"; } ?> Index: php-bugs-web/lbugs.php +++ php-bugs-web/lbugs.php <?php /* vim: set noet ts=4 sw=4: : */ mysql_connect("localhost","nobody","") or die("Unable to connect to SQL server\n"); mysql_select_db("php3"); if ($id) { $result = mysql_query("SELECT id,bug_type,email,sdesc,ldesc,php_version,php_os,status,comments,ts1,dev_id,assign FROM bugdb WHERE id=$id"); if ($num = mysql_num_rows($result)) { $row = mysql_fetch_array($result); echo "<pre><h1>Bug $id</h1>\n"; echo "<b>From : " . htmlspecialchars($row['email']) . "\n"; echo "Date : " . $row['ts1'] . "\n"; echo "Status : <a href=\"bugs.php?id=$id&edit=1\">" . htmlspecialchars($row['status']) . "</a>\n"; echo "Type : " . htmlspecialchars($row['bug_type']) . "\n"; echo "Version : " . htmlspecialchars($row['php_version']) . "\n"; echo "OS : " . htmlspecialchars($row['php_os']) . "\n"; echo "Subject : " . htmlspecialchars($row['sdesc']) . "</b>\n"; echo "\n" . htmlspecialchars($row['ldesc']) . "\n\n"; if(strlen($row['comments'])) { echo "<b>From: " . $row['dev_id'] . "</b>\n"; echo '<blockquote>' . htmlspecialchars($row['comments']) . "</blockquote>\n"; } $query = "SELECT * FROM bugdb_comments WHERE bug=$id ORDER BY ts"; if ($comresult = mysql_query($query)) { while ($com = mysql_fetch_array($comresult)) { echo "<b><i>[",$com['ts'],"] ",$com['email'],"</i></b><br>\n"; $text = addlinks($com['comment']); echo "<blockquote>",$text,"</blockquote>\n"; } mysql_freeresult($comresult); } echo "</pre>"; } else { echo "Bug #$id is not in the database"; } } else { $result = mysql_query("SELECT id,bug_type,status,sdesc FROM bugdb WHERE status != 'Closed' AND status!='Suspended' AND status!='Duplicate' AND status!='Bogus' AND php_version LIKE '4%' ORDER BY bug_type,id"); if ($num = mysql_num_rows($result)) { echo "<h1>PHP 4.0 Bug Database summary</h1>"; echo "<pre> Num Status Summary ($num total including feature requests)\n"; $last_group = ""; while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) { if ($last_group != $row[bug_type]) { $last_group = $row[bug_type]; echo "===============================================[<b>".$row[bug_type]."]"; $len = 29-strlen($row[bug_type]); $s=''; for($i=0;$i<$len; $i++) $s.= "="; echo "$s</b>\n"; } printf("<a href=\"%s?id=%d\">%4d</a>",$PHP_SELF,$row[id],$row[id]); printf(" %-9s ",$row[status]); echo " ".htmlspecialchars($row[sdesc])."\n"; } mysql_free_result($result); echo "</pre>"; } } function addlinks($text) { $text = htmlspecialchars($text); $new_text = ereg_replace("(http:[^ \n\t]*)","<a href=\"\1-=-\">\1</a>",$text); $new_text = ereg_replace("(ftp:[^ \n\t]*)","<a href=\"\1-=-\">\1</a>",$text); $new_text = ereg_replace("[.,]-=-\"","\"",$new_text); $new_text = ereg_replace("-=-\"","\"",$new_text); return $new_text; } ?> Index: php-bugs-web/lstats.php +++ php-bugs-web/lstats.php <?php /* vim: set noet ts=4 sw=4: : */ function status_print ($status, $num) { $str = ucfirst($status).":"; $str.= str_repeat(" ", 14-strlen($str)); $str.= "<!-- NUM -->$num<!-- /NUM -->\n<br>"; echo $str; } $statuses = array ( "open", "critical", "closed", "analyzed", "suspended", "duplicate", "assigned", "feedback", "bogus" ); if(!isset($phpver)) { echo "<h3>Bug stats for both <a href='lstats.php?phpver=3'>PHP 3</a> and <a href='lstats.php?phpver=4'>PHP 4</a>:</h3><pre>\n"; } else { echo "<h3>Bug stats for PHP $phpver:</h3><pre>\n"; } mysql_connect("localhost","nobody",""); mysql_select_db("php3"); foreach($statuses as $status) { $query = "SELECT count(id) from bugdb WHERE"; if ($phpver > 0) { $query .= " php_version LIKE '" . $phpver . "%' AND"; } $query.= " status='$status' AND bug_type NOT LIKE '%Change Request%'"; $result=mysql_unbuffered_query($query); $row=mysql_fetch_row($result); mysql_freeresult($result); status_print($status, $row[0]); } echo "</pre>\n"; ?> Index: php-bugs-web/source.php +++ php-bugs-web/source.php <?php commonHeader('Show Source'); if (!isset($url)) { echo "No page URL specified."; commonFooter(); exit; } ?> Source of: <? echo $url; ?><BR> <? echo hdelim(); $legal_dirs = array( "/manual" => 1, "/include" => 1, "/stats" => 1); $dir = dirname($url); if ($dir && $legal_dirs[$dir]) { $page_name = $DOCUMENT_ROOT . $url; } else { $page_name = basename($url); } echo("<!-- $page_name -->\n"); if (file_exists($page_name) && !is_dir($page_name)) { show_source($page_name); } else if (is_dir($page_name)) { echo "<P>No file specified. Can't show source for a directory.</P>\n"; } echo hdelim(); ?> <P> The syntax highlighted source is automatically generated by PHP from the plaintext script.<br> If you're interested in what's behind the <B>commonHeader()</B> and <B>commonFooter()</B> functions, you can always take a look at the source of the <? print_link("/source.php?url=/include/layout.inc", "layout.inc"); ?> files. And, of course, if you want to see the source of this page, have a look <? print_link("/source.php?url=/source.php", "here"); ?>. </P> <? commonFooter(); ?> Index: php-bugs-web/style.css +++ php-bugs-web/style.css body, ul, td, th { font-family: arial,helvetica,sans-serif; font-size: 95%; } p { font-family: arial,helvetica,sans-serif; } em { font-weight: bold; font-style: italic; } headertop { background: #5b69a6; } headersep { background: #000033; } headerbottom { background: #9999cc; } error { color: #cc0000; } newsDate { font-size: 85%; font-style: italic; color: #6666cc; } sidebar { font-size: 85%; } code, pre { font-family: "andale mono", "monotype.com", "courier new", monospace; font-size: 90%; } h1 { font-family: arial,helvetica,sans-serif; font-size: 140%; font-weight: bold; color: #000066; } h2 { font-family: arial,helvetica,sans-serif; font-size: 125%; font-weight: bold; color: #000066; } h3 { font-family: arial,helvetica,sans-serif; font-size: 110%; font-weight: bold; color: #000066; } h4 { font-family: arial,helvetica,sans-serif; font-size: 100%; font-weight: bold; color: #000066; } small { font-family: arial,helvetica,sans-serif; font-size: 75%; } a.small { font-family: arial,helvetica,sans-serif; font-size: 75%; text-decoration: none; } A.menuWhite { font-family: arial,helvetica,sans-serif; font-size: 75%; color: #ffffff; } A.menuBlack { font-family: arial,helvetica,sans-serif; font-size: 75%; color: #000000; } tableTitle { font-family: arial,helvetica,sans-serif; font-weight: bold; } tableExtras { font-family: arial,helvetica,sans-serif; font-size: 85%; color: #FFFFFF; } input { font-family: arial,helvetica,sans-serif; } textarea { font-family: "andale mono", "monotype.com", "courier new", monospace; } input.small, select.small { font-family: arial,helvetica,sans-serif; font-size: 75%; } textarea.small { font-family: "andale mono", "monotype.com", "courier new", monospace; font-size: 75%; } Index: php-bugs-web/include/cvs-auth.inc +++ php-bugs-web/include/cvs-auth.inc <?php /* $Id: cvs-auth.inc,v 1.1 2001/09/21 00:59:45 jimw Exp $ */ $ignore_password = false; $passwd_file = "/repository/CVSROOT/passwd"; function find_password($user) { global $passwd_file, $ignore_password; if ($ignore_password) return " "; // can't be "" $fp=fopen($passwd_file,"r"); while(!feof($fp)) { $line=fgets($fp,120); list($luser,$passwd,$junk) = explode(":",$line); if($user==$luser) { fclose($fp); return($passwd); } } fclose($fp); return(""); } function verify_password($user, $pass) { global $ignore_password; $psw = find_password($user); if (strlen($psw) > 0) { if ($ignore_password || crypt($pass,substr($psw,0,2)) == $psw) { return true; } } return false; } ?> Index: php-bugs-web/include/layout.inc +++ php-bugs-web/include/layout.inc <?php # spacer() # print a IMG tag for a sized spacer GIF # function spacer($width=1, $height=1, $align=false, $extras=false) { printf('<img src="/gifs/spacer.gif" width="%d" height="%d" border="0" alt="" %s%s>', $width, $height, ($align ? 'align="'.$align.'" ' : ''), ($extras ? $extras : '') ); } # resize_image() # tag the output of make_image() and resize it manually # function resize_image($img, $width=1, $height=1) { $str = preg_replace('/width=\"([0-9]+?)\"/i', '', $img ); $str = preg_replace('/height=\"([0-9]+?)\"/i', '', $str ); $str = substr($str,0,-1) . sprintf(' height="%s" width="%s">', $height, $width ); return $str; } # make_image() # return an IMG tag for a given file (relative to the images dir) # function make_image($file, $alt=false, $align=false, $extras=false, $dir=false, $border=0) { global $HTTP_SERVER_VARS; if (!$dir) { $dir = 'gifs'; } if ($size = @getimagesize($HTTP_SERVER_VARS['DOCUMENT_ROOT'].$dir.'/'.$file)) { $image = sprintf('<img src="%s/%s" border="%d" %s ALT="%s" %s%s>', $dir, $file, $border, $size[3], ($alt ? $alt : ''), ($align ? ' align="'.$align.'"' : ''), ($extras ? ' '.$extras : '') ); } else { $image = sprintf('<img src="%s/%s" border="%d" ALT="%s" %s%s>', $dir, $file, $border, ($alt ? $alt : ''), ($align ? ' ALIGN="'.$align.'"' : ''), ($extras ? ' '.$extras : '') ); } return $image; } # print_image() # print an IMG tag for a given file # function print_image($file, $alt=false, $align=false, $extras=false, $dir=false, $border=0) { print make_image($file, $alt, $align, $extras, $dir); } # make_submit() # - make a submit button image # function make_submit($file, $alt=false, $align=false, $extras=false, $dir=false, $border=0) { if (!$dir) { $dir = '/gifs'; } $return = make_image($file, $alt, $align, $extras, $dir, $border); if ($return != "<img>") { $return = '<input type="image"'.substr($return,4); } else { $return = '<input type="submit">'; } return $return; } # delim() # print a pipe delimiter # function delim($color=false) { if (!$color) { return '&nbsp;|&nbsp;'; } return sprintf('<font color="%s">&nbsp;|&nbsp;</font>', $color ); } # hdelim() # print a horizontal delimiter (just a wide line); # function hdelim($color="#000000") { if (!$color) { return '<hr noshade size="1">'; } return sprintf('<hr noshade size="1" color="%s">', $color ); } # make_link() # return a hyperlink to something, within the site # function make_link ($url, $linktext=false, $target=false, $extras=false) { return sprintf("<a href=\"%s\"%s%s>%s</a>", $url, ($target ? ' target="'.$target.'"' : ''), ($extras ? ' '.$extras : ''), ($linktext ? $linktext : $url) ); } # print_link() # echo a hyperlink to something, within the site # function print_link($url, $linktext=false, $target=false, $extras=false) { echo make_link($url, $linktext, $target, $extras); } function make_email($email, $linktext=false) { return sprintf("<a href=\"mailto:%s\">%s</a>", $email, ($linktext ? $linktext : $email) ); } function print_email($email, $linktext=false) { echo make_email($email, $linktext); } # commonheader() # # function commonHeader($title=false) { global $SIDEBAR_DATA; ?><html> <head> <title>PHP Bugs<?php if ($title) { echo ':'.$title; } ?></title> <link rel="stylesheet" href="style.css" /> </head> <body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" bgcolor="#ffffff" text="#000000" link="#000033" alink="#0099ff" vlink="#000033" ><a name="TOP"></a> <table border="0" cellspacing="0" cellpadding="0" height="48" width="100%"> <tr class="headertop"> <td align="left" rowspan="2"> <?php print_link('/', make_image('logo-bug.gif', 'PHP Bugs', false, 'vspace="2" hspace="2"') ); ?><br> </td> <td align="right" valign="top" nowrap> <font color="#ffffff"><b> <?php echo strftime("%A, %B %d, %Y"); ?> </b>&nbsp;<br> </font> </td> </tr> <tr class="headertop"> <td align="right" valign="bottom" nowrap> <?php print_link('http://www.php.net/', 'php.net', false, 'class="menuWhite"'); echo delim(); print_link('http://www.php.net/manual/en/', 'documentation', false, 'class="menuWhite"'); echo delim(); print_link('bugstats.php', 'statistics', false, 'class="menuWhite"'); ?> <?php spacer(2,2); ?><br> </td> </tr> <tr class="headersep"><td colspan="2"><?php spacer(1,1);?><br></td></tr> <?/* <tr class="headerbottom"> <form method="POST" action="/search.php"> <td align="right" valign="top" colspan="2" nowrap><font color="#ffffff"> <small>search for</small> <INPUT CLASS="small" TYPE="text" NAME="pattern" VALUE="<?php echo htmlspecialchars($prevsearch) ?>" SIZE="30"> <small>in the</small> <SELECT NAME="show" CLASS="small"> <OPTION VALUE="maillist">general mailing list <OPTION VALUE="manual">manual </SELECT> <? echo make_submit('small_submit_white.gif', 'search', 'bottom'); ?>&nbsp;<br> </font></td> </form> </tr> <tr class="headersep"><td colspan="2"><?php spacer(1,1);?><br></td></tr> */?> </table> <table cellpadding="0" cellspacing="0"> <tr valign="top"> <?php if (isset($SIDEBAR_DATA)):?> <td bgcolor="#f0f0f0"> <table width="170" cellpadding="4" cellspacing="0"> <tr valign="top"> <td class="sidebar"><?php echo $SIDEBAR_DATA?></td> </tr> </table> </td> <td bgcolor="#cccccc" background="/gifs/checkerboard.gif"><?php spacer(1,1);?><br></td> <?php endif; ?> <td> <table width="600" cellpadding="10" cellspacing="0"> <tr> <td valign="top"> <?php } # commonfooter() # # function commonFooter() { # global $LAST_UPDATED, $MIRRORS, $MYSITE, $COUNTRIES; global $HTTP_SERVER_VARS; ?> <br> </td> </tr> </table> </td> </tr> </table> <table border="0" cellspacing="0" cellpadding="0" width="100%"> <tr class="headersep"><td><?php spacer(1,1);?><br></td></tr> <tr class="headerbottom"> <td align="right" valign="bottom"><? print_link('/source.php?url='.$HTTP_SERVER_VARS['SCRIPT_NAME'], 'show source', false, 'class="menuWhite"'); echo delim(); print_link('/credits.php', 'credits', false, 'class="menuWhite"'); ?>&nbsp;<br> </td> </tr> <tr class="headersep"><td><?php spacer(1,1); ?><br></td></tr> </table> <table border="0" cellspacing="0" cellpadding="6" width="100%"> <tr valign="top" bgcolor="#cccccc"> <td><small> <?php print_link('http://www.php.net/', make_image('php-logo.gif', 'PHP', 'left') ); ?> <?php print_link('/copyright.php', 'Copyright &copy; 2001 The PHP Group'); ?><BR> All rights reserved.<BR> </small> </td> <td align="right"><small> Last updated: <?php echo strftime("%c %Z", getlastmod()); ?><BR> </small><br> </td> </tr> </table> </body> </html> <?php } function clean_note($text) { $text = htmlspecialchars($text); $fixes = array('<br>','<p>','</p>'); foreach ($fixes as $f) { $text=str_replace(htmlspecialchars($f), $f, $text); $text=str_replace(htmlspecialchars(strtoupper($f)), $f, $text); } $text = "<tt>".nl2br($text)."</tt>"; return $text; } function sect_to_file($string) { $string = strtolower($string); $string = str_replace(' ','-',$string); $string = str_replace('_','-',$string); $func = "function.$string.php"; $chap = "ref.$string.php"; $feat = "features.$string.php"; $struct = "control-structures.$string.php"; if(is_file($func)) return $func; else if(is_file($chap)) return $chap; else if(is_file($feat)) return $feat; else if(is_file($struct)) return $struct; else return "$string.php"; } Index: php-bugs-web/include/prepend.inc +++ php-bugs-web/include/prepend.inc <?php require_once 'layout.inc';
« previous php.mirrors (#6509) next »