? 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 @@
$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 ) ) {
?>
>
@@ -193,20 +174,20 @@
|
>
|
-
+
|
>
- *
+ *
|
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 @@
|
>
-
+
*
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 @@
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;
?>
|
>
- *
+ *
|
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;
?>
|
>
- *
+ *
|
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 @@
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 @@
/>
|
- >
-
-
- |
-
- />
- |
-
- >
-
-
- |
-
- />
- |
-
- >
-
-
- |
-
- />
- |
-
- >
-
-
- |
-
- />
- |
-
- >
-
-
- |
-
- />
- |
-
- >
-
-
- |
-
- />
- |
-
- >
-
-
- |
-
- />
- |
-
- >
-
-
- |
-
- />
- |
-
-
- |
-
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ $t_label ) {
+?>
+ >
+
+
+ |
+
+ >
+ |
+
+ >
+ |
+
+ >
+ |
+
+
+
+
|
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';
|