? 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.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/bug_report.php,v
retrieving revision 1.48
diff -u -r1.48 bug_report.php
--- bug_report.php	23 Jun 2007 04:25:40 -0000	1.48
+++ bug_report.php	29 Jul 2007 04:33:49 -0000
@@ -72,15 +72,15 @@
 	helper_call_custom_function( 'issue_create_validate', array( $t_bug_data ) );
 
 	# Validate the custom fields before adding the bug.
-	$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, 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['require_report'] && ( gpc_get_custom_field( "custom_field_$t_id", $t_def['type'], '' ) == '' ) ) {
-			error_parameters( lang_get_defaulted( custom_field_get_field( $t_id, 'name' ) ) );
+		$t_def = custom_field_get_definition( $t_id[0] );
+		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_validate( $t_id, gpc_get_custom_field( "custom_field_$t_id", $t_def['type'], $t_def['default_value'] ) ) ) {
-			error_parameters( lang_get_defaulted( custom_field_get_field( $t_id, 'name' ) ) );
+		if ( !custom_field_validate( $t_id[0], gpc_get_custom_field( "custom_field_".$t_id[0], $t_def['type'], $t_def['default_value'] ) ) ) {
+			error_parameters( lang_get_defaulted( custom_field_get_field( $t_id[0], 'name' ) ) );
 			trigger_error( ERROR_CUSTOM_FIELD_INVALID_VALUE, ERROR );
 		}
 	}
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	29 Jul 2007 04:25:02 -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	29 Jul 2007 04:41:16 -0000
@@ -31,16 +31,20 @@
 	$t_values['length_min']			= gpc_get_int( 'length_min' );
 	$t_values['length_max']			= gpc_get_int( 'length_max' );
 	$t_values['advanced']			= gpc_get_bool( 'advanced' );
-	$t_values['display_report']	= gpc_get_bool( 'display_report' );
-	$t_values['display_update']	= gpc_get_bool( 'display_update' );
-	$t_values['display_resolved']	= gpc_get_bool( 'display_resolved' );
-	$t_values['display_closed']		= gpc_get_bool( 'display_closed' );
-	$t_values['require_report']		= gpc_get_bool( 'require_report' );
-	$t_values['require_update']		= gpc_get_bool( 'require_update' );
-	$t_values['require_resolved']	= gpc_get_bool( 'require_resolved' );
-	$t_values['require_closed']		= gpc_get_bool( 'require_closed' );
 
-	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 ;
+    }
+    
+    $t_values['display_enum']       = serialize( $t_status_display ) ;
+
+    custom_field_update( $f_field_id, $t_values );
 
 	html_page_top1();
 
Index: admin/install.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/admin/install.php,v
retrieving revision 1.33
diff -u -r1.33 install.php
--- admin/install.php	10 Jul 2007 07:04:56 -0000	1.33
+++ admin/install.php	29 Jul 2007 04:58:34 -0000
@@ -61,7 +61,52 @@
 		return Array( $query );
 	}
 
-
+    # This function will migrate custom field display/require settings 
+    #  to the new method of storing them as a list per #5744 '
+    # This function must be called AFTER the new field has been added to the
+    #  custom_field table AND all patches to PHP files have been applied, but 
+    #  BEFORE the old booleans (require_report, etc) are removed from the table
+    function migrateCustomFieldDisplay() {
+        $t_field_ids = custom_field_get_ids() ;
+        $t_enum_status = config_get( 'status_enum_string' ) ;
+        $t_status_arr  = get_enum_to_array( $t_enum_status );
+        $t_report_status = config_get( 'bug_submit_status' ) ;
+        $t_closed_status = CLOSED ;
+        $t_resolved_status = config_get( 'bug_resolved_status_threshold' ) ;
+        
+        foreach( $t_field_ids as $t_field_id )
+        {
+            $t_status_display = array() ;
+            $t_field = custom_field_cache_row( $t_field_id ) ;
+            
+            foreach ( $t_status_arr as $t_status => $t_label ) {
+                if( $t_status == $t_report_status ) {
+                    $t_custom_status_label = "report" ;
+                } elseif ( $t_status == $t_resolved_status ) {
+                    $t_custom_status_label = "resolved" ;
+                } elseif ( $t_status == $t_closed_status ) {
+                    $t_custom_status_label = "closed" ;
+                } else {
+                    $t_custom_status_label = "update" ;
+                }
+                
+                $t_display = $t_field['display_' . $t_custom_status_label];
+                $t_require = $t_field['require_' . $t_custom_status_label];
+                
+                $t_status_display_val = 0;
+                if( $t_display ) $t_status_display_val = 1;
+                if( $t_require ) $t_status_display_val = 2;
+                
+                $t_status_display[$t_status] = $t_status_display_val ;
+            }
+
+            $t_field['display_enum']       = serialize( $t_status_display ) ;
+
+            # Update the custom field status display values
+            custom_field_update( $t_field_id, $t_field );
+            
+        }        
+    }
 
 	# install_state
 	#   0 = no checks done
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 23:57:50 -0000
@@ -144,14 +144,7 @@
   length_min 		 I  NOTNULL DEFAULT '0',
   length_max 		 I  NOTNULL DEFAULT '0',
   advanced 		L NOTNULL DEFAULT '0',
