? custom_contant_inc.php
? mantisbt.patch
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 
+		# 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: bug_view_advanced_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_view_advanced_page.php,v
retrieving revision 1.85
diff -u -r1.85 bug_view_advanced_page.php
--- bug_view_advanced_page.php  11 Jul 2007 17:03:44 -0000  1.85
+++ bug_view_advanced_page.php  27 Jul 2007 23:50:02 -0000
@@ -474,7 +474,7 @@
 <!-- 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 );
    foreach( $t_related_custom_field_ids as $t_id ) {
        if ( !custom_field_has_read_access( $t_id, $f_bug_id ) ) {
            continue;
Index: bug_view_page.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_view_page.php,v
retrieving revision 1.87
diff -u -r1.87 bug_view_page.php
--- bug_view_page.php   11 Jul 2007 17:03:47 -0000  1.87
+++ bug_view_page.php   27 Jul 2007 23:45:13 -0000
@@ -351,7 +351,7 @@
 <!-- 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['advanced'] && custom_field_has_read_access( $t_id, $f_bug_id ) ) {
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 18:33:12 -0000
@@ -42,6 +42,19 @@
 
 	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);
+        $t_status_display[$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/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 22:18:01 -0000
@@ -152,6 +152,7 @@
   display_resolved 	L NOTNULL DEFAULT '0',
   display_closed 	L NOTNULL DEFAULT '0',
   require_closed 	L NOTNULL DEFAULT '0'
+  display_enum      C(255) NOTNULL DEFAULT \" '' \"
 ",Array('mysql' => 'TYPE=MyISAM', 'pgsql' => 'WITHOUT OIDS')));
 $upgrade[] = Array('CreateIndexSQL',Array('idx_custom_field_name',config_get('mantis_custom_field_table'),'name'));
 $upgrade[] = Array('CreateTableSQL',Array(config_get('mantis_filters_table'),"
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 22:11:47 -0000
@@ -469,6 +469,27 @@
 		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_table = config_get( 'mantis_custom_field_table' );
+        $t_field_id = db_prepare_int( $p_field_id );
+
+        $c_value = db_prepare_string( serialize( $p_status_display ) );
+        
+        $t_set_query = "UPDATE $t_mantis_custom_field_table
+                        SET display_enum='$c_value'
+                        WHERE id = $t_field_id";
+                        
+        db_query( $t_set_query ) ;
+        
+        custom_field_clear_cache( $p_field_id ) ;
+
+        return true ;
+
+    }
+
 	# --------------------
 	# Add a custom field to a project
 	#  return true on success, false on failure or if already added
@@ -691,15 +712,60 @@
     	} 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 ) {
+
+        # First get the array of custom fields for this project
+        $t_field_ids = custom_field_get_linked_ids( $p_project_id ) ;
+
+        $t_ids = array();
+
+        # For each custom field ID associated with this project
+        foreach ( $t_field_ids as $t_field )
+        {
+            # Get the serialized array of status display values
+            $row = custom_field_cache_row( $t_field ) ;
+            $t_displays = unserialize( $row['display_enum'] ) ;
+            
+            # If this field is displayed or required
+            if( $t_displays[$p_status_id] > 0 ) {
+            
+                # Add to the array of [field_id][required]
+                # Note that the 2nd value in the array is a boolean indicating if the field is
+                #  required (0=no, 1=yes). Since the value is stored in the database as 
+                #  1=display, 2=require, we must decrement the value here
+                array_push( $t_ids, array( $t_field, $t_displays[$p_status_id]-1 ) ) ;
+            }
+        }
+                
+        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 )
+    {   
+        # Get the row and unserialize the data
+        $row = custom_field_cache_row( $p_custom_field_id ) ;
+        
+        $t_ids = unserialize( $row['display_enum'] ) ;
+
+        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';
