View Issue Details

IDProjectCategoryView StatusLast Update
0011893mantisbthtmlpublic2014-12-08 00:34
ReporterklklAssigned Todhx 
PrioritynormalSeverityminorReproducibilityN/A
Status closedResolutionfixed 
Product Versiongit trunk 
Target Version1.3.0-beta.1Fixed in Version1.3.0-beta.1 
Summary0011893: Patch: XHTML validity, semantics and styleability improvements
Description

Patches that improve Mantis' markup. Should be applied to git master in that order:

1_html_validity.patch - fixes unclosed < a > elements in text/html and minor escaping issues

2_css_classnames.patch - adds classnames to many page elements. Changes table headers to use < th >. This affects existing stylesheets, so it's meant for 1.3.x only.

3_display_options.patch - adds new options:

show_new_window_links = OFF - disables display of [ ^ ] after links.

show_summary_as_link = ON - makes bug summaries on My View page link to view bug (IMHO it's usability improvement as clickable area becomes larger and more obvious).

TagsNo tags attached.

Relationships

related to 0011896 closeddhx Remove [^] "open in new window" suffix from links 
related to 0011898 closeddhx Hyperlink issue summaries on my_view_page 
related to 0015721 closedgrangeway Functionality to consider porting to master-2.0.x 

Activities

klkl

klkl

2010-05-06 10:01

reporter  

1_html_validity.patch (8,721 bytes)
From 47862f11c3df6dcba1df9096f9b8599a60a7b7e8 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 17:45:08 +0100
Subject: [PATCH 1/4] XHTML validity fixes

---
 bug_monitor_list_view_inc.php |    2 +-
 core/html_api.php             |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/bug_monitor_list_view_inc.php b/bug_monitor_list_view_inc.php
index 58188ef..a1bd1a8 100644
--- a/bug_monitor_list_view_inc.php
+++ b/bug_monitor_list_view_inc.php
@@ -95,7 +95,7 @@ if ( access_has_bug_level( config_get( 'show_monitor_list_threshold' ), $f_bug_i
 				echo ($i > 0) ? ', ' : '';
 				echo print_user( $t_users[$i] );
 				if ( $t_can_delete_others ) {
-					echo ' [<a class="small" href="' . helper_mantis_url( 'bug_monitor_delete.php' ) . '?bug_id=' . $f_bug_id . '&user_id=' . $t_users[$i] . form_security_param( 'bug_monitor_delete' ) . '">' . lang_get( 'delete_link' ) . '</a>]';
+					echo ' [<a class="small" href="' . helper_mantis_url( 'bug_monitor_delete.php' ) . '?bug_id=' . $f_bug_id . '&amp;user_id=' . $t_users[$i] . htmlspecialchars(form_security_param( 'bug_monitor_delete' )) . '">' . lang_get( 'delete_link' ) . '</a>]';
 				}
 	 		}
  		}
diff --git a/core/html_api.php b/core/html_api.php
index 4a15945..e793b2c 100644
--- a/core/html_api.php
+++ b/core/html_api.php
@@ -1704,7 +1704,7 @@ function html_buttons_view_bug_page( $p_bug_id ) {
 
 	# MONITOR/UNMONITOR button
 	if( !current_user_is_anonymous() ) {
-		echo '<td class=center">';
+		echo '<td class="center">';
 		if( user_is_monitoring_bug( auth_get_current_user_id(), $p_bug_id ) ) {
 			html_button_bug_unmonitor( $p_bug_id );
 		} else {
-- 
1.7.0.2


From a9f15b2186cb45566ac354ea217e2c9e88359527 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 16:30:05 +0100
Subject: [PATCH 2/4] Fixed text/html-incompatible <a/> syntax.

---
 admin/test_email.php          |    2 +-
 billing_inc.php               |    2 +-
 bug_monitor_list_view_inc.php |    2 +-
 bug_view_inc.php              |    4 ++--
 bugnote_stats_inc.php         |    2 +-
 bugnote_view_inc.php          |    2 +-
 history_inc.php               |    2 +-
 manage_proj_edit_page.php     |   10 +++-------
 manage_proj_page.php          |    3 +--
 9 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/admin/test_email.php b/admin/test_email.php
index 3fa15ff..40e6ef3 100644
--- a/admin/test_email.php
+++ b/admin/test_email.php
@@ -33,7 +33,7 @@ html_page_top();
 
 ?>
 
-<a name="email" id="email" />
+<a name="email" id="email"></a>
 <table width="100%" bgcolor="#222222" border="0" cellpadding="20" cellspacing="1">
 <tr>
 	<td bgcolor="#f4f4f4">
diff --git a/billing_inc.php b/billing_inc.php
index 8633304..b7132b2 100644
--- a/billing_inc.php
+++ b/billing_inc.php
@@ -51,7 +51,7 @@ require_api( 'string_api.php' );
 require_api( 'utility_api.php' );
 
 ?>
-<a name="bugnotestats" id="bugnotestats" /><br />
+<a name="bugnotestats" id="bugnotestats"></a><br />
 <?php
 collapse_open( 'bugnotestats' );
 
diff --git a/bug_monitor_list_view_inc.php b/bug_monitor_list_view_inc.php
index a1bd1a8..c0c2eb4 100644
--- a/bug_monitor_list_view_inc.php
+++ b/bug_monitor_list_view_inc.php
@@ -68,7 +68,7 @@ if ( access_has_bug_level( config_get( 'show_monitor_list_threshold' ), $f_bug_i
 	}
 	user_cache_array_rows( $t_users );
 
-	echo '<a name="monitors" id="monitors" /><br />';
+	echo '<a name="monitors" id="monitors"></a><br />';
 
 	collapse_open( 'monitoring' );
 ?>
diff --git a/bug_view_inc.php b/bug_view_inc.php
index 4cda1a9..da35b66 100644
--- a/bug_view_inc.php
+++ b/bug_view_inc.php
@@ -711,8 +711,8 @@ if ( $t_custom_fields_found ) {
 
 # Attachments
 if ( $tpl_show_attachments ) {
-	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category"><a name="attachments" id="attachments" />', lang_get( 'attached_files' ), '</td>';
+	echo '<tr id="attachments" ', helper_alternate_class(), '>';
+	echo '<td class="category">', lang_get( 'attached_files' ), '</td>';
 	echo '<td colspan="5">';
 	print_bug_attachments_list( $tpl_bug_id );
 	echo '</td></tr>';
diff --git a/bugnote_stats_inc.php b/bugnote_stats_inc.php
index 1304d2c..bdce944 100644
--- a/bugnote_stats_inc.php
+++ b/bugnote_stats_inc.php
@@ -53,7 +53,7 @@ if ( OFF == config_get('time_tracking_enabled') ) {
 }
 ?>
 
-<a name="bugnotestats" id="bugnotestats" /><br />
+<a name="bugnotestats" id="bugnotestats"></a><br />
 
 <?php
 collapse_open( 'bugnotestats' );
diff --git a/bugnote_view_inc.php b/bugnote_view_inc.php
index afc6f74..5900698 100644
--- a/bugnote_view_inc.php
+++ b/bugnote_view_inc.php
@@ -89,7 +89,7 @@ $num_notes = count( $t_bugnotes );
 ?>
 
 <?php # Bugnotes BEGIN ?>
-<a name="bugnotes" id="bugnotes" /><br />
+<a name="bugnotes" id="bugnotes"></a><br />
 
 <?php
 	collapse_open( 'bugnotes' );
diff --git a/history_inc.php b/history_inc.php
index eee86c3..48276d2 100644
--- a/history_inc.php
+++ b/history_inc.php
@@ -52,7 +52,7 @@ if ( !access_has_bug_level( $t_access_level_needed, $f_bug_id ) ) {
 }
 ?>
 
-<a name="history" id="history" /><br />
+<a name="history" id="history"></a><br />
 
 <?php
 	collapse_open( 'history' );
diff --git a/manage_proj_edit_page.php b/manage_proj_edit_page.php
index f2562d8..6cb3d54 100644
--- a/manage_proj_edit_page.php
+++ b/manage_proj_edit_page.php
@@ -344,8 +344,7 @@ if ( access_has_global_level ( config_get( 'delete_project_threshold' ) ) ) { ?>
 <br />
 
 <!-- PROJECT CATEGORIES -->
-<a name="categories" />
-<div align="center">
+<div align="center" id="categories">
 <table class="width75" cellspacing="1">
 
 <!-- Title -->
@@ -448,8 +447,7 @@ if ( access_has_global_level ( config_get( 'delete_project_threshold' ) ) ) { ?>
 ?>
 
 <!-- PROJECT VERSIONS -->
-<a name="versions" />
-<table class="width75" cellspacing="1">
+<table id="versions" class="width75" cellspacing="1">
 
 <!-- Title -->
 <tr>
@@ -564,8 +562,6 @@ if ( access_has_global_level ( config_get( 'delete_project_threshold' ) ) ) { ?>
 ?>
 
 <!-- PROJECT CUSTOM FIELD -->
-<a name="customfields" />
-
 <?php
 # You need either global permissions or project-specific permissions to link
 #  custom fields
@@ -573,7 +569,7 @@ if ( access_has_project_level( config_get( 'custom_field_link_threshold' ), $f_p
 	( count( custom_field_get_ids() ) > 0 ) ) {
 ?>
 	<br />
-	<div align="center">
+	<div id="customfields" align="center">
 	<table class="width75" cellspacing="1">
 	<tr>
 		<td class="form-title" colspan="3">
diff --git a/manage_proj_page.php b/manage_proj_page.php
index cf53dc7..bbc10c7 100644
--- a/manage_proj_page.php
+++ b/manage_proj_page.php
@@ -186,8 +186,7 @@ print_manage_menu( 'manage_proj_page.php' );
 <br/>
 
 <!-- GLOBAL CATEGORIES -->
-<a name="categories" />
-<div align="center">
+<div align="center" id="categories">
 <table class="width75" cellspacing="1">
 
 <!-- Title -->
-- 
1.7.0.2


From 0e887bd9657a820194626e564c6d9b314f8d852a Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Wed, 5 May 2010 12:32:30 +0100
Subject: [PATCH 3/4] Removed hack for Netscape 4

---
 core/html_api.php |    5 -----
 1 files changed, 0 insertions(+), 5 deletions(-)

diff --git a/core/html_api.php b/core/html_api.php
index e793b2c..74ffdae 100644
--- a/core/html_api.php
+++ b/core/html_api.php
@@ -360,11 +360,6 @@ function html_css() {
 		$t_css_rtl_url = config_get( 'css_rtl_include_file' );
 		echo "\t", '<link rel="stylesheet" type="text/css" href="', string_sanitize_url( helper_mantis_url( $t_css_rtl_url ), true ), '" />', "\n";
 	}
-
-	# fix for NS 4.x css
-	echo "\t", '<script type="text/javascript"><!--', "\n";
-	echo "\t\t", 'if(document.layers) {document.write("<style>td{padding:0px;}<\/style>")}', "\n";
-	echo "\t", '// --></script>', "\n";
 }
 
 /**
-- 
1.7.0.2


From 19cd3127b1b7c5f41d07fb4e4ce47833b0c05776 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Wed, 5 May 2010 12:45:25 +0100
Subject: [PATCH 4/4] Escaped SCRIPT_NAME on billing page.

---
 billing_inc.php |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/billing_inc.php b/billing_inc.php
index b7132b2..c18c291 100644
--- a/billing_inc.php
+++ b/billing_inc.php
@@ -89,7 +89,7 @@ if ( ON == config_get( 'time_tracking_with_billing' ) ) {
 }
 
 ?>
-<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
+<form method="post" action="<?php echo htmlspecialchars($_SERVER['SCRIPT_NAME']); ?>">
 <?php # CSRF protection not required here - form does not result in modifications ?>
 <input type="hidden" name="id" value="<?php echo isset( $f_bug_id ) ? $f_bug_id : 0 ?>" />
 <table border="0" class="width100" cellspacing="0">
-- 
1.7.0.2

1_html_validity.patch (8,721 bytes)
klkl

klkl

2010-05-06 10:01

reporter  

2_css_classnames.patch (155,492 bytes)
From 88f8faac759e5d2634aa125709ffaecd01480814 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 15:55:57 +0100
Subject: [PATCH 01/10] Added classnames to my_view_page

---
 core/html_api.php |    2 +-
 my_view_inc.php   |   39 +++++++++++++++++++++++----------------
 2 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/core/html_api.php b/core/html_api.php
index 74ffdae..6f5afbe 100644
--- a/core/html_api.php
+++ b/core/html_api.php
@@ -1232,7 +1232,7 @@ function print_summary_menu( $p_page = '' ) {
  */
 function html_status_legend() {
 	echo '<br />';
-	echo '<table class="width100" cellspacing="1">';
+	echo '<table class="status-legend width100" cellspacing="1">';
 	echo '<tr>';
 
 	# Don't show the legend if only one status is selected by the current filter
diff --git a/my_view_inc.php b/my_view_inc.php
index 9fc36cf..fd888ba 100644
--- a/my_view_inc.php
+++ b/my_view_inc.php
@@ -412,10 +412,11 @@ $box_title = lang_get( 'my_view_title_' . $t_box_title );
 # -- ====================== BUG LIST ========================= --
 ?>
 
-<table class="width100" cellspacing="1">
+<table class="width100 my-buglist" cellspacing="1">
 <?php
 # -- Navigation header row --?>
-<tr>
+<thead>
+    <tr class="my-buglist-nav">
 <?php
 # -- Viewing range info --?>
 	<td class="form-title" colspan="2">
@@ -436,7 +437,7 @@ echo "($v_start - $v_end / $t_bug_count)";
 ?>
 	</td>
 </tr>
-
+</thead><tbody>
 <?php
 # -- Loop over bug rows and create $v_* variables --
 	$t_count = count( $rows );
@@ -457,12 +458,18 @@ echo "($v_start - $v_end / $t_bug_count)";
 
 	# grab the project name
 	$project_name = project_get_field( $t_bug->project_id, 'name' );
+
+	if ( VS_PRIVATE == $t_bug->view_state ) {
+	    $t_bug_class = 'my-buglist-private';
+    } else {
+        $t_bug_class = '';
+    }
 	?>
 
-<tr bgcolor="<?php echo $status_color?>">
+<tr class="my-buglist-bug <?php echo $t_bug_class?>" bgcolor="<?php echo $status_color?>">
 	<?php
 	# -- Bug ID and details link + Pencil shortcut --?>
-	<td class="center" valign="top" width ="0" nowrap="nowrap">
+	<td class="center my-buglist-id" valign="top" width ="0" nowrap="nowrap">
 		<span class="small">
 		<?php
 			print_bug_link( $t_bug->id );
@@ -470,7 +477,7 @@ echo "($v_start - $v_end / $t_bug_count)";
 	echo '<br />';
 
 	if( !bug_is_readonly( $t_bug->id ) && access_has_bug_level( $t_update_bug_threshold, $t_bug->id ) ) {
-		echo '<a href="' . string_get_bug_update_url( $t_bug->id ) . '"><img border="0" src="' . $t_icon_path . 'update.png' . '" alt="' . lang_get( 'update_bug_button' ) . '" /></a>';
+		echo '<a class="edit" href="' . string_get_bug_update_url( $t_bug->id ) . '"><img border="0" src="' . $t_icon_path . 'update.png' . '" alt="' . lang_get( 'update_bug_button' ) . '" /></a>';
 	}
 
 	if( ON == config_get( 'show_priority_text' ) ) {
@@ -480,7 +487,7 @@ echo "($v_start - $v_end / $t_bug_count)";
 	}
 
 	if( 0 < $t_attachment_count ) {
-		echo '<a href="' . string_get_bug_view_url( $t_bug->id ) . '#attachments">';
+		echo '<a class="attachments" href="' . string_get_bug_view_url( $t_bug->id ) . '#attachments">';
 		echo '<img border="0" src="' . $t_icon_path . 'attachment.png' . '"';
 		echo ' alt="' . lang_get( 'attachment_alt' ) . '"';
 		echo ' title="' . $t_attachment_count . ' ' . lang_get( 'attachments' ) . '"';
@@ -496,26 +503,25 @@ echo "($v_start - $v_end / $t_bug_count)";
 
 	<?php
 	# -- Summary --?>
-	<td class="left" valign="top" width="100%">
-		<span class="small">
+	<td class="left my-buglist-description" valign="top" width="100%">
 		<?php
 		 	if( ON == config_get( 'show_bug_project_links' ) && helper_get_current_project() != $t_bug->project_id ) {
-				echo '[', string_display_line( project_get_name( $t_bug->project_id ) ), '] ';
+				echo '<span class="small project">[', string_display_line( project_get_name( $t_bug->project_id ) ), '] </span>';
 			}
-			echo $t_summary;
+			echo '<span class="small summary">', $t_summary, '<br /></span>';
 	?>
-		<br />
 		<?php
 	# type project name if viewing 'all projects' or bug is in subproject
-	echo string_display_line( category_full_name( $t_bug->category_id, true, $t_bug->project_id ) );
+	echo '<span class="small category">', string_display_line( category_full_name( $t_bug->category_id, true, $t_bug->project_id ) ), '</span>';
 
+    echo '<span class="small last-modified"> - ';
 	if( $t_bug->last_updated > strtotime( '-' . $t_filter[FILTER_PROPERTY_HIGHLIGHT_CHANGED] . ' hours' ) ) {
-		echo ' - <b>' . $t_last_updated . '</b>';
+		echo '<b>' . $t_last_updated . '</b>';
 	} else {
-		echo ' - ' . $t_last_updated;
+		echo $t_last_updated;
 	}
+	echo '</span>';
 	?>
-		</span>
 	</td>
 </tr>
 <?php
@@ -524,6 +530,7 @@ echo "($v_start - $v_end / $t_bug_count)";
 
 # -- ====================== end of BUG LIST ========================= --
 ?>
+</tbody>
 </table>
 <?php
 // Free the memory allocated for the rows in this box since it is not longer needed.
-- 
1.7.0.2


From 535fbf3a43e670edcdb34eafc8fddbbcaaea78b3 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 16:24:58 +0100
Subject: [PATCH 02/10] Wrapped footer in div with appropriate class

---
 core/html_api.php |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/core/html_api.php b/core/html_api.php
index 6f5afbe..dc3f65c 100644
--- a/core/html_api.php
+++ b/core/html_api.php
@@ -599,8 +599,8 @@ function html_footer( $p_file = null ) {
 		user_update_last_visit( $t_user_id );
 	}
 
-	echo "\t", '<br />', "\n";
-	echo "\t", '<hr size="1" />', "\n";
+	echo "\t<div class=\"footer\"><br />\n";
+	echo "\t<hr size=\"1\" />\n";
 
 	echo '<table border="0" width="100%" cellspacing="0" cellpadding="0"><tr valign="top"><td>';
 	if( ON == config_get( 'show_version' ) ) {
@@ -668,7 +668,7 @@ function html_footer( $p_file = null ) {
 
 	echo '</td><td>', "\n\t", '<div align="right">';
 	echo '<a href="http://www.mantisbt.org" title="Free Web Based Bug Tracker"><img src="' . helper_mantis_url( 'images/mantis_logo_button.gif' ) . '" width="88" height="35" alt="Powered by Mantis Bugtracker" border="0" /></a>';
-	echo '</div>', "\n", '</td></tr></table>', "\n";
+	echo "</div>\n</td></tr></table></div>\n";
 }
 
 /**
-- 
1.7.0.2


From baa747ac40319715fa8118418836d3fb6e019bc8 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 17:00:21 +0100
Subject: [PATCH 03/10] Added CSS class names to bracketed links

---
 bug_view_inc.php   |   14 +++++++-------
 core/print_api.php |    6 +++++-
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/bug_view_inc.php b/bug_view_inc.php
index da35b66..887fad9 100644
--- a/bug_view_inc.php
+++ b/bug_view_inc.php
@@ -247,15 +247,15 @@ echo $tpl_form_title;
 echo '&nbsp;<span class="small">';
 
 # Jump to Bugnotes
-print_bracket_link( "#bugnotes", lang_get( 'jump_to_bugnotes' ) );
+print_bracket_link( "#bugnotes", lang_get( 'jump_to_bugnotes' ), false, 'jump-to-bugnotes' );
 
 # Send Bug Reminder
 if ( $tpl_show_reminder_link ) {
-	print_bracket_link( $tpl_bug_reminder_link, lang_get( 'bug_reminder' ) );
+	print_bracket_link( $tpl_bug_reminder_link, lang_get( 'bug_reminder' ), false, 'bug-reminder' );
 }
 
 if ( !is_blank( $tpl_wiki_link ) ) {
-	print_bracket_link( $tpl_wiki_link, lang_get( 'wiki' ) );
+	print_bracket_link( $tpl_wiki_link, lang_get( 'wiki' ), false, 'wiki' );
 }
 
 foreach ( $tpl_links as $t_plugin => $t_hooks ) {
@@ -284,11 +284,11 @@ if ( $t_bugslist ) {
 	$t_index = array_search( $f_bug_id, $t_bugslist );
 	if ( false !== $t_index ) {
 		if ( isset( $t_bugslist[$t_index-1] ) ) {
-			print_bracket_link( 'bug_view_page.php?bug_id='.$t_bugslist[$t_index-1], '&lt;&lt;' );
+			print_bracket_link( 'bug_view_page.php?bug_id='.$t_bugslist[$t_index-1], '&lt;&lt;', false, 'previous-bug' );
 		}
 
 		if ( isset( $t_bugslist[$t_index+1] ) ) {
-			print_bracket_link( 'bug_view_page.php?bug_id='.$t_bugslist[$t_index+1], '&gt;&gt;' );
+			print_bracket_link( 'bug_view_page.php?bug_id='.$t_bugslist[$t_index+1], '&gt;&gt;', false, 'next-bug' );
 		}
 	}
 	echo '</span></td>';
@@ -301,13 +301,13 @@ echo '<td class="right" colspan="2">';
 if ( !is_blank( $tpl_history_link ) ) {
 	# History
 	echo '<span class="small">';
-	print_bracket_link( $tpl_history_link, lang_get( 'bug_history' ) );
+	print_bracket_link( $tpl_history_link, lang_get( 'bug_history' ), false , 'bug-history' );
 	echo '</span>';
 }
 
 # Print Bug
 echo '<span class="small">';
-print_bracket_link( $tpl_print_link, lang_get( 'print' ) );
+print_bracket_link( $tpl_print_link, lang_get( 'print' ), false, 'print' );
 echo '</span>';
 echo '</td>';
 echo '</tr>';
diff --git a/core/print_api.php b/core/print_api.php
index 19e02fe..d458188 100644
--- a/core/print_api.php
+++ b/core/print_api.php
@@ -1335,7 +1335,11 @@ function print_bracket_link_prepared( $p_link ) {
 # if the $p_link is blank then the text is printed but no link is created
 # if $p_new_window is true, link will open in a new window, default false.
 function print_bracket_link( $p_link, $p_url_text, $p_new_window = false, $p_class = '' ) {
-	echo '<span class="bracket-link">[&nbsp;';
+	echo '<span class="bracket-link';
+	if ($p_class !== '') {
+	    echo ' bracket-link-',$p_class; # prefix on a container allows styling of whole link, including brackets
+    }
+	echo '">[&nbsp;';
 	print_link( $p_link, $p_url_text, $p_new_window, $p_class );
 	echo '&nbsp;]</span> ';
 }
-- 
1.7.0.2


From c3c5629346a644396344f19689d22d2f3bf1019e Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 17:01:19 +0100
Subject: [PATCH 04/10] Added CSS class names to misc. layout elements

---
 bug_view_inc.php   |   13 ++++++++-----
 core/print_api.php |    4 ++--
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/bug_view_inc.php b/bug_view_inc.php
index 887fad9..5414fb5 100644
--- a/bug_view_inc.php
+++ b/bug_view_inc.php
@@ -237,7 +237,7 @@ $tpl_links = event_signal( 'EVENT_MENU_ISSUE', $f_bug_id );
 
 echo '<br />';
 echo '<table class="width100" cellspacing="1">';
-echo '<tr>';
+echo '<thead><tr class="bug-nav">';
 
 # Form Title
 echo '<td class="form-title" colspan="', $t_bugslist ? '3' : '4', '">';
@@ -278,7 +278,7 @@ echo '</span></td>';
 
 # prev/next links
 if ( $t_bugslist ) {
-	echo '<td class="center"><span class="small">';
+	echo '<td class="center prev-next-links"><span class="small">';
 
 	$t_bugslist = explode( ',', $t_bugslist );
 	$t_index = array_search( $f_bug_id, $t_bugslist );
@@ -296,7 +296,7 @@ if ( $t_bugslist ) {
 
 
 # Links
-echo '<td class="right" colspan="2">';
+echo '<td class="right alternate-views-links" colspan="2">';
 
 if ( !is_blank( $tpl_history_link ) ) {
 	# History
@@ -313,13 +313,16 @@ echo '</td>';
 echo '</tr>';
 
 if ( $tpl_top_buttons_enabled ) {
-	echo '<tr align="center">';
+	echo '<tr align="center" class="top-buttons">';
 	echo '<td align="center" colspan="6">';
 	html_buttons_view_bug_page( $tpl_bug_id );
 	echo '</td>';
 	echo '</tr>';
 }
 
+echo '</thead>';
+echo '<tbody>';
+
 if ( $tpl_show_id || $tpl_show_project || $tpl_show_category || $tpl_show_view_state || $tpl_show_date_submitted || $tpl_show_last_updated ) {
 	# Labels
 	echo '<tr>';
@@ -724,7 +727,7 @@ if ( $tpl_bottom_buttons_enabled ) {
 	echo '</td></tr>';
 }
 
-echo '</table>';
+echo '</tbody></table>';
 
 # User list sponsoring the bug
 if ( $tpl_show_sponsorships_box ) {
diff --git a/core/print_api.php b/core/print_api.php
index d458188..56d2da2 100644
--- a/core/print_api.php
+++ b/core/print_api.php
@@ -1596,7 +1596,7 @@ function print_file_icon( $p_filename ) {
 # Prints an RSS image that is hyperlinked to an RSS feed.
 function print_rss( $p_feed_url, $p_title = '' ) {
 	$t_path = config_get( 'path' );
-	echo '<a href="', htmlspecialchars( $p_feed_url ), '" title="', $p_title, '"><img src="', $t_path, '/images/', 'rss.png" width="16" height="16" border="0" alt="', $p_title, '" /></a>';
+	echo '<a class="rss" rel="alternate" href="', htmlspecialchars( $p_feed_url ), '" title="', $p_title, '"><img src="', $t_path, '/images/', 'rss.png" width="16" height="16" border="0" alt="', $p_title, '" /></a>';
 }
 
 # Prints the recently visited issues.
@@ -1611,7 +1611,7 @@ function print_recently_visited() {
 		return;
 	}
 
-	echo '<div align="right"><small>' . lang_get( 'recently_visited' ) . ': ';
+	echo '<div align="right" class="recently-visited"><small>' . lang_get( 'recently_visited' ) . ': ';
 	$t_first = true;
 
 	foreach( $t_ids as $t_id ) {
-- 
1.7.0.2


From 1830de42de4975df83347f72186484ca3c48252c Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 17:07:39 +0100
Subject: [PATCH 05/10] Moved bottom buttons to <tfoot> element.

---
 bug_view_inc.php |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/bug_view_inc.php b/bug_view_inc.php
index 5414fb5..c39184b 100644
--- a/bug_view_inc.php
+++ b/bug_view_inc.php
@@ -321,6 +321,15 @@ if ( $tpl_top_buttons_enabled ) {
 }
 
 echo '</thead>';
+
+if ( $tpl_bottom_buttons_enabled ) {
+	echo '<tfoot>';
+	echo '<tr align="center" class="bottom-buttons"><td align="center" colspan="6">';
+	html_buttons_view_bug_page( $tpl_bug_id );
+	echo '</td></tr>';
+	echo '</tfoot>';
+}
+
 echo '<tbody>';
 
 if ( $tpl_show_id || $tpl_show_project || $tpl_show_category || $tpl_show_view_state || $tpl_show_date_submitted || $tpl_show_last_updated ) {
@@ -721,12 +730,6 @@ if ( $tpl_show_attachments ) {
 	echo '</td></tr>';
 }
 
-if ( $tpl_bottom_buttons_enabled ) {
-	echo '<tr align="center"><td align="center" colspan="6">';
-	html_buttons_view_bug_page( $tpl_bug_id );
-	echo '</td></tr>';
-}
-
 echo '</tbody></table>';
 
 # User list sponsoring the bug
-- 
1.7.0.2


From 7178efa472807b66031ecc7a994973383dba0725 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 17:08:07 +0100
Subject: [PATCH 06/10] Added specific CSS class names to all bug fields.

---
 bug_view_inc.php |  139 ++++++++++++++++++++++++++----------------------------
 1 files changed, 67 insertions(+), 72 deletions(-)

diff --git a/bug_view_inc.php b/bug_view_inc.php
index c39184b..cc1825f 100644
--- a/bug_view_inc.php
+++ b/bug_view_inc.php
@@ -334,34 +334,34 @@ echo '<tbody>';
 
 if ( $tpl_show_id || $tpl_show_project || $tpl_show_category || $tpl_show_view_state || $tpl_show_date_submitted || $tpl_show_last_updated ) {
 	# Labels
-	echo '<tr>';
-	echo '<td class="category" width="15%">', $tpl_show_id ? lang_get( 'id' ) : '', '</td>';
-	echo '<td class="category" width="20%">', $tpl_show_project ? lang_get( 'email_project' ) : '', '</td>';
-	echo '<td class="category" width="15%">', $tpl_show_category ? lang_get( 'category' ) : '', '</td>';
-	echo '<td class="category" width="15%">', $tpl_show_view_state ? lang_get( 'view_status' ) : '', '</td>';
-	echo '<td class="category" width="15%">', $tpl_show_date_submitted ? lang_get( 'date_submitted' ) : '', '</td>';
-	echo '<td class="category" width="20%">', $tpl_show_last_updated ? lang_get( 'last_update' ) : '','</td>';
+	echo '<tr class="bug-header">';
+	echo '<td class="bug-id category" width="15%">', $tpl_show_id ? lang_get( 'id' ) : '', '</td>';
+	echo '<td class="bug-project category" width="20%">', $tpl_show_project ? lang_get( 'email_project' ) : '', '</td>';
+	echo '<td class="bug-category category" width="15%">', $tpl_show_category ? lang_get( 'category' ) : '', '</td>';
+	echo '<td class="bug-view-status category" width="15%">', $tpl_show_view_state ? lang_get( 'view_status' ) : '', '</td>';
+	echo '<td class="bug-date-submitted category" width="15%">', $tpl_show_date_submitted ? lang_get( 'date_submitted' ) : '', '</td>';
+	echo '<td class="bug-last-modified category" width="20%">', $tpl_show_last_updated ? lang_get( 'last_update' ) : '','</td>';
 	echo '</tr>';
 
-	echo '<tr ', helper_alternate_class(), '>';
+	echo '<tr ', helper_alternate_class(null, 'row-1 bug-header-data', 'row-2 bug-header-data'), '>';
 
 	# Bug ID
-	echo '<td>', $tpl_formatted_bug_id, '</td>';
+	echo '<td class="bug-id">', $tpl_formatted_bug_id, '</td>';
 
 	# Project
-	echo '<td>', $tpl_project_name, '</td>';
+	echo '<td class="bug-project">', $tpl_project_name, '</td>';
 
 	# Category
-	echo '<td>', $tpl_category, '</td>';
+	echo '<td class="bug-category">', $tpl_category, '</td>';
 
 	# View Status
-	echo '<td>', $tpl_bug_view_state_enum, '</td>';
+	echo '<td class="bug-view-status">', $tpl_bug_view_state_enum, '</td>';
 
 	# Date Submitted
-	echo '<td>', $tpl_date_submitted, '</td>';
+	echo '<td class="bug-date-submitted">', $tpl_date_submitted, '</td>';
 
 	# Date Updated
-	echo '<td>', $tpl_last_updated, '</td>';
+	echo '<td class="bug-last-modified">', $tpl_last_updated, '</td>';
 
 	echo '</tr>';
 
@@ -379,15 +379,10 @@ if ( $tpl_show_reporter ) {
 	$t_spacer = 4;
 
 	# Reporter
-	if ( $tpl_show_reporter ) {
-		echo '<td class="category">', lang_get( 'reporter' ), '</td>';
-		echo '<td>';
-		print_user_with_subject( $tpl_bug->reporter_id, $tpl_bug_id );
-		echo '</td>';
-	} else {
-		$t_spacer += 2;
-	}
-
+	echo '<td class="bug-reporter category">', lang_get( 'reporter' ), '</td>';
+	echo '<td class="bug-reporter">';
+	print_user_with_subject( $tpl_bug->reporter_id, $tpl_bug_id );
+	echo '</td>';
 	echo '<td colspan="', $t_spacer, '">&nbsp;</td>';
 
 	echo '</tr>';
@@ -403,19 +398,19 @@ if ( $tpl_show_handler || $tpl_show_due_date ) {
 	$t_spacer = 2;
 
 	# Handler
-	echo '<td class="category">', lang_get( 'assigned_to' ), '</td>';
-	echo '<td>';
+	echo '<td class="bug-assigned-to category">', lang_get( 'assigned_to' ), '</td>';
+	echo '<td class="bug-assigned-to">';
 	print_user_with_subject( $tpl_bug->handler_id, $tpl_bug_id );
 	echo '</td>';
 
 	# Due Date
 	if ( $tpl_show_due_date ) {
-		echo '<td class="category">', lang_get( 'due_date' ), '</td>';
+		echo '<td class="bug-due-date category">', lang_get( 'due_date' ), '</td>';
 
 		if ( $tpl_bug_overdue ) {
-			echo '<td class="overdue">', $tpl_bug_due_date, '</td>';
+			echo '<td class="bug-due-date overdue">', $tpl_bug_due_date, '</td>';
 		} else {
-			echo '<td>', $tpl_bug_due_date, '</td>';
+			echo '<td class="bug-due-date">', $tpl_bug_due_date, '</td>';
 		}
 	} else {
 		$t_spacer += 2;
@@ -436,24 +431,24 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 
 	# Priority
 	if ( $tpl_show_priority ) {
-		echo '<td class="category">', lang_get( 'priority' ), '</td>';
-		echo '<td>', $tpl_priority, '</td>';
+		echo '<td class="bug-priority category">', lang_get( 'priority' ), '</td>';
+		echo '<td class="bug-priority">', $tpl_priority, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# Severity
 	if ( $tpl_show_severity ) {
-		echo '<td class="category">', lang_get( 'severity' ), '</td>';
-		echo '<td>', $tpl_severity, '</td>';
+		echo '<td class="bug-severity category">', lang_get( 'severity' ), '</td>';
+		echo '<td class="bug-severity">', $tpl_severity, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# Reproducibility
 	if ( $tpl_show_reproducibility ) {
-		echo '<td class="category">', lang_get( 'reproducibility' ), '</td>';
-		echo '<td>', $tpl_reproducibility, '</td>';
+		echo '<td class="bug-reproducibility category">', lang_get( 'reproducibility' ), '</td>';
+		echo '<td class="bug-reproducibility">', $tpl_reproducibility, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
@@ -477,16 +472,16 @@ if ( $tpl_show_status || $tpl_show_resolution ) {
 
 	# Status
 	if ( $tpl_show_status ) {
-		echo '<td class="category">', lang_get( 'status' ), '</td>';
-		echo '<td bgcolor="', get_status_color( $tpl_bug->status ), '">', $tpl_status, '</td>';
+		echo '<td class="bug-status category">', lang_get( 'status' ), '</td>';
+		echo '<td class="bug-status" bgcolor="', get_status_color( $tpl_bug->status ), '">', $tpl_status, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# Resolution
 	if ( $tpl_show_resolution ) {
-		echo '<td class="category">', lang_get( 'resolution' ), '</td>';
-		echo '<td>', $tpl_resolution, '</td>';
+		echo '<td class="bug-resolution category">', lang_get( 'resolution' ), '</td>';
+		echo '<td class="bug-resolution">', $tpl_resolution, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
@@ -510,16 +505,16 @@ if ( $tpl_show_projection || $tpl_show_eta ) {
 
 	if ( $tpl_show_projection ) {
 		# Projection
-		echo '<td class="category">', lang_get( 'projection' ), '</td>';
-		echo '<td>', $tpl_projection, '</td>';
+		echo '<td class="bug-projection category">', lang_get( 'projection' ), '</td>';
+		echo '<td class="bug-projection">', $tpl_projection, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# ETA
 	if ( $tpl_show_eta ) {
-		echo '<td class="category">', lang_get( 'eta' ), '</td>';
-		echo '<td>', $tpl_eta, '</td>';
+		echo '<td class="bug-eta category">', lang_get( 'eta' ), '</td>';
+		echo '<td class="bug-eta">', $tpl_eta, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
@@ -539,24 +534,24 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 
 	# Platform
 	if ( $tpl_show_platform ) {
-		echo '<td class="category">', lang_get( 'platform' ), '</td>';
-		echo '<td>', $tpl_platform, '</td>';
+		echo '<td class="bug-platform category">', lang_get( 'platform' ), '</td>';
+		echo '<td class="bug-platform">', $tpl_platform, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# Operating System
 	if ( $tpl_show_os ) {
-		echo '<td class="category">', lang_get( 'os' ), '</td>';
-		echo '<td>', $tpl_os, '</td>';
+		echo '<td class="bug-os category">', lang_get( 'os' ), '</td>';
+		echo '<td class="bug-os">', $tpl_os, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# OS Version
 	if ( $tpl_show_os_version ) {
-		echo '<td class="category">', lang_get( 'os_version' ), '</td>';
-		echo '<td>', $tpl_os_version, '</td>';
+		echo '<td class="bug-os-version category">', lang_get( 'os_version' ), '</td>';
+		echo '<td class="bug-os-version">', $tpl_os_version, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
@@ -579,16 +574,16 @@ if ( $tpl_show_product_version || $tpl_show_product_build ) {
 
 	# Product Version
 	if ( $tpl_show_product_version ) {
-		echo '<td class="category">', lang_get( 'product_version' ), '</td>';
-		echo '<td>', $tpl_product_version_string, '</td>';
+		echo '<td class="bug-product-version category">', lang_get( 'product_version' ), '</td>';
+		echo '<td class="bug-product-version">', $tpl_product_version_string, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# Product Build
 	if ( $tpl_show_product_build ) {
-		echo '<td class="category">', lang_get( 'product_build' ), '</td>';
-		echo '<td>', $tpl_product_build, '</td>';
+		echo '<td class="bug-product-build category">', lang_get( 'product_build' ), '</td>';
+		echo '<td class="bug-product-build">', $tpl_product_build, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
@@ -611,16 +606,16 @@ if ( $tpl_show_target_version || $tpl_show_fixed_in_version ) {
 	# target version
 	if ( $tpl_show_target_version ) {
 		# Target Version
-		echo '<td class="category">', lang_get( 'target_version' ), '</td>';
-		echo '<td>', $tpl_target_version_string, '</td>';
+		echo '<td class="bug-target-version category">', lang_get( 'target_version' ), '</td>';
+		echo '<td class="bug-target-version">', $tpl_target_version_string, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	# fixed in version
 	if ( $tpl_show_fixed_in_version ) {
-		echo '<td class="category">', lang_get( 'fixed_in_version' ), '</td>';
-		echo '<td>', $tpl_fixed_in_version_string, '</td>';
+		echo '<td class="bug-fixed-in-version category">', lang_get( 'fixed_in_version' ), '</td>';
+		echo '<td class="bug-fixed-in-version">', $tpl_fixed_in_version_string, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
@@ -647,40 +642,40 @@ echo '<tr class="spacer"><td colspan="6"></td></tr>';
 # Summary
 if ( $tpl_show_summary ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'summary' ), '</td>';
-	echo '<td colspan="5">', $tpl_summary, '</td>';
+	echo '<td class="bug-summary category">', lang_get( 'summary' ), '</td>';
+	echo '<td class="bug-summary" colspan="5">', $tpl_summary, '</td>';
 	echo '</tr>';
 }
 
 # Description
 if ( $tpl_show_description ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'description' ), '</td>';
-	echo '<td colspan="5">', $tpl_description, '</td>';
+	echo '<td class="bug-description category">', lang_get( 'description' ), '</td>';
+	echo '<td class="bug-description" colspan="5">', $tpl_description, '</td>';
 	echo '</tr>';
 }
 
 # Steps to Reproduce
 if ( $tpl_show_steps_to_reproduce ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'steps_to_reproduce' ), '</td>';
-	echo '<td colspan="5">', $tpl_steps_to_reproduce, '</td>';
+	echo '<td class="bug-steps-to-reproduce category">', lang_get( 'steps_to_reproduce' ), '</td>';
+	echo '<td class="bug-steps-to-reproduce" colspan="5">', $tpl_steps_to_reproduce, '</td>';
 	echo '</tr>';
 }
 
 # Additional Information
 if ( $tpl_show_additional_information ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'additional_information' ), '</td>';
-	echo '<td colspan="5">', $tpl_additional_information, '</td>';
+	echo '<td class="bug-additional-information category">', lang_get( 'additional_information' ), '</td>';
+	echo '<td class="bug-additional-information" colspan="5">', $tpl_additional_information, '</td>';
 	echo '</tr>';
 }
 
 # Tagging
 if ( $tpl_show_tags ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'tags' ), '</td>';
-	echo '<td colspan="5">';
+	echo '<td class="bug-tags category">', lang_get( 'tags' ), '</td>';
+	echo '<td class="bug-tags" colspan="5">';
 	tag_display_attached( $tpl_bug_id );
 	echo '</td></tr>';
 }
@@ -688,8 +683,8 @@ if ( $tpl_show_tags ) {
 # Attachments Form
 if ( $tpl_can_attach_tag ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'tag_attach_long' ), '</td>';
-	echo '<td colspan="5">';
+	echo '<td class="bug-attach-tags category">', lang_get( 'tag_attach_long' ), '</td>';
+	echo '<td class="bug-attach-tags" colspan="5">';
 	print_tag_attach_form( $tpl_bug_id );
 	echo '</td></tr>';
 }
@@ -710,8 +705,8 @@ foreach( $t_related_custom_field_ids as $t_id ) {
 	$t_def = custom_field_get_definition( $t_id );
 
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', string_display( lang_get_defaulted( $t_def['name'] ) ), '</td>';
-	echo '<td colspan="5">';
+	echo '<td class="bug-custom-field category">', string_display( lang_get_defaulted( $t_def['name'] ) ), '</td>';
+	echo '<td class="bug-custom-field" colspan="5">';
 	print_custom_field_value( $t_def, $t_id, $f_bug_id );
 	echo '</td></tr>';
 }
@@ -724,8 +719,8 @@ if ( $t_custom_fields_found ) {
 # Attachments
 if ( $tpl_show_attachments ) {
 	echo '<tr id="attachments" ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'attached_files' ), '</td>';
-	echo '<td colspan="5">';
+	echo '<td class="bug-attachments category">', lang_get( 'attached_files' ), '</td>';
+	echo '<td class="bug-attachments" colspan="5">';
 	print_bug_attachments_list( $tpl_bug_id );
 	echo '</td></tr>';
 }
-- 
1.7.0.2


From 31e687b2732b9506c9422ef0ece2d02e79f620fa Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 17:19:55 +0100
Subject: [PATCH 07/10] Added CSS class names to bracketed new-window links.

---
 core/print_api.php  |    8 ++------
 core/string_api.php |    2 +-
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/core/print_api.php b/core/print_api.php
index 56d2da2..7a7486a 100644
--- a/core/print_api.php
+++ b/core/print_api.php
@@ -1351,11 +1351,7 @@ function print_link( $p_link, $p_url_text, $p_new_window = false, $p_class = ''
 	} else {
 		$t_link = htmlspecialchars( $p_link );
 		if( $p_new_window === true ) {
-			if( $p_class !== '') {
-				echo "<a class=\"$p_class\" href=\"$t_link\" target=\"_blank\">$p_url_text</a>";
-			} else {
-				echo "<a href=\"$t_link\" target=\"_blank\">$p_url_text</a>";
-			}
+			echo "<a class=\"new-window $p_class\" href=\"$t_link\" target=\"_blank\">$p_url_text</a>";
 		} else {
 			if( $p_class !== '') {
 				echo "<a class=\"$p_class\" href=\"$t_link\">$p_url_text</a>";
@@ -1681,7 +1677,7 @@ function print_bug_attachments_list( $p_bug_id ) {
 			$t_href_start = "<a href=\"file_download.php?file_id={$t_attachment['id']}&amp;type=bug\">";
 			$t_href_end = '</a>';
 
-			$t_href_clicket = " [<a href=\"file_download.php?file_id={$t_attachment['id']}&amp;type=bug\" target=\"_blank\">^</a>]";
+			$t_href_clicket = " <span class=\"bracket-link bracket-link-new-window\">[<a class=\"new-window\" href=\"file_download.php?file_id={$t_attachment['id']}&amp;type=bug\" target=\"_blank\">^</a>]</span>";
 		} else {
 			$t_href_start = '';
 			$t_href_end = '';
diff --git a/core/string_api.php b/core/string_api.php
index 1eb8ec6..8f1367f 100644
--- a/core/string_api.php
+++ b/core/string_api.php
@@ -473,7 +473,7 @@ function string_insert_hrefs( $p_string ) {
 		$s_url_regex = "/(([[:alpha:]][-+.[:alnum:]]*):\/\/(${t_url_part1}*?${t_url_part2}+))/sue";
 	}
 
-	$p_string = preg_replace( $s_url_regex, "'<a href=\"'.rtrim('\\1','.').'\">\\1</a> [<a href=\"'.rtrim('\\1','.').'\" target=\"_blank\">^</a>]'", $p_string );
+	$p_string = preg_replace( $s_url_regex, "'<a href=\"'.rtrim('\\1','.').'\">\\1</a> <span class=\"bracket-link bracket-link-new-window\">[<a class=\"new-window\" href=\"'.rtrim('\\1','.').'\" target=\"_blank\">^</a>]</span>'", $p_string );
 	if( $t_change_quotes ) {
 		ini_set( 'magic_quotes_sybase', true );
 	}
-- 
1.7.0.2


From 0d12fbcd47648c19ad506dffc084ba770da775ab Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 17:27:13 +0100
Subject: [PATCH 08/10] Added CSS class name to My View bug count

---
 my_view_inc.php |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/my_view_inc.php b/my_view_inc.php
index fd888ba..21284a5 100644
--- a/my_view_inc.php
+++ b/my_view_inc.php
@@ -433,7 +433,7 @@ else {
 	$v_start = 0;
 	$v_end = 0;
 }
-echo "($v_start - $v_end / $t_bug_count)";
+echo "<span class=\"my-buglist-count\">($v_start - $v_end / $t_bug_count)</span>";
 ?>
 	</td>
 </tr>
-- 
1.7.0.2


From c959861b9bccc6f61f77d39bda633a9c68dfe250 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Wed, 5 May 2010 14:37:06 +0100
Subject: [PATCH 09/10] Replaced all <td class="category"> with <th class="category">

---
 account_page.php                              |   44 +++++++-------
 account_prefs_inc.php                         |   64 +++++++++---------
 account_prof_edit_page.php                    |   16 +++---
 account_prof_menu_page.php                    |   20 +++---
 admin/index.php                               |    2 +-
 bug_actiongroup_add_note_inc.php              |    6 +-
 bug_actiongroup_attach_tags_inc.php           |    2 +-
 bug_actiongroup_page.php                      |   20 +++---
 bug_actiongroup_update_product_build_inc.php  |    2 +-
 bug_actiongroup_update_severity_inc.php       |    4 +-
 bug_change_status_page.php                    |   44 +++++++-------
 bug_monitor_list_view_inc.php                 |    4 +-
 bug_reminder_page.php                         |    8 +-
 bug_report_page.php                           |   84 ++++++++++++------------
 bug_revision_view_page.php                    |    6 +-
 bug_sponsorship_list_view_inc.php             |    4 +-
 bug_update_advanced_page.php                  |   52 ++++++++--------
 bug_view_inc.php                              |   64 +++++++++---------
 bugnote_add_inc.php                           |   12 ++--
 core/authentication_api.php                   |    4 +-
 core/bug_group_action_api.php                 |    4 +-
 core/relationship_api.php                     |    2 +-
 css/default.css                               |    8 +-
 login_page.php                                |   16 +++---
 login_select_proj_page.php                    |    8 +-
 lost_pwd_page.php                             |    8 +-
 manage_columns_inc.php                        |   20 +++---
 manage_custom_field_edit_page.php             |   84 ++++++++++++------------
 manage_custom_field_page.php                  |   20 +++---
 manage_overview_page.php                      |   10 ++--
 manage_proj_cat_edit_page.php                 |    4 +-
 manage_proj_create_page.php                   |   28 ++++----
 manage_proj_edit_page.php                     |   36 +++++-----
 manage_proj_ver_edit_page.php                 |   20 +++---
 manage_tags_page.php                          |    4 +-
 manage_user_create_page.php                   |   32 +++++-----
 manage_user_edit_page.php                     |   36 +++++-----
 news_edit_page.php                            |   16 +++---
 news_menu_page.php                            |   16 +++---
 plugins/MantisCoreFormatting/pages/config.php |    8 +-
 plugins/MantisGraph/pages/config.php          |   20 +++---
 plugins/XmlImportExport/pages/import.php      |    6 +-
 print_all_bug_options_inc.php                 |    4 +-
 print_bug_page.php                            |   58 +++++++++---------
 proj_doc_add_page.php                         |    8 +-
 proj_doc_edit_page.php                        |   12 ++--
 signup_page.php                               |   12 ++--
 tag_attach.php                                |    6 +-
 tag_update_page.php                           |    2 +-
 tag_view_page.php                             |    4 +-
 view_filters_page.php                         |   14 ++--
 view_user_page.php                            |   12 ++--
 52 files changed, 500 insertions(+), 500 deletions(-)

diff --git a/account_page.php b/account_page.php
index d93becb..ca7fe2b 100644
--- a/account_page.php
+++ b/account_page.php
@@ -133,9 +133,9 @@ html_page_top( lang_get( 'account_link' ) );
 
 	<!-- Username -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category" width="25%">
+		<th class="category" width="25%">
 			<?php echo lang_get( 'username' ) ?>
-		</td>
+		</th>
 		<td width="75%">
 			<?php echo $u_username ?>
 		</td>
@@ -143,9 +143,9 @@ html_page_top( lang_get( 'account_link' ) );
 
 	<!-- Password -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'password' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php echo lang_get( 'no_password_change' ) ?>
 		</td>
@@ -158,9 +158,9 @@ html_page_top( lang_get( 'account_link' ) );
 
 	<!-- Username -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category" width="25%">
+		<th class="category" width="25%">
 			<?php echo lang_get( 'username' ) ?>
-		</td>
+		</th>
 		<td width="75%">
 			<?php echo $u_username ?>
 		</td>
@@ -168,14 +168,14 @@ html_page_top( lang_get( 'account_link' ) );
 
 	<!-- Password -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php
 				echo lang_get( 'password' );
 				if ( $t_force_pw_reset ) {
 			?>
 			<span class="required">*</span>
 			<?php } ?>
-		</td>
+		</th>
 		<td>
 			<input type="password" size="32" maxlength="<?php echo PASSLEN;?>" name="password" />
 		</td>
@@ -183,14 +183,14 @@ html_page_top( lang_get( 'account_link' ) );
 
 	<!-- Password confirmation -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php
 				echo lang_get( 'confirm_password' );
 				if ( $t_force_pw_reset ) {
 			?>
 			<span class="required">*</span>
 			<?php } ?>
-		</td>
+		</th>
 		<td>
 			<input type="password" size="32" maxlength="<?php echo PASSLEN;?>" name="password_confirm" />
 		</td>
@@ -203,9 +203,9 @@ if ( $t_ldap && ON == config_get( 'use_ldap_email' ) ) { ?> <!-- With LDAP Email
 
 	<!-- Email -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'email' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php echo $u_email ?>
 		</td>
@@ -215,9 +215,9 @@ if ( $t_ldap && ON == config_get( 'use_ldap_email' ) ) { ?> <!-- With LDAP Email
 
 	<!-- Email -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'email' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php
 				$t_show_update_button = true;
@@ -230,9 +230,9 @@ if ( $t_ldap && ON == config_get( 'use_ldap_email' ) ) { ?> <!-- With LDAP Email
 
 	<!-- Realname -->
 	<tr <?php echo helper_alternate_class() ?> valign="top">
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'realname' ) ?>
-		</td>
+		</th>
 		<td>
 <?php
 if ( $t_ldap && ON == config_get( 'use_ldap_realname' ) ) {
@@ -247,9 +247,9 @@ if ( $t_ldap && ON == config_get( 'use_ldap_realname' ) ) {
 
 	<!-- Access level -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'access_level' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php echo get_enum_element( 'access_levels', $u_access_level ) ?>
 		</td>
@@ -257,9 +257,9 @@ if ( $t_ldap && ON == config_get( 'use_ldap_realname' ) ) {
 
 	<!-- Project access level -->
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'access_level_project' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php echo get_enum_element( 'access_levels', current_user_get_access_level() ) ?>
 		</td>
@@ -267,9 +267,9 @@ if ( $t_ldap && ON == config_get( 'use_ldap_realname' ) ) {
 
 	<!-- Assigned project list -->
 	<tr <?php echo helper_alternate_class() ?> valign="top">
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'assigned_projects' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php print_project_user_list( auth_get_current_user_id(), false ) ?>
 		</td>
diff --git a/account_prefs_inc.php b/account_prefs_inc.php
index 6d7fe17..9b47b82 100644
--- a/account_prefs_inc.php
+++ b/account_prefs_inc.php
@@ -95,9 +95,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category" width="50%">
+	<th class="category" width="50%">
 		<?php echo lang_get( 'default_project' ) ?>
-	</td>
+	</th>
 	<td width="50%">
 		<select name="default_project">
 			<?php print_project_option_list( $t_pref->default_project ) ?>
@@ -105,25 +105,25 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'refresh_delay' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="refresh_delay" size="4" maxlength="4" value="<?php echo $t_pref->refresh_delay ?>" /> <?php echo lang_get( 'minutes' ) ?>
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'redirect_delay' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="redirect_delay" size="4" maxlength="3" value="<?php echo $t_pref->redirect_delay ?>" /> <?php echo lang_get( 'seconds' ) ?>
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'bugnote_order' ) ?>
-	</td>
+	</th>
 	<td>
 		<label><input type="radio" name="bugnote_order" value="ASC" <?php check_checked( $t_pref->bugnote_order, 'ASC' ); ?> /><?php echo lang_get( 'bugnote_order_asc' ) ?></label>
 		<label><input type="radio" name="bugnote_order" value="DESC" <?php check_checked( $t_pref->bugnote_order, 'DESC' ); ?> /><?php echo lang_get( 'bugnote_order_desc' ) ?></label>
@@ -133,9 +133,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	if ( ON == config_get( 'enable_email_notification' ) ) {
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_new' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_new" <?php check_checked( $t_pref->email_on_new, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -147,9 +147,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_assigned' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_assigned" <?php check_checked( $t_pref->email_on_assigned, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -161,9 +161,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_feedback' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_feedback" <?php check_checked( $t_pref->email_on_feedback, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -175,9 +175,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_resolved' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_resolved" <?php check_checked( $t_pref->email_on_resolved, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -189,9 +189,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_closed' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_closed" <?php check_checked( $t_pref->email_on_closed, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -203,9 +203,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_reopened' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_reopened" <?php check_checked( $t_pref->email_on_reopened, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -217,9 +217,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_bugnote_added' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_bugnote" <?php check_checked( $t_pref->email_on_bugnote, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -231,9 +231,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_status_change' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_status" <?php check_checked( $t_pref->email_on_status, ON ); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -245,9 +245,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_on_priority_change' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="email_on_priority" <?php check_checked( $t_pref->email_on_priority , ON); ?> />
 		<?php echo lang_get( 'with_minimum_severity' ) ?>
@@ -259,9 +259,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_bugnote_limit' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="email_bugnote_limit" maxlength="2" size="2" value="<?php echo $t_pref->email_bugnote_limit ?>" />
 	</td>
@@ -288,9 +288,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 		<input type="hidden" name="email_bugnote_limit" value="<?php echo $t_pref->email_bugnote_limit ?>" />
 <?php } ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'timezone' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="timezone">
 			<?php print_timezone_option_list( $t_pref->timezone ?  $t_pref->timezone  : config_get_global( 'default_timezone' ) ) ?>
@@ -298,9 +298,9 @@ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'language' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="language">
 			<?php print_language_option_list( $t_pref->language ) ?>
diff --git a/account_prof_edit_page.php b/account_prof_edit_page.php
index 1da677a..bf10df0 100644
--- a/account_prof_edit_page.php
+++ b/account_prof_edit_page.php
@@ -98,33 +98,33 @@ if ( profile_is_global( $f_profile_id ) ) {
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<span class="required">*</span><?php echo lang_get( 'platform' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="platform" size="32" maxlength="32" value="<?php echo string_attribute( $v_platform ) ?>" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<span class="required">*</span><?php echo lang_get( 'operating_system' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="os" size="32" maxlength="32" value="<?php echo string_attribute( $v_os ) ?>" />
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<span class="required">*</span><?php echo lang_get( 'os_version' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="os_build" size="16" maxlength="16" value="<?php echo string_attribute( $v_os_build ) ?>" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'additional_description' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="description" cols="60" rows="8"><?php echo string_textarea( $v_description ) ?></textarea>
 	</td>
diff --git a/account_prof_menu_page.php b/account_prof_menu_page.php
index d65a73b..887785d 100644
--- a/account_prof_menu_page.php
+++ b/account_prof_menu_page.php
@@ -104,33 +104,33 @@ if ( $g_global_profiles ) {
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<span class="required">*</span><?php echo lang_get( 'platform' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="platform" size="32" maxlength="32" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<span class="required">*</span><?php echo lang_get( 'operating_system' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="os" size="32" maxlength="32" />
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<span class="required">*</span><?php echo lang_get( 'os_version' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="os_build" size="16" maxlength="16" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'additional_description' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="description" cols="60" rows="8"></textarea>
 	</td>
@@ -177,9 +177,9 @@ if ( $g_global_profiles ) {
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'select_profile' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<select name="profile_id">
 			<?php print_profile_option_list( $t_user_id, '', $t_profiles ) ?>
diff --git a/admin/index.php b/admin/index.php
index 098b707..d0be31f 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -32,7 +32,7 @@ html_page_top( 'MantisBT Administration' );
 
 function print_info_row( $p_description, $p_value ) {
 	echo '<tr ' . helper_alternate_class() . '>';
-	echo '<td class="category">' . $p_description . '</td>';
+	echo '<th class="category">' . $p_description . '</th>';
 	echo '<td>' . $p_value . '</td>';
 	echo '</tr>';
 }
diff --git a/bug_actiongroup_add_note_inc.php b/bug_actiongroup_add_note_inc.php
index b625a0f..cc06f7c 100644
--- a/bug_actiongroup_add_note_inc.php
+++ b/bug_actiongroup_add_note_inc.php
@@ -64,13 +64,13 @@ function action_add_note_print_title() {
  * A row has two columns.
  */
 function action_add_note_print_fields() {
-	echo '<tr class="row-1" valign="top"><td class="category">', lang_get( 'add_bugnote_title' ), '</td><td><textarea name="bugnote_text" cols="80" rows="10"></textarea></td></tr>';
+	echo '<tr class="row-1" valign="top"><th class="category">', lang_get( 'add_bugnote_title' ), '</th><td><textarea name="bugnote_text" cols="80" rows="10"></textarea></td></tr>';
 ?>
 	<!-- View Status -->
 	<tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td>
 <?php
 	$t_default_state = config_get( 'default_bugnote_view_status' );
diff --git a/bug_actiongroup_attach_tags_inc.php b/bug_actiongroup_attach_tags_inc.php
index 90b94fd..30b3f73 100644
--- a/bug_actiongroup_attach_tags_inc.php
+++ b/bug_actiongroup_attach_tags_inc.php
@@ -57,7 +57,7 @@ function action_attach_tags_print_title() {
  * Prints the table and form for the Attach Tags group action page.
  */
 function action_attach_tags_print_fields() {
-	echo '<tr ',helper_alternate_class(),'><td class="category">',lang_get('tag_attach_long'),'</td><td>';
+	echo '<tr ',helper_alternate_class(),'><th class="category">',lang_get('tag_attach_long'),'</th><td>';
 	print_tag_input();
 	echo '<input type="submit" class="button" value="' . lang_get( 'tag_attach' ) . ' " /></td></tr>';
 }
diff --git a/bug_actiongroup_page.php b/bug_actiongroup_page.php
index fe5305e..fbf8bf1 100644
--- a/bug_actiongroup_page.php
+++ b/bug_actiongroup_page.php
@@ -246,9 +246,9 @@ if ( $t_multiple_projects ) {
 if ( !$t_finished ) {
 ?>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo $t_question_title ?>
-	</td>
+	</th>
 	<td>
 	<?php
 		if ( $f_action === 'CUSTOM' ) {
@@ -310,9 +310,9 @@ if ( !$t_finished ) {
 				if ( $t_show_product_version ) {
 	?>
 		<tr class="row-2">
-			<td class="category">
+			<th class="category">
 				<?php echo $t_question_title2 ?>
-			</td>
+			</th>
 			<td>
 				<select name="<?php echo $t_form2 ?>">
 					<?php print_version_option_list( '', null, VERSION_ALL );?>
@@ -330,9 +330,9 @@ if ( !$t_finished ) {
 ?>
 
 <tr class="row-1">
-	<td class="category" colspan="2">
+	<th class="category" colspan="2">
 		<?php echo $t_question_title; ?>
-	</td>
+	</th>
 </tr>
 <?php
 }
@@ -342,18 +342,18 @@ if ( !$t_finished ) {
 if( $t_bugnote ) {
 ?>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'add_bugnote_title' ); ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="bugnote_text" cols="80" rows="10"></textarea>
 	</td>
 </tr>
 <?php if ( access_has_project_level( config_get( 'private_bugnote_threshold' ), $t_project_id ) ) { ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td>
 <?php
 		$t_default_bugnote_view_status = config_get( 'default_bugnote_view_status' );
diff --git a/bug_actiongroup_update_product_build_inc.php b/bug_actiongroup_update_product_build_inc.php
index 9e02da4..9a3a845 100644
--- a/bug_actiongroup_update_product_build_inc.php
+++ b/bug_actiongroup_update_product_build_inc.php
@@ -54,7 +54,7 @@ function action_update_product_build_print_title() {
  * A row has two columns.
  */
 function action_update_product_build_print_fields() {
-	echo '<tr class="row-1" valign="top"><td class="category">', lang_get( 'product_build' ), '</td><td><input type="text" name="build" size="32" maxlength="32" /></td></tr>';
+	echo '<tr class="row-1" valign="top"><th class="category">', lang_get( 'product_build' ), '</th><td><input type="text" name="build" size="32" maxlength="32" /></td></tr>';
 	echo '<tr><td colspan="2"><center><input type="submit" class="button" value="' . lang_get( 'actiongroup_menu_update_product_build' ) . ' " /></center></td></tr>';
 }
 
diff --git a/bug_actiongroup_update_severity_inc.php b/bug_actiongroup_update_severity_inc.php
index d275be9..d4ce243 100644
--- a/bug_actiongroup_update_severity_inc.php
+++ b/bug_actiongroup_update_severity_inc.php
@@ -56,9 +56,9 @@ function action_update_severity_print_title() {
  * A row has two columns.
  */
 function action_update_severity_print_fields() {
-	echo '<tr class="row-1" valign="top"><td class="category">';
+	echo '<tr class="row-1" valign="top"><th class="category">';
 	echo lang_get( 'update_severity_msg' );
-	echo '</td><td><select name="severity">';
+	echo '</th><td><select name="severity">';
 	print_enum_string_option_list( 'severity' );
 	echo '</select></td></tr>';
 	echo '<tr><td colspan="2"><center><input type="submit" class="button" value="' . lang_get( 'update_severity_button' ) . ' " /></center></td></tr>';
diff --git a/bug_change_status_page.php b/bug_change_status_page.php
index f5e0c7b..b2a6beb 100644
--- a/bug_change_status_page.php
+++ b/bug_change_status_page.php
@@ -154,9 +154,9 @@ $t_bug_is_open = $t_current_resolution < $t_resolved;
 if ( ( $f_new_status >= $t_resolved ) && ( ( $f_new_status < $t_closed ) || ( $t_bug_is_open ) ) ) { ?>
 <!-- Resolution -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'resolution' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="resolution">
 			<?php
@@ -183,9 +183,9 @@ if ( $f_new_status >= $t_resolved
 	&& $t_resolution != config_get( 'bug_duplicate_resolution' ) ) { ?>
 <!-- Duplicate ID -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'duplicate_id' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="duplicate_id" maxlength="10" />
 	</td>
@@ -202,9 +202,9 @@ if ( access_has_bug_level( config_get( 'update_bug_assign_threshold', config_get
 ?>
 <!-- Assigned To -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'assigned_to' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="handler_id">
 			<option value="0"></option>
@@ -222,9 +222,9 @@ if ( access_has_bug_level( config_get( 'update_bug_assign_threshold', config_get
 	}
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php print_documentation_link( 'due_date' ) ?>
-	</td>
+	</th>
 	<td>
 	<?php
 	    print "<input ".helper_get_tab_index()." type=\"text\" id=\"due_date\" name=\"due_date\" size=\"20\" maxlength=\"10\" value=\"".$t_date_to_display."\" />";
@@ -266,9 +266,9 @@ foreach( $t_related_custom_field_ids as $t_id ) {
 	if ( custom_field_has_write_access( $t_id, $f_bug_id ) ) {
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php if ( $t_require ) {?><span class="required">*</span><?php } echo lang_get_defaulted( $t_def['name'] ) ?>
-	</td>
+	</th>
 	<td>
 		<?php
 			print_custom_field_input( $t_def, $f_bug_id );
@@ -280,9 +280,9 @@ foreach( $t_related_custom_field_ids as $t_id ) {
 	else if ( custom_field_has_read_access( $t_id, $f_bug_id ) ) {
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get_defaulted( $t_def['name'] ) ?>
-		</td>
+		</th>
 		<td>
 			<?php print_custom_field_value( $t_def, $t_id, $f_bug_id );			?>
 		</td>
@@ -301,9 +301,9 @@ if ( ( $t_resolved <= $f_new_status ) ) {
 ?>
 <!-- Fixed in Version -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'fixed_in_version' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="fixed_in_version">
 			<?php print_version_option_list( bug_get_field( $f_bug_id, 'fixed_in_version' ),
@@ -320,9 +320,9 @@ if ( ( $t_resolved <= $f_new_status ) && ( $f_new_status < $t_closed ) ) { ?>
 <?php if ( ( ON == config_get( 'allow_close_immediately' ) )
 				&& ( access_has_bug_level( access_get_status_threshold( $t_closed, bug_get_field( $f_bug_id, 'project_id' ) ), $f_bug_id ) ) ) { ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'close_immediately' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="close_now" />
 	</td>
@@ -339,18 +339,18 @@ if ( ( $t_resolved <= $f_new_status ) && ( $f_new_status < $t_closed ) ) { ?>
 
 <!-- Bugnote -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'add_bugnote_title' ) ?>
-	</td>
+	</th>
 	<td class="center">
 		<textarea name="bugnote_text" cols="80" rows="10"></textarea>
 	</td>
 </tr>
 <?php if ( access_has_bug_level( config_get( 'private_bugnote_threshold' ), $f_bug_id ) ) { ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td>
 <?php
 		$t_default_bugnote_view_status = config_get( 'default_bugnote_view_status' );
@@ -371,9 +371,9 @@ if ( ( $t_resolved <= $f_new_status ) && ( $f_new_status < $t_closed ) ) { ?>
 <?php if ( access_has_bug_level( config_get( 'private_bugnote_threshold' ), $f_bug_id ) ) { ?>
 <?php if ( access_has_bug_level( config_get( 'time_tracking_edit_threshold' ), $f_bug_id ) ) { ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'time_tracking' ) ?> (HH:MM)
-	</td>
+	</th>
 	<td>
 		<input type="text" name="time_tracking" size="5" value="0:00" />
 	</td>
diff --git a/bug_monitor_list_view_inc.php b/bug_monitor_list_view_inc.php
index c0c2eb4..9e62079 100644
--- a/bug_monitor_list_view_inc.php
+++ b/bug_monitor_list_view_inc.php
@@ -82,9 +82,9 @@ if ( access_has_bug_level( config_get( 'show_monitor_list_threshold' ), $f_bug_i
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="15%">
+	<th class="category" width="15%">
 		<?php echo lang_get( 'monitoring_user_list' ); ?>
-	</td>
+	</th>
 	<td>
 <?php
 		if ( 0 == $num_users ) {
diff --git a/bug_reminder_page.php b/bug_reminder_page.php
index 70cb86d..3b5c5da 100644
--- a/bug_reminder_page.php
+++ b/bug_reminder_page.php
@@ -79,12 +79,12 @@ html_page_top( bug_format_summary( $f_bug_id, SUMMARY_CAPTION ) );
 	</td>
 </tr>
 <tr>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'to' ) ?>
-	</td>
-	<td class="category">
+	</th>
+	<th class="category">
 		<?php echo lang_get( 'reminder' ) ?>
-	</td>
+	</th>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
 	<td>
diff --git a/bug_report_page.php b/bug_report_page.php
index 92ec56e..e5a367b 100644
--- a/bug_report_page.php
+++ b/bug_report_page.php
@@ -217,9 +217,9 @@ print_recently_visited();
 	if ( $tpl_show_category ) {
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category" width="30%">
+		<th class="category" width="30%">
 			<?php echo config_get( 'allow_no_category' ) ? '' : '<span class="required">*</span>'; print_documentation_link( 'category' ) ?>
-		</td>
+		</th>
 		<td width="70%">
 			<?php if ( $t_changed_project ) {
 				echo "[" . project_get_field( $t_bug->project_id, 'name' ) . "] ";
@@ -237,9 +237,9 @@ print_recently_visited();
 ?>
 
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php print_documentation_link( 'reproducibility' ) ?>
-		</td>
+		</th>
 		<td>
 			<select <?php echo helper_get_tab_index() ?> name="reproducibility">
 				<?php print_enum_string_option_list( 'reproducibility', $f_reproducibility ) ?>
@@ -252,9 +252,9 @@ print_recently_visited();
 	if ( $tpl_show_severity ) {
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php print_documentation_link( 'severity' ) ?>
-		</td>
+		</th>
 		<td>
 			<select <?php echo helper_get_tab_index() ?> name="severity">
 				<?php print_enum_string_option_list( 'severity', $f_severity ) ?>
@@ -267,9 +267,9 @@ print_recently_visited();
 	if ( $tpl_show_priority ) {
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php print_documentation_link( 'priority' ) ?>
-		</td>
+		</th>
 		<td>
 			<select <?php echo helper_get_tab_index() ?> name="priority">
 				<?php print_enum_string_option_list( 'priority', $f_priority ) ?>
@@ -287,9 +287,9 @@ print_recently_visited();
 		}
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php print_documentation_link( 'due_date' ) ?>
-		</td>
+		</th>
 		<td>
 		<?php
 		    print "<input ".helper_get_tab_index()." type=\"text\" id=\"due_date\" name=\"due_date\" size=\"20\" maxlength=\"10\" value=\"".$t_date_to_display."\" />";
@@ -300,9 +300,9 @@ print_recently_visited();
 <?php } ?>
 <?php if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) { ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'select_profile' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php if (count(profile_get_all_for_user( auth_get_current_user_id() )) > 0) { ?>
 				<select <?php echo helper_get_tab_index() ?> name="profile_id">
@@ -321,9 +321,9 @@ print_recently_visited();
 						<?php echo lang_get( 'or_fill_in' ); ?>
 					<?php } ?>
 					<tr <?php echo helper_alternate_class() ?>>
-						<td class="category">
+						<th class="category">
 							<?php echo lang_get( 'platform' ) ?>
-						</td>
+						</th>
 						<td>
 							<?php if ( config_get( 'allow_freetext_in_profile_fields' ) == OFF ) { ?>
 							<select name="platform">
@@ -338,9 +338,9 @@ print_recently_visited();
 						</td>
 					</tr>
 					<tr <?php echo helper_alternate_class() ?>>
-						<td class="category">
+						<th class="category">
 							<?php echo lang_get( 'os' ) ?>
-						</td>
+						</th>
 						<td>
 							<?php if ( config_get( 'allow_freetext_in_profile_fields' ) == OFF ) { ?>
 							<select name="os">
@@ -355,9 +355,9 @@ print_recently_visited();
 						</td>
 					</tr>
 					<tr <?php echo helper_alternate_class() ?>>
-						<td class="category">
+						<th class="category">
 							<?php echo lang_get( 'os_version' ) ?>
-						</td>
+						</th>
 						<td>
 							<?php
 								if ( config_get( 'allow_freetext_in_profile_fields' ) == OFF ) {
@@ -390,9 +390,9 @@ print_recently_visited();
 		}
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'product_version' ) ?>
-		</td>
+		</th>
 		<td>
 			<select <?php echo helper_get_tab_index() ?> name="product_version">
 				<?php print_version_option_list( $f_product_version, $t_project_id, $t_product_version_released_mask ) ?>
@@ -404,9 +404,9 @@ print_recently_visited();
 ?>
 <?php if ( $tpl_show_product_build ) { ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'product_build' ) ?>
-		</td>
+		</th>
 		<td>
 			<input <?php echo helper_get_tab_index() ?> type="text" name="build" size="32" maxlength="32" value="<?php echo string_attribute( $f_build ) ?>" />
 		</td>
@@ -415,9 +415,9 @@ print_recently_visited();
 
 <?php if ( $tpl_show_handler ) { ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'assign_to' ) ?>
-		</td>
+		</th>
 		<td>
 			<select <?php echo helper_get_tab_index() ?> name="handler_id">
 				<option value="0" selected="selected"></option>
@@ -430,9 +430,9 @@ print_recently_visited();
 <?php // Target Version (if permissions allow)
 	if ( $tpl_show_target_version ) { ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'target_version' ) ?>
-		</td>
+		</th>
 		<td>
 			<select <?php echo helper_get_tab_index() ?> name="target_version">
 				<?php print_version_option_list() ?>
@@ -442,17 +442,17 @@ print_recently_visited();
 <?php } ?>
 <?php event_signal( 'EVENT_REPORT_BUG_FORM', array( $t_project_id ) ) ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<span class="required">*</span><?php print_documentation_link( 'summary' ) ?>
-		</td>
+		</th>
 		<td>
 			<input <?php echo helper_get_tab_index() ?> type="text" name="summary" size="105" maxlength="128" value="<?php echo string_attribute( $f_summary ) ?>" />
 		</td>
 	</tr>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<span class="required">*</span><?php print_documentation_link( 'description' ) ?>
-		</td>
+		</th>
 		<td>
 			<textarea <?php echo helper_get_tab_index() ?> name="description" cols="80" rows="10"><?php echo string_textarea( $f_description ) ?></textarea>
 		</td>
@@ -460,9 +460,9 @@ print_recently_visited();
 
 <?php if ( $tpl_show_steps_to_reproduce ) { ?>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php print_documentation_link( 'steps_to_reproduce' ) ?>
-			</td>
+			</th>
 			<td>
 				<textarea <?php echo helper_get_tab_index() ?> name="steps_to_reproduce" cols="80" rows="10"><?php echo string_textarea( $f_steps_to_reproduce ) ?></textarea>
 			</td>
@@ -471,9 +471,9 @@ print_recently_visited();
 
 <?php if ( $tpl_show_additional_info ) { ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php print_documentation_link( 'additional_information' ) ?>
-		</td>
+		</th>
 		<td>
 			<textarea <?php echo helper_get_tab_index() ?> name="additional_info" cols="80" rows="10"><?php echo string_textarea( $f_additional_info ) ?></textarea>
 		</td>
@@ -490,9 +490,9 @@ print_recently_visited();
 			$t_custom_fields_found = true;
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php if($t_def['require_report']) {?><span class="required">*</span><?php } echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
-		</td>
+		</th>
 		<td>
 			<?php print_custom_field_input( $t_def, ( $f_master_bug_id === 0 ) ? null : $f_master_bug_id ) ?>
 		</td>
@@ -520,9 +520,9 @@ print_recently_visited();
 	if ( $tpl_show_view_state ) {
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'view_status' ) ?>
-		</td>
+		</th>
 		<td>
 			<label><input <?php echo helper_get_tab_index() ?> type="radio" name="view_state" value="<?php echo VS_PUBLIC ?>" <?php check_checked( $f_view_state, VS_PUBLIC ) ?> /> <?php echo lang_get( 'public' ) ?></label>
 			<label><input <?php echo helper_get_tab_index() ?> type="radio" name="view_state" value="<?php echo VS_PRIVATE ?>" <?php check_checked( $f_view_state, VS_PRIVATE ) ?> /> <?php echo lang_get( 'private' ) ?></label>
@@ -535,9 +535,9 @@ print_recently_visited();
 	if( $f_master_bug_id > 0 ) {
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'relationship_with_parent' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php relationship_list_box( /* none */ -2, "rel_type", false, true ) ?>
 			<?php echo '<b>' . lang_get( 'bug' ) . ' ' . bug_format_id( $f_master_bug_id ) . '</b>' ?>
@@ -547,9 +547,9 @@ print_recently_visited();
 	}
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php print_documentation_link( 'report_stay' ) ?>
-		</td>
+		</th>
 		<td>
 			<label><input <?php echo helper_get_tab_index() ?> type="checkbox" id="report_stay" name="report_stay" <?php check_checked( $f_report_stay ) ?> /> <?php echo lang_get( 'check_report_more_bugs' ) ?></label>
 		</td>
diff --git a/bug_revision_view_page.php b/bug_revision_view_page.php
index 330b1d5..e5c9e44 100644
--- a/bug_revision_view_page.php
+++ b/bug_revision_view_page.php
@@ -133,7 +133,7 @@ $t_by_string = sprintf( lang_get( 'revision_by' ), string_display_line( date( co
 <tr class="spacer"><td><a name="r<?php echo $t_revision['id'] ?>"></a></td></tr>
 
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category"><?php echo lang_get( 'revision' ) ?></td>
+<th class="category"><?php echo lang_get( 'revision' ) ?></th>
 <td colspan="2"><?php echo $t_by_string ?></td>
 <td class="center" width="5%">
 <?php if ( $s_can_drop ) {
@@ -142,7 +142,7 @@ $t_by_string = sprintf( lang_get( 'revision_by' ), string_display_line( date( co
 </tr>
 
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category"><?php echo $t_label ?></td>
+<th class="category"><?php echo $t_label ?></th>
 <td colspan="3"><?php echo string_display_links( $t_revision['value'] ) ?></td>
 </tr>
 
@@ -169,7 +169,7 @@ print_bracket_link( 'view.php?id=' . $t_bug_id, lang_get( 'back_to_issue' ) );
 </tr>
 
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category" width="15%"><?php echo lang_get( 'summary' ) ?></td>
+<th class="category" width="15%"><?php echo lang_get( 'summary' ) ?></th>
 <td colspan="3"><?php echo bug_format_summary( $t_bug_id, SUMMARY_FIELD ) ?></td>
 </tr>
 
diff --git a/bug_sponsorship_list_view_inc.php b/bug_sponsorship_list_view_inc.php
index 6d46f4b..5e7b779 100644
--- a/bug_sponsorship_list_view_inc.php
+++ b/bug_sponsorship_list_view_inc.php
@@ -106,7 +106,7 @@ if ( $t_show_sponsorships ) {
 	if ( $t_can_sponsor ) {
 ?>
 	<tr class="row-1">
-		<td class="category" width="15%"><?php echo lang_get( 'sponsor_issue' ) ?></td>
+		<th class="category" width="15%"><?php echo lang_get( 'sponsor_issue' ) ?></th>
 		<td>
 			<form method="post" action="bug_set_sponsorship.php">
 				<?php echo form_security_field( 'bug_set_sponsorship' ) ?>
@@ -124,7 +124,7 @@ if ( $t_show_sponsorships ) {
 	if ( $t_total_sponsorship > 0 ) {
 ?>
 	<tr class="row-2">
-		<td class="category" width="15%"><?php echo lang_get( 'sponsors_list' ) ?></td>
+		<th class="category" width="15%"><?php echo lang_get( 'sponsors_list' ) ?></th>
 		<td>
 		<?php
 			echo sprintf( lang_get( 'total_sponsorship_amount' ),
diff --git a/bug_update_advanced_page.php b/bug_update_advanced_page.php
index b28e71c..157af16 100644
--- a/bug_update_advanced_page.php
+++ b/bug_update_advanced_page.php
@@ -255,7 +255,7 @@ if ( $tpl_show_reporter ) {
 
 	if ( $tpl_show_reporter ) {
 		# Reporter
-		echo '<td class="category">', lang_get( 'reporter' ), '</td>';
+		echo '<th class="category">', lang_get( 'reporter' ), '</th>';
 		echo '<td>';
 
 		if ( ON == config_get( 'use_javascript' ) ) {
@@ -288,7 +288,7 @@ if ( $tpl_show_handler || $tpl_show_due_date ) {
 	$t_spacer = 2;
 
 	# Assigned To
-	echo '<td class="category">', lang_get( 'assigned_to' ), '</td>';
+	echo '<th class="category">', lang_get( 'assigned_to' ), '</th>';
 	echo '<td>';
 
 	if ( access_has_project_level( config_get( 'update_bug_assign_threshold', config_get( 'update_bug_threshold' ) ) ) ) {
@@ -304,7 +304,7 @@ if ( $tpl_show_handler || $tpl_show_due_date ) {
 
 	if ( $tpl_show_due_date ) {
 		# Due Date
-		echo '<td class="category">', lang_get( 'due_date' ), '</td>';
+		echo '<th class="category">', lang_get( 'due_date' ), '</th>';
 
 		if ( bug_is_overdue( $tpl_bug_id ) ) {
 			echo '<td class="overdue">';
@@ -350,7 +350,7 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 
 	if ( $tpl_show_priority ) {
 		# Priority
-		echo '<td class="category">', lang_get( 'priority' ), '</td>';
+		echo '<th class="category">', lang_get( 'priority' ), '</th>';
 		echo '<td align="left">', '<select ', helper_get_tab_index(), ' name="priority">';
 		print_enum_string_option_list( 'priority', $tpl_bug->priority );
 		echo '</select></td>';
@@ -360,7 +360,7 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 
 	if ( $tpl_show_severity ) {
 		# Severity
-		echo '<td class="category">', lang_get( 'severity' ), '</td>';
+		echo '<th class="category">', lang_get( 'severity' ), '</th>';
 		echo '<td>', '<select ', helper_get_tab_index(), ' name="severity">';
 		print_enum_string_option_list( 'severity', $tpl_bug->severity );
 		echo '</select></td>';
@@ -370,7 +370,7 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 
 	if ( $tpl_show_reproducibility ) {
 		# Reproducibility
-		echo '<td class="category">', lang_get( 'reproducibility' ), '</td>';
+		echo '<th class="category">', lang_get( 'reproducibility' ), '</th>';
 		echo '<td><select ', helper_get_tab_index(), ' name="reproducibility">';
 		print_enum_string_option_list( 'reproducibility', $tpl_bug->reproducibility );
 		echo '</select></td>';
@@ -397,7 +397,7 @@ if ( $tpl_show_status || $tpl_show_resolution ) {
 
 	if ( $tpl_show_status ) {
 		# Status
-		echo '<td class="category">', lang_get( 'status' ), '</td>';
+		echo '<th class="category">', lang_get( 'status' ), '</th>';
 		echo '<td bgcolor="', get_status_color( $tpl_bug->status ), '">';
 		print_status_option_list( 'status', $tpl_bug->status,
 							( $tpl_bug->reporter_id == auth_get_current_user_id() &&
@@ -409,7 +409,7 @@ if ( $tpl_show_status || $tpl_show_resolution ) {
 
 	if ( $tpl_show_resolution ) {
 		# Resolution
-		echo '<td class="category">', lang_get( 'resolution' ), '</td>';
+		echo '<th class="category">', lang_get( 'resolution' ), '</th>';
 		echo '<td><select ', helper_get_tab_index(), ' name="resolution">';
 		print_enum_string_option_list( "resolution", $tpl_bug->resolution );
 		echo '</select></td>';
@@ -436,9 +436,9 @@ if ( $tpl_show_projection || $tpl_show_eta ) {
 
 	if ( $tpl_show_projection ) {
 		# Projection
-		echo '<td class="category">';
+		echo '<th class="category">';
 		echo lang_get( 'projection' );
-		echo '</td>';
+		echo '</th>';
 		echo '<td><select name="projection">';
 		print_enum_string_option_list( 'projection', $tpl_bug->projection );
 		echo '</select></td>';
@@ -448,7 +448,7 @@ if ( $tpl_show_projection || $tpl_show_eta ) {
 
 	# ETA
 	if ( $tpl_show_eta ) {
-		echo '<td class="category">', lang_get( 'eta' ), '</td>';
+		echo '<th class="category">', lang_get( 'eta' ), '</th>';
 
 		echo '<td>', '<select ', helper_get_tab_index(), ' name="eta">';
 		print_enum_string_option_list( 'eta', $tpl_bug->eta );
@@ -474,7 +474,7 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 
 	if ( $tpl_show_platform ) {
 		# Platform
-		echo '<td class="category">', lang_get( 'platform' ), '</td>';
+		echo '<th class="category">', lang_get( 'platform' ), '</th>';
 		echo '<td>';
 
 		if ( config_get( 'allow_freetext_in_profile_fields' ) == OFF ) {
@@ -492,7 +492,7 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 
 	if ( $tpl_show_os ) {
 		# Operating System
-		echo '<td class="category">', lang_get( 'os' ), '</td>';
+		echo '<th class="category">', lang_get( 'os' ), '</th>';
 		echo '<td>';
 
 		if ( config_get( 'allow_freetext_in_profile_fields' ) == OFF ) {
@@ -510,7 +510,7 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 
 	if ( $tpl_show_os_version ) {
 		# OS Version
-		echo '<td class="category">', lang_get( 'os_version' ), '</td>';
+		echo '<th class="category">', lang_get( 'os_version' ), '</th>';
 		echo '<td>';
 
 		if ( config_get( 'allow_freetext_in_profile_fields' ) == OFF ) {
@@ -545,7 +545,7 @@ if ( $tpl_show_product_version || $tpl_show_product_build ) {
 
 	# Product Version  or Product Build, if version is suppressed
 	if ( $tpl_show_product_version ) {
-		echo '<td class="category">', lang_get( 'product_version' ), '</td>';
+		echo '<th class="category">', lang_get( 'product_version' ), '</th>';
 		echo '<td>', '<select ', helper_get_tab_index(), ' name="version">';
 		print_version_option_list( $tpl_bug->version, $tpl_bug->project_id, $tpl_product_version_released_mask );
 		echo '</select></td>';
@@ -554,7 +554,7 @@ if ( $tpl_show_product_version || $tpl_show_product_build ) {
 	}
 
 	if ( $tpl_show_product_build ) {
-		echo '<td class="category">', lang_get( 'product_build' ), '</td>';
+		echo '<th class="category">', lang_get( 'product_build' ), '</th>';
 		echo '<td>';
 		echo '<input type="text" name="build" size="16" maxlength="32" value="', $tpl_product_build_attribute, '" />';
 		echo '</td>';
@@ -579,7 +579,7 @@ if ( $tpl_show_target_version || $tpl_show_fixed_in_version ) {
 
 	# Target Version
 	if ( $tpl_show_target_version ) {
-		echo '<td class="category">', lang_get( 'target_version' ), '</td>';
+		echo '<th class="category">', lang_get( 'target_version' ), '</th>';
 		echo '<td><select ', helper_get_tab_index(), ' name="target_version">';
 		print_version_option_list( $tpl_bug->target_version, $tpl_bug->project_id, VERSION_ALL );
 		echo '</select></td>';
@@ -589,9 +589,9 @@ if ( $tpl_show_target_version || $tpl_show_fixed_in_version ) {
 
 	# Fixed in Version
 	if ( $tpl_show_fixed_in_version ) {
-		echo '<td class="category">';
+		echo '<th class="category">';
 		echo lang_get( 'fixed_in_version' );
-		echo '</td>';
+		echo '</th>';
 
 		echo '<td>';
 		echo '<select ', helper_get_tab_index(), ' name="fixed_in_version">';
@@ -616,7 +616,7 @@ echo '<tr class="spacer"><td colspan="6"></td></tr>';
 # Summary
 if ( $tpl_show_summary ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'summary' ), '</td>';
+	echo '<th class="category">', lang_get( 'summary' ), '</th>';
 	echo '<td colspan="5">', '<input ', helper_get_tab_index(), ' type="text" name="summary" size="105" maxlength="128" value="', $tpl_summary_attribute, '" />';
 	echo '</td></tr>';
 }
@@ -624,7 +624,7 @@ if ( $tpl_show_summary ) {
 # Description
 if ( $tpl_show_description ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'description' ), '</td>';
+	echo '<th class="category">', lang_get( 'description' ), '</th>';
 	echo '<td colspan="5">';
 	echo '<textarea ', helper_get_tab_index(), ' cols="80" rows="10" name="description">', $tpl_description_textarea, '</textarea>';
 	echo '</td></tr>';
@@ -633,7 +633,7 @@ if ( $tpl_show_description ) {
 # Steps to Reproduce
 if ( $tpl_show_steps_to_reproduce ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'steps_to_reproduce' ), '</td>';
+	echo '<th class="category">', lang_get( 'steps_to_reproduce' ), '</th>';
 	echo '<td colspan="5">';
 	echo '<textarea ', helper_get_tab_index(), ' cols="80" rows="10" name="steps_to_reproduce">', $tpl_steps_to_reproduce_textarea, '</textarea>';
 	echo '</td></tr>';
@@ -642,7 +642,7 @@ if ( $tpl_show_steps_to_reproduce ) {
 # Additional Information
 if ( $tpl_show_additional_information ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'additional_information' ), '</td>';
+	echo '<th class="category">', lang_get( 'additional_information' ), '</th>';
 	echo '<td colspan="5">';
 	echo '<textarea ', helper_get_tab_index(), ' cols="80" rows="10" name="additional_information">', $tpl_additional_information_textarea, '</textarea>';
 	echo '</td></tr>';
@@ -679,13 +679,13 @@ if ( $t_custom_fields_found ) {
 
 # Bugnote Text Box
 echo '<tr ', helper_alternate_class(), '>';
-echo '<td class="category">', lang_get( 'add_bugnote_title' ), '</td>';
+echo '<th class="category">', lang_get( 'add_bugnote_title' ), '</th>';
 echo '<td colspan="5"><textarea ', helper_get_tab_index(), ' name="bugnote_text" cols="80" rows="10"></textarea></td></tr>';
 
 # Bugnote Private Checkbox (if permitted)
 if ( access_has_bug_level( config_get( 'private_bugnote_threshold' ), $tpl_bug_id ) ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="category">', lang_get( 'private' ), '</td>';
+	echo '<th class="category">', lang_get( 'private' ), '</th>';
 	echo '<td colspan="5">';
 
 	$t_default_bugnote_view_status = config_get( 'default_bugnote_view_status' );
@@ -703,7 +703,7 @@ if ( access_has_bug_level( config_get( 'private_bugnote_threshold' ), $tpl_bug_i
 if ( config_get('time_tracking_enabled') ) {
 	if ( access_has_bug_level( config_get( 'time_tracking_edit_threshold' ), $tpl_bug_id ) ) {
 		echo '<tr ', helper_alternate_class(), '>';
-		echo '<td class="category">', lang_get( 'time_tracking' ), ' (HH:MM)</td>';
+		echo '<th class="category">', lang_get( 'time_tracking' ), ' (HH:MM)</th>';
 		echo '<td colspan="5"><input type="text" name="time_tracking" size="5" value="0:00" /></td></tr>';
 	}
 }
diff --git a/bug_view_inc.php b/bug_view_inc.php
index cc1825f..325a8de 100644
--- a/bug_view_inc.php
+++ b/bug_view_inc.php
@@ -335,12 +335,12 @@ echo '<tbody>';
 if ( $tpl_show_id || $tpl_show_project || $tpl_show_category || $tpl_show_view_state || $tpl_show_date_submitted || $tpl_show_last_updated ) {
 	# Labels
 	echo '<tr class="bug-header">';
-	echo '<td class="bug-id category" width="15%">', $tpl_show_id ? lang_get( 'id' ) : '', '</td>';
-	echo '<td class="bug-project category" width="20%">', $tpl_show_project ? lang_get( 'email_project' ) : '', '</td>';
-	echo '<td class="bug-category category" width="15%">', $tpl_show_category ? lang_get( 'category' ) : '', '</td>';
-	echo '<td class="bug-view-status category" width="15%">', $tpl_show_view_state ? lang_get( 'view_status' ) : '', '</td>';
-	echo '<td class="bug-date-submitted category" width="15%">', $tpl_show_date_submitted ? lang_get( 'date_submitted' ) : '', '</td>';
-	echo '<td class="bug-last-modified category" width="20%">', $tpl_show_last_updated ? lang_get( 'last_update' ) : '','</td>';
+	echo '<th class="bug-id category" width="15%">', $tpl_show_id ? lang_get( 'id' ) : '', '</th>';
+	echo '<th class="bug-project category" width="20%">', $tpl_show_project ? lang_get( 'email_project' ) : '', '</th>';
+	echo '<th class="bug-category category" width="15%">', $tpl_show_category ? lang_get( 'category' ) : '', '</th>';
+	echo '<th class="bug-view-status category" width="15%">', $tpl_show_view_state ? lang_get( 'view_status' ) : '', '</th>';
+	echo '<th class="bug-date-submitted category" width="15%">', $tpl_show_date_submitted ? lang_get( 'date_submitted' ) : '', '</th>';
+	echo '<th class="bug-last-modified category" width="20%">', $tpl_show_last_updated ? lang_get( 'last_update' ) : '','</th>';
 	echo '</tr>';
 
 	echo '<tr ', helper_alternate_class(null, 'row-1 bug-header-data', 'row-2 bug-header-data'), '>';
@@ -352,7 +352,7 @@ if ( $tpl_show_id || $tpl_show_project || $tpl_show_category || $tpl_show_view_s
 	echo '<td class="bug-project">', $tpl_project_name, '</td>';
 
 	# Category
-	echo '<td class="bug-category">', $tpl_category, '</td>';
+	echo '<th class="bug-category">', $tpl_category, '</th>';
 
 	# View Status
 	echo '<td class="bug-view-status">', $tpl_bug_view_state_enum, '</td>';
@@ -379,7 +379,7 @@ if ( $tpl_show_reporter ) {
 	$t_spacer = 4;
 
 	# Reporter
-	echo '<td class="bug-reporter category">', lang_get( 'reporter' ), '</td>';
+	echo '<th class="bug-reporter category">', lang_get( 'reporter' ), '</th>';
 	echo '<td class="bug-reporter">';
 	print_user_with_subject( $tpl_bug->reporter_id, $tpl_bug_id );
 	echo '</td>';
@@ -398,14 +398,14 @@ if ( $tpl_show_handler || $tpl_show_due_date ) {
 	$t_spacer = 2;
 
 	# Handler
-	echo '<td class="bug-assigned-to category">', lang_get( 'assigned_to' ), '</td>';
+	echo '<th class="bug-assigned-to category">', lang_get( 'assigned_to' ), '</th>';
 	echo '<td class="bug-assigned-to">';
 	print_user_with_subject( $tpl_bug->handler_id, $tpl_bug_id );
 	echo '</td>';
 
 	# Due Date
 	if ( $tpl_show_due_date ) {
-		echo '<td class="bug-due-date category">', lang_get( 'due_date' ), '</td>';
+		echo '<th class="bug-due-date category">', lang_get( 'due_date' ), '</th>';
 
 		if ( $tpl_bug_overdue ) {
 			echo '<td class="bug-due-date overdue">', $tpl_bug_due_date, '</td>';
@@ -431,7 +431,7 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 
 	# Priority
 	if ( $tpl_show_priority ) {
-		echo '<td class="bug-priority category">', lang_get( 'priority' ), '</td>';
+		echo '<th class="bug-priority category">', lang_get( 'priority' ), '</th>';
 		echo '<td class="bug-priority">', $tpl_priority, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -439,7 +439,7 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 
 	# Severity
 	if ( $tpl_show_severity ) {
-		echo '<td class="bug-severity category">', lang_get( 'severity' ), '</td>';
+		echo '<th class="bug-severity category">', lang_get( 'severity' ), '</th>';
 		echo '<td class="bug-severity">', $tpl_severity, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -447,7 +447,7 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 
 	# Reproducibility
 	if ( $tpl_show_reproducibility ) {
-		echo '<td class="bug-reproducibility category">', lang_get( 'reproducibility' ), '</td>';
+		echo '<th class="bug-reproducibility category">', lang_get( 'reproducibility' ), '</th>';
 		echo '<td class="bug-reproducibility">', $tpl_reproducibility, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -472,7 +472,7 @@ if ( $tpl_show_status || $tpl_show_resolution ) {
 
 	# Status
 	if ( $tpl_show_status ) {
-		echo '<td class="bug-status category">', lang_get( 'status' ), '</td>';
+		echo '<th class="bug-status category">', lang_get( 'status' ), '</th>';
 		echo '<td class="bug-status" bgcolor="', get_status_color( $tpl_bug->status ), '">', $tpl_status, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -480,7 +480,7 @@ if ( $tpl_show_status || $tpl_show_resolution ) {
 
 	# Resolution
 	if ( $tpl_show_resolution ) {
-		echo '<td class="bug-resolution category">', lang_get( 'resolution' ), '</td>';
+		echo '<th class="bug-resolution category">', lang_get( 'resolution' ), '</th>';
 		echo '<td class="bug-resolution">', $tpl_resolution, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -505,7 +505,7 @@ if ( $tpl_show_projection || $tpl_show_eta ) {
 
 	if ( $tpl_show_projection ) {
 		# Projection
-		echo '<td class="bug-projection category">', lang_get( 'projection' ), '</td>';
+		echo '<th class="bug-projection category">', lang_get( 'projection' ), '</th>';
 		echo '<td class="bug-projection">', $tpl_projection, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -513,7 +513,7 @@ if ( $tpl_show_projection || $tpl_show_eta ) {
 
 	# ETA
 	if ( $tpl_show_eta ) {
-		echo '<td class="bug-eta category">', lang_get( 'eta' ), '</td>';
+		echo '<th class="bug-eta category">', lang_get( 'eta' ), '</th>';
 		echo '<td class="bug-eta">', $tpl_eta, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -534,7 +534,7 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 
 	# Platform
 	if ( $tpl_show_platform ) {
-		echo '<td class="bug-platform category">', lang_get( 'platform' ), '</td>';
+		echo '<th class="bug-platform category">', lang_get( 'platform' ), '</th>';
 		echo '<td class="bug-platform">', $tpl_platform, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -542,7 +542,7 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 
 	# Operating System
 	if ( $tpl_show_os ) {
-		echo '<td class="bug-os category">', lang_get( 'os' ), '</td>';
+		echo '<th class="bug-os category">', lang_get( 'os' ), '</th>';
 		echo '<td class="bug-os">', $tpl_os, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -550,7 +550,7 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 
 	# OS Version
 	if ( $tpl_show_os_version ) {
-		echo '<td class="bug-os-version category">', lang_get( 'os_version' ), '</td>';
+		echo '<th class="bug-os-version category">', lang_get( 'os_version' ), '</th>';
 		echo '<td class="bug-os-version">', $tpl_os_version, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -574,7 +574,7 @@ if ( $tpl_show_product_version || $tpl_show_product_build ) {
 
 	# Product Version
 	if ( $tpl_show_product_version ) {
-		echo '<td class="bug-product-version category">', lang_get( 'product_version' ), '</td>';
+		echo '<th class="bug-product-version category">', lang_get( 'product_version' ), '</th>';
 		echo '<td class="bug-product-version">', $tpl_product_version_string, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -582,7 +582,7 @@ if ( $tpl_show_product_version || $tpl_show_product_build ) {
 
 	# Product Build
 	if ( $tpl_show_product_build ) {
-		echo '<td class="bug-product-build category">', lang_get( 'product_build' ), '</td>';
+		echo '<th class="bug-product-build category">', lang_get( 'product_build' ), '</th>';
 		echo '<td class="bug-product-build">', $tpl_product_build, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -606,7 +606,7 @@ if ( $tpl_show_target_version || $tpl_show_fixed_in_version ) {
 	# target version
 	if ( $tpl_show_target_version ) {
 		# Target Version
-		echo '<td class="bug-target-version category">', lang_get( 'target_version' ), '</td>';
+		echo '<th class="bug-target-version category">', lang_get( 'target_version' ), '</th>';
 		echo '<td class="bug-target-version">', $tpl_target_version_string, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -614,7 +614,7 @@ if ( $tpl_show_target_version || $tpl_show_fixed_in_version ) {
 
 	# fixed in version
 	if ( $tpl_show_fixed_in_version ) {
-		echo '<td class="bug-fixed-in-version category">', lang_get( 'fixed_in_version' ), '</td>';
+		echo '<th class="bug-fixed-in-version category">', lang_get( 'fixed_in_version' ), '</th>';
 		echo '<td class="bug-fixed-in-version">', $tpl_fixed_in_version_string, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -642,7 +642,7 @@ echo '<tr class="spacer"><td colspan="6"></td></tr>';
 # Summary
 if ( $tpl_show_summary ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="bug-summary category">', lang_get( 'summary' ), '</td>';
+	echo '<th class="bug-summary category">', lang_get( 'summary' ), '</th>';
 	echo '<td class="bug-summary" colspan="5">', $tpl_summary, '</td>';
 	echo '</tr>';
 }
@@ -650,7 +650,7 @@ if ( $tpl_show_summary ) {
 # Description
 if ( $tpl_show_description ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="bug-description category">', lang_get( 'description' ), '</td>';
+	echo '<th class="bug-description category">', lang_get( 'description' ), '</th>';
 	echo '<td class="bug-description" colspan="5">', $tpl_description, '</td>';
 	echo '</tr>';
 }
@@ -658,7 +658,7 @@ if ( $tpl_show_description ) {
 # Steps to Reproduce
 if ( $tpl_show_steps_to_reproduce ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="bug-steps-to-reproduce category">', lang_get( 'steps_to_reproduce' ), '</td>';
+	echo '<th class="bug-steps-to-reproduce category">', lang_get( 'steps_to_reproduce' ), '</th>';
 	echo '<td class="bug-steps-to-reproduce" colspan="5">', $tpl_steps_to_reproduce, '</td>';
 	echo '</tr>';
 }
@@ -666,7 +666,7 @@ if ( $tpl_show_steps_to_reproduce ) {
 # Additional Information
 if ( $tpl_show_additional_information ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="bug-additional-information category">', lang_get( 'additional_information' ), '</td>';
+	echo '<th class="bug-additional-information category">', lang_get( 'additional_information' ), '</th>';
 	echo '<td class="bug-additional-information" colspan="5">', $tpl_additional_information, '</td>';
 	echo '</tr>';
 }
@@ -674,7 +674,7 @@ if ( $tpl_show_additional_information ) {
 # Tagging
 if ( $tpl_show_tags ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="bug-tags category">', lang_get( 'tags' ), '</td>';
+	echo '<th class="bug-tags category">', lang_get( 'tags' ), '</th>';
 	echo '<td class="bug-tags" colspan="5">';
 	tag_display_attached( $tpl_bug_id );
 	echo '</td></tr>';
@@ -683,7 +683,7 @@ if ( $tpl_show_tags ) {
 # Attachments Form
 if ( $tpl_can_attach_tag ) {
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="bug-attach-tags category">', lang_get( 'tag_attach_long' ), '</td>';
+	echo '<th class="bug-attach-tags category">', lang_get( 'tag_attach_long' ), '</th>';
 	echo '<td class="bug-attach-tags" colspan="5">';
 	print_tag_attach_form( $tpl_bug_id );
 	echo '</td></tr>';
@@ -705,7 +705,7 @@ foreach( $t_related_custom_field_ids as $t_id ) {
 	$t_def = custom_field_get_definition( $t_id );
 
 	echo '<tr ', helper_alternate_class(), '>';
-	echo '<td class="bug-custom-field category">', string_display( lang_get_defaulted( $t_def['name'] ) ), '</td>';
+	echo '<th class="bug-custom-field category">', string_display( lang_get_defaulted( $t_def['name'] ) ), '</th>';
 	echo '<td class="bug-custom-field" colspan="5">';
 	print_custom_field_value( $t_def, $t_id, $f_bug_id );
 	echo '</td></tr>';
@@ -719,7 +719,7 @@ if ( $t_custom_fields_found ) {
 # Attachments
 if ( $tpl_show_attachments ) {
 	echo '<tr id="attachments" ', helper_alternate_class(), '>';
-	echo '<td class="bug-attachments category">', lang_get( 'attached_files' ), '</td>';
+	echo '<th class="bug-attachments category">', lang_get( 'attached_files' ), '</th>';
 	echo '<td class="bug-attachments" colspan="5">';
 	print_bug_attachments_list( $tpl_bug_id );
 	echo '</td></tr>';
diff --git a/bugnote_add_inc.php b/bugnote_add_inc.php
index e98a1ac..d5b8ee6 100644
--- a/bugnote_add_inc.php
+++ b/bugnote_add_inc.php
@@ -68,18 +68,18 @@ require_api( 'lang_api.php' );
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'bugnote' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<textarea name="bugnote_text" cols="80" rows="10"></textarea>
 	</td>
 </tr>
 <?php if ( access_has_bug_level( config_get( 'set_view_status_threshold' ), $f_bug_id ) ) { ?>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td>
 <?php
 		$t_default_bugnote_view_status = config_get( 'default_bugnote_view_status' );
@@ -99,9 +99,9 @@ require_api( 'lang_api.php' );
 <?php if ( config_get('time_tracking_enabled') ) { ?>
 <?php if ( access_has_bug_level( config_get( 'time_tracking_edit_threshold' ), $f_bug_id ) ) { ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'time_tracking' ) ?> (HH:MM)
-	</td>
+	</th>
 	<td>
 		<?php if ( config_get( 'time_tracking_stopwatch' ) && config_get( 'use_javascript' ) ) { ?>
 		<script type="text/javascript">
diff --git a/core/authentication_api.php b/core/authentication_api.php
index 00dcf82..ee8d56b 100644
--- a/core/authentication_api.php
+++ b/core/authentication_api.php
@@ -712,12 +712,12 @@ function auth_reauthenticate_page( $p_user_id, $p_username ) {
 </tr>
 
 <tr class="row-1">
-	<td class="category"><?php echo lang_get( 'username' );?></td>
+	<th class="category"><?php echo lang_get( 'username' );?></th>
 	<td><input type="text" disabled="disabled" size="32" maxlength="<?php echo USERLEN;?>" value="<?php echo $p_username;?>" /></td>
 </tr>
 
 <tr class="row-2">
-	<td class="category"><?php echo lang_get( 'password' );?></td>
+	<th class="category"><?php echo lang_get( 'password' );?></th>
 	<td><input type="password" name="password" size="16" maxlength="<?php echo PASSLEN;?>" /></td>
 </tr>
 
diff --git a/core/bug_group_action_api.php b/core/bug_group_action_api.php
index fa113b9..d64034e 100644
--- a/core/bug_group_action_api.php
+++ b/core/bug_group_action_api.php
@@ -70,9 +70,9 @@ function bug_group_action_print_bug_list( $p_bug_ids_array ) {
 	echo '<div align="center">';
 	echo '<table class="width75" cellspacing="1">';
 	echo '<tr class="row-1">';
-	echo '<td class="category" colspan="2">';
+	echo '<th class="category" colspan="2">';
 	echo lang_get( 'actiongroup_bugs' );
-	echo '</td>';
+	echo '</th>';
 	echo '</tr>';
 
 	$t_i = 1;
diff --git a/core/relationship_api.php b/core/relationship_api.php
index af941ae..51751c8 100644
--- a/core/relationship_api.php
+++ b/core/relationship_api.php
@@ -855,7 +855,7 @@ function relationship_view_box( $p_bug_id ) {
 		if( access_has_bug_level( config_get( 'update_bug_threshold' ), $p_bug_id ) ) {
 			?>
 <tr class="row-1">
-	<td class="category"><?php echo lang_get( 'add_new_relationship' )?></td>
+	<th class="category"><?php echo lang_get( 'add_new_relationship' )?></th>
 	<td><?php echo lang_get( 'this_bug' )?>
 		<form method="post" action="bug_relationship_add.php">
 		<?php echo form_security_field( 'bug_relationship_add' ) ?>
diff --git a/css/default.css b/css/default.css
index b548893..37aae6c 100644
--- a/css/default.css
+++ b/css/default.css
@@ -49,11 +49,11 @@ table.width75		{ width: 75%;  border: solid 1px #000000; }
 table.width60		{ width: 60%;  border: solid 1px #000000; }
 table.width50		{ width: 50%;  border: solid 1px #000000; }
 
-td 					{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; padding: 4px; text-align: left; }
+td,th 				{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; padding: 4px; text-align: left; }
 td.center			{ text-align: center; }
 td.left				{ text-align: left; }
 td.right			{ text-align: right; }
-td.category			{ background-color: #c8c8e8; color: #000000; font-weight: bold; vertical-align : top; }
+td.category, th.category		{ background-color: #c8c8e8; color: #000000; font-weight: bold; vertical-align : top; }
 td.overdue			{ background-color: #ff0000; color: #000000; font-weight: bold; }
 
 td.col-1			{ background-color: #d8d8d8; color: #000000; }
@@ -61,9 +61,9 @@ td.col-2			{ background-color: #e8e8e8; color: #000000; }
 td.form-title		{ background-color: #ffffff; color: #000000; font-weight: bold; text-align: left; }
 td.form-title-caps	{ background-color: #ffffff; color: #000000; font-weight: bold; text-align: left; text-transform: uppercase; }
 td.nopad			{ padding: 0px; }
-td.small-caption	{ font-size: 8pt; }
+td.small-caption, th.small-caption	{ font-size: 8pt; }
 td.print			{ font-size: 8pt; text-align: left; padding: 2px; }
-td.print-category	{ font-size: 8pt; color: #000000; font-weight: bold; text-align: right; padding: 2px; }
+td.print-category, th.print-category	{ font-size: 8pt; color: #000000; font-weight: bold; text-align: right; padding: 2px; }
 td.print-overdue	{ font-size: 8pt; color: #000000; font-weight: bold; padding: 2px; }
 td.print-bottom		{ border-bottom: 1px solid #000000; }
 td.print-spacer		{ background-color: #ffffff; color: #000000; font-size: 1pt; line-height: 0.1; padding: 0px;}
diff --git a/login_page.php b/login_page.php
index 2e5b36d..d25dda9 100644
--- a/login_page.php
+++ b/login_page.php
@@ -141,34 +141,34 @@ echo '</div>';
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'username' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="username" size="28" maxlength="<?php echo USERLEN;?>" value="<?php echo string_attribute( $f_username ); ?>" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'password' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="password" name="password" size="16" maxlength="<?php echo PASSLEN;?>" />
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'save_login' ) ?>
-	</td>
+	</th>
 	<td>
 	<input type="checkbox" name="perm_login" <?php echo ( $f_perm_login ? 'checked="checked" ' : '' ) ?>/>
 	</td>
 </tr>
 <?php if ( $t_session_validation ) { ?>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'secure_session' ) ?>
-	</td>
+	</th>
 	<td>
 	<input type="checkbox" name="secure_session" <?php echo ( $t_default_secure_session ? 'checked="checked" ' : '' ) ?>/>
 	<?php echo '<span class="small">' . lang_get( 'secure_session_long' ) . '</span>' ?>
diff --git a/login_select_proj_page.php b/login_select_proj_page.php
index 394e9bf..5166a1c 100644
--- a/login_select_proj_page.php
+++ b/login_select_proj_page.php
@@ -73,9 +73,9 @@ html_page_top( lang_get( 'select_project_button' ) );
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="40%">
+	<th class="category" width="40%">
 		<?php echo lang_get( 'choose_project' ) ?>
-	</td>
+	</th>
 	<td width="60%">
 		<select name="project_id">
 		<?php print_project_option_list( ALL_PROJECTS, false, null, true ) ?>
@@ -83,9 +83,9 @@ html_page_top( lang_get( 'select_project_button' ) );
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'make_default' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="make_default" />
 	</td>
diff --git a/lost_pwd_page.php b/lost_pwd_page.php
index 5ca20d5..e479cfc 100644
--- a/lost_pwd_page.php
+++ b/lost_pwd_page.php
@@ -71,17 +71,17 @@ $t_allow_passwd = helper_call_custom_function( 'auth_can_change_password', array
 if ( $t_allow_passwd ) {
 ?>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'username' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="username" size="32" maxlength="<?php echo USERLEN;?>" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'email' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<?php print_email_input( 'email', '' ) ?>
 	</td>
diff --git a/manage_columns_inc.php b/manage_columns_inc.php
index cc0b257..d392da3 100644
--- a/manage_columns_inc.php
+++ b/manage_columns_inc.php
@@ -102,9 +102,9 @@ echo '<br />';
 
 <!-- view issues columns -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'all_columns_title' )?>
-	</td>
+	</th>
 	<td>
 		<textarea <?php echo helper_get_tab_index() ?> name="all_columns" readonly="readonly" cols="80" rows="5"><?php echo $t_all ?></textarea>
 	</td>
@@ -112,9 +112,9 @@ echo '<br />';
 
 <!-- view issues columns -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'view_issues_columns_title' ), '<span class="required">*</span>' ?>
-	</td>
+	</th>
 	<td>
 		<textarea <?php echo helper_get_tab_index() ?> name="view_issues_columns" cols="80" rows="5"><?php echo $t_view_issues ?></textarea>
 	</td>
@@ -122,9 +122,9 @@ echo '<br />';
 
 <!-- print issues columns -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'print_issues_columns_title' ), '<span class="required">*</span>' ?>
-	</td>
+	</th>
 	<td>
 		<textarea <?php echo helper_get_tab_index() ?> name="print_issues_columns" cols="80" rows="5"><?php echo $t_print_issues ?></textarea>
 	</td>
@@ -132,9 +132,9 @@ echo '<br />';
 
 <!-- csv columns -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'csv_columns_title' ), '<span class="required">*</span>' ?>
-	</td>
+	</th>
 	<td>
 		<textarea <?php echo helper_get_tab_index() ?> name="csv_columns" cols="80" rows="5"><?php echo $t_csv ?></textarea>
 	</td>
@@ -142,9 +142,9 @@ echo '<br />';
 
 <!-- csv columns -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'excel_columns_title' ), '<span class="required">*</span>' ?>
-	</td>
+	</th>
 	<td>
 		<textarea <?php echo helper_get_tab_index() ?> name="excel_columns" cols="80" rows="5"><?php echo $t_excel ?></textarea>
 	</td>
diff --git a/manage_custom_field_edit_page.php b/manage_custom_field_edit_page.php
index 9c083e3..4707435 100644
--- a/manage_custom_field_edit_page.php
+++ b/manage_custom_field_edit_page.php
@@ -76,17 +76,17 @@ $t_definition = custom_field_get_definition( $f_field_id );
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_name' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="text" name="name" size="32" maxlength="64" value="<?php echo string_attribute( $t_definition['name'] ) ?>" />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_type' ) ?>
-			</td>
+			</th>
 			<td>
 				<select name="type">
 					<?php print_enum_string_option_list( 'custom_field_type', $t_definition['type'] ) ?>
@@ -94,33 +94,33 @@ $t_definition = custom_field_get_definition( $f_field_id );
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_possible_values' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="text" name="possible_values" size="32" value="<?php echo string_attribute( $t_definition['possible_values'] ) ?>" />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_default_value' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="text" name="default_value" size="32" maxlength="255" value="<?php echo string_attribute( $t_definition['default_value'] ) ?>" />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_valid_regexp' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="text" name="valid_regexp" size="32" maxlength="255" value="<?php echo string_attribute( $t_definition['valid_regexp'] ) ?>" />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_access_level_r' ) ?>
-			</td>
+			</th>
 			<td>
 				<select name="access_level_r">
 					<?php print_enum_string_option_list( 'access_levels', $t_definition['access_level_r'] ) ?>
@@ -128,9 +128,9 @@ $t_definition = custom_field_get_definition( $f_field_id );
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_access_level_rw' ) ?>
-			</td>
+			</th>
 			<td>
 				<select name="access_level_rw">
 					<?php print_enum_string_option_list( 'access_levels', $t_definition['access_level_rw'] ) ?>
@@ -138,89 +138,89 @@ $t_definition = custom_field_get_definition( $f_field_id );
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_length_min' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="text" name="length_min" size="32" maxlength="64" value="<?php echo $t_definition['length_min'] ?>" />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_length_max' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="text" name="length_max" size="32" maxlength="64" value="<?php echo $t_definition['length_max'] ?>" />
 			</td>
 		</tr>
         <tr <?php echo helper_alternate_class() ?>>
-            <td class="category">
+            <th class="category">
                 <?php echo lang_get( 'custom_field_filter_by' ) ?>
-            </td>
+            </th>
             <td>
                 <input type="checkbox" name="filter_by" <?php if ( $t_definition['filter_by'] ) { ?>checked="checked"<?php } ?>  />
             </td>
         </tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_display_report' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="display_report" value="1" <?php check_checked( $t_definition['display_report'] ) ?> />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_display_update' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="display_update" value="1" <?php check_checked( $t_definition['display_update'] ) ?> />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_display_resolved' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="display_resolved" value="1" <?php check_checked( $t_definition['display_resolved'] ) ?> />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_display_closed' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="display_closed" value="1" <?php check_checked( $t_definition['display_closed'] ) ?> />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_require_report' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="require_report" value="1" <?php check_checked( $t_definition['require_report'] ) ?> />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_require_update' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="require_update" value="1" <?php check_checked( $t_definition['require_update'] ) ?> />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_require_resolved' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="require_resolved" value="1" <?php check_checked( $t_definition['require_resolved'] ) ?> />
 			</td>
 		</tr>
 		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'custom_field_require_closed' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="checkbox" name="require_closed" value="1" <?php check_checked( $t_definition['require_closed'] ) ?> />
 			</td>
@@ -265,9 +265,9 @@ $t_definition = custom_field_get_definition( $f_field_id );
 
 <!-- Assigned Projects -->
 <tr <?php echo helper_alternate_class( 1 ) ?> valign="top">
-	<td class="category" width="30%">
+	<th class="category" width="30%">
 		<?php echo lang_get( 'linked_projects_label' ) ?>
-	</td>
+	</th>
 	<td width="70%">
 		<?php print_custom_field_projects_list( $f_field_id ) ?>
 	</td>
@@ -275,9 +275,9 @@ $t_definition = custom_field_get_definition( $f_field_id );
 
 <!-- Unassigend Project Selection -->
 <tr <?php echo helper_alternate_class() ?> valign="top">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'projects_title_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="project_id[]" multiple="multiple" size="5">
 			<?php print_project_option_list( null, false ); ?>
@@ -287,9 +287,9 @@ $t_definition = custom_field_get_definition( $f_field_id );
 
 <!-- Sequence Number -->
 <tr <?php echo helper_alternate_class() ?> valign="top">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'custom_field_sequence_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="sequence" value="0" />
 	</td>
diff --git a/manage_custom_field_page.php b/manage_custom_field_page.php
index f7a02d4..661a082 100644
--- a/manage_custom_field_page.php
+++ b/manage_custom_field_page.php
@@ -61,21 +61,21 @@ print_manage_menu( 'manage_custom_field_page.php' );
 		</td>
 	</tr>
 	<tr>
-		<td class="category" width="12%">
+		<th class="category" width="12%">
 			<?php echo lang_get( 'custom_field_name' ) ?>
-		</td>
-		<td class="category" width="12%">
+		</th>
+		<th class="category" width="12%">
 			<?php echo lang_get( 'custom_field_project_count' ) ?>
-		</td>
-		<td class="category" width="12%">
+		</th>
+		<th class="category" width="12%">
 			<?php echo lang_get( 'custom_field_type' ) ?>
-		</td>
-		<td class="category" width="40%">
+		</th>
+		<th class="category" width="40%">
 			<?php echo lang_get( 'custom_field_possible_values' ) ?>
-		</td>
-		<td class="category" width="12%">
+		</th>
+		<th class="category" width="12%">
 			<?php echo lang_get( 'custom_field_default_value' ) ?>
-		</td>
+		</th>
 	</tr>
 	<?php
 		$t_custom_fields = custom_field_get_ids();
diff --git a/manage_overview_page.php b/manage_overview_page.php
index b9617a5..5c0d335 100644
--- a/manage_overview_page.php
+++ b/manage_overview_page.php
@@ -60,12 +60,12 @@ print_manage_menu();
 </tr>
 
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category"><?php echo lang_get( 'mantis_version' ) ?></td>
+<th class="category"><?php echo lang_get( 'mantis_version' ) ?></th>
 <td><?php echo MANTIS_VERSION, ( $t_version_suffix ? " $t_version_suffix" : '' ) ?></td>
 </tr>
 
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category"><?php echo lang_get( 'schema_version' ) ?></td>
+<th class="category"><?php echo lang_get( 'schema_version' ) ?></th>
 <td><?php echo config_get( 'database_version' ) ?></td>
 </tr>
 
@@ -78,17 +78,17 @@ $t_is_admin = current_user_is_administrator();
 if ( $t_is_admin ) {
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category"><?php echo lang_get( 'site_path' ) ?></td>
+<th class="category"><?php echo lang_get( 'site_path' ) ?></th>
 <td><?php echo config_get( 'absolute_path' ) ?></td>
 </tr>
 
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category"><?php echo lang_get( 'core_path' ) ?></td>
+<th class="category"><?php echo lang_get( 'core_path' ) ?></th>
 <td><?php echo config_get( 'core_path' ) ?></td>
 </tr>
 
 <tr <?php echo helper_alternate_class() ?>>
-<td class="category"><?php echo lang_get( 'plugin_path' ) ?></td>
+<th class="category"><?php echo lang_get( 'plugin_path' ) ?></th>
 <td><?php echo config_get( 'plugin_path' ) ?></td>
 </tr>
 
diff --git a/manage_proj_cat_edit_page.php b/manage_proj_cat_edit_page.php
index 24021ec..d0da92b 100644
--- a/manage_proj_cat_edit_page.php
+++ b/manage_proj_cat_edit_page.php
@@ -85,9 +85,9 @@ print_manage_menu( 'manage_proj_cat_edit_page.php' );
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'assigned_to' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="assigned_to">
 			<option value="0"></option>
diff --git a/manage_proj_create_page.php b/manage_proj_create_page.php
index 22bf748..b59792d 100644
--- a/manage_proj_create_page.php
+++ b/manage_proj_create_page.php
@@ -79,17 +79,17 @@ $f_parent_id = gpc_get( 'parent_id', null );
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<span class="required">*</span><?php echo lang_get( 'project_name' )?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="name" size="64" maxlength="128" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'status' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="status">
 		<?php print_enum_string_option_list( 'project_status' ) ?>
@@ -97,9 +97,9 @@ $f_parent_id = gpc_get( 'parent_id', null );
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="view_state">
 			<?php print_enum_string_option_list( 'view_state' ) ?>
@@ -107,18 +107,18 @@ $f_parent_id = gpc_get( 'parent_id', null );
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'inherit_global' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="inherit_global" checked="checked" />
 	</td>
 </tr>
 <?php if ( !is_null( $f_parent_id ) ) { ?>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'inherit_parent' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="inherit_parent" checked="checked" />
 	</td>
@@ -134,9 +134,9 @@ $f_parent_id = gpc_get( 'parent_id', null );
 		}
 	?>
 		<tr class="row-2">
-			<td class="category">
+			<th class="category">
 				<?php echo lang_get( 'upload_file_path' ) ?>
-			</td>
+			</th>
 			<td>
 				<input type="text" name="file_path" size="70" maxlength="250" value="<?php echo $t_default_upload_path ?>" />
 			</td>
@@ -145,9 +145,9 @@ $f_parent_id = gpc_get( 'parent_id', null );
 	}
 ?>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'description' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="description" cols="60" rows="5"></textarea>
 	</td>
diff --git a/manage_proj_edit_page.php b/manage_proj_edit_page.php
index 6cb3d54..f02bb54 100644
--- a/manage_proj_edit_page.php
+++ b/manage_proj_edit_page.php
@@ -102,9 +102,9 @@ print_manage_menu( 'manage_proj_edit_page.php' );
 
 <!-- Name -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'project_name' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="name" size="50" maxlength="128" value="<?php echo string_attribute( $row['name'] ) ?>" />
 	</td>
@@ -112,9 +112,9 @@ print_manage_menu( 'manage_proj_edit_page.php' );
 
 <!-- Status -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'status' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="status">
 		<?php print_enum_string_option_list( 'project_status', $row['status'] ) ?>
@@ -124,9 +124,9 @@ print_manage_menu( 'manage_proj_edit_page.php' );
 
 <!-- Enabled -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'enabled' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="enabled" <?php check_checked( $row['enabled'], ON ); ?> />
 	</td>
@@ -134,9 +134,9 @@ print_manage_menu( 'manage_proj_edit_page.php' );
 
 <!-- Category Inheritance -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'inherit_global' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="inherit_global" <?php check_checked( $row['inherit_global'], ON ); ?> />
 	</td>
@@ -144,9 +144,9 @@ print_manage_menu( 'manage_proj_edit_page.php' );
 
 <!-- View Status (public/private) -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="view_state">
 			<?php print_enum_string_option_list( 'view_state', $row['view_state']) ?>
@@ -157,9 +157,9 @@ print_manage_menu( 'manage_proj_edit_page.php' );
 <!-- File upload path (if uploading is enabled) -->
 <?php if ( file_is_uploading_enabled() ) { ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'upload_file_path' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="file_path" size="50" maxlength="250" value="<?php echo string_attribute( $row['file_path'] ) ?>" />
 	</td>
@@ -168,9 +168,9 @@ print_manage_menu( 'manage_proj_edit_page.php' );
 
 <!-- Description -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'description' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="description" cols="60" rows="5"><?php echo string_textarea( $row['description'] ) ?></textarea>
 	</td>
@@ -706,12 +706,12 @@ if ( $t_can_manage_users ) {
 				</td>
 			</tr>
 			<tr class="row-1" valign="top">
-				<td class="category">
+				<th class="category">
 					<?php echo lang_get( 'username' ) ?>
-				</td>
-				<td class="category">
+				</th>
+				<th class="category">
 					<?php echo lang_get( 'access_level' ) ?>
-				</td>
+				</th>
 				<td class="category">&nbsp;  </td>
 			</tr>
 			<tr class="row-1" valign="top">
diff --git a/manage_proj_ver_edit_page.php b/manage_proj_ver_edit_page.php
index a140717..59da6ed 100644
--- a/manage_proj_ver_edit_page.php
+++ b/manage_proj_ver_edit_page.php
@@ -75,17 +75,17 @@ print_manage_menu( 'manage_proj_ver_edit_page.php' );
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'version' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="new_version" size="32" maxlength="64" value="<?php echo string_attribute( $t_version->version ) ?>" />
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'date_order' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" id="date_order" name="date_order" size="32" value="<?php echo (date_is_null( $t_version->date_order ) ? '' : string_attribute( date( config_get( 'calendar_date_format' ), $t_version->date_order ) ) ) ?>" />
 		<?php
@@ -95,25 +95,25 @@ print_manage_menu( 'manage_proj_ver_edit_page.php' );
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'description' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="description" cols="60" rows="5"><?php echo string_attribute( $t_version->description ) ?></textarea>
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'released' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="released" <?php check_checked( $t_version->released, VERSION_RELEASED ); ?> />
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'obsolete' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="obsolete" <?php check_checked( $t_version->obsolete, true ); ?> />
 	</td>
diff --git a/manage_tags_page.php b/manage_tags_page.php
index 5a90a7d..fc800b0 100644
--- a/manage_tags_page.php
+++ b/manage_tags_page.php
@@ -217,9 +217,9 @@ foreach ( $t_result as $t_tag_row ) {
 		</td>
 	</tr>
 	<tr class="row-2">
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'tag_description' ) ?>
-		</td>
+		</th>
 		<td><textarea name="description" cols="80" rows="6"></textarea>
 		</td>
 	</tr>
diff --git a/manage_user_create_page.php b/manage_user_create_page.php
index f64b4ec..9122a86 100644
--- a/manage_user_create_page.php
+++ b/manage_user_create_page.php
@@ -64,9 +64,9 @@ print_manage_menu( 'manage_user_create_page.php' );
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'username' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="username" size="32" maxlength="<?php echo USERLEN;?>" />
 	</td>
@@ -75,9 +75,9 @@ print_manage_menu( 'manage_user_create_page.php' );
 	if ( !$t_ldap || config_get( 'use_ldap_realname' ) == OFF ) {
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'realname' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="text" name="realname" size="32" maxlength="<?php echo REALLEN;?>" />
 	</td>
@@ -88,9 +88,9 @@ print_manage_menu( 'manage_user_create_page.php' );
 	if ( !$t_ldap || config_get( 'use_ldap_email' ) == OFF ) {
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email' ) ?>
-	</td>
+	</th>
 	<td>
 		<?php print_email_input( 'email', '' ) ?>
 	</td>
@@ -101,17 +101,17 @@ print_manage_menu( 'manage_user_create_page.php' );
 	if ( OFF == config_get( 'send_reset_password' ) )  {
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'password' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="password" name="password" size="32" maxlength="<?php echo PASSLEN;?>" />
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'verify_password' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="password" name="password_verify" size="32" maxlength="<?php echo PASSLEN;?>" />
 	</td>
@@ -120,9 +120,9 @@ print_manage_menu( 'manage_user_create_page.php' );
 	}
 ?>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'access_level' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="access_level">
 			<?php print_project_access_levels_option_list( config_get( 'default_new_account_access_level' ) ) ?>
@@ -130,17 +130,17 @@ print_manage_menu( 'manage_user_create_page.php' );
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'enabled' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="enabled" checked="checked" />
 	</td>
 </tr>
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'protected' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="protected" />
 	</td>
diff --git a/manage_user_edit_page.php b/manage_user_edit_page.php
index cfad869..393634d 100644
--- a/manage_user_edit_page.php
+++ b/manage_user_edit_page.php
@@ -100,9 +100,9 @@ print_manage_menu();
 
 <!-- Username -->
 <tr <?php echo helper_alternate_class( 1 ) ?>>
-	<td class="category" width="30%">
+	<th class="category" width="30%">
 		<?php echo lang_get( 'username_label' ) ?>
-	</td>
+	</th>
 	<td width="70%">
 		<input type="text" size="16" maxlength="<?php echo USERLEN;?>" name="username" value="<?php echo $t_user['username'] ?>" />
 	</td>
@@ -110,9 +110,9 @@ print_manage_menu();
 
 <!-- Realname -->
 <tr <?php echo helper_alternate_class( 1 ) ?>>
-	<td class="category" width="30%">
+	<th class="category" width="30%">
 		<?php echo lang_get( 'realname_label' ) ?>
-	</td>
+	</th>
 	<td width="70%">
 		<?php
 			if ( !$t_ldap || config_get( 'use_ldap_realname' ) == OFF ) {
@@ -128,9 +128,9 @@ print_manage_menu();
 
 <!-- Email -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<?php
 			if ( !$t_ldap || config_get( 'use_ldap_email' ) == OFF ) {
@@ -144,9 +144,9 @@ print_manage_menu();
 
 <!-- Access Level -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'access_level_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="access_level">
 			<?php
@@ -162,9 +162,9 @@ print_manage_menu();
 
 <!-- Enabled Checkbox -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'enabled_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="enabled" <?php check_checked( $t_user['enabled'], ON ); ?> />
 	</td>
@@ -172,9 +172,9 @@ print_manage_menu();
 
 <!-- Protected Checkbox -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'protected_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="protected" <?php check_checked( $t_user['protected'], ON ); ?> />
 	</td>
@@ -243,9 +243,9 @@ print_manage_menu();
 
 <!-- Assigned Projects -->
 <tr <?php echo helper_alternate_class( 1 ) ?> valign="top">
-	<td class="category" width="30%">
+	<th class="category" width="30%">
 		<?php echo lang_get( 'assigned_projects_label' ) ?>
-	</td>
+	</th>
 	<td width="70%">
 		<?php print_project_user_list( $t_user['id'] ) ?>
 	</td>
@@ -256,9 +256,9 @@ print_manage_menu();
 		<input type="hidden" name="user_id" value="<?php echo $t_user['id'] ?>" />
 <!-- Unassigend Project Selection -->
 <tr <?php echo helper_alternate_class() ?> valign="top">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'unassigned_projects_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="project_id[]" multiple="multiple" size="5">
 			<?php print_project_user_list_option_list2( $t_user['id'] ) ?>
@@ -268,9 +268,9 @@ print_manage_menu();
 
 <!-- New Access Level -->
 <tr <?php echo helper_alternate_class() ?> valign="top">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'access_level_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="access_level">
 			<?php print_project_access_levels_option_list( config_get( 'default_new_account_access_level' ) ) ?>
diff --git a/news_edit_page.php b/news_edit_page.php
index fc9eb51..48fa6f0 100644
--- a/news_edit_page.php
+++ b/news_edit_page.php
@@ -104,25 +104,25 @@ html_page_top( lang_get( 'edit_news_title' ) );
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<span class="required">*</span><?php echo lang_get( 'headline' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="headline" size="64" maxlength="64" value="<?php echo $v_headline ?>" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<span class="required">*</span><?php echo lang_get( 'body' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="body" cols="60" rows="10"><?php echo $v_body ?></textarea>
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'post_to' ) ?>
-	</td>
+	</th>
 	<td>
 		<select name="project_id">
 		<?php
@@ -145,9 +145,9 @@ html_page_top( lang_get( 'edit_news_title' ) );
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<select name="view_state">
 			<?php print_enum_string_option_list( 'view_state', $v_view_state ) ?>
diff --git a/news_menu_page.php b/news_menu_page.php
index 00ad47b..02f2a72 100644
--- a/news_menu_page.php
+++ b/news_menu_page.php
@@ -61,17 +61,17 @@ html_page_top( lang_get( 'edit_news_link' ) );
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<span class="required">*</span><?php echo lang_get( 'headline' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="headline" size="64" maxlength="64" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<span class="required">*</span><?php echo lang_get( 'body' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="body" cols="60" rows="8"></textarea>
 	</td>
@@ -86,9 +86,9 @@ html_page_top( lang_get( 'edit_news_link' ) );
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'view_status' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<select name="view_state">
 			<?php print_enum_string_option_list( 'view_state' ) ?>
@@ -128,9 +128,9 @@ if ( news_get_count( helper_get_current_project(), current_user_is_administrator
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<?php echo lang_get( 'select_post' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<select name="news_id">
 			<?php print_news_item_option_list() ?>
diff --git a/plugins/MantisCoreFormatting/pages/config.php b/plugins/MantisCoreFormatting/pages/config.php
index 30f2df8..aa09398 100644
--- a/plugins/MantisCoreFormatting/pages/config.php
+++ b/plugins/MantisCoreFormatting/pages/config.php
@@ -50,9 +50,9 @@ print_manage_menu( );
 </tr>
 
 <tr <?php echo helper_alternate_class( )?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'plugin_format_process_urls' )?>
-	</td>
+	</th>
 	<td class="center">
 		<label><input type="radio" name="process_urls" value="1" <?php echo( ON == plugin_config_get( 'process_urls' ) ) ? 'checked="checked" ' : ''?>/>
 			<?php echo lang_get( 'plugin_format_enabled' )?></label>
@@ -64,9 +64,9 @@ print_manage_menu( );
 </tr>
 
 <tr <?php echo helper_alternate_class( )?>>
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'plugin_format_process_buglinks' )?>
-	</td>
+	</th>
 	<td class="center">
 		<label><input type="radio" name="process_buglinks" value="1" <?php echo( ON == plugin_config_get( 'process_buglinks' ) ) ? 'checked="checked" ' : ''?>/>
 			<?php echo lang_get( 'plugin_format_enabled' )?></label>
diff --git a/plugins/MantisGraph/pages/config.php b/plugins/MantisGraph/pages/config.php
index 641d987..bf2b40d 100644
--- a/plugins/MantisGraph/pages/config.php
+++ b/plugins/MantisGraph/pages/config.php
@@ -72,9 +72,9 @@ function print_font_checked( $p_font_name ) {
 </tr>
 
 <tr <?php echo helper_alternate_class( )?>>
-	<td class="category">
+	<th class="category">
 		<?php echo plugin_lang_get( 'library' )?>
-	</td>
+	</th>
 	<td class="center">
 		<label><input type="radio" name="eczlibrary" value="1" <?php echo( ON == plugin_config_get( 'eczlibrary' ) ) ? 'checked="checked" ' : ''?>/><?php echo plugin_lang_get('bundled')?></label>
 	</td>
@@ -86,36 +86,36 @@ function print_font_checked( $p_font_name ) {
 <tr class="spacer"><td></td></tr>
 
 <tr <?php echo helper_alternate_class( )?>>
-	<td class="category">
+	<th class="category">
 		<?php echo plugin_lang_get( 'window_width' )?>
-	</td>
+	</th>
 	<td class="center" colspan="2">
 		<input type="text" name="window_width" value="<?php echo plugin_config_get( 'window_width' )?>" />
 	</td>
 </tr>
 
 <tr <?php echo helper_alternate_class( )?>>
-	<td class="category">
+	<th class="category">
 		<?php echo plugin_lang_get( 'bar_aspect' )?>
-	</td>
+	</th>
 	<td class="center" colspan="2">
 		<input type="text" name="bar_aspect" value="<?php echo plugin_config_get( 'bar_aspect' )?>" />
 	</td>
 </tr>
 
 <tr <?php echo helper_alternate_class( )?>>
-	<td class="category">
+	<th class="category">
 		<?php echo plugin_lang_get( 'summary_graphs_per_row' )?>
-	</td>
+	</th>
 	<td class="center" colspan="2">
 		<input type="text" name="summary_graphs_per_row" value="<?php echo plugin_config_get( 'summary_graphs_per_row' )?>" />
 	</td>
 </tr>
 
 <tr <?php echo helper_alternate_class( )?>>
-	<td class="category">
+	<th class="category">
 		<?php echo plugin_lang_get( 'font' )?>
-	</td>
+	</th>
 	<td style="vertical-align: top">
 		Sans-serif:<br />
 		<label><input type="radio" name="font" value="arial"<?php echo print_font_checked( 'arial' )?>/>Arial</label><br />
diff --git a/plugins/XmlImportExport/pages/import.php b/plugins/XmlImportExport/pages/import.php
index 429c64e..074317c 100644
--- a/plugins/XmlImportExport/pages/import.php
+++ b/plugins/XmlImportExport/pages/import.php
@@ -69,9 +69,9 @@ if( ALL_PROJECTS == $t_project_id ) {
 </tr>
 
 <tr class="row-2">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 	<?php echo plugin_lang_get( 'cross_references' );?>
-	</td>
+	</th>
 	<td>
 	<p><?php echo plugin_lang_get( 'default_strategy' );?>
 	<select name="strategy">
@@ -96,7 +96,7 @@ if( ALL_PROJECTS == $t_project_id ) {
 </tr>
 
 <tr class="row-2">
-	<td class="category" width="25%"><?php echo lang_get( 'categories' );?></td>
+	<th class="category" width="25%"><?php echo lang_get( 'categories' );?></th>
 	<td>
 	<p><label for="keepcategory"><?php echo plugin_lang_get( 'keep_same_category' );?></label>
 	<input type="checkbox" checked=checked id="keepcategory" name="keepcategory" /></p>
diff --git a/print_all_bug_options_inc.php b/print_all_bug_options_inc.php
index 3bd92e6..02a97e6 100644
--- a/print_all_bug_options_inc.php
+++ b/print_all_bug_options_inc.php
@@ -162,9 +162,9 @@ for ($i=0 ; $i <$field_name_count ; $i++) {
 	printf ( '<tr %s>', helper_alternate_class( $i ) );
 ?>
 
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( $t_field_name_arr[$i] ) ?>
-	</td>
+	</th>
 	<td>
 		<input type="checkbox" name="<?php echo 'print_' . $t_field_name_arr[$i]; ?>"
 		<?php if ( isset( $t_prefs[$i] ) && ( $t_prefs[$i]==1 ) ) echo 'checked="checked"' ?> />
diff --git a/print_bug_page.php b/print_bug_page.php
index 9a87da1..d9dfb8a 100644
--- a/print_bug_page.php
+++ b/print_bug_page.php
@@ -223,7 +223,7 @@ if ( $tpl_show_id || $tpl_show_project || $tpl_show_category || $tpl_show_view_s
 
 if ( $tpl_show_reporter ) {
 	echo '<tr class="print">';
-	echo '<td class="print-category">', lang_get( 'reporter' ), '</td>';
+	echo '<th class="print-category">', lang_get( 'reporter' ), '</th>';
 	echo '<td class="print">';
 	print_user_with_subject( $tpl_bug->reporter_id, $f_bug_id );
 	echo '</td>';
@@ -241,7 +241,7 @@ if ( $tpl_show_handler || $tpl_show_due_date ) {
 	echo '<tr class="print">';
 
 	if ( $tpl_show_handler ) {
-		echo '<td class="print-category">', lang_get( 'assigned_to' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'assigned_to' ), '</th>';
 		echo '<td class="print">';
 		print_user_with_subject( $tpl_bug->handler_id, $f_bug_id );
 		echo '</td>';
@@ -250,7 +250,7 @@ if ( $tpl_show_handler || $tpl_show_due_date ) {
 	}
 
 	if ( $tpl_show_due_date ) {
-		echo '<td class="print-category">', lang_get( 'due_date' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'due_date' ), '</th>';
 		echo '<td class="print">', $tpl_due_date, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -270,21 +270,21 @@ if ( $tpl_show_priority || $tpl_show_severity || $tpl_show_reproducibility ) {
 	$t_spacer = 0;
 
 	if ( $tpl_show_priority ) {
-		echo '<td class="print-category">', lang_get( 'priority' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'priority' ), '</th>';
 		echo '<td class="print">', $tpl_priority, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_severity ) {
-		echo '<td class="print-category">', lang_get( 'severity' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'severity' ), '</th>';
 		echo '<td class="print">', $tpl_severity, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_reproducibility ) {
-		echo '<td class="print-category">', lang_get( 'reproducibility' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'reproducibility' ), '</th>';
 		echo '<td class="print">', $tpl_reproducibility, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -307,14 +307,14 @@ if ( $tpl_show_status || $tpl_show_resolution ) {
 	$t_spacer = 2;
 
 	if ( $tpl_show_status ) {
-		echo '<td class="print-category">', lang_get( 'status' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'status' ), '</th>';
 		echo '<td class="print">', $tpl_status, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_resolution ) {
-		echo '<td class="print-category">', lang_get( 'resolution' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'resolution' ), '</th>';
 		echo '<td class="print">', $tpl_resolution, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -334,14 +334,14 @@ if ( $tpl_show_projection || $tpl_show_eta ) {
 	echo '<tr class="print">';
 
 	if ( $tpl_show_projection ) {
-		echo '<td class="print-category">', lang_get( 'projection' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'projection' ), '</th>';
 		echo '<td class="print">', $tpl_projection, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_eta ) {
-		echo '<td class="print-category">', lang_get( 'eta' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'eta' ), '</th>';
 		echo '<td class="print">', $tpl_eta, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -361,21 +361,21 @@ if ( $tpl_show_platform || $tpl_show_os || $tpl_show_os_version ) {
 	$t_spacer = 0;
 
 	if ( $tpl_show_platform ) {
-		echo '<td class="print-category">', lang_get( 'platform' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'platform' ), '</th>';
 		echo '<td class="print">', $tpl_platform, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_os ) {
-		echo '<td class="print-category">', lang_get( 'os' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'os' ), '</th>';
 		echo '<td class="print">', $tpl_os, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_os_version ) {
-		echo '<td class="print-category">', lang_get( 'os_version' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'os_version' ), '</th>';
 		echo '<td class="print">', $tpl_os_version, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -398,14 +398,14 @@ if ( $tpl_show_product_version || $tpl_show_product_build ) {
 	$t_spacer = 2;
 
 	if ( $tpl_show_product_version ) {
-		echo '<td class="print-category">', lang_get( 'product_version' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'product_version' ), '</th>';
 		echo '<td class="print">', $tpl_product_version, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_product_build ) {
-		echo '<td class="print-category">', lang_get( 'product_build' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'product_build' ), '</th>';
 		echo '<td class="print">', $tpl_product_build, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -425,14 +425,14 @@ if ( $tpl_show_target_version || $tpl_show_fixed_in_version ) {
 	$t_spacer = 2;
 
 	if ( $tpl_show_target_version ) {
-		echo '<td class="print-category">', lang_get( 'target_version' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'target_version' ), '</th>';
 		echo '<td class="print">', $tpl_target_version, '</td>';
 	} else {
 		$t_spacer += 2;
 	}
 
 	if ( $tpl_show_fixed_in_version ) {
-		echo '<td class="print-category">', lang_get( 'fixed_in_version' ), '</td>';
+		echo '<th class="print-category">', lang_get( 'fixed_in_version' ), '</th>';
 		echo '<td class="print">', $tpl_fixed_in_version, '</td>';
 	} else {
 		$t_spacer += 2;
@@ -451,7 +451,7 @@ foreach( $t_related_custom_field_ids as $t_id ) {
 	$t_def = custom_field_get_definition( $t_id );
 
 	echo '<tr class="print">';
-	echo '<td class="print-category">', string_display_line( lang_get_defaulted( $t_def['name'] ) ), '</td>';
+	echo '<th class="print-category">', string_display_line( lang_get_defaulted( $t_def['name'] ) ), '</th>';
 	echo '<td class="print" colspan="4">';
 	print_custom_field_value( $t_def, $t_id, $f_bug_id );
 	echo '</td>';
@@ -462,28 +462,28 @@ echo '<tr><td class="print-spacer" colspan="6"><hr size="1" /></td></tr>';
 
 if ( $tpl_show_summary ) {
 	echo '<tr class="print">';
-	echo '<td class="print-category">', lang_get( 'summary' ), '</td>';
+	echo '<th class="print-category">', lang_get( 'summary' ), '</th>';
 	echo '<td class="print" colspan="5">', $tpl_summary, '</td>';
 	echo '</tr>';
 }
 
 if ( $tpl_show_description ) {
 	echo '<tr class="print">';
-	echo '<td class="print-category">', lang_get( 'description' ), '</td>';
+	echo '<th class="print-category">', lang_get( 'description' ), '</th>';
 	echo '<td class="print" colspan="5">', $tpl_description, '</td>';
 	echo '</tr>';
 }
 
 if ( $tpl_show_steps_to_reproduce ) {
 	echo '<tr class="print">';
-	echo '<td class="print-category">', lang_get( 'steps_to_reproduce' ), '</td>';
+	echo '<th class="print-category">', lang_get( 'steps_to_reproduce' ), '</th>';
 	echo '<td class="print" colspan="5">', $tpl_steps_to_reproduce, '</td>';
 	echo '</tr>';
 }
 
 if ( $tpl_show_additional_information ) {
 	echo '<tr class="print">';
-	echo '<td class="print-category">', lang_get( 'additional_information' ), '</td>';
+	echo '<th class="print-category">', lang_get( 'additional_information' ), '</th>';
 	echo '<td class="print" colspan="5">', $tpl_additional_information, '</td>';
 	echo '</tr>';
 }
@@ -491,7 +491,7 @@ if ( $tpl_show_additional_information ) {
 # Tagging
 if ( $tpl_show_tags ) {
 	echo "<tr class=\"print\">";
-	echo '<td class="print-category">', lang_get( 'tags' ), '</td>';
+	echo '<th class="print-category">', lang_get( 'tags' ), '</th>';
 	echo '<td class="print" colspan="5">';
 	tag_display_attached( $f_bug_id );
 	echo '</td></tr>';
@@ -503,7 +503,7 @@ echo "<td class=\"print\" colspan=\"5\">" . relationship_get_summary_html_previe
 
 if ( $tpl_show_attachments ) {
 	echo '<tr class="print">';
-	echo '<td class="print-category">', lang_get( 'attached_files' ), '</td>';
+	echo '<th class="print-category">', lang_get( 'attached_files' ), '</th>';
 	echo '<td class="print" colspan="5">';
 
 	$t_attachments = file_get_visible_attachments( $f_bug_id );
@@ -538,13 +538,13 @@ if ( $tpl_show_attachments ) {
 echo '<tr><td class="print-spacer" colspan="6"><hr size="1" /></td></tr>';
 
 # ISSUE HISTORY
-echo '<tr><td class="form-title">', lang_get( 'bug_history' ), '</td></tr>';
+echo '<tr><th class="form-title">', lang_get( 'bug_history' ), '</th></tr>';
 
 echo '<tr class="print-category">';
-echo '<td class="row-category-history">', lang_get( 'date_modified' ), '</td>';
-echo '<td class="row-category-history">', lang_get( 'username' ), '</td>';
-echo '<td class="row-category-history">', lang_get( 'field' ), '</td>';
-echo '<td class="row-category-history">', lang_get( 'change' ), '</td>';
+echo '<th class="row-category-history">', lang_get( 'date_modified' ), '</th>';
+echo '<th class="row-category-history">', lang_get( 'username' ), '</th>';
+echo '<th class="row-category-history">', lang_get( 'field' ), '</th>';
+echo '<th class="row-category-history">', lang_get( 'change' ), '</th>';
 echo '</tr>';
 
 foreach ( $t_history as $t_item ) {
diff --git a/proj_doc_add_page.php b/proj_doc_add_page.php
index 1591a00..6350341 100644
--- a/proj_doc_add_page.php
+++ b/proj_doc_add_page.php
@@ -67,17 +67,17 @@ html_page_top();
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="25%">
+	<th class="category" width="25%">
 		<span class="required">*</span><?php echo lang_get( 'title' ) ?>
-	</td>
+	</th>
 	<td width="75%">
 		<input type="text" name="title" size="70" maxlength="250" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'description' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="description" cols="60" rows="7"></textarea>
 	</td>
diff --git a/proj_doc_edit_page.php b/proj_doc_edit_page.php
index 8539ace..31eeab8 100644
--- a/proj_doc_edit_page.php
+++ b/proj_doc_edit_page.php
@@ -92,25 +92,25 @@ html_page_top();
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="20%">
+	<th class="category" width="20%">
 		<span class="required">*</span><?php echo lang_get( 'title' ) ?>
-	</td>
+	</th>
 	<td width="80%">
 		<input type="text" name="title" size="70" maxlength="250" value="<?php echo $v_title ?>" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'description' ) ?>
-	</td>
+	</th>
 	<td>
 		<textarea name="description" cols="60" rows="7"><?php echo $v_description ?></textarea>
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'filename' ) ?>
-	</td>
+	</th>
 	<td>
 		<?php
 			$t_href = '<a href="file_download.php?file_id='.$v_id.'&amp;type=doc">';
diff --git a/signup_page.php b/signup_page.php
index a8704da..95e34c2 100644
--- a/signup_page.php
+++ b/signup_page.php
@@ -68,17 +68,17 @@ $t_public_key = crypto_generate_uri_safe_nonce( 64 );
 	</td>
 </tr>
 <tr class="row-1">
-	<td class="category" width="30%">
+	<th class="category" width="30%">
 		<?php echo lang_get( 'username_label' ) ?>
-	</td>
+	</th>
 	<td width="70%" colspan="2">
 		<input type="text" name="username" size="32" maxlength="<?php echo USERLEN;?>" />
 	</td>
 </tr>
 <tr class="row-2">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'email_label' ) ?>
-	</td>
+	</th>
 	<td colspan="2">
 		<?php print_email_input( 'email', '' ) ?>
 	</td>
@@ -89,9 +89,9 @@ $t_public_key = crypto_generate_uri_safe_nonce( 64 );
 		# captcha image requires GD library and related option to ON
 ?>
 <tr class="row-1">
-	<td class="category">
+	<th class="category">
 		<?php echo lang_get( 'signup_captcha_request_label' ) ?>
-	</td>
+	</th>
 	<td>
 		<?php print_captcha_input( 'captcha', '' ) ?>
 	</td>
diff --git a/tag_attach.php b/tag_attach.php
index 954be81..c5e24ec 100644
--- a/tag_attach.php
+++ b/tag_attach.php
@@ -115,9 +115,9 @@ if ( count( $t_tags_failed ) > 0 ) {
 	foreach( $t_tags_failed as $t_tag_row ) {
 		echo '<tr ',helper_alternate_class(),'>';
 		if ( -1 == $t_tag_row['id'] ) {
-			echo '<td class="category">', lang_get( 'tag_create_denied' ), '</td>';
+			echo '<th class="category">', lang_get( 'tag_create_denied' ), '</th>';
 		} else if ( -2 == $t_tag_row['id'] ) {
-			echo '<td class="category">', lang_get( 'tag_invalid_name' ), '</td>';
+			echo '<th class="category">', lang_get( 'tag_invalid_name' ), '</th>';
 		}
 		echo '<td>', string_html_specialchars( $t_tag_row['name'] ), '</td></tr>';
 
@@ -129,7 +129,7 @@ if ( count( $t_tags_failed ) > 0 ) {
 ?>
 	<tr class="spacer"><td colspan="2"></td></tr>
 	<tr <?php echo helper_alternate_class() ?>>
-	<td class="category"><?php echo lang_get( 'tag_attach_long' ) ?></td>
+	<th class="category"><?php echo lang_get( 'tag_attach_long' ) ?></th>
 	<td>
 <?php
 	print_tag_attach_form( $f_bug_id, $t_tag_string );
diff --git a/tag_update_page.php b/tag_update_page.php
index ee30547..2154b9f 100644
--- a/tag_update_page.php
+++ b/tag_update_page.php
@@ -127,7 +127,7 @@ html_page_top( sprintf( lang_get( 'tag_update' ), $t_name ) );
 
 <!-- Description -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category"><?php echo lang_get( 'tag_description' ) ?></td>
+	<th class="category"><?php echo lang_get( 'tag_description' ) ?></th>
 	<td colspan="4">
 		<textarea name="description" <?php echo helper_get_tab_index() ?> cols="80" rows="6"><?php echo string_textarea( $t_description ) ?></textarea>
 	</td>
diff --git a/tag_view_page.php b/tag_view_page.php
index 45ee755..ef02ed1 100644
--- a/tag_view_page.php
+++ b/tag_view_page.php
@@ -100,7 +100,7 @@ html_page_top( sprintf( lang_get( 'tag_details' ), $t_name ) );
 
 <!-- Description -->
 <tr <?php echo helper_alternate_class() ?>>
-	<td class="category"><?php echo lang_get( 'tag_description' ) ?></td>
+	<th class="category"><?php echo lang_get( 'tag_description' ) ?></th>
 	<td colspan="4"><?php echo $t_description ?></td>
 </tr>
 
@@ -109,7 +109,7 @@ html_page_top( sprintf( lang_get( 'tag_details' ), $t_name ) );
 	$t_tags_related = tag_stats_related( $f_tag_id );
 	if ( count( $t_tags_related ) ) {
 		echo '<tr ',helper_alternate_class(),'>';
-		echo '<td class="category" rowspan="',count( $t_tags_related ),'">',lang_get( 'tag_related' ),'</td>';
+		echo '<th class="category" rowspan="',count( $t_tags_related ),'">',lang_get( 'tag_related' ),'</th>';
 
 		$i = 0;
 		foreach( $t_tags_related as $t_tag ) {
diff --git a/view_filters_page.php b/view_filters_page.php
index 2ed5c1b..a03a149 100644
--- a/view_filters_page.php
+++ b/view_filters_page.php
@@ -228,13 +228,13 @@ $t_show_tags = access_has_global_level( config_get( 'tag_view_threshold' ) );
 	</td>
 </tr>
 <tr class="row-category2">
-	<td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'reporter' ) ?></td>
-	<td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'monitored_by' ) ?></td>
-	<td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'assigned_to' ) ?></td>
-	<td class="small-caption" colspan="<?php echo ( 2 * $t_custom_cols ); ?>"><?php echo lang_get( 'category' ) ?></td>
-	<td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'severity' ) ?></td>
-	<td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'resolution' ) ?></td>
-	<td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'profile' ) ?></td>
+	<th class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'reporter' ) ?></th>
+	<th class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'monitored_by' ) ?></th>
+	<th class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'assigned_to' ) ?></th>
+	<th class="small-caption" colspan="<?php echo ( 2 * $t_custom_cols ); ?>"><?php echo lang_get( 'category' ) ?></th>
+	<th class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'severity' ) ?></th>
+	<th class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'resolution' ) ?></th>
+	<th class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'profile' ) ?></th>
 	<!-- <td colspan="<?php echo ( ( $t_filter_cols - 8 ) * $t_custom_cols ); ?>">&nbsp;</td> -->
 </tr>
 <tr class="row-1">
diff --git a/view_user_page.php b/view_user_page.php
index c51a7a0..d5fa4f2 100644
--- a/view_user_page.php
+++ b/view_user_page.php
@@ -81,17 +81,17 @@ html_page_top();
 		</td>
 	</tr>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category" width="25%">
+		<th class="category" width="25%">
 			<?php echo lang_get( 'username' ) ?>
-		</td>
+		</th>
 		<td width="75%">
 			<?php echo string_display_line( $u_username ) ?>
 		</td>
 	</tr>
 	<tr <?php echo helper_alternate_class() ?>>
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'email' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php
 				if ( ! ( $t_can_manage || $t_can_see_email ) ) {
@@ -107,9 +107,9 @@ html_page_top();
 		</td>
 	</tr>
 	<tr <?php echo helper_alternate_class() ?> valign="top">
-		<td class="category">
+		<th class="category">
 			<?php echo lang_get( 'realname' ) ?>
-		</td>
+		</th>
 		<td>
 			<?php
 				if ( ! ( $t_can_manage || $t_can_see_realname ) ) {
-- 
1.7.0.2


From acbbdf93bf9a7501460c3059217a115de3ecdfb6 Mon Sep 17 00:00:00 2001
From: Kornel Lesinski <kornel@aardvarkmedia.co.uk>
Date: Thu, 6 May 2010 14:29:42 +0100
Subject: [PATCH 10/10] Added CSS class name to user links, replaced <font> with <del>.

---
 core/prepare_api.php |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/core/prepare_api.php b/core/prepare_api.php
index 0b6eeff..795be77 100644
--- a/core/prepare_api.php
+++ b/core/prepare_api.php
@@ -72,14 +72,11 @@ function prepare_user_name( $p_user_id ) {
 	}
 
 	$t_username = user_get_name( $p_user_id );
+	$t_username = string_display_line( $t_username );
 	if( user_exists( $p_user_id ) && user_get_field( $p_user_id, 'enabled' ) ) {
-		$t_username = string_display_line( $t_username );
-		return '<a href="' . string_sanitize_url( 'view_user_page.php?id=' . $p_user_id, true ) . '">' . $t_username . '</a>';
+		return '<a class="user" href="' . string_sanitize_url( 'view_user_page.php?id=' . $p_user_id, true ) . '">' . $t_username . '</a>';
 	} else {
-		$t_result = '<font STYLE="text-decoration: line-through">';
-		$t_result .= string_display_line( $t_username );
-		$t_result .= '</font>';
-		return $t_result;
+		return '<del class="user">' . $t_username . '</del>';
 	}
 }
 
-- 
1.7.0.2

2_css_classnames.patch (155,492 bytes)
klkl

klkl

2010-05-06 10:02

reporter  

3_display_options.patch (7,170 bytes)
From d23cf5dde37c1ff3f54dd2f6833b50567cdb3093 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Tue, 4 May 2010 16:08:27 +0100
Subject: [PATCH 1/2] Option to linkify bug summaries on My View page

---
 config_defaults_inc.php |    8 +++++++-
 my_view_inc.php         |    9 ++++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/config_defaults_inc.php b/config_defaults_inc.php
index 7fb5225..b7a3f79 100644
--- a/config_defaults_inc.php
+++ b/config_defaults_inc.php
@@ -871,7 +871,7 @@ $g_severity_significant_threshold = MAJOR;
  * they conflict with other configuration. Or if the current user doesn't have
  * the necessary access level to view them. For example, sponsorship_total will
  * be removed if sponsorships are disabled. To include custom field 'xyz',
- include the column name as 'custom_xyz'.
+ * include the column name as 'custom_xyz'.
  *
  * Standard Column Names (i.e. names to choose from):
  * selection, edit, id, project_id, reporter_id, handler_id, priority,
@@ -1032,6 +1032,12 @@ $g_show_changelog_dates = ON;
  */
 $g_show_roadmap_dates = ON;
 
+/**
+ * Show summaries on My View page as links to bugs
+ * @global int $g_show_summary_as_link
+ */
+$g_show_summary_as_link = ON;
+
 /**************************
  * MantisBT Time Settings *
  **************************/
diff --git a/my_view_inc.php b/my_view_inc.php
index 21284a5..c730974 100644
--- a/my_view_inc.php
+++ b/my_view_inc.php
@@ -508,7 +508,14 @@ echo "<span class=\"my-buglist-count\">($v_start - $v_end / $t_bug_count)</span>
 		 	if( ON == config_get( 'show_bug_project_links' ) && helper_get_current_project() != $t_bug->project_id ) {
 				echo '<span class="small project">[', string_display_line( project_get_name( $t_bug->project_id ) ), '] </span>';
 			}
-			echo '<span class="small summary">', $t_summary, '<br /></span>';
+
+			echo '<span class="small summary">';
+			if ( ON == config_get( 'show_summary_as_link' ) ) {
+			    echo '<a href="' . string_get_bug_view_url( $t_bug->id, null ) . '">', $t_summary, '</a>';
+		    } else {
+			    echo $t_summary;
+	        }
+			echo '<br /></span>';
 	?>
 		<?php
 	# type project name if viewing 'all projects' or bug is in subproject
-- 
1.7.0.2


From 12a9b47db6332f9f70bee3155cfc134baf3cefd6 Mon Sep 17 00:00:00 2001
From: Kornel <kornel@aardvarkmedia.co.uk>
Date: Wed, 5 May 2010 12:03:38 +0100
Subject: [PATCH 2/2] Added config option to disable showing of new window links ([^]).

---
 config_defaults_inc.php |    5 +++++
 core/html_api.php       |    9 ++++++++-
 core/print_api.php      |    6 +++++-
 core/string_api.php     |    8 +++++++-
 my_view_inc.php         |    4 +++-
 5 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/config_defaults_inc.php b/config_defaults_inc.php
index b7a3f79..2303cb8 100644
--- a/config_defaults_inc.php
+++ b/config_defaults_inc.php
@@ -1038,6 +1038,11 @@ $g_show_roadmap_dates = ON;
  */
 $g_show_summary_as_link = ON;
 
+/**
+ * Append [ ^ ] new-window link to some links
+ */
+$g_show_new_window_links = ON;
+
 /**************************
  * MantisBT Time Settings *
  **************************/
diff --git a/core/html_api.php b/core/html_api.php
index dc3f65c..1e99f61 100644
--- a/core/html_api.php
+++ b/core/html_api.php
@@ -605,7 +605,14 @@ function html_footer( $p_file = null ) {
 	echo '<table border="0" width="100%" cellspacing="0" cellpadding="0"><tr valign="top"><td>';
 	if( ON == config_get( 'show_version' ) ) {
 		$t_version_suffix = config_get_global( 'version_suffix' );
-		echo "\t", '<span class="timer"><a href="http://www.mantisbt.org/" title="Free Web Based Bug Tracker">MantisBT ', MANTIS_VERSION, ( $t_version_suffix ? " $t_version_suffix" : '' ), '</a>', '[<a href="http://www.mantisbt.org/"  title="Free Web Based Bug Tracker" target="_blank">^</a>]</span>', "\n";
+
+		if ( ON === config_get('show_new_window_links') ) {
+		    $t_new_window_link = '[<a href="http://www.mantisbt.org/"  title="Free Web Based Bug Tracker" target="_blank">^</a>]</span>';
+	    } else {
+	        $t_new_window_link = '';
+        }
+
+		echo "\t", '<span class="timer"><a href="http://www.mantisbt.org/" title="Free Web Based Bug Tracker">MantisBT ', MANTIS_VERSION, ( $t_version_suffix ? " $t_version_suffix" : '' ), '</a>', $t_new_window_link , "\n";
 	}
 	echo "\t", '<address>Copyright &copy; 2000 - 2010 MantisBT Group</address>', "\n";
 
diff --git a/core/print_api.php b/core/print_api.php
index 7a7486a..0127c93 100644
--- a/core/print_api.php
+++ b/core/print_api.php
@@ -1677,7 +1677,11 @@ function print_bug_attachments_list( $p_bug_id ) {
 			$t_href_start = "<a href=\"file_download.php?file_id={$t_attachment['id']}&amp;type=bug\">";
 			$t_href_end = '</a>';
 
-			$t_href_clicket = " <span class=\"bracket-link bracket-link-new-window\">[<a class=\"new-window\" href=\"file_download.php?file_id={$t_attachment['id']}&amp;type=bug\" target=\"_blank\">^</a>]</span>";
+            if ( ON === config_get('show_new_window_links') ) {
+			    $t_href_clicket = " <span class=\"bracket-link bracket-link-new-window\">[<a class=\"new-window\" href=\"file_download.php?file_id={$t_attachment['id']}&amp;type=bug\" target=\"_blank\">^</a>]</span>";
+		    } else {
+		        $t_href_clicket = '';
+	        }
 		} else {
 			$t_href_start = '';
 			$t_href_end = '';
diff --git a/core/string_api.php b/core/string_api.php
index 8f1367f..ac015d9 100644
--- a/core/string_api.php
+++ b/core/string_api.php
@@ -473,7 +473,13 @@ function string_insert_hrefs( $p_string ) {
 		$s_url_regex = "/(([[:alpha:]][-+.[:alnum:]]*):\/\/(${t_url_part1}*?${t_url_part2}+))/sue";
 	}
 
-	$p_string = preg_replace( $s_url_regex, "'<a href=\"'.rtrim('\\1','.').'\">\\1</a> <span class=\"bracket-link bracket-link-new-window\">[<a class=\"new-window\" href=\"'.rtrim('\\1','.').'\" target=\"_blank\">^</a>]</span>'", $p_string );
+    if ( ON === config_get('show_new_window_links') ) {
+        $t_new_window_link_regex = " <span class=\"bracket-link bracket-link-new-window\">[<a class=\"new-window\" href=\"'.rtrim('\\1','.').'\" target=\"_blank\">^</a>]</span>";
+    } else {
+        $t_new_window_link_regex = '';
+    }
+
+	$p_string = preg_replace( $s_url_regex, "'<a href=\"'.rtrim('\\1','.').'\">\\1</a>$t_new_window_link_regex'", $p_string );
 	if( $t_change_quotes ) {
 		ini_set( 'magic_quotes_sybase', true );
 	}
diff --git a/my_view_inc.php b/my_view_inc.php
index c730974..62e8d86 100644
--- a/my_view_inc.php
+++ b/my_view_inc.php
@@ -423,7 +423,9 @@ $box_title = lang_get( 'my_view_title_' . $t_box_title );
 <?php
 print_link( 'view_all_set.php?type=1&temporary=y&' . $url_link_parameters[$t_box_title], $box_title, false, 'subtle' );
 echo '&nbsp;';
-print_bracket_link( 'view_all_set.php?type=1&temporary=y&' . $url_link_parameters[$t_box_title], '^', true, 'subtle' );
+if ( ON === config_get('show_new_window_links') ) {
+    print_bracket_link( 'view_all_set.php?type=1&temporary=y&' . $url_link_parameters[$t_box_title], '^', true, 'subtle' );
+}
 
 if( count( $rows ) > 0 ) {
 	$v_start = $t_filter[FILTER_PROPERTY_ISSUES_PER_PAGE] * ( $f_page_number - 1 ) + 1;
-- 
1.7.0.2

3_display_options.patch (7,170 bytes)
dhx

dhx

2010-05-09 07:14

reporter   ~0025442

Thanks Kornel for another great set of patches! I've applied the first and second patchset (1 and 2) as-is without changes. I didn't apply patchset 3 (display options) as I felt we didn't need options for display options so insignificant.

Hence I've redone patchset 3 by removing the old [^] new window link completely (see 0011896) and by always adding hyperlinks to issue summaries on my_view_page (see 0011898).

Just one request... in the future are you able to split patches between multiple issues at mantisbt.org/bugs (one issue # for each feature or significant set of changes)?

Thanks again for helping out the MantisBT project! Great work :)

grangeway

grangeway

2013-04-05 17:57

reporter   ~0036487

Marking as 'acknowledged' not resolved/closed to track that change gets ported to master-2.0.x branch

Issue History

Date Modified Username Field Change
2010-05-06 10:01 klkl New Issue
2010-05-06 10:01 klkl File Added: 1_html_validity.patch
2010-05-06 10:01 klkl File Added: 2_css_classnames.patch
2010-05-06 10:02 klkl File Added: 3_display_options.patch
2010-05-06 20:18 dhx Assigned To => dhx
2010-05-06 20:18 dhx Status new => assigned
2010-05-06 20:18 dhx Target Version => 1.3.0-beta.1
2010-05-08 23:23 dhx Relationship added related to 0011896
2010-05-09 07:08 dhx Relationship added related to 0011898
2010-05-09 07:14 dhx Note Added: 0025442
2010-05-09 07:14 dhx Status assigned => resolved
2010-05-09 07:14 dhx Fixed in Version => 1.3.0-beta.1
2010-05-09 07:14 dhx Resolution open => fixed
2010-09-19 03:12 dhx Status resolved => closed
2013-04-05 17:57 grangeway Status closed => acknowledged
2013-04-05 17:57 grangeway Note Added: 0036487
2013-04-05 18:05 grangeway Relationship added related to 0015721
2013-04-06 03:44 dregad Status acknowledged => resolved
2013-04-06 07:20 grangeway Status resolved => acknowledged
2013-04-06 09:26 dregad Tag Attached: 2.0.x check
2013-04-06 09:26 dregad Status acknowledged => resolved
2014-09-23 18:05 grangeway Tag Detached: 2.0.x check
2014-12-08 00:34 vboctor Status resolved => closed