-  require_report 	L NOTNULL DEFAULT '0',
-  require_update 	L NOTNULL DEFAULT '0',
-  display_report 	L NOTNULL DEFAULT '1',
-  display_update 	L NOTNULL DEFAULT '1',
-  require_resolved 	L NOTNULL DEFAULT '0',
-  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: api/soap/mantisconnect.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/api/soap/mantisconnect.php,v
retrieving revision 1.1
diff -u -r1.1 mantisconnect.php
--- api/soap/mantisconnect.php	18 Jul 2007 06:52:47 -0000	1.1
+++ api/soap/mantisconnect.php	29 Jul 2007 04:18:36 -0000
@@ -479,14 +479,7 @@
 			'length_min'		=>	array( 'name' => 'length_min',		'type' => 'xsd:integer', 	'minOccurs' => '0'),
 			'length_max'		=>	array( 'name' => 'length_max',		'type' => 'xsd:integer', 	'minOccurs' => '0'),
 			'advanced'			=>	array( 'name' => 'advanced',		'type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'display_report'	=>	array( 'name' => 'display_report',	'type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'display_update'	=>	array( 'name' => 'display_update',	'type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'display_resolved'	=>	array( 'name' => 'display_resolved','type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'display_closed'	=>	array( 'name' => 'display_closed',	'type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'require_report'	=>	array( 'name' => 'require_report',	'type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'require_update'	=>	array( 'name' => 'require_update',	'type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'require_resolved'	=>	array( 'name' => 'require_resolved','type' => 'xsd:boolean', 	'minOccurs' => '0'),
-			'require_closed'	=>	array( 'name' => 'require_closed',	'type' => 'xsd:boolean', 	'minOccurs' => '0')
+			'display_enum'	    =>	array( 'name' => 'display_enum',	'type' => 'xsd:string', 	'minOccurs' => '0')
 		)
 	);
 
Index: api/soap/mc_project_api.php
===================================================================
RCS file: /cvsroot/mantisbt/mantisbt/api/soap/mc_project_api.php,v
retrieving revision 1.1
diff -u -r1.1 mc_project_api.php
--- api/soap/mc_project_api.php	18 Jul 2007 06:52:56 -0000	1.1
+++ api/soap/mc_project_api.php	29 Jul 2007 04:18:28 -0000
@@ -435,14 +435,7 @@
 					'length_min'		=> $t_def['length_min'],
 					'length_max'		=> $t_def['length_max'],
 					'advanced'			=> $t_def['advanced'],
-					'display_report'	=> $t_def['display_report'],
-					'display_update'	=> $t_def['display_update'],
-					'display_resolved'	=> $t_def['display_resolved'],
-					'display_closed'	=> $t_def['display_closed'],
-					'require_report'	=> $t_def['require_report'],
-					'require_update'	=> $t_def['require_update'],
-					'require_resolved'	=> $t_def['require_resolved'],
-					'require_closed'	=> $t_def['require_closed'],
+					'display_enum'	    => $t_def['display_enum']
 				);
 			}
 		}
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	29 Jul 2007 04:59:04 -0000
@@ -280,15 +280,8 @@
 		$c_access_level_rw	= db_prepare_int(    $p_def_array['access_level_rw'] );
 		$c_length_min		= db_prepare_int(    $p_def_array['length_min']      );
 		$c_length_max		= db_prepare_int(    $p_def_array['length_max']      );
