Index: bug_change_status_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_change_status_page.php,v
retrieving revision 1.28
diff -u -r1.28 bug_change_status_page.php
--- bug_change_status_page.php	13 Jul 2007 07:58:26 -0000	1.28
+++ bug_change_status_page.php	27 Jul 2007 15:27:45 -0000
@@ -154,33 +154,14 @@
 
 <!-- Custom Fields -->
 <?php
-# @@@ thraxisp - I undid part of the change for #5068 for #5527
-#  We really need to say what fields are shown in which statusses. For now,
-#  this page will show required custom fields in update mode, or 
-#  display or required fields on resolve or close
-$t_custom_status_label = "update"; # Don't show custom fields by default
-if ( ( $f_new_status == $t_resolved ) &&
-			( CLOSED > $f_new_status ) ) {
-	$t_custom_status_label = "resolved";
-}
-if ( CLOSED == $f_new_status ) {
-	$t_custom_status_label = "closed";
-}
 
-$t_related_custom_field_ids = custom_field_get_linked_ids( bug_get_field( $f_bug_id, 'project_id' ) );
+$t_related_custom_field_ids = custom_field_get_linked_status_ids( bug_get_field( $f_bug_id, 'project_id' ), $f_new_status );
 
 foreach( $t_related_custom_field_ids as $t_id ) {
-	$t_def = custom_field_get_definition( $t_id );
-	$t_display = $t_def['display_' . $t_custom_status_label];
-	$t_require = $t_def['require_' . $t_custom_status_label];
-	
-	if ( ( "update" == $t_custom_status_label ) && ( ! $t_require ) ) {
-        continue;
-	}
-	if ( in_array( $t_custom_status_label, array( "resolved", "closed" ) ) && ! ( $t_display || $t_require ) ) {
-        continue;
-	}
-	if ( custom_field_has_write_access( $t_id, $f_bug_id ) ) {
+	$t_def = custom_field_get_definition( $t_id[0] );
+	$t_require = $t_id[1];
+
+	if ( custom_field_has_write_access( $t_id[0], $f_bug_id ) ) {
 ?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
@@ -193,20 +174,20 @@
 	</td>
 </tr>
 <?php
-	} #  custom_field_has_write_access( $t_id, $f_bug_id ) )
-	else if ( custom_field_has_read_access( $t_id, $f_bug_id ) ) {
+	} #  custom_field_has_write_access( $t_id[0], $f_bug_id ) )
+	else if ( custom_field_has_read_access( $t_id[0], $f_bug_id ) ) {
 ?>
 	<tr <?php echo helper_alternate_class() ?>>
 		<td class="category">
 			<?php echo lang_get_defaulted( $t_def['name'] ) ?>
 		</td>
 		<td>
-			<?php print_custom_field_value( $t_def, $t_id, $f_bug_id );			?>
+			<?php print_custom_field_value( $t_def, $t_id[0], $f_bug_id );			?>
 		</td>
 	</tr>
 <?php
-	} # custom_field_has_read_access( $t_id, $f_bug_id ) )
-} # foreach( $t_related_custom_field_ids as $t_id )
+	} # custom_field_has_read_access( $t_id[0], $f_bug_id ) )
+} # foreach( $t_related_custom_field_ids as $t_id[0] )
 ?>
 
 <?php
Index: bug_report_advanced_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_report_advanced_page.php,v
retrieving revision 1.65
diff -u -r1.65 bug_report_advanced_page.php
--- bug_report_advanced_page.php	13 Jul 2007 07:58:27 -0000	1.65
+++ bug_report_advanced_page.php	27 Jul 2007 15:27:45 -0000
@@ -415,16 +415,16 @@
 <!-- Custom Fields -->
 <?php
 	$t_custom_fields_found = false;
