Adding New tables & columns??
Moderators: Developer, Contributor
works like a lucky charm
yes, most excellent! this noob hadnt quite yet grasped what the difference between the single and double quotes means in php so i hadnt tried that particular combination, thats the clincher.
A thousand questions and a million Thank You's!
A thousand questions and a million Thank You's!
mickey:
When you add a custom field, it is stored in the custom_field_table. When you add it to a project, that connection is made in custom_field_project_table and when you add a custom field value to an issue (like, when you report it or update it) that value gets stored in custom_field_string_table.
There is no need to edit any PHP to enable custom fields... they should just be listed towards the bottom of your bug report page automatically.
When you add a custom field, it is stored in the custom_field_table. When you add it to a project, that connection is made in custom_field_project_table and when you add a custom field value to an issue (like, when you report it or update it) that value gets stored in custom_field_string_table.
There is no need to edit any PHP to enable custom fields... they should just be listed towards the bottom of your bug report page automatically.
Thank you Narcissus. I need to learn much more about Mantis before I can think of hacking code;)
I've another issue that is kind of critical to my project. In the top menu I added a new link (page) called "employee" for storing employee info. Now, in order to store data entered through this form, can I add a new table to Mantis database? Do I need to take care of anything? Any pointers/suggestions?
I've another issue that is kind of critical to my project. In the top menu I added a new link (page) called "employee" for storing employee info. Now, in order to store data entered through this form, can I add a new table to Mantis database? Do I need to take care of anything? Any pointers/suggestions?
I would say that it should be fine to add another table to your database. Just name it in a way that won't conflict with any new tables that might be added by the dev team later on :) I can't see why adding tables would cause any problems down the line...
So, other than saying, 'yeah, it should be fine', I don't know what else I can say :)
So, other than saying, 'yeah, it should be fine', I don't know what else I can say :)
It is easy to put the custom fields (all in one group), for instance, above the 'Summary'. The internal order of these custom fields themselves is dependent upon the ordering you set up in the Manage Project section.
To do this for the Advanced bug view you would merely reorder the sequnce of the php calls inside the 'bug_view_advanced_page.php'. For instance, i want to have my advanced bug view page from top to bottom in the following order:
- 'viewing issue advanced details' section
---> all the usual stuff down to the 'product build' field
---> all custom fields
---> 'summary' and all the usual stuff below it
- 'notes' section
- 'add note' section
- 'upload file' section
- 'relationships' section
- 'issue history' section
Below is the contents of my 'bug_view_advanced_page.php' file, compare it to the existing file and you'll see that all i did was reorder the sequencing of the individual sections in the php file, which are conveniently labeled as to what they display.
[/list]
To do this for the Advanced bug view you would merely reorder the sequnce of the php calls inside the 'bug_view_advanced_page.php'. For instance, i want to have my advanced bug view page from top to bottom in the following order:
- 'viewing issue advanced details' section
---> all the usual stuff down to the 'product build' field
---> all custom fields
---> 'summary' and all the usual stuff below it
- 'notes' section
- 'add note' section
- 'upload file' section
- 'relationships' section
- 'issue history' section
Below is the contents of my 'bug_view_advanced_page.php' file, compare it to the existing file and you'll see that all i did was reorder the sequencing of the individual sections in the php file, which are conveniently labeled as to what they display.
Code: Select all
<?php
# Mantis - a php based bugtracking system
# Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org
# Copyright (C) 2002 - 2004 Mantis Team - mantisbt-dev@lists.sourceforge.net
# This program is distributed under the terms and conditions of the GPL
# See the README and LICENSE files for details
# --------------------------------------------------------
# $Id: bug_view_advanced_page.php,v 1.76.6.1 2006/01/01 02:58:50 thraxisp Exp $
# --------------------------------------------------------
require_once( 'core.php' );
$t_core_path = config_get( 'core_path' );
require_once( $t_core_path.'bug_api.php' );
require_once( $t_core_path.'custom_field_api.php' );
require_once( $t_core_path.'file_api.php' );
require_once( $t_core_path.'compress_api.php' );
require_once( $t_core_path.'date_api.php' );
require_once( $t_core_path.'relationship_api.php' );
$f_bug_id = gpc_get_int( 'bug_id' );
$f_history = gpc_get_bool( 'history', config_get( 'history_default_visible' ) );
bug_ensure_exists( $f_bug_id );
access_ensure_bug_level( VIEWER, $f_bug_id );
$t_bug = bug_prepare_display( bug_get( $f_bug_id, true ) );
if( $t_bug->project_id != helper_get_current_project() ) {
# in case the current project is not the same project of the bug we are viewing...
# ... override the current project. This to avoid problems with categories and handlers lists etc.
$g_project_override = $t_bug->project_id;
}
if ( SIMPLE_ONLY == config_get( 'show_view' ) ) {
print_header_redirect ( 'bug_view_page.php?bug_id=' . $f_bug_id );
}
compress_enable();
html_page_top1( bug_format_summary( $f_bug_id, SUMMARY_CAPTION ) );
html_page_top2();
$t_access_level_needed = config_get( 'view_history_threshold' );
$t_can_view_history = access_has_bug_level( $t_access_level_needed, $f_bug_id );
$t_bugslist = gpc_get_cookie( config_get( 'bug_list_cookie' ), false );
?>
<br />
<table class="width100" cellspacing="1">
<tr>
<!-- Title -->
<td class="form-title" colspan="<?php echo $t_bugslist ? '3' : '4' ?>">
<?php echo lang_get( 'viewing_bug_advanced_details_title' ) ?>
<!-- Jump to Bugnotes -->
<span class="small"><?php print_bracket_link( "#bugnotes", lang_get( 'jump_to_bugnotes' ) ) ?></span>
<!-- Send Bug Reminder -->
<?php
if ( !current_user_is_anonymous() && !bug_is_readonly( $f_bug_id ) &&
access_has_bug_level( config_get( 'bug_reminder_threshold' ), $f_bug_id ) ) {
?>
<span class="small">
<?php print_bracket_link( 'bug_reminder_page.php?bug_id='.$f_bug_id, lang_get( 'bug_reminder' ) ) ?>
</span>
<?php
}
?>
</td>
<!-- prev/next links -->
<?php if( $t_bugslist ) { ?>
<td class="center"><span class="small">
<?php
$t_bugslist = explode( ',', $t_bugslist );
$t_index = array_search( $f_bug_id, $t_bugslist );
if( false !== $t_index ) {
if( isset( $t_bugslist[$t_index-1] ) ) print_bracket_link( 'bug_view_advanced_page.php?bug_id='.$t_bugslist[$t_index-1], '<<<' ); // <img src="images/up.png" border="0">
if( isset( $t_bugslist[$t_index+1] ) ) print_bracket_link( 'bug_view_advanced_page.php?bug_id='.$t_bugslist[$t_index+1], '>>>' ); // <img src="images/down.png" border="0">
}
?>
</span></td>
<?php } ?>
<!-- Links -->
<td class="right" colspan="2">
<!-- Simple View (if enabled) -->
<?php if ( BOTH == config_get( 'show_view' ) ) { ?>
<span class="small"><?php print_bracket_link( 'bug_view_page.php?bug_id=' . $f_bug_id, lang_get( 'view_simple_link' ) ) ?></span>
<?php } ?>
<?php if ( $t_can_view_history ) { ?>
<!-- History -->
<span class="small"><?php print_bracket_link( 'bug_view_advanced_page.php?bug_id=' . $f_bug_id . '&history=1#history', lang_get( 'bug_history' ) ) ?></span>
<?php } ?>
<!-- Print Bug -->
<span class="small"><?php print_bracket_link( 'print_bug_page.php?bug_id=' . $f_bug_id, lang_get( 'print' ) ) ?></span>
</td>
</tr>
<!-- Labels -->
<tr class="row-category">
<td width="15%">
<?php echo lang_get( 'id' ) ?>
</td>
<td width="20%">
<?php echo lang_get( 'category' ) ?>
</td>
<td width="15%">
<?php echo lang_get( 'severity' ) ?>
</td>
<td width="20%">
<?php echo lang_get( 'reproducibility' ) ?>
</td>
<td width="15%">
<?php echo lang_get( 'date_submitted' ) ?>
</td>
<td width="15%">
<?php echo lang_get( 'last_update' ) ?>
</td>
</tr>
<tr <?php echo helper_alternate_class() ?>>
<!-- Bug ID -->
<td>
<?php echo bug_format_id( $f_bug_id ) ?>
</td>
<!-- Category -->
<td>
<?php
$t_project_name = string_display( project_get_field( $t_bug->project_id, 'name' ) );
echo "[$t_project_name] $t_bug->category";
?>
</td>
<!-- Severity -->
<td>
<?php echo get_enum_element( 'severity', $t_bug->severity ) ?>
</td>
<!-- Reproducibility -->
<td>
<?php echo get_enum_element( 'reproducibility', $t_bug->reproducibility ) ?>
</td>
<!-- Date Submitted -->
<td>
<?php print_date( config_get( 'normal_date_format' ), $t_bug->date_submitted ) ?>
</td>
<!-- Date Updated -->
<td>
<?php print_date( config_get( 'normal_date_format' ), $t_bug->last_updated ) ?>
</td>
</tr>
<!-- spacer -->
<tr height="5" class="spacer">
<td colspan="6"></td>
</tr>
<tr <?php echo helper_alternate_class() ?>>
<!-- Reporter -->
<td class="category">
<?php echo lang_get( 'reporter' ) ?>
</td>
<td>
<?php print_user_with_subject( $t_bug->reporter_id, $f_bug_id ) ?>
</td>
<!-- View Status -->
<td class="category">
<?php echo lang_get( 'view_status' ) ?>
</td>
<td>
<?php echo get_enum_element( 'project_view_state', $t_bug->view_state ) ?>
</td>
<!-- spacer -->
<td colspan="2"> </td>
</tr>
<!-- Handler -->
<tr <?php echo helper_alternate_class() ?>>
<td class="category">
<?php echo lang_get( 'assigned_to' ) ?>
</td>
<td colspan="5">
<?php
if ( access_has_bug_level( config_get( 'view_handler_threshold' ), $f_bug_id ) ) {
print_user_with_subject( $t_bug->handler_id, $f_bug_id );
}
?>
</td>
</tr>
<tr <?php echo helper_alternate_class() ?>>
<!-- Priority -->
<td class="category">
<?php echo lang_get( 'priority' ) ?>
</td>
<td>
<?php echo get_enum_element( 'priority', $t_bug->priority ) ?>
</td>
<!-- Resolution -->
<td class="category">
<?php echo lang_get( 'resolution' ) ?>
</td>
<td>
<?php echo get_enum_element( 'resolution', $t_bug->resolution ) ?>
</td>
<!-- Platform -->
<td class="category">
<?php echo lang_get( 'platform' ) ?>
</td>
<td>
<?php echo $t_bug->platform ?>
</td>
</tr>
<tr <?php echo helper_alternate_class() ?>>
<!-- Status -->
<td class="category">
<?php echo lang_get( 'status' ) ?>
</td>
<td bgcolor="<?php echo get_status_color( $t_bug->status ) ?>">
<?php echo get_enum_element( 'status', $t_bug->status ) ?>
</td>
<?php
# Duplicate Id
# MASC RELATIONSHIP
if ( OFF == config_get( 'enable_relationship' ) ) {
# Duplicate ID
echo '<td class="category">', lang_get( 'duplicate_id' ), ' </td>';
echo '<td>';
print_duplicate_id( $t_bug->duplicate_id );
echo '</td>';
} else {
# spacer
echo '<td colspan="2"> </td>';
}
?>
<!-- Operating System -->
<td class="category">
<?php echo lang_get( 'os' ) ?>
</td>
<td>
<?php echo $t_bug->os ?>
</td>
</tr>
<tr <?php echo helper_alternate_class() ?>>
<!-- Projection -->
<td class="category">
<?php echo lang_get( 'projection' ) ?>
</td>
<td>
<?php echo get_enum_element( 'projection', $t_bug->projection ) ?>
</td>
<!-- spacer -->
<td colspan="2"> </td>
<!-- OS Version -->
<td class="category">
<?php echo lang_get( 'os_version' ) ?>
</td>
<td>
<?php echo $t_bug->os_build ?>
</td>
</tr>
<tr <?php echo helper_alternate_class() ?>>
<!-- ETA -->
<td class="category">
<?php echo lang_get( 'eta' ) ?>
</td>
<td>
<?php echo get_enum_element( 'eta', $t_bug->eta ) ?>
</td>
<!-- fixed in version -->
<?php
$t_show_version = ( ON == config_get( 'show_product_version' ) )
|| ( ( AUTO == config_get( 'show_product_version' ) )
&& ( count( version_get_all_rows( $t_bug->project_id ) ) > 0 ) );
if ( $t_show_version ) {
?>
<td class="category">
<?php echo lang_get( 'fixed_in_version' ) ?>
</td>
<td>
<?php echo $t_bug->fixed_in_version ?>
</td>
<?php
} else {
?>
<td>
</td>
<td>
</td>
<?php
}
?>
<!-- Product Version or Product Build, if version is suppressed -->
<?php
if ( $t_show_version ) {
?>
<td class="category">
<?php echo lang_get( 'product_version' ) ?>
</td>
<td>
<?php echo $t_bug->version ?>
</td>
<?php
} else {
?>
<td class="category">
<?php echo lang_get( 'product_build' ) ?>
</td>
<td>
<?php echo $t_bug->build ?>
</td>
<?php
}
?>
</tr>
<?php
if( $t_show_version ) {
?>
<tr <?php echo helper_alternate_class() ?>>
<!-- spacer -->
<td colspan="4"> </td>
<!-- Product Build -->
<td class="category">
<?php echo lang_get( 'product_build' ) ?>
</td>
<td>
<?php echo $t_bug->build?>
</td>
</tr>
<?php
}
?>
<!-- Custom Fields -->
<?php
$t_custom_fields_found = false;
$t_related_custom_field_ids = custom_field_get_linked_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;
} # has read access
$t_custom_fields_found = true;
$t_def = custom_field_get_definition( $t_id );
?>
<tr <?php echo helper_alternate_class() ?>>
<td class="category">
<?php echo lang_get_defaulted( $t_def['name'] ) ?>
</td>
<td colspan="5">
<?php print_custom_field_value( $t_def, $t_id, $f_bug_id ); ?>
</td>
</tr>
<?php
} # foreach
?>
<?php if ( $t_custom_fields_found ) { ?>
<!-- spacer -->
<tr height="5" class="spacer">
<td colspan="6"></td>
</tr>
<?php } # custom fields found ?>
<!-- spacer -->
<tr height="5" class="spacer">
<td colspan="6"></td>
</tr>
<!-- Summary -->
<tr <?php echo helper_alternate_class() ?>>
<td class="category">
<?php echo lang_get( 'summary' ) ?>
</td>
<td colspan="5">
<?php echo bug_format_summary( $f_bug_id, SUMMARY_FIELD ) ?>
</td>
</tr>
<!-- Description -->
<tr <?php echo helper_alternate_class() ?>>
<td class="category">
<?php echo lang_get( 'description' ) ?>
</td>
<td colspan="5">
<?php echo $t_bug->description ?>
</td>
</tr>
<!-- Steps to Reproduce -->
<tr <?php echo helper_alternate_class() ?>>
<td class="category">
<?php echo lang_get( 'steps_to_reproduce' ) ?>
</td>
<td colspan="5">
<?php echo $t_bug->steps_to_reproduce ?>
</td>
</tr>
<!-- Additional Information -->
<tr <?php echo helper_alternate_class() ?>>
<td class="category">
<?php echo lang_get( 'additional_information' ) ?>
</td>
<td colspan="5">
<?php echo $t_bug->additional_information ?>
</td>
</tr>
<!-- spacer -->
<tr height="5" class="spacer">
<td colspan="6"></td>
</tr>
<!-- Custom Fields call was here -->
<!-- Attachments -->
<?php
$t_show_attachments = ( $t_bug->reporter_id == auth_get_current_user_id() ) || access_has_bug_level( config_get( 'view_attachments_threshold' ), $f_bug_id );
if ( $t_show_attachments ) {
?>
<tr <?php echo helper_alternate_class() ?>>
<td class="category">
<a name="attachments" id="attachments" />
<?php echo lang_get( 'attached_files' ) ?>
</td>
<td colspan="5">
<?php file_list_attachments ( $f_bug_id ); ?>
</td>
</tr>
<?php
}
?>
<!-- Buttons -->
<tr align="center">
<td align="center" colspan="6">
<?php
html_buttons_view_bug_page( $f_bug_id );
?>
</td>
</tr>
</table>
<?php
$t_mantis_dir = dirname( __FILE__ ) . DIRECTORY_SEPARATOR;
# User list sponsoring the bug
include( $t_mantis_dir . 'bug_sponsorship_list_view_inc.php' );
# Bugnotes
include( $t_mantis_dir . 'bugnote_view_inc.php' );
include( $t_mantis_dir . 'bugnote_add_inc.php' );
# File upload box
if ( !bug_is_readonly( $f_bug_id ) ) {
include( $t_mantis_dir . 'bug_file_upload_inc.php' );
}
# Bug Relationships
# MASC RELATIONSHIP
if ( ON == config_get( 'enable_relationship' ) ) {
relationship_view_box ( $f_bug_id );
}
# MASC RELATIONSHIP
# User list monitoring the bug
include( $t_mantis_dir . 'bug_monitor_list_view_inc.php' );
# History
if ( $f_history ) {
include( $t_mantis_dir . 'history_inc.php' );
}
html_page_bottom1( __FILE__ );
?>
I could remove display of custom fields under View Issues page by adding a new column (with check button) in Manage->Custom Field page and checking for it inside custom field display functions (custom_field_api.php). Now, though I don’t see custom field's header and values any more in View_all_bug.php, I can still see empty column with a small white space on the both vertical edges that separates it from neighbouring columns! How can I remove this?