mxml/www/str.php

1914 lines
53 KiB
PHP
Raw Normal View History

2004-05-17 02:14:54 +00:00
<?php
// Standard stuff...
include_once "phplib/html.php";
include_once "phplib/db.php";
// STR constants...
$STR_PAGE_MAX = 10; // Max STRs per page
$STR_STATUS_RESOLVED = 1;
$STR_STATUS_UNRESOLVED = 2;
$STR_STATUS_ACTIVE = 3;
$STR_STATUS_PENDING = 4;
$STR_STATUS_NEW = 5;
$STR_PRIORITY_RFE = 1;
$STR_PRIORITY_LOW = 2;
$STR_PRIORITY_MODERATE = 3;
$STR_PRIORITY_HIGH = 4;
$STR_PRIORITY_CRITICAL = 5;
$STR_SCOPE_UNIT = 1;
$STR_SCOPE_FUNCTION = 2;
$STR_SCOPE_SOFTWARE = 3;
// String definitions for various things...
$managers = array(
"mike" => "Michael Sweet <mike@easysw.com>"
);
$messages = array(
"Fixed in CVS" =>
"Fixed in CVS - the anonymous CVS repository will be updated at "
."midnight EST.",
"Old STR" =>
"This STR has not been updated by the submitter for two or more weeks "
."and has been closed as required by the Mini-XML Configuration Management "
."Plan. If the issue still requires resolution, please re-submit a new "
."STR.",
"Unresolvable" =>
"We are unable to resolve this problem with the information provided. "
."If you discover new information, please file a new STR referencing "
."this one."
);
$subsystems = array(
"Build Files",
"Config Files",
"Core API",
"Documentation",
"Multiple",
"mxmldoc",
"Sample Programs",
"Web Site"
);
$versions = array(
"2.0cvs",
"1.3",
"1.2",
"1.1.2",
"1.1.1",
"1.1",
"1.0",
"Web Site"
);
$status_text = array(
1 => "Resolved",
2 => "Unresolved",
3 => "Active",
4 => "Pending",
5 => "New"
);
$status_long = array(
1 => "1 - Closed w/Resolution",
2 => "2 - Closed w/o Resolution",
3 => "3 - Active",
4 => "4 - Pending",
5 => "5 - New"
);
$priority_text = array(
1 => "RFE",
2 => "LOW",
3 => "MODERATE",
4 => "HIGH",
5 => "CRITICAL"
);
$priority_long = array(
1 => "1 - Request for Enhancement, e.g. asking for a feature",
2 => "2 - Low, e.g. a documentation error or undocumented side-effect",
3 => "3 - Moderate, e.g. unable to compile the software",
4 => "4 - High, e.g. key functionality not working",
5 => "5 - Critical, e.g. nothing working at all"
);
$scope_text = array(
1 => "M/P",
2 => "OS",
3 => "ALL"
);
$scope_long = array(
1 => "1 - Specific to a machine",
2 => "2 - Specific to an operating system",
3 => "3 - Applies to all machines and operating systems"
);
// Global web vars...
global $PHP_SELF;
global $HTTP_COOKIE_VARS;
global $HTTP_POST_FILES;
global $HTTP_POST_VARS;
global $REMOTE_USER;
global $REQUEST_METHOD;
global $SERVER_NAME;
// Function to abbreviate long strings...
function abbreviate($text, $maxlen = 32)
{
if (strlen($text) > $maxlen)
return (substr($text, 0, $maxlen) . "...");
else
return ($text);
}
// Function to notify creator of an STR of changes...
function notify_creator($id, $what = "updated", $contents = "")
{
global $priority_long;
global $scope_long;
global $status_long;
$result = db_query("SELECT * FROM str WHERE id = $id");
if ($result)
{
$contents = wordwrap($contents);
$row = db_next($result);
$prtext = $priority_long[$row->priority];
$sttext = $status_long[$row->status];
$sctext = $scope_long[$row->scope];
if ($row->subsystem != "")
$subsystem = $row->subsystem;
else
$subsystem = "Unassigned";
if ($row->fix_version != "")
$fix_version = $row->fix_version;
else
$fix_version = "Unassigned";
if ($row->create_email != $row->modify_email &&
$row->create_email != $manager)
mail($row->create_email, "Mini-XML STR #$id $what",
"Your software trouble report #$id has been $what. You can check\n"
."the status of the report and add additional comments and/or files\n"
."at the following URL:\n"
."\n"
." http://www.easysw.com/str.php?L$id\n"
."\n"
." Summary: $row->summary\n"
." Version: $row->str_version\n"
." Status: $sttext\n"
." Priority: $prtext\n"
." Scope: $sctext\n"
." Subsystem: $subsystem\n"
."Fix Version: $fix_version\n"
."\n$contents"
."________________________________________________________________\n"
."Thank you for using the Mini-XML Software Trouble Report page!",
"From: noreply@easysw.com\r\n");
$ccresult = db_query("SELECT email FROM strcc WHERE str_id = $id");
if ($ccresult)
{
while ($ccrow = db_next($ccresult))
{
mail($ccrow->email, "Mini-XML STR #$id $what",
"Software trouble report #$id has been $what. You can check\n"
."the status of the report and add additional comments and/or files\n"
."at the following URL:\n"
."\n"
." http://www.easysw.com/str.php?L$id\n"
."\n"
." Summary: $row->summary\n"
." Version: $row->str_version\n"
." Status: $sttext\n"
." Priority: $prtext\n"
." Scope: $sctext\n"
." Subsystem: $subsystem\n"
."Fix Version: $fix_version\n"
."\n$contents"
."________________________________________________________________\n"
."Thank you for using the Mini-XML Software Trouble Report page!",
"From: noreply@easysw.com\r\n");
}
db_free($ccresult);
}
if ($row->manager_email != "")
$manager = $row->manager_email;
else
$manager = "mxml";
if ($row->modify_email != $manager)
mail($manager, "Mini-XML STR #$id $what",
"The software trouble report #$id assigned to you has been $what.\n"
."You can manage the report and add additional comments and/or files\n"
."at the following URL:\n"
."\n"
." http://www.easysw.com/private/str.php?L$id\n"
."\n"
." Summary: $row->summary\n"
." Version: $row->str_version\n"
." Status: $sttext\n"
." Priority: $prtext\n"
." Scope: $sctext\n"
." Subsystem: $subsystem\n"
."Fix Version: $fix_version\n"
."\n$contents",
"From: noreply@easysw.com\r\n");
db_free($result);
}
}
// Get command-line options...
//
// Usage: str.php [operation] [options]
//
// Operations:
//
// B = Batch update selected STRs
// L = List all STRs
// L# = List STR #
// M# = Modify STR #
// T# = Post text for STR #
// F# = Post file for STR #
// N = Post new STR
// U# = Update notification for STR #
//
// Options:
//
// I# = Set first STR
// P# = Set priority filter
// S# = Set status filter
// C# = Set scope filter
// E# = Set email filter
// Qtext = Set search text
$priority = 0;
$status = -2;
$scope = 0;
$search = "";
$index = 0;
$femail = 0;
global $argc, $argv;
print("<p>argc=$argc</p>\n");
print("<p>argv=$argv</p>\n");
if ($argc)
{
$op = $argv[0][0];
$id = (int)substr($argv[0], 1);
if ($op != 'L' && $op != 'M' && $op != 'T' && $op != 'F' &&
$op != 'N' && $op != 'U' && $op != 'B')
{
html_header("STR Error");
print("<p>Bad command '$op'!</p>\n");
html_footer();
exit();
}
if (($op == 'M' || $op == 'B') && !$REMOTE_USER)
{
html_header("STR Error");
print("<p>The '$op' command is not available to you!</p>\n");
html_footer();
exit();
}
if (($op == 'M' || $op == 'T' || $op == 'F') && !$id)
{
html_header("STR Error");
print("<p>Command '$op' requires an STR number!</p>\n");
html_footer();
exit();
}
if ($op == 'N' && $id)
{
html_header("STR Error");
print("<p>Command '$op' cannot have an STR number!</p>\n");
html_footer();
exit();
}
for ($i = 1; $i < $argc; $i ++)
{
$option = substr($argv[$i], 1);
switch ($argv[$i][0])
{
case 'P' : // Set priority filter
$priority = (int)$option;
break;
case 'S' : // Set status filter
$status = (int)$option;
break;
case 'C' : // Set scope filter
$scope = (int)$option;
break;
case 'Q' : // Set search text
$search = $option;
$i ++;
while ($i < $argc)
{
$search .= " $argv[$i]";
$i ++;
}
break;
case 'I' : // Set first STR
$index = (int)$option;
if ($index < 0)
$index = 0;
break;
case 'E' : // Show only problem reports matching the current email
$femail = (int)$option;
break;
default :
html_header("STR Error");
print("<p>Bad option '$argv[$i]'!</p>\n");
html_footer();
exit();
break;
}
}
}
else
{
$op = 'L';
$id = 0;
}
if ($REQUEST_METHOD == "POST")
{
if (array_key_exists("FPRIORITY", $HTTP_POST_VARS))
$priority = (int)$HTTP_POST_VARS["FPRIORITY"];
if (array_key_exists("FSTATUS", $HTTP_POST_VARS))
$status = (int)$HTTP_POST_VARS["FSTATUS"];
if (array_key_exists("FSCOPE", $HTTP_POST_VARS))
$scope = (int)$HTTP_POST_VARS["FSCOPE"];
if (array_key_exists("FEMAIL", $HTTP_POST_VARS))
$femail = (int)$HTTP_POST_VARS["FEMAIL"];
if (array_key_exists("SEARCH", $HTTP_POST_VARS))
$search = $HTTP_POST_VARS["SEARCH"];
}
$options = "+P$priority+S$status+C$scope+I$index+E$femail+Q" . urlencode($search);
// B = Batch update selected STRs
// L = List all STRs
// L# = List STR #
// M# = Modify STR #
// T# = Post text for STR #
// F# = Post file for STR #
// N = Post new STR
// U# = Update notification for STR #
switch ($op)
{
case 'B' : // Batch update selected STRs
if ($REQUEST_METHOD != "POST")
{
header("Location: $PHP_SELF?L$options");
break;
}
if (array_key_exists("STATUS", $HTTP_POST_VARS) &&
($HTTP_POST_VARS["STATUS"] != "" ||
$HTTP_POST_VARS["PRIORITY"] != "" ||
$HTTP_POST_VARS["MANAGER_EMAIL"] != "" ||
$HTTP_POST_VARS["MESSAGE"] != ""))
{
$time = time();
$manager_email = db_escape_string($HTTP_POST_VARS["MANAGER_EMAIL"]);
$modify_email = db_escape_string($managers[$REMOTE_USER]);
$message = $HTTP_POST_VARS["MESSAGE"];
if ($message != "")
{
$contents = db_escape_string($messages[$message]);
$mailmsg = $messages[$message] . "\n\n";
}
else
{
$contents = "";
$mailmsg = "";
}
$query = "modify_date = $time, modify_email = '$modify_email'";
if ($HTTP_POST_VARS["STATUS"] != "")
$query .= ", status = $HTTP_POST_VARS[STATUS]";
if ($HTTP_POST_VARS["PRIORITY"] != "")
$query .= ", priority = $HTTP_POST_VARS[PRIORITY]";
if ($manager_email != "")
$query .= ", manager_email = '$manager_email'";
reset($HTTP_POST_VARS);
while (list($key, $val) = each($HTTP_POST_VARS))
if (substr($key, 0, 3) == "ID_")
{
$id = (int)substr($key, 3);
db_query("UPDATE str SET $query WHERE id = $id");
if ($contents != "")
{
db_query("INSERT INTO strtext VALUES(0,$id,1,$time,"
."'$modify_email','$contents')");
notify_creator($id, "updated", $mailmsg);
}
}
}
header("Location: $PHP_SELF?L$options");
break;
case 'L' : // List (all) STR(s)
if ($id)
{
html_header("STR #$id");
$result = db_query("SELECT * FROM str WHERE id = $id");
if (db_count($result) != 1)
{
print("<p><b>Error:</b> STR #$id was not found!</p>\n");
html_footer();
exit();
}
$row = db_next($result);
print("<p align='center'>"
."[&nbsp;<a href='$PHP_SELF?L$options'>Return&nbsp;to&nbsp;STR&nbsp;List</a>");
if ($row->status >= $STR_STATUS_ACTIVE)
print(" | <a href='$PHP_SELF?T$id$options'>Post&nbsp;Text</a>"
." | <a href='$PHP_SELF?F$id$options'>Post&nbsp;File</a>");
if ($REMOTE_USER)
print(" | <a href='$PHP_SELF?M$id$options'>Modify&nbsp;STR</a>");
print("&nbsp;]</p><hr />\n");
$create_email = sanitize_email($row->create_email);
$manager_email = sanitize_email($row->manager_email);
$subsystem = $row->subsystem;
$summary = htmlspecialchars($row->summary, ENT_QUOTES);
$prtext = $priority_long[$row->priority];
$sttext = $status_long[$row->status];
$sctext = $scope_long[$row->scope];
$str_version = $row->str_version;
$fix_version = $row->fix_version;
if ($manager_email == "")
$manager_email = "<i>Unassigned</i>";
if ($subsystem == "")
$subsystem = "<i>Unassigned</i>";
if ($fix_version == "")
$fix_version = "<i>Unassigned</i>";
print("<p><table width='100%' cellpadding='5' cellspacing='0' border='0'>\n");
if ($row->master_id > 0)
print("<tr><th align='right'>Duplicate Of:</th>"
."<td><a href='$PHP_SELF?L$row->master_id$options'>STR "
."#$row->master_id</a></td></tr>\n");
if (!$row->is_published)
print("<tr><TH ALIGN='CENTER' COLSPAN='2'>This STR is "
."currently hidden from public view.</td></tr>\n");
print("<tr><th align='right'>Status:</th><td>$sttext</td></tr>\n");
print("<tr><th align='right'>Priority:</th><td>$prtext</td></tr>\n");
print("<tr><th align='right'>Scope:</th><td>$sctext</td></tr>\n");
print("<tr><th align='right'>Subsystem:</th><td>$subsystem</td></tr>\n");
print("<tr><th align='right'>Summary:</th><td>$summary</td></tr>\n");
print("<tr><th align='right'>Version:</th><td>$str_version</td></tr>\n");
print("<tr><th align='right'>Created By:</th><td>$create_email</td></tr>\n");
print("<tr><th align='right'>Assigned To:</th><td>$manager_email</td></tr>\n");
print("<tr><th align='right'>Fix Version:</th><td>$fix_version</td></tr>\n");
if ($REMOTE_USER)
$email = htmlspecialchars($managers[$REMOTE_USER]);
else if (array_key_exists("FROM", $HTTP_COOKIE_VARS))
$email = htmlspecialchars($HTTP_COOKIE_VARS["FROM"]);
else
$email = "";
print("<tr><th align='right' valign='top'>Update Notification:</th><td>"
."<form method='POST' action='$PHP_SELF?U$id$options'>"
."<input type='text' size='40' maxsize='128' name='EMAIL' value='$email'>"
."<input type='submit' value='Change Notification Status'>"
."<br /><input type='radio' name='NOTIFICATION' checked value='ON'>Receive EMails "
."<input type='radio' name='NOTIFICATION' value='OFF'>Don't Receive EMails"
."</form>"
."</td></tr>\n");
print("</table></p>\n");
db_free($result);
print("<hr /><p><b>Trouble Report Files:</b>");
if ($row->status >= $STR_STATUS_ACTIVE)
print(" [&nbsp;<a href='$PHP_SELF?F$id$options'>Post&nbsp;File</a>&nbsp;]");
print("</p>\n");
$result = db_query("SELECT * FROM strfile WHERE "
."str_id = $id AND is_published = 1");
if (db_count($result) == 0)
print("<p><i>No files</i></p>\n");
else
{
print("<p><table width='100%' border='0' cellpadding='5' "
."cellspacing='0'>\n"
."<tr bgcolor='#bbbb88'><th>Name/Time/Date</th>"
."<th>Filename</th></tr>\n");
$bgcolor = "#eeeebb";
while ($row = db_next($result))
{
$date = date("M d, Y", $row->date);
$time = date("H:m", $row->date);
$email = sanitize_email($row->email);
$filename = htmlspecialchars($row->filename);
print("<tr bgcolor='$bgcolor'>"
."<td align='center' valign='top'>$email<br />$time $date</td>"
."<td align='center' valign='top'>"
."<a href='strfiles/$id/$filename'>$filename</a></td>"
."</tr>\n");
if ($bgcolor == "#ddddaa")
$bgcolor = "#eeeebb";
else
$bgcolor = "#ddddaa";
}
print("</table></p>\n");
}
db_free($result);
print("<hr /><p><b>Trouble Report Dialog:</b>");
if ($row->status >= $STR_STATUS_ACTIVE)
print(" [&nbsp;<a href='$PHP_SELF?T$id$options'>Post&nbsp;Text</a>&nbsp;]");
print("</p>\n");
$result = db_query("SELECT * FROM strtext WHERE "
."str_id = $id AND is_published = 1");
if (db_count($result) == 0)
print("<p><i>No text</i></p>\n");
else
{
print("<p><Table width='100%' border='0' cellpadding='5' "
."cellspacing='0'>\n"
."<tr bgcolor='#bbbb88'><th>Name/Time/Date</th>"
."<th>Text</th></tr>\n");
$bgcolor = "#eeeebb";
while ($row = db_next($result))
{
$date = date("M d, Y", $row->date);
$time = date("H:m", $row->date);
$email = sanitize_email($row->email);
$contents = quote_text($row->contents);
print("<tr bgcolor='$bgcolor'>"
."<td align='center' valign='top'>$email<br />$time $date</td>"
."<td valign='top'><tt>$contents</tt></td>"
."</tr>\n");
if ($bgcolor == "#ddddaa")
$bgcolor = "#eeeebb";
else
$bgcolor = "#ddddaa";
}
print("</table></p>\n");
}
db_free($result);
}
else
{
html_header("STR List");
print("<p align='center'>[ <a href='$PHP_SELF?N$options'>Post "
."New Software Trouble Report</a> ]</p>\n");
print("<form method='POST' action='$PHP_SELF'><p align='center'>"
."Search&nbsp;Words: &nbsp;<input type='text' size='60' name='SEARCH' value='$search'>"
."<input type='submit' value='Search STRs'></p>\n");
print("<p align='center'>Priority:&nbsp;<select name='FPRIORITY'>");
print("<option value='0'>Don't Care</option>");
for ($i = 1; $i <= 5; $i ++)
{
print("<option value='$i'");
if ($priority == $i)
print(" selected");
print(">$priority_text[$i]</option>");
}
print("</select>\n");
print("Status:&nbsp;<select name='FSTATUS'>");
print("<option value='0'>Don't Care</option>");
if ($status == -1)
print("<option value='-1' selected>Closed</option>");
else
print("<option value='-1'>Closed</option>");
if ($status == -2)
print("<option value='-2' selected>Open</option>");
else
print("<option value='-2'>Open</option>");
for ($i = 1; $i <= 5; $i ++)
{
print("<option value='$i'");
if ($status == $i)
print(" selected");
print(">$status_text[$i]</option>");
}
print("</select>\n");
print("Scope:&nbsp;<select name='FSCOPE'>");
print("<option value='0'>Don't Care</option>");
for ($i = 1; $i <= 3; $i ++)
{
print("<option value='$i'");
if ($scope == $i)
print(" selected");
print(">$scope_text[$i]</option>");
}
print("</select>\n");
if ($REMOTE_USER || array_key_exists("FROM", $HTTP_COOKIE_VARS))
{
print("Show:&nbsp;<select name='FEMAIL'>");
print("<option value='0'");
if (!$femail)
print(" selected");
print(">All</option>");
print("<option value='1'");
if ($femail)
print(" selected");
if ($REMOTE_USER)
print(">Mine + Unassigned</option>");
else
print(">Only Mine</option>");
print("</select>\n");
}
print("</p></form>\n");
print("<hr />\n");
$query = "";
$prefix = "WHERE ";
if ($priority > 0)
{
$query .= "${prefix}priority = $priority";
$prefix = " AND ";
}
if ($status > 0)
{
$query .= "${prefix}status = $status";
$prefix = " AND ";
}
else if ($status == -1) // Show closed
{
$query .= "${prefix}status <= $STR_STATUS_UNRESOLVED";
$prefix = " AND ";
}
else if ($status == -2) // Show open
{
$query .= "${prefix}status >= $STR_STATUS_ACTIVE";
$prefix = " AND ";
}
if ($scope > 0)
{
$query .= "${prefix}scope = $scope";
$prefix = " AND ";
}
if (!$REMOTE_USER)
{
$query .= "${prefix}is_published = 1";
$prefix = " AND ";
}
if ($femail)
{
if ($REMOTE_USER)
{
$query .= "${prefix}(manager_email = '' OR "
." manager_email = '$managers[$REMOTE_USER]')";
$prefix = " AND ";
}
else if (array_key_exists("FROM", $HTTP_COOKIE_VARS))
{
$email = db_escape_string($HTTP_COOKIE_VARS["FROM"]);
$query .= "${prefix}create_email = '$email'";
$prefix = " AND ";
}
}
if ($search)
{
$search_string = str_replace("'", " ", $search);
$search_string = str_replace("\"", " ", $search_string);
$search_string = str_replace("\\", " ", $search_string);
$search_string = str_replace("%20", " ", $search_string);
$search_string = str_replace("%27", " ", $search_string);
$search_string = str_replace(" ", " ", $search_string);
$search_words = explode(' ', $search_string);
// Loop through the array of words, adding them to the
$query .= "${prefix}(";
$prefix = "";
$next = " OR";
$logic = "";
reset($search_words);
while ($keyword = current($search_words))
{
next($search_words);
$keyword = db_escape_string(ltrim(rtrim($keyword)));
if (strcasecmp($keyword, 'or') == 0)
{
$next = ' OR';
if ($prefix != '')
$prefix = ' OR';
}
else if (strcasecmp($keyword, 'and') == 0)
{
$next = ' AND';
if ($prefix != '')
$prefix = ' AND';
}
else if (strcasecmp($keyword, 'not') == 0)
{
$logic = ' NOT';
}
else
{
if ($keyword == (int)$keyword)
$idsearch = " OR id = " . (int)$keyword;
else
$idsearch = "";
$query .= "$prefix$logic (summary LIKE \"%$keyword%\"$idsearch"
." OR subsystem LIKE \"%$keyword%\""
." OR str_version LIKE \"%$keyword%\""
." OR fix_version LIKE \"%$keyword%\""
." OR manager_email LIKE \"%$keyword%\""
." OR create_email LIKE \"%$keyword%\")";
$prefix = $next;
$logic = '';
}
}
$query .= ")";
}
$result = db_query("SELECT * FROM str $query "
."ORDER BY status DESC, priority DESC, scope DESC, "
."modify_date");
$count = db_count($result);
if ($count == 0)
{
print("<p>No STRs found.</p>\n");
if (($priority || $status || $scope) && $search != "")
print("<p>[ <a href='$PHP_SELF?L+S0+Q" . urlencode($search)
."'>Search for \"<i>$search</i>\" in all STRs</a> ]</p>\n");
html_footer();
exit();
}
if ($index >= $count)
$index = $count - ($count % $STR_PAGE_MAX);
if ($index < 0)
$index = 0;
$start = $index + 1;
$end = $index + $STR_PAGE_MAX;
if ($end > $count)
$end = $count;
$prev = $index - $STR_PAGE_MAX;
if ($prev < 0)
$prev = 0;
$next = $index + $STR_PAGE_MAX;
print("<p>$count STR(s) found, showing $start to $end:</p>\n");
if ($REMOTE_USER)
print("<form method='POST' action='$PHP_SELF?B$options'>\n");
print("<p><table border='0' cellspacing='0' cellpadding='5' "
."width='100%'>\n");
if ($count > $STR_PAGE_MAX)
{
print("<tr><td colspan='4'>");
if ($index > 0)
print("[ <a href='$PHP_SELF?L+P$priority+S$status+C$scope+I$prev+"
."E$femail+Q" . urlencode($search) . "'>Previous $STR_PAGE_MAX</a> ]");
if ($REMOTE_USER)
print("</td><td colspan='4' align='right'>");
else
print("</td><td colspan='3' align='right'>");
if ($end < $count)
print("[ <a href='$PHP_SELF?L+P$priority+S$status+C$scope+I$next+"
."E$femail+Q" . urlencode($search) . "'>Next $STR_PAGE_MAX</a> ]");
print("</td></tr>\n");
}
print("<tr bgcolor='#bbbb88'><th>Id</th><th>Priority</th>"
."<th>Status</th><th>Scope</th><th>Summary</th>"
."<th>Version</th><th>Last Updated</th>");
if ($REMOTE_USER)
print("<th>Assigned To</th>");
print("</tr>\n");
$bgcolor = "#eeeebb";
if ($REMOTE_USER)
$sumlen = 80;
else
$sumlen = 40;
db_data_seek($result, $index);
for ($i = 0; $i < $STR_PAGE_MAX && $row = db_next($result); $i ++)
{
$date = date("M d, Y", $row->modify_date);
$summary = htmlspecialchars($row->summary, ENT_QUOTES);
$summabbr = htmlspecialchars(abbreviate($row->summary, $sumlen), ENT_QUOTES);
$prtext = $priority_text[$row->priority];
$sttext = $status_text[$row->status];
$sctext = $scope_text[$row->scope];
if ($row->is_published)
print("<tr bgcolor='$bgcolor'>");
else if ($bgcolor == "#eeeebb")
print("<tr bgcolor='#eebbbb'>");
else
print("<tr bgcolor='#ddaaaa'>");
print("<td nowrap>");
if ($REMOTE_USER)
print("<input type='checkbox' name='ID_$row->id'>");
print("<a href='$PHP_SELF?L$row->id$options' alt='STR #$id: $summary'>"
."$row->id</a></td>"
."<td align='center'>$prtext</td>"
."<td align='center'>$sttext</td>"
."<td align='center'>$sctext</td>"
."<td align='center'><a href='$PHP_SELF?L$row->id$options' "
."alt='STR #$id: $summary'>$summabbr</a></td>"
."<td align='center'>$row->str_version</td>"
."<td align='center'>$date</td>");
if ($REMOTE_USER)
{
if ($row->manager_email != "")
$email = sanitize_email($row->manager_email);
else
$email = "<i>Unassigned</i>";
print("<td align='center'>$email</td>");
}
print("</tr>\n");
if ($REMOTE_USER && $row->status >= $STR_STATUS_PENDING)
{
$textresult = db_query("SELECT * FROM strtext "
."WHERE str_id = $row->id "
."ORDER BY id DESC LIMIT 1");
if ($textresult && db_count($textresult) > 0)
{
$textrow = db_next($textresult);
if ($row->is_published)
print("<tr bgcolor='$bgcolor'>");
else if ($bgcolor == "#eeeebb")
print("<tr bgcolor='#eebbbb'>");
else
print("<tr bgcolor='#ddaaaa'>");
$email = sanitize_email($textrow->email);
$contents = quote_text(abbreviate($textrow->contents, 128));
print("<td align='center' valign='top' colspan='2'>$email</td>"
."<td valign='top' colspan='6' width='100%'><tt>$contents</tt></td>"
."</tr>\n");
db_free($textresult);
}
}
if ($bgcolor == "#ddddaa")
$bgcolor = "#eeeebb";
else
$bgcolor = "#ddddaa";
}
db_free($result);
if ($REMOTE_USER)
{
print("<tr bgcolor='#bbbb88'><th colspan='8'>");
print("Status:&nbsp;<select name='STATUS'>"
."<option value=''>No Change</option>");
for ($i = 1; $i <= 5; $i ++)
print("<option value='$i'>$status_text[$i]</option>");
print("</select>\n");
print("Priority:&nbsp;<select name='PRIORITY'>"
."<option value=''>No Change</option>");
for ($i = 1; $i <= 5; $i ++)
print("<option value='$i'>$priority_text[$i]</option>");
print("</select>\n");
print("Assigned To:&nbsp;<select name='MANAGER_EMAIL'>"
."<option value=''>No Change</option>");
reset($managers);
while (list($key, $val) = each($managers))
{
$temail = htmlspecialchars($val, ENT_QUOTES);
$temp = sanitize_email($val);
print("<option value='$temail'>$temp</option>");
}
print("</select>\n");
print("<br />Text:&nbsp;<select name='MESSAGE'>"
."<option value=''>No Message</option>");
reset($messages);
while (list($key, $val) = each($messages))
{
$temp = abbreviate($val);
print("<option value='$key'>$temp</option>");
}
print("</select>\n");
print("<input type='submit' value='Modify Selected STRs'>");
print("</th><tr>\n");
}
else
print("<tr bgcolor='#bbbb88'><th colspan='7'>"
."<spacer width='1' height='1'></th><tr>\n");
if ($count > $STR_PAGE_MAX)
{
print("<tr><td colspan='4'>");
if ($index > 0)
print("[ <a href='$PHP_SELF?L+P$priority+S$status+C$scope+I$prev+"
."E$femail+Q" . urlencode($search) . "'>Previous $STR_PAGE_MAX</a> ]");
if ($REMOTE_USER)
print("</td><TD COLSPAN='4' ALIGN='RIGHT'>");
else
print("</td><TD COLSPAN='3' ALIGN='RIGHT'>");
if ($end < $count)
print("[ <a href='$PHP_SELF?L+P$priority+S$status+C$scope+I$next+"
."E$femail+Q" . urlencode($search) . "'>Next $STR_PAGE_MAX</a> ]");
print("</td></tr>\n");
}
print("</table>");
if ($REMOTE_USER)
print("</form>");
print("<p>"
."M/P = Machine/Printer, "
."OS = Operating System."
."</p>\n");
}
html_footer();
break;
case 'M' : // Modify STR
if ($REQUEST_METHOD == "POST")
{
if (array_key_exists("STATUS", $HTTP_POST_VARS))
{
$time = time();
$master_id = (int)$HTTP_POST_VARS["MASTER_ID"];
$summary = db_escape_string($HTTP_POST_VARS["SUMMARY"]);
$subsystem = db_escape_string($HTTP_POST_VARS["SUBSYSTEM"]);
$create_email = db_escape_string($HTTP_POST_VARS["CREATE_EMAIL"]);
$manager_email = db_escape_string($HTTP_POST_VARS["MANAGER_EMAIL"]);
$modify_email = db_escape_string($managers[$REMOTE_USER]);
$contents = db_escape_string(trim($HTTP_POST_VARS["CONTENTS"]));
$message = $HTTP_POST_VARS["MESSAGE"];
db_query("UPDATE str SET "
."master_id = $master_id, "
."is_published = $HTTP_POST_VARS[IS_PUBLISHED], "
."status = $HTTP_POST_VARS[STATUS], "
."priority = $HTTP_POST_VARS[PRIORITY], "
."scope = $HTTP_POST_VARS[SCOPE], "
."summary = '$summary', "
."subsystem = '$subsystem', "
."str_version = '$HTTP_POST_VARS[STR_VERSION]', "
."fix_version = '$HTTP_POST_VARS[FIX_VERSION]', "
."create_email = '$create_email', "
."manager_email = '$manager_email', "
."modify_date = $time, "
."modify_email = '$modify_email' "
."WHERE id = $id");
if ($contents != "")
{
db_query("INSERT INTO strtext VALUES(0,$id,1,$time,"
."'$modify_email','$contents')");
$contents = trim($HTTP_POST_VARS["CONTENTS"]) . "\n\n";
}
if ($message != "")
{
$contents = db_escape_string($messages[$message]);
db_query("INSERT INTO strtext VALUES(0,$id,1,$time,"
."'$modify_email','$contents')");
$contents = $messages[$message] . "\n\n";
}
header("Location: $PHP_SELF?L$id$options");
notify_creator($id, "updated", $contents);
}
else if (array_key_exists("FILE_ID", $HTTP_POST_VARS))
{
db_query("UPDATE strfile SET "
."is_published = $HTTP_POST_VARS[IS_PUBLISHED] "
."WHERE id = $HTTP_POST_VARS[FILE_ID]");
header("Location: $PHP_SELF?M$id$options");
}
else if (array_key_exists("TEXT_ID", $HTTP_POST_VARS))
{
db_query("UPDATE strtext SET "
."is_published = $HTTP_POST_VARS[IS_PUBLISHED] "
."WHERE id = $HTTP_POST_VARS[TEXT_ID]");
header("Location: $PHP_SELF?M$id$options");
}
else
header("Location: $PHP_SELF?M$id$options");
}
else
{
html_header("STR #$id");
print("<p align='center'>"
."[&nbsp;<a href='$PHP_SELF?L$options'>Return&nbsp;to&nbsp;STR&nbsp;List</a>"
." | <a href='$PHP_SELF?L$id$options'>Return&nbsp;to&nbsp;STR&nbsp;#$id</a>"
." | <a href='$PHP_SELF?T$id$options'>Post&nbsp;Text</a>"
." | <a href='$PHP_SELF?F$id$options'>Post&nbsp;File</a>"
."&nbsp;]</p><hr />\n");
$result = db_query("SELECT * FROM str WHERE id = $id");
if (db_count($result) != 1)
{
print("<p><b>Error:</b> STR #$id was not found!</p>\n");
html_footer();
exit();
}
$row = db_next($result);
$create_email = htmlspecialchars($row->create_email);
$manager_email = htmlspecialchars($row->manager_email);
$summary = htmlspecialchars($row->summary, ENT_QUOTES);
print("<form method='POST' action='$PHP_SELF?M$id$options'>"
."<p><table width='100%' cellpadding='5' cellspacing='0' border='0'>\n");
print("<tr><th align='right'>Duplicate Of:</th>"
."<td><input type='text' name='MASTER_ID' "
."value='$row->master_id' size='6'></td></tr>\n");
print("<tr><th align='right'>Published:</th><td>");
print("<select name='IS_PUBLISHED'>");
if ($row->is_published)
{
print("<option value='0'>No</option>");
print("<option value='1' selected>Yes</option>");
}
else
{
print("<option value='0' selected>No</option>");
print("<option value='1'>Yes</option>");
}
print("</select></td></tr>\n");
print("<tr><th align='right'>Status:</th><td>");
print("<select name='STATUS'>");
for ($i = 1; $i <= 5; $i ++)
{
print("<option value='$i'");
if ($row->status == $i)
print(" selected");
print(">$status_long[$i]</option>");
}
print("</select>\n");
print("</td></tr>\n");
print("<tr><th align='right'>Priority:</th><td>");
print("<select name='PRIORITY'>");
for ($i = 1; $i <= 5; $i ++)
{
print("<option value='$i'");
if ($row->priority == $i)
print(" selected");
print(">$priority_long[$i]</option>");
}
print("</select></td></tr>\n");
print("<tr><th align='right'>Scope:</th><td>");
print("<select name='SCOPE'>");
for ($i = 1; $i <= 3; $i ++)
{
print("<option value='$i'");
if ($row->scope == $i)
print(" selected");
print(">$scope_long[$i]</option>");
}
print("</select></td></tr>\n");
print("<tr><th align='right'>Subsystem:</th>"
."<td><select name='SUBSYSTEM'>"
."<option value=''>Unassigned</option>");
reset($subsystems);
while (list($key, $val) = each($subsystems))
{
print("<option value='$val'");
if ($row->subsystem == $val)
print(" selected");
print(">$val</option>");
}
print("</select></td></tr>\n");
print("<tr><th align='right'>Summary:</th>"
."<td><input type='text' name='SUMMARY' size='72' "
."value='$summary'></td></tr>\n");
print("<tr><th align='right'>Version:</th>"
."<td><input type='text' name='STR_VERSION' size='16' maxsize='16' "
."value='$row->str_version'></td></tr>\n");
print("<tr><th align='right'>Created By:</th>"
."<td><input type='text' name='CREATE_EMAIL' maxsize='128' "
."value='$create_email' size='40'></td></tr>\n");
print("<tr><th align='right'>Assigned To:</th>"
."<td><select name='MANAGER_EMAIL'>"
."<option value=''>Unassigned</option>");
reset($managers);
while (list($key, $val) = each($managers))
{
$temail = htmlspecialchars($val, ENT_QUOTES);
$temp = sanitize_email($val);
print("<option value='$temail'");
if ($row->manager_email == $val)
print(" selected");
print(">$temp</option>");
}
print("</select></td></tr>\n");
print("<tr><th align='right'>Fix Version:</th>"
."<td><select name='FIX_VERSION'>"
."<option value=''>Unassigned</option>"
."<option>Not Applicable</option>");
reset($versions);
while (list($key, $val) = each($versions))
{
print("<option value='$val'");
if ($row->fix_version == $val)
print(" selected");
print(">$val</option>");
}
print("</select></td></tr>\n");
print("<tr><th align='right' valign='top'>Text:</th><td>");
print("<select name='MESSAGE'>"
."<option value=''>--- Pick a Standard Message ---</option>");
reset($messages);
while (list($key, $val) = each($messages))
{
$temp = abbreviate($val, 72);
print("<option value='$key'>$temp</option>");
}
print("</select><br />\n");
print("<textarea name='CONTENTS' COLS='72' ROWS='12' WRAP='VIRTUAL'>"
."</textarea></td></tr>\n");
print("<tr><TH ALIGN='CENTER' COLSPAN='2'>"
."<INPUT type='SUBMIT' value='Update Trouble Report'></th></tr>\n");
print("</table></p></form>\n");
print("<hr /><p><b>Trouble Report Files:</b> "
."[ <a href='$PHP_SELF?F$id$options'>Post&nbsp;File</a> ]"
."</p>\n");
$result = db_query("SELECT * FROM strfile WHERE str_id = $id");
if (db_count($result) == 0)
print("<p><i>No files</i></p>\n");
else
{
print("<p><table width='100%' border='0' cellpadding='5' "
."cellspacing='0'>\n"
."<tr bgcolor='#bbbb88'><th>Name/Time/Date</th>"
."<th>Filename</th></tr>\n");
$bgcolor = "#eeeebb";
while ($row = db_next($result))
{
$date = date("M d, Y", $row->date);
$time = date("H:m", $row->date);
$email = sanitize_email($row->email);
$filename = htmlspecialchars($row->filename);
print("<tr bgcolor='$bgcolor'>"
."<td align='center' valign='top'>$email<br />$time $date<br />"
."<form method='POST' action='$PHP_SELF?M$id$options'>"
."<input type='hidden' name='FILE_ID' value='$row->id'>");
if ($row->is_published)
print("<input type='hidden' name='IS_PUBLISHED' value='0'>"
."<input type='submit' value='Hide'>");
else
print("<input type='hidden' name='IS_PUBLISHED' value='1'>"
."<input type='submit' value='Show'>");
print("</form></td>"
."<td align='center' valign='top'>"
."<a href='strfiles/$id/$filename'>$filename</a></td>"
."</tr>\n");
if ($bgcolor == "#ddddaa")
$bgcolor = "#eeeebb";
else
$bgcolor = "#ddddaa";
}
print("</table></p>\n");
}
db_free($result);
print("<hr /><p><b>Trouble Report Dialog:</b> "
."[ <a href='$PHP_SELF?T$id$options'>Post&nbsp;Text</a> ]"
."</p>\n");
$result = db_query("SELECT * FROM strtext WHERE "
."str_id = $id");
if (db_count($result) == 0)
print("<p><i>No text</i></p>\n");
else
{
print("<p><table width='100%' border='0' cellpadding='5' "
."cellspacing='0'>\n"
."<tr bgcolor='#bbbb88'><th>Name/Time/Date</th>"
."<th>Text</th></tr>\n");
$bgcolor = "#eeeebb";
while ($row = db_next($result))
{
$date = date("M d, Y", $row->date);
$time = date("H:m", $row->date);
$email = sanitize_email($row->email);
$contents = quote_text($row->contents);
print("<tr bgcolor='$bgcolor'>"
."<td align='center' valign='top'>$email<br />$time $date<br />"
."<form method='POST' action='$PHP_SELF?M$id$options'>"
."<input type='hidden' name='TEXT_ID' value='$row->id'>");
if ($row->is_published)
print("<input type='hidden' name='IS_PUBLISHED' value='0'>"
."<input type='submit' value='Hide'>");
else
print("<input type='hidden' name='IS_PUBLISHED' value='1'>"
."<input type='submit' value='Show'>");
print("</form></td>"
."<td valign='top'><tt>$contents</tt></td>"
."</tr>\n");
if ($bgcolor == "#ddddaa")
$bgcolor = "#eeeebb";
else
$bgcolor = "#ddddaa";
}
print("</table></p>\n");
}
db_free($result);
html_footer();
}
break;
case 'T' : // Post text for STR #
if ($REQUEST_METHOD == "POST")
{
$contents = $HTTP_POST_VARS["CONTENTS"];
if (array_key_exists("EMAIL", $HTTP_POST_VARS))
{
$email = $HTTP_POST_VARS["EMAIL"];
setcookie("FROM", "$email", time() + 57600, $PHP_SELF, $SERVER_NAME);
}
else if ($REMOTE_USER)
$email = $managers[$REMOTE_USER];
else if (array_key_exists("FROM", $HTTP_COOKIE_VARS))
$email = $HTTP_COOKIE_VARS["FROM"];
else
$email = "";
if (ereg("Anonymous.*", $email))
$email = "";
if ($email != "" && $contents != "")
$havedata = 1;
}
else
{
if ($REMOTE_USER)
$email = $managers[$REMOTE_USER];
else
$email = $HTTP_COOKIE_VARS["FROM"];
$contents = "";
if (ereg("Anonymous.*", $email))
$email = "";
}
if ($REQUEST_METHOD == "POST" && $havedata)
{
$time = time();
$temail = db_escape_string($email);
$tcontents = db_escape_string($contents);
db_query("INSERT INTO strtext VALUES(0,$id,1,$time,'$temail',"
."'$tcontents')");
db_query("UPDATE str SET modify_date=$time, modify_email='$temail' "
."WHERE id = $id");
db_query("UPDATE str SET status=$STR_STATUS_PENDING WHERE "
."id = $id AND status >= $STR_STATUS_ACTIVE AND "
."status < $STR_STATUS_NEW");
header("Location: $PHP_SELF?L$id$options");
notify_creator($id, "updated", "$contents\n\n");
}
else
{
html_header("Post Text For STR #$id");
print("<p align='center'>[ <a href='$PHP_SELF?L$id$options'>Return to "
."STR #$id</a> ]</p>\n");
if ($REQUEST_METHOD == "POST")
{
print("<p><b>Error:</b> Please fill in the fields marked in "
."<b><font color='red'>bold red</font></b> below and resubmit "
."your trouble report.</p><hr />\n");
$hstart = "<font color='red'>";
$hend = "</font>";
}
else
{
print("<hr />\n");
$hstart = "";
$hend = "";
}
print("<form method='POST' action='$PHP_SELF?T$id$options'>"
."<p><table width='100%' cellpadding='5' cellspacing='0' border='0'>\n");
print("<tr><th align='right'>");
if ($email != "")
print("EMail:</th><td>");
else
print("${hstart}EMail:$hend</th><td>");
$temp = htmlspecialchars($email);
print("<input type='text' name='EMAIL' value='$temp' size='40' "
."maxsize='128'></td></tr>\n");
print("<tr><th align='right' valign='top'>");
if ($contents != "")
print("Text:</th><td>");
else
print("${hstart}Text:$hend</th><td>");
$temp = htmlspecialchars($contents);
print("<textarea name='CONTENTS' cols='72' rows='12' wrap='virtual'>"
."$temp</textarea></td></tr>\n");
print("<tr><th align='center' colspan='2'>"
."<input type='submit' value='Post Text to Trouble Report'></th></tr>\n");
print("</table></p></form>\n");
html_footer();
}
break;
case 'F' : // Post file for STR #
if ($REQUEST_METHOD == "POST")
{
if (array_key_exists("EMAIL", $HTTP_POST_VARS))
{
$email = $HTTP_POST_VARS["EMAIL"];
setcookie("FROM", "$email", time() + 57600, $PHP_SELF, $SERVER_NAME);
}
else if ($REMOTE_USER)
$email = $managers[$REMOTE_USER];
else if (array_key_exists("FROM", $HTTP_COOKIE_VARS))
$email = $HTTP_COOKIE_VARS["FROM"];
else
$email = "";
if (ereg("Anonymous.*", $email))
$email = "";
if (array_key_exists("STRFILE", $HTTP_POST_FILES))
{
$filename = $HTTP_POST_FILES['STRFILE']['name'];
if ($filename[0] == '.' || $filename[0] == '/')
$filename = "";
}
else
$filename = "";
if ($email != "" && $filename != "")
$havedata = 1;
}
else
{
if ($REMOTE_USER)
$email = $managers[$REMOTE_USER];
else
$email = $HTTP_COOKIE_VARS["FROM"];
$filename = "";
if (ereg("Anonymous.*", $email))
$email = "";
}
if ($REQUEST_METHOD == "POST" && $havedata)
{
$time = time();
$temail = db_escape_string($email);
$tmp_name = $HTTP_POST_FILES['STRFILE']['tmp_name'];
$name = $HTTP_POST_FILES['STRFILE']['name'];
$tname = db_escape_string($name);
$infile = fopen($tmp_name, "rb");
if (!$infile)
{
html_header("Error");
print("<p><b>Error!</b> Unable to open file attachment!</p>\n");
html_footer();
exit();
}
mkdir("strfiles/$id");
$outfile = fopen("strfiles/$id/$name", "wb");
if (!$outfile)
{
html_header("Error");
print("<p><b>Error!</b> Unable to save file attachment!</p>\n");
html_footer();
exit();
}
while ($data = fread($infile, 8192))
fwrite($outfile, $data);
fclose($infile);
fclose($outfile);
db_query("INSERT INTO strfile VALUES(0,$id,1,$time,'$temail',"
."'$tname')");
db_query("UPDATE str SET modify_date=$time, modify_email='$temail' "
."WHERE id = $id");
db_query("UPDATE str SET status=$STR_STATUS_PENDING WHERE "
."id = $id AND status >= $STR_STATUS_ACTIVE AND "
."status < $STR_STATUS_NEW");
header("Location: $PHP_SELF?L$id$options");
notify_creator($id, "updated", "Added file $name\n\n");
}
else
{
html_header("Post File For STR #$id");
print("<p align='center'>[ <a href='$PHP_SELF?L$id$options'>Return to "
."STR #$id</a> ]</p>\n");
if ($REQUEST_METHOD == "POST")
{
print("<p><b>Error:</b> Please fill in the fields marked in "
."<b><font color='red'>bold red</font></b> below and resubmit "
."your trouble report.</p><hr />\n");
$hstart = "<font color='red'>";
$hend = "</font>";
}
else
{
print("<hr />\n");
$hstart = "";
$hend = "";
}
print("<form method='POST' action='$PHP_SELF?F$id$options' "
."enctype='multipart/form-data'>"
."<input type='hidden' name='MAX_FILE_SIZE' value='10000000'>");
print("<p><table width='100%' cellpadding='5' cellspacing='0' "
."border='0'>\n");
print("<tr><th align='right'>");
if ($email != "")
print("EMail:</th><td>");
else
print("${hstart}EMail:$hend</th><td>");
$temp = htmlspecialchars($email);
print("<input type='text' name='EMAIL' value='$temp' size='40' "
."maxsize='128'></td></tr>\n");
print("<tr><th align='right' valign='top'>");
if (array_key_exists("STRFILE", $HTTP_POST_FILES))
print("File:</th><td>");
else
print("${hstart}File:$hend</th><td>");
print("<input name='STRFILE' type='FILE'></td></tr>\n");
print("<tr><th align='center' colspan='2'>"
."<input type='submit' value='Post File to Trouble Report'></th></tr>\n");
print("</table></p></form>\n");
html_footer();
}
break;
case 'N' : // Post new STR
$havedata = 0;
if ($REQUEST_METHOD == "POST")
{
$npriority = $HTTP_POST_VARS["PRIORITY"];
$nscope = $HTTP_POST_VARS["SCOPE"];
$summary = $HTTP_POST_VARS["SUMMARY"];
$version = $HTTP_POST_VARS["VERSION"];
$contents = $HTTP_POST_VARS["CONTENTS"];
if (array_key_exists("EMAIL", $HTTP_POST_VARS))
{
$email = $HTTP_POST_VARS["EMAIL"];
setcookie("FROM", "$email", time() + 57600, $PHP_SELF, $SERVER_NAME);
}
else if ($REMOTE_USER)
$email = $managers[$REMOTE_USER];
else if (array_key_exists("FROM", $HTTP_COOKIE_VARS))
$email = $HTTP_COOKIE_VARS["FROM"];
else
$email = "";
if (array_key_exists("STRFILE", $HTTP_POST_FILES))
{
$filename = $HTTP_POST_FILES['STRFILE']['name'];
if ($filename[0] == '.' || $filename[0] == '/')
$filename = "";
}
else
$filename = "";
if ($npriority && $nscope && $summary != "" && $email != "" &&
$version != "" && $contents != "")
$havedata = 1;
}
else
{
if ($REMOTE_USER)
$email = $managers[$REMOTE_USER];
else
$email = $HTTP_COOKIE_VARS["FROM"];
$npriority = 0;
$nscope = 0;
$summary = "";
$version = "";
$contents = "";
$filename = "";
}
if (ereg("Anonymous.*", $email))
$email = "";
if ($REQUEST_METHOD == "POST" && $havedata)
{
$time = time();
$temail = db_escape_string($email);
$tsummary = db_escape_string($summary);
$tcontents = db_escape_string($contents);
db_query("INSERT INTO str VALUES(0,0,"
."$HTTP_POST_VARS[IS_PUBLISHED],$STR_STATUS_NEW,"
."$npriority,$nscope,'$tsummary','','$version','','',"
."$time,'$temail',$time,'$temail')");
$id = db_insertID();
db_query("INSERT INTO strtext VALUES(0,$id,1,$time,'$temail',"
."'$tcontents')");
if ($filename != "")
{
$tmp_name = $HTTP_POST_FILES['STRFILE']['tmp_name'];
$name = $HTTP_POST_FILES['STRFILE']['name'];
$tname = db_escape_string($name);
$infile = fopen($tmp_name, "rb");
if (!$infile)
{
html_header("Error");
print("<p><b>Error!</b> Unable to open file attachment!</p>\n");
html_footer();
exit();
}
mkdir("strfiles/$id");
$outfile = fopen("strfiles/$id/$name", "wb");
if (!$outfile)
{
html_header("Error");
print("<p><b>Error!</b> Unable to save file attachment!</p>\n");
html_footer();
exit();
}
while ($data = fread($infile, 8192))
fwrite($outfile, $data);
fclose($infile);
fclose($outfile);
db_query("INSERT INTO strfile VALUES(0,$id,1,$time,'$temail',"
."'$tname')");
}
header("Location: $PHP_SELF?L$id$options");
notify_creator($id, "created", "$contents\n\n");
}
else
{
html_header("New STR");
print("<p align='center'>[ <a href='$PHP_SELF?L$options'>Return to "
."STR List</a> ]</p>\n");
if ($REQUEST_METHOD == "POST")
{
print("<p><b>Error:</b> Please fill in the fields marked in "
."<b><font color='red'>bold red</font></b> below and resubmit "
."your trouble report.</p><hr />\n");
$hstart = "<font color='red'>";
$hend = "</font>";
}
else
{
print("<p>This form is for reporting bugs and requesting features "
."in the Mini-XML software. <i>Thank you</i> for helping us "
."to make Mini-XML a better product!</p><hr />\n");
$hstart = "";
$hend = "";
}
print("<form method='POST' action='$PHP_SELF?N$options' "
."enctype='multipart/form-data'>"
."<input type='hidden' name='MAX_FILE_SIZE' value='10000000'>");
print("<p><table width='100%' cellpadding='5' cellspacing='0' "
."border='0'>\n");
print("<tr><th align='right'>Security Advisory:</th><td>"
."<select name='IS_PUBLISHED'>"
."<option value='1' selected>No, make this STR publicly available.</option>"
."<option value='0'>Yes, hide this STR from public view.</option>"
."</select></td></tr>\n");
print("<tr><th align='right'>Status:</th><td>5 - New</td></tr>\n");
print("<tr><th align='right' valign='top'>");
if ($npriority > 0)
print("Priority:</th><td nowrap>");
else
print("${hstart}Priority:$hend</th><td nowrap>");
for ($i = 1; $i <= 5; $i ++)
{
print("<input type='radio' name='PRIORITY' value='$i'");
if ($npriority == $i)
print(" checked");
print(">$priority_long[$i]<br />");
}
print("</td></tr>\n");
print("<tr><th align='right' valign='top'>");
if ($nscope > 0)
print("Scope:</th><td>");
else
print("${hstart}Scope:$hend</th><td>");
for ($i = 1; $i <= 3; $i ++)
{
print("<input type='radio' name='SCOPE' value='$i'");
if ($nscope == $i)
print(" checked");
print(">$scope_long[$i]<br />");
}
print("</td></tr>\n");
print("<tr><th align='right'>Subsystem:</th><td><i>Unassigned</i></td></tr>\n");
print("<tr><th align='right'>");
if ($summary != "")
print("Summary:</th><td>");
else
print("${hstart}Summary:$hend</th><td>");
$temp = htmlspecialchars($summary, ENT_QUOTES);
print("<input type='text' name='SUMMARY' size='72' value='$temp'></td></tr>\n");
print("<tr><th align='right'>");
if ($version != "")
print("Version:</th><td>");
else
print("${hstart}Version:$hend</th><td>");
print("<select name='VERSION'>"
."<option value=''>Select a Version Number</option>");
reset($versions);
while (list($key, $val) = each($versions))
{
print("<option value='$val'");
if ($version == $val)
print(" selected");
print(">$val</option>");
}
print("</select></td></tr>\n");
print("<tr><th align='right'>");
if ($email != "")
print("EMail:</th><td>");
else
print("${hstart}EMail:$hend</th><td>");
$temp = htmlspecialchars($email);
print("<input type='text' name='EMAIL' value='$temp' size='40' "
."maxsize='128'></td></tr>\n");
print("<tr><th align='right'>Assigned To:</th><td><i>Unassigned</i></td></tr>\n");
print("<tr><th align='right'>Fix Version:</th><td><i>Unassigned</i></td></tr>\n");
print("<tr><th align='right' valign='top'>");
if ($contents != "")
print("Detailed Description of Problem:</th><td>");
else
print("${hstart}Detailed Description of Problem:$hend</th><td>");
$temp = htmlspecialchars($contents);
print("<textarea name='CONTENTS' cols='72' rows='12' wrap='virtual'>"
."$temp</textarea></td></tr>\n");
print("<tr><th align='right' valign='top'>File:</th><td>");
print("<input name='STRFILE' type='FILE'></td></tr>\n");
print("<tr><th align='center' colspan='2'>"
."<input type='submit' value='Submit Trouble Report'></th></tr>\n");
print("</table></p></form>\n");
html_footer();
}
break;
case 'U' : // Update notification status
// EMAIL and NOTIFICATION variables hold status; add/delete from strcc...
$havedata = 0;
if ($REQUEST_METHOD != "POST")
{
html_header("STR Error");
print("<p>The '$op' command requires a POST request!\n");
html_footer();
exit();
}
$notification = $HTTP_POST_VARS["NOTIFICATION"];
$email = $HTTP_POST_VARS["EMAIL"];
if (($notification != "ON" && $notification != "OFF") || $email == "")
{
html_header("STR Error");
print("<p>Please press your browsers back button and enter an "
."EMail address and choose whether to receive notification "
."messages.</p>\n");
html_footer();
exit();
}
setcookie("FROM", "$email", time() + 57600, $PHP_SELF, $SERVER_NAME);
$result = db_query("SELECT * FROM strcc WHERE str_id = $id AND email = '$email'");
html_header("STR #$id Notifications");
if ($notification == "ON")
{
if ($result && db_count($result) > 0)
print("<p>Your email address has already been added to the "
."notification list for STR #$id!</p>\n");
else
{
db_query("INSERT INTO strcc VALUES(0,$id,'$email')");
print("<p>Your email address has been added to the notification list "
."for STR #$id.</p>\n");
}
}
else if ($result && db_count($result) > 0)
{
db_query("DELETE FROM strcc WHERE str_id = $id AND email = '$email'");
print("<p>Your email address has been removed from the notification list "
."for STR #$id.</p>\n");
}
else
{
print("<p>Your email address is not on the notification list for "
."STR #$id!</p>\n");
}
if ($result)
db_free($result);
print("<p>[ <a href='$PHP_SELF?L$id$options'>Return to STR #$id</a> ]</p>\n");
html_footer();
break;
}
?>