? 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';
+ +
+ + + + + + + +
+ + + > + + > + + > +