-		$c_advanced			= db_prepare_bool(   $p_def_array['advanced']        );
-		$c_display_report	= db_prepare_bool( 	 $p_def_array['display_report'] );
-		$c_display_update	= db_prepare_bool( 	 $p_def_array['display_update'] );
-		$c_display_resolved	= db_prepare_bool( 	 $p_def_array['display_resolved'] );
-		$c_display_closed	= db_prepare_bool( 	 $p_def_array['display_closed']   );
-		$c_require_report	= db_prepare_bool( 	 $p_def_array['require_report']  );
-		$c_require_update	= db_prepare_bool( 	 $p_def_array['require_update']  );
-		$c_require_resolved = db_prepare_bool( 	 $p_def_array['require_resolved'] );
-		$c_require_closed	= db_prepare_bool( 	 $p_def_array['require_closed']   );
+        $c_advanced         = db_prepare_bool(   $p_def_array['advanced']        );
+        $c_display_enum     = db_prepare_string( $p_def_array['display_enum']    );
 
 		if (( is_blank( $c_name ) ) ||
 			( $c_access_level_rw < $c_access_level_r ) ||
@@ -297,11 +290,6 @@
 			trigger_error( ERROR_CUSTOM_FIELD_INVALID_DEFINITION, ERROR );
 		}
 
-		if ( $c_advanced == true && ( $c_require_report == true || $c_require_update ) ) {
-			trigger_error( ERROR_CUSTOM_FIELD_INVALID_DEFINITION, ERROR );
-		}
-
-
 		if ( !custom_field_is_name_unique( $c_name, $c_field_id ) ) {
 			trigger_error( ERROR_CUSTOM_FIELD_NAME_NOT_UNIQUE, ERROR );
 		}
@@ -382,78 +370,22 @@
 			}
 			$query .= "length_max='$c_length_max'";
 		}
-		if( array_key_exists( 'advanced', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "advanced='$c_advanced'";
-		}
-		if( array_key_exists( 'display_report', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "display_report='$c_display_report'";
-		}
-		if( array_key_exists( 'display_update', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "display_update='$c_display_update'";
-		}
-		if( array_key_exists( 'display_resolved', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "display_resolved='$c_display_resolved'";
-		}
-		if( array_key_exists( 'display_closed', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "display_closed='$c_display_closed'";
-		}
-		if( array_key_exists( 'require_report', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "require_report='$c_require_report'";
-		}
-		if( array_key_exists( 'require_update', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "require_update='$c_require_update'";
-		}
-		if( array_key_exists( 'require_resolved', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "require_resolved='$c_require_resolved'";
-		}
-		if( array_key_exists( 'require_closed', $p_def_array ) ) {
-			if ( !$t_update_something ) {
-				$t_update_something = true;
-			} else {
-				$query .= ', ';
-			}
-			$query .= "require_closed='$c_require_closed'";
-		}
+        if( array_key_exists( 'advanced', $p_def_array ) ) {
+            if ( !$t_update_something ) {
+                $t_update_something = true;
+            } else {
+                $query .= ', ';
+            }
+            $query .= "advanced='$c_advanced'";
+        }
+        if( array_key_exists( 'display_enum', $p_def_array ) ) {
+            if ( !$t_update_something ) {
+                $t_update_something = true;
+            } else {
+                $query .= ', ';
+            }
+            $query .= "display_enum='$c_display_enum'";
+        }
 
 
 		$query .= " WHERE id='$c_field_id'";
@@ -691,15 +623,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	29 Jul 2007 04:19:38 -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';
@@ -1176,17 +1177,12 @@
 $s_custom_field_length_min = 'Min. Length';
 $s_custom_field_length_max = 'Max. Length';
 $s_custom_field_advanced = 'Display Only On Advanced Page';
-$s_custom_field_display_report = 'Display When Reporting Issues';
-$s_custom_field_display_update = 'Display When Updating Issues';
-$s_custom_field_display_resolved = 'Display When Resolving Issues';
-$s_custom_field_display_closed = 'Display When Closing Issues';
-$s_custom_field_require_report = 'Required On Report';
-$s_custom_field_require_update = 'Required On Update';
-$s_custom_field_require_resolved = 'Required On Resolve';
-$s_custom_field_require_closed = 'Required On Close';
 $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';