-	$t_related_custom_field_ids = custom_field_get_linked_ids( $t_project_id );
+    $t_related_custom_field_ids = custom_field_get_linked_status_ids( $t_project_id, config_get( 'bug_submit_status' )  );
 
 	foreach( $t_related_custom_field_ids as $t_id ) {
-		$t_def = custom_field_get_definition( $t_id );
-		if( ( $t_def['display_report'] || $t_def['require_report']) && custom_field_has_write_access_to_project( $t_id, $t_project_id ) ) {
+		$t_def = custom_field_get_definition( $t_id[0] );
+		if( custom_field_has_write_access_to_project( $t_id[0], $t_project_id ) ) {
 			$t_custom_fields_found = true;
 ?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
-		<?php if($t_def['require_report']) {?><span class="required">*</span><?php } ?><?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
+		<?php if($t_id[1]) {?><span class="required">*</span><?php } ?><?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
 	</td>
 	<td>
 		<?php print_custom_field_input( $t_def, ( $f_master_bug_id === 0 ) ? null : $f_master_bug_id ) ?>
Index: bug_report_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_report_page.php,v
retrieving revision 1.64
diff -u -r1.64 bug_report_page.php
--- bug_report_page.php	13 Jul 2007 07:58:27 -0000	1.64
+++ bug_report_page.php	27 Jul 2007 15:27:45 -0000
@@ -259,15 +259,15 @@
 <!-- Custom Fields -->
 <?php
 	$t_custom_fields_found = false;
-	$t_related_custom_field_ids = custom_field_get_linked_ids( $t_project_id );
+    $t_related_custom_field_ids = custom_field_get_linked_status_ids( $t_project_id, config_get( 'bug_submit_status' ) );
 	foreach( $t_related_custom_field_ids as $t_id ) {
-		$t_def = custom_field_get_definition( $t_id );
-		if( ( ( $t_def['display_report'] && !$t_def['advanced'] ) || $t_def['require_report']) && custom_field_has_write_access_to_project( $t_id, $t_project_id ) ) {
+		$t_def = custom_field_get_definition( $t_id[0] );
+		if( ( ( !$t_def['advanced'] ) || $t_id[1]) && custom_field_has_write_access_to_project( $t_id[0], $t_project_id ) ) {
 			$t_custom_fields_found = true;
 ?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
-		<?php if( $t_def['require_report'] ) { ?>
+		<?php if( $t_id[1] ) { ?>
 			<span class="required">*</span>
 		<?php } ?>
 		<?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
Index: bug_update.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_update.php,v
retrieving revision 1.91
diff -u -r1.91 bug_update.php
--- bug_update.php	12 Dec 2006 18:26:28 -0000	1.91
+++ bug_update.php	27 Jul 2007 15:27:45 -0000
@@ -87,44 +87,28 @@
 
 	$t_resolved = config_get( 'bug_resolved_status_threshold' );
 
-	$t_custom_status_label = "update"; # default info to check
-	if ( $t_bug_data->status == $t_resolved ) {
-		$t_custom_status_label = "resolved";
-	}
-	if ( $t_bug_data->status == CLOSED ) {
-		$t_custom_status_label = "closed";
-	}
-
-	$t_related_custom_field_ids = custom_field_get_linked_ids( $t_bug_data->project_id );
+    $t_related_custom_field_ids = custom_field_get_linked_status_ids( $t_bug_data->project_id, $f_new_status );
 	foreach( $t_related_custom_field_ids as $t_id ) {
-		$t_def = custom_field_get_definition( $t_id );
-		$t_custom_field_value = gpc_get_custom_field( "custom_field_$t_id", $t_def['type'], null );
-
-		# Only update the field if it would have been display for editing
-		if( !( ( ! $f_update_mode && $t_def['require_' . $t_custom_status_label] ) ||
-						( ! $f_update_mode && $t_def['display_' . $t_custom_status_label] && in_array( $t_custom_status_label, array( "resolved", "closed" ) ) ) ||
-						( $f_update_mode && $t_def['display_update'] ) ||
-						( $f_update_mode && $t_def['require_update'] ) ) ) {
-			continue;
-		}
+		$t_def = custom_field_get_definition( $t_id[0] );
+		$t_custom_field_value = gpc_get_custom_field( "custom_field_".$t_id[0], $t_def['type'], null );
 
		# Only update the field if it is posted 
 		#  ( will fail in custom_field_set_value(), if it was required )
 		if ( $t_custom_field_value === null ) {
 			continue;
 		}
 
 		# Do not set custom field value if user has no write access.
-		if( !custom_field_has_write_access( $t_id, $f_bug_id ) ) {
+		if( !custom_field_has_write_access( $t_id[0], $f_bug_id ) ) {
 			continue;
 		}
 
-		if ( $t_def['require_' . $t_custom_status_label] && ( gpc_get_custom_field( "custom_field_$t_id", $t_def['type'], '' ) == '' ) ) {
-			error_parameters( lang_get_defaulted( custom_field_get_field( $t_id, 'name' ) ) );
+        if ( $t_id[1] && ( gpc_get_custom_field( "custom_field_".$t_id[0], $t_def['type'], '' ) == '' ) ) {
+            error_parameters( lang_get_defaulted( custom_field_get_field( $t_id[0], 'name' ) ) );
 			trigger_error( ERROR_EMPTY_FIELD, ERROR );
 		}
-		if ( !custom_field_set_value( $t_id, $f_bug_id, $t_custom_field_value ) ) {
-			error_parameters( lang_get_defaulted( custom_field_get_field( $t_id, 'name' ) ) );
+        if ( !custom_field_set_value( $t_id[0], $f_bug_id, $t_custom_field_value ) ) {
+            error_parameters( lang_get_defaulted( custom_field_get_field( $t_id[0], 'name' ) ) );
 			trigger_error( ERROR_CUSTOM_FIELD_INVALID_VALUE, ERROR );
 		}
 	}
Index: bug_update_advanced_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_update_advanced_page.php,v
retrieving revision 1.102
diff -u -r1.102 bug_update_advanced_page.php
--- bug_update_advanced_page.php	13 Jul 2007 07:58:28 -0000	1.102
+++ bug_update_advanced_page.php	27 Jul 2007 15:27:45 -0000
@@ -512,15 +512,15 @@
 <!-- Custom Fields -->
 <?php
 	$t_custom_fields_found = false;
-	$t_related_custom_field_ids = custom_field_get_linked_ids( $t_bug->project_id );
+    $t_related_custom_field_ids = custom_field_get_linked_status_ids( $t_bug->project_id, $t_bug->status );
 	foreach( $t_related_custom_field_ids as $t_id ) {
-		$t_def = custom_field_get_definition( $t_id );
-		if( ( $t_def['display_update'] || $t_def['require_update']) && custom_field_has_write_access( $t_id, $f_bug_id ) ) {
+		$t_def = custom_field_get_definition( $t_id[0] );
+		if( custom_field_has_write_access( $t_id[0], $f_bug_id ) ) {
 			$t_custom_fields_found = true;
 ?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
-		<?php if($t_def['require_update']) {?><span class="required">*</span><?php } ?><?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
+		<?php if($t_id[1]) {?><span class="required">*</span><?php } ?><?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
 	</td>
 	<td colspan="5">
 		<?php
Index: bug_update_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_update_page.php,v
retrieving revision 1.100
diff -u -r1.100 bug_update_page.php
--- bug_update_page.php	13 Jul 2007 07:58:28 -0000	1.100
+++ bug_update_page.php	27 Jul 2007 15:27:45 -0000
@@ -348,15 +348,15 @@
 <!-- Custom Fields -->
 <?php
 	$t_custom_fields_found = false;
-	$t_related_custom_field_ids = custom_field_get_linked_ids( $t_bug->project_id );
+    $t_related_custom_field_ids = custom_field_get_linked_status_ids( $t_bug->project_id, $t_bug->status );
 	foreach( $t_related_custom_field_ids as $t_id ) {
-		$t_def = custom_field_get_definition( $t_id );
-		if( ( ( $t_def['display_update'] && !$t_def['advanced'] ) || $t_def['require_update']) && custom_field_has_write_access( $t_id, $f_bug_id ) ) {
+        $t_def = custom_field_get_definition( $t_id[0] );
+        if( ( ( !$t_def['advanced'] ) || $t_id[1]) && custom_field_has_write_access( $t_id[0], $f_bug_id ) ) {
 			$t_custom_fields_found = true;
 ?>
 <tr <?php echo helper_alternate_class() ?>>
 	<td class="category">
-		<?php if ( $t_def['require_update'] ) {?><span class="required">*</span><?php } ?><?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
+        <?php if ( $t_id[1] ) {?><span class="required">*</span><?php } ?><?php echo string_display( lang_get_defaulted( $t_def['name'] ) ) ?>
 	</td>
 	<td colspan="5">
 		<?php
Index: config_defaults_inc.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/config_defaults_inc.php,v
retrieving revision 1.347
diff -u -r1.347 config_defaults_inc.php
--- config_defaults_inc.php	25 Jul 2007 08:27:57 -0000	1.347
+++ config_defaults_inc.php	27 Jul 2007 15:27:45 -0000
@@ -1328,6 +1328,7 @@
 	$g_mantis_custom_field_project_table	= '%db_table_prefix%_custom_field_project%db_table_suffix%';
 	$g_mantis_custom_field_table      	    = '%db_table_prefix%_custom_field%db_table_suffix%';
 	$g_mantis_custom_field_string_table     = '%db_table_prefix%_custom_field_string%db_table_suffix%';
+	$g_mantis_custom_field_status_table     = '%db_table_prefix%_custom_field_status%db_table_suffix%';
 	$g_mantis_upgrade_table					= '%db_table_prefix%_upgrade%db_table_suffix%';
 	$g_mantis_filters_table					= '%db_table_prefix%_filters%db_table_suffix%';
 	$g_mantis_sponsorship_table				= '%db_table_prefix%_sponsorship%db_table_suffix%';
Index: manage_custom_field_edit_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/manage_custom_field_edit_page.php,v
retrieving revision 1.25
diff -u -r1.25 manage_custom_field_edit_page.php
--- manage_custom_field_edit_page.php	18 May 2007 03:17:59 -0000	1.25
+++ manage_custom_field_edit_page.php	27 Jul 2007 15:27:45 -0000
@@ -129,73 +129,56 @@
 				<input type="checkbox" name="advanced" value="1" <?php check_checked( $t_definition['advanced'] ) ?> />
 			</td>
 		</tr>
-		<tr <?php echo helper_alternate_class() ?>>
-			<td class="category">
-				<?php echo lang_get( 'custom_field_display_report' ) ?>
-			</td>
-			<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">
-				<?php echo lang_get( 'custom_field_display_update' ) ?>
-			</td>
-			<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">
-				<?php echo lang_get( 'custom_field_display_resolved' ) ?>
-			</td>
-			<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">
-				<?php echo lang_get( 'custom_field_display_closed' ) ?>
-			</td>
-			<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">
-				<?php echo lang_get( 'custom_field_require_report' ) ?>
-			</td>
-			<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">
-				<?php echo lang_get( 'custom_field_require_update' ) ?>
-			</td>
-			<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">
-				<?php echo lang_get( 'custom_field_require_resolved' ) ?>
-			</td>
-			<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">
-				<?php echo lang_get( 'custom_field_require_closed' ) ?>
-			</td>
-			<td>
-				<input type="checkbox" name="require_closed" value="1" <?php check_checked( $t_definition['require_closed'] ) ?> />
-			</td>
-		</tr>
-		<tr>
-			<td>&nbsp;</td>
-			<td>
+    </table>
+    <p />
+    <table class="width50" cellspacing="1">
+        <tr>
+            <td class="form-title" colspan="2">
+                <?php echo lang_get( 'edit_custom_field_status_title' ) ?>
+            </td>
+        </tr>
+        <tr>
+            <td class="small-caption" width="50%">
+                <?php echo lang_get( 'status' ) ?>
+            </td>
+            <td class="small-caption">
+                <?php echo lang_get( 'custom_field_none' ) ?>
+            </td>
+            <td class="small-caption">
+                <?php echo lang_get( 'custom_field_display' ) ?>
+            </td>
+            <td class="small-caption">
+                <?php echo lang_get( 'custom_field_require' ) ?>
+            </td>
+        </tr>
+
+<?php
+    $t_enum_status = config_get( 'status_enum_string' );
+    $t_status_arr  = get_enum_to_array( $t_enum_status );
+    $t_lang_enum_status = lang_get( 'status_enum_string' );
+
+    $t_status_settings = custom_field_get_status_values( $f_field_id ) ;
+    foreach ( $t_status_arr as $t_status => $t_label ) {
+?>
+        <tr <?php echo helper_alternate_class() ?>>
+            <td class="category">
+                <?php echo get_enum_to_string( $t_lang_enum_status, $t_status ) ?>
+            </td>
+            <td>
+                <input type="radio" name="status_<?php echo $t_status?>" value="0" <?php check_checked( $t_status_settings[$t_status], 0 ) ?> >
+            </td>
+            <td>
+                <input type="radio" name="status_<?php echo $t_status?>" value="1" <?php check_checked( $t_status_settings[$t_status], 1 ) ?> >
+            </td>
+            <td>
+                <input type="radio" name="status_<?php echo $t_status?>" value="2" <?php check_checked( $t_status_settings[$t_status], 2 ) ?> >
+            </td>
+        </tr>
+<?php
+    }
+?>
+        <tr>
+            <td colspan="4" align="center">
 				<input type="submit" class="button" value="<?php echo lang_get( 'update_custom_field_button' ) ?>" />
 			</td>
 		</tr>
Index: manage_custom_field_update.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/manage_custom_field_update.php,v
retrieving revision 1.17
diff -u -r1.17 manage_custom_field_update.php
--- manage_custom_field_update.php	3 Aug 2004 23:43:49 -0000	1.17
+++ manage_custom_field_update.php	27 Jul 2007 15:27:45 -0000
@@ -42,6 +42,21 @@
 
 	custom_field_update( $f_field_id, $t_values );
 
+    # For each status value, look for the assigned value from the page and
+    #  store it in an array
+    $t_status_display = array();
+    $t_enum_status = config_get( 'status_enum_string' );
+    $t_status_arr  = get_enum_to_array( $t_enum_status );
+    foreach ( $t_status_arr as $t_status => $t_label ) {
+        $t_status_display_val = gpc_get_int('status_'.$t_status, 0);
+        if( $t_status_display_val > 0 ) {
+            array_push( $t_status_display, array( $t_status, $t_status_display_val ) ) ;
+        }
+    }
+
+    # Update the custom field status display values
+    custom_field_status_update( $f_field_id, $t_status_display );
+
 	html_page_top1();
 
 	html_meta_redirect( $f_return );
Index: admin/db_stats.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/admin/db_stats.php,v
retrieving revision 1.3
diff -u -r1.3 db_stats.php
--- admin/db_stats.php	10 Feb 2007 12:19:10 -0000	1.3
+++ admin/db_stats.php	27 Jul 2007 15:27:51 -0000
@@ -47,6 +47,7 @@
 	print_table_stats( config_get( 'mantis_config_table' ) );
 	print_table_stats( config_get( 'mantis_custom_field_project_table' ) );
 	print_table_stats( config_get( 'mantis_custom_field_string_table' ) );
+	print_table_stats( config_get( 'mantis_custom_field_status_table' ) );
 	print_table_stats( config_get( 'mantis_custom_field_table' ) );
 	print_table_stats( config_get( 'mantis_filters_table' ) );
 	print_table_stats( config_get( 'mantis_news_table' ) );
Index: admin/db_table_names_inc.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/admin/db_table_names_inc.php,v
retrieving revision 1.8
diff -u -r1.8 db_table_names_inc.php
--- admin/db_table_names_inc.php	14 Jul 2005 21:38:00 -0000	1.8
+++ admin/db_table_names_inc.php	27 Jul 2007 15:27:57 -0000
@@ -31,6 +31,7 @@
 	$t_custom_field_project_table	= config_get_global( 'mantis_custom_field_project_table' );
 	$t_custom_field_table      		= config_get_global( 'mantis_custom_field_table' );
 	$t_custom_field_string_table	= config_get_global( 'mantis_custom_field_string_table' );
+	$t_custom_field_status_table	= config_get_global( 'mantis_custom_field_status_table' );
 	$t_upgrade_table				= config_get_global( 'mantis_upgrade_table' );
 	$t_filters_table				= config_get_global( 'mantis_filters_table' );
 	$t_tokens_table					= config_get_global( 'mantis_tokens_table' );
Index: admin/schema.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/admin/schema.php,v
retrieving revision 1.19
diff -u -r1.19 schema.php
--- admin/schema.php	22 Jul 2007 19:51:18 -0000	1.19
+++ admin/schema.php	27 Jul 2007 15:28:00 -0000
@@ -132,6 +132,11 @@
   value 		C(255) NOTNULL DEFAULT \" '' \"
 ",Array('mysql' => 'TYPE=MyISAM', 'pgsql' => 'WITHOUT OIDS')));
 $upgrade[] = Array('CreateIndexSQL',Array('idx_custom_field_bug',config_get('mantis_custom_field_string_table'),'bug_id'));
+$upgrade[] = Array('CreateTableSQL',Array(config_get('mantis_custom_field_status_table'),"
+  field_id       I  NOTNULL PRIMARY DEFAULT '0',
+  status_id      I  NOTNULL PRIMARY DEFAULT '0',
+  required        L  NOTNULL DEFAULT '0'
+",Array('mysql' => 'TYPE=MyISAM', 'pgsql' => 'WITHOUT OIDS')));
 $upgrade[] = Array('CreateTableSQL',Array(config_get('mantis_custom_field_table'),"
   id 			 I  NOTNULL PRIMARY AUTOINCREMENT,
   name 			C(64) NOTNULL DEFAULT \" '' \",
Index: core/custom_field_api.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/core/custom_field_api.php,v
retrieving revision 1.64
diff -u -r1.64 custom_field_api.php
--- core/custom_field_api.php	6 Jul 2007 07:30:16 -0000	1.64
+++ core/custom_field_api.php	27 Jul 2007 15:28:06 -0000
@@ -469,6 +469,41 @@
 		return true;
 	}
 
+    # --------------------
+    # Update the status-specific display of custom fields
+    function custom_field_status_update( $p_field_id, $p_status_display )
+    {
+        $t_mantis_custom_field_status_table = config_get( 'mantis_custom_field_status_table' );
+        $t_field_id = db_prepare_int( $p_field_id );
+
+        $query = "DELETE FROM $t_mantis_custom_field_status_table
+                  WHERE field_id = $p_field_id";
+        db_query( $query );
+
+        foreach ( $p_status_display as $t_status ) {
+            $t_status_val = db_prepare_int( $t_status[0] );
+
+            if( $t_status[1] == 1 ) {
+                $query = "INSERT INTO $t_mantis_custom_field_status_table
+                          (field_id, status_id)
+                          VALUES
+                          ( $t_field_id, $t_status_val )" ;
+
+                db_query( $query ) ;
+            } else if( $t_status[1] == 2 )  {
+                $query = "INSERT INTO $t_mantis_custom_field_status_table
+                          (field_id, status_id, required)
+                          VALUES
+                          ( $t_field_id, $t_status_val, 1 )" ;
+
+                db_query( $query ) ;
+            }
+        }
+
+        return true ;
+
+    }
+
 	# --------------------
 	# Add a custom field to a project
 	#  return true on success, false on failure or if already added
@@ -691,15 +726,73 @@
     	} else {
     		$t_ids = $g_cache_cf_linked[$p_project_id];
         }
        
 		return $t_ids;
 	}
 
+    # --------------------
+    # Return an array of ids of custom fields bound to the specified project and status
+    #
+    function custom_field_get_linked_status_ids( $p_project_id = ALL_PROJECTS, $p_status_id ) {
+        $t_custom_field_status_table           = config_get( 'mantis_custom_field_status_table' );
+
+        # First get the array of custom fields for this project
+        $t_field_ids = custom_field_get_linked_ids( $p_project_id ) ;
+
+        # Query the database to see if any of the custom field IDs are associated with
+        #  this status.
+        $query = "SELECT cfs.field_id, cfs.required
+                  FROM $t_custom_field_status_table cfs
+                  WHERE cfs.status_id = $p_status_id AND
+                        cfs.field_id IN (" . implode( ',', $t_field_ids ) . ")" ;
+
+        $result = db_query( $query );
+        $t_row_count = db_num_rows( $result );
+        $t_ids = array();
+
+        for ( $i=0 ; $i < $t_row_count ; $i++ ) {
+            $row = db_fetch_array( $result );
+
+            array_push( $t_ids, array( $row['field_id'], $row['required'] ) );
+        }
+
+        return $t_ids;
+    }
+
+    # --------------------
+    # Return an array with the following format:
+    # array[status_id]=[display_value]
+    #  where display_value is one of (0:none, 1:display, 2:require)
+    function custom_field_get_status_values( $p_custom_field_id )
+    {
+        $t_custom_field_status_table           = config_get( 'mantis_custom_field_status_table' );
+
+        $query = "SELECT cfs.status_id, cfs.required
+                  FROM $t_custom_field_status_table cfs
+                  WHERE cfs.field_id = $p_custom_field_id" ;
+
+        $result = db_query( $query );
+        $t_row_count = db_num_rows( $result );
+        $t_ids = array();
+
+        for ( $i=0 ; $i < $t_row_count ; $i++ ) {
+            $row = db_fetch_array( $result );
+
+            if( $row['required'] ) {
+                $t_ids[$row['status_id']] = 2 ;
+            } else {
+                $t_ids[$row['status_id']] = 1 ;
+            }
+        }
+
+        return $t_ids ;
+    }
+
 	# --------------------
 	# Return an array all custom field ids sorted by name
 	function custom_field_get_ids( ) {
         global $g_cache_cf_list;
       
         if ( $g_cache_cf_list === NULL ) {
             $t_custom_field_table			= config_get( 'mantis_custom_field_table' );
             $query = "SELECT id, name
Index: lang/strings_english.txt
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/lang/strings_english.txt,v
retrieving revision 1.306
diff -u -r1.306 strings_english.txt
--- lang/strings_english.txt	25 Jul 2007 10:50:49 -0000	1.306
+++ lang/strings_english.txt	27 Jul 2007 15:28:11 -0000
@@ -1163,6 +1163,7 @@
 $s_update_custom_field_button = 'Update Custom Field';
 $s_add_existing_custom_field = 'Add This Existing Custom Field';
 $s_edit_custom_field_title = 'Edit custom field';
+$s_edit_custom_field_status_title = 'Edit custom field display properties';
 $s_custom_field = 'Field';
 $s_custom_fields_setup = 'Custom Fields';
 $s_custom_field_name = 'Name';
@@ -1187,6 +1188,9 @@
 $s_link_custom_field_to_project_title = 'Link custom field to project';
 $s_link_custom_field_to_project_button = 'Link Custom Field';
 $s_linked_projects = 'Linked Projects';
++$s_custom_field_require = 'Require';
++$s_custom_field_display = 'Display';
++$s_custom_field_none = 'None';
 
 $s_custom_field_sequence = 'Sequence';
 $s_custom_field_type_enum_string = '0:String,1:Numeric,2:Float,3:Enumeration,4:Email,5:Checkbox,6:List,7:Multiselection list,8:Date';
