? bug_timetrack_view_inc.php ? config_inc.php Index: bug_change_status_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_change_status_page.php,v retrieving revision 1.23 diff -u -r1.23 bug_change_status_page.php --- bug_change_status_page.php 8 Aug 2005 22:30:58 -0000 1.23 +++ bug_change_status_page.php 6 Jul 2006 09:39:26 -0000 @@ -228,6 +228,24 @@ + + + $f_new_status ) ) { ?> + +> + + + + + + + + + + + = $t_resolved ) && ( CLOSED > $f_new_status ) ) { ?> Index: bug_update.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_update.php,v retrieving revision 1.88.4.1 diff -u -r1.88.4.1 bug_update.php --- bug_update.php 13 Dec 2005 00:58:52 -0000 1.88.4.1 +++ bug_update.php 11 Jul 2006 07:57:26 -0000 @@ -66,6 +66,26 @@ $t_bug_data->view_state = gpc_get_int( 'view_state', $t_bug_data->view_state ); $t_bug_data->summary = gpc_get_string( 'summary', $t_bug_data->summary ); + + + # Sx: Time tracker + # Store values for estimated and elapsed time + $t_bug_data->est_curr = gpc_get_int( 'est_curr', $t_bug_data->est_curr ); + $t_bug_data->elapsed = gpc_get_int( 'elapsed', $t_bug_data->elapsed ); + + # Check if more time elapsed than estimated (-> error) + if ($t_bug_data->elapsed > $t_bug_data->est_curr) { + # trigger_error( ERROR_MORE_ELAPSED_THAN_ESTIMATED, ERROR ); + $t_bug_data->est_curr = $t_bug_data->elapsed; + }; + + # If OriginalEstimation is 0 (was not yet set) -> take value of CurrentEstimation + if ( $t_bug_data->est_orig == 0 ) { + $t_bug_data->est_orig = $t_bug_data->est_curr; + } + + + $t_bug_data->description = gpc_get_string( 'description', $t_bug_data->description ); $t_bug_data->steps_to_reproduce = gpc_get_string( 'steps_to_reproduce', $t_bug_data->steps_to_reproduce ); $t_bug_data->additional_information = gpc_get_string( 'additional_information', $t_bug_data->additional_information ); @@ -106,7 +126,7 @@ continue; } - # 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; Index: bug_update_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_update_page.php,v retrieving revision 1.89 diff -u -r1.89 bug_update_page.php --- bug_update_page.php 12 Jun 2005 21:04:43 -0000 1.89 +++ bug_update_page.php 6 Jul 2006 09:35:08 -0000 @@ -294,6 +294,46 @@ */ ?> + + +> + + + + + + + est_orig == "0" ) { + # echo "bgcolor=".get_status_color( $t_bug->status ); } + echo "bgcolor=#ffffb0"; } + ?> + > + + + + + + + + + + + + + + + + + + est_curr - $t_bug->elapsed ?> + + + +   Index: bug_view_advanced_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_view_advanced_page.php,v retrieving revision 1.76.6.1 diff -u -r1.76.6.1 bug_view_advanced_page.php --- bug_view_advanced_page.php 1 Jan 2006 02:58:50 -0000 1.76.6.1 +++ bug_view_advanced_page.php 25 Aug 2006 12:51:15 -0000 @@ -385,6 +385,14 @@ } ?> + + + + + Index: bug_view_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_view_page.php,v retrieving revision 1.77.6.1 diff -u -r1.77.6.1 bug_view_page.php --- bug_view_page.php 1 Jan 2006 02:58:50 -0000 1.77.6.1 +++ bug_view_page.php 25 Aug 2006 12:51:15 -0000 @@ -291,6 +291,13 @@ + + + + Index: core/bug_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/bug_api.php,v retrieving revision 1.95.8.1.6.1 diff -u -r1.95.8.1.6.1 bug_api.php --- core/bug_api.php 18 Apr 2006 00:53:04 -0000 1.95.8.1.6.1 +++ core/bug_api.php 25 Aug 2006 12:51:20 -0000 @@ -53,6 +53,11 @@ var $sponsorship_total = 0; var $sticky = 0; + # Sx: Time tracking + var $est_orig = 0; + var $est_curr = 0; + var $elapsed = 0; + # omitted: # var $bug_text_id var $profile_id; @@ -745,6 +750,12 @@ reproducibility='$c_bug_data->reproducibility', status='$c_bug_data->status', resolution='$c_bug_data->resolution', + + # Sx: Time tracking + est_orig='$c_bug_data->est_orig', + est_curr='$c_bug_data->est_curr', + elapsed='$c_bug_data->elapsed', + projection='$c_bug_data->projection', category='$c_bug_data->category', eta='$c_bug_data->eta', @@ -787,6 +798,11 @@ history_log_event_direct( $p_bug_id, 'sponsorship_total', $t_old_data->sponsorship_total, $p_bug_data->sponsorship_total ); history_log_event_direct( $p_bug_id, 'sticky', $t_old_data->sticky, $p_bug_data->sticky ); + # Sx: Time tracking + history_log_event_direct( $p_bug_id, 'est_orig', $t_old_data->est_orig, $p_bug_data->est_orig ); + history_log_event_direct( $p_bug_id, 'est_curr', $t_old_data->est_curr, $p_bug_data->est_curr ); + history_log_event_direct( $p_bug_id, 'elapsed', $t_old_data->elapsed, $p_bug_data->elapsed ); + # Update extended info if requested if ( $p_update_extended ) { $t_bug_text_table = config_get( 'mantis_bug_text_table' ); @@ -1346,6 +1362,11 @@ $t_bug_data->sponsorship_total = db_prepare_int( $p_bug_data->sponsorship_total ); $t_bug_data->sticky = db_prepare_int( $p_bug_data->sticky ); + # Sx: Time tracking + $t_bug_data->est_orig = db_prepare_int( $p_bug_data->est_orig ); + $t_bug_data->est_curr = db_prepare_int( $p_bug_data->est_curr ); + $t_bug_data->elapsed = db_prepare_int( $p_bug_data->elapsed ); + $t_bug_data->description = db_prepare_string( $p_bug_data->description ); $t_bug_data->steps_to_reproduce = db_prepare_string( $p_bug_data->steps_to_reproduce ); $t_bug_data->additional_information = db_prepare_string( $p_bug_data->additional_information ); @@ -1370,6 +1391,11 @@ $p_bug_data->sponsorship_total = string_attribute( $p_bug_data->sponsorship_total ); $p_bug_data->sticky = string_attribute( $p_bug_data->sticky ); + # Sx: Time tracking + $p_bug_data->est_orig = string_attribute( $p_bug_data->est_orig ); + $p_bug_data->est_curr = string_attribute( $p_bug_data->est_curr ); + $p_bug_data->elapsed = string_attribute( $p_bug_data->elapsed ); + $p_bug_data->description = string_textarea( $p_bug_data->description ); $p_bug_data->steps_to_reproduce = string_textarea( $p_bug_data->steps_to_reproduce ); $p_bug_data->additional_information = string_textarea( $p_bug_data->additional_information ); @@ -1394,6 +1420,11 @@ $p_bug_data->sponsorship_total = string_display( $p_bug_data->sponsorship_total ); $p_bug_data->sticky = string_display( $p_bug_data->sticky ); + # Sx: Time tracking + $p_bug_data->est_orig = string_display( $p_bug_data->est_orig ); + $p_bug_data->est_curr = string_display( $p_bug_data->est_curr ); + $p_bug_data->elapsed = string_display( $p_bug_data->elapsed ); + $p_bug_data->description = string_display_links( $p_bug_data->description ); $p_bug_data->steps_to_reproduce = string_display_links( $p_bug_data->steps_to_reproduce ); $p_bug_data->additional_information = string_display_links( $p_bug_data->additional_information ); Index: core/constant_inc.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/constant_inc.php,v retrieving revision 1.52.4.1.6.1 diff -u -r1.52.4.1.6.1 constant_inc.php --- core/constant_inc.php 7 May 2006 05:56:22 -0000 1.52.4.1.6.1 +++ core/constant_inc.php 25 Aug 2006 12:55:49 -0000 @@ -277,6 +277,9 @@ define( 'ERROR_SIGNUP_NOT_MATCHING_CAPTCHA', 1904 ); define( 'ERROR_LOST_PASSWORD_MAX_IN_PROGRESS_ATTEMPTS_REACHED', 1905 ); + # Sx: Time tracking + # define( 'ERROR_MORE_ELAPSED_THAN_ESTIMATED', 2500 ); + # ERROR_FILTER_NOT_FOUND define( 'ERROR_FILTER_NOT_FOUND', 2000 ); define( 'ERROR_FILTER_TOO_OLD', 2001 ); Index: core/relationship_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/relationship_api.php,v retrieving revision 1.36 diff -u -r1.36 relationship_api.php --- core/relationship_api.php 28 Jun 2005 11:04:06 -0000 1.36 +++ core/relationship_api.php 6 Jul 2006 10:03:15 -0000 @@ -497,6 +497,36 @@ return true; } + + # Sx: Time tracking + function outstanding_time( $p_bug_id ) { + + # retrieve all the relationships in which the bug is the source bug + $t_relationship = relationship_get_all_src( $p_bug_id ); + $t_relationship_count = count( $t_relationship ); + if ( $t_relationship_count == 0 ) { + return ''; + } + + $sumall = 0; + $sumremain = 0; + for ( $i = 0 ; $i < $t_relationship_count ; $i++ ) { + if ( $t_relationship[$i]->type == BUG_DEPENDANT ) { + $t_dest_bug_id = $t_relationship[$i]->dest_bug_id; + $sumall += bug_get_field( $t_dest_bug_id, 'est_curr' ); + $t_status = bug_get_field( $t_dest_bug_id, 'status' ); + if ( $t_status < config_get( 'bug_resolved_status_threshold' ) ) { + # the bug is NOT marked as resolved/closed + $sumremain += bug_get_field( $t_dest_bug_id, 'est_curr' ) - bug_get_field( $t_dest_bug_id, 'elapsed' ); + } + } + } + + return ' ' . $sumremain . ' units outstanding. (total of child issues : ' . $sumall . ')' ; + } + + + # -------------------- # return formatted string with all the details on the requested relationship function relationship_get_details( $p_bug_id, $p_relationship, $p_html = false, $p_html_preview = false, $p_show_project = false ) { @@ -560,6 +590,15 @@ } $t_relationship_info_html .= ' '; + # Sx: time tracker : show outstanding time + if (( $p_relationship->type == BUG_DEPENDANT ) && ($t_bug->est_orig != 0)) { + $t_relationship_info_html .= $t_td . + ''. + $t_bug->elapsed . ' / ' . $t_bug->est_curr . '';} + else + { $t_relationship_info_html .= $t_td . ' '; }; + + # add project name if( $p_show_project ) { $t_relationship_info_html .= $t_td . $t_related_project_name . ' '; @@ -619,7 +658,7 @@ if ( !is_blank( $t_summary ) ) { if ( relationship_can_resolve_bug( $p_bug_id ) == false ) { - $t_summary .= '' . lang_get( 'relationship_warning_blocking_bugs_not_resolved' ) . ''; + $t_summary .= '' . lang_get( 'relationship_warning_blocking_bugs_not_resolved' ) . outstanding_time ( $p_bug_id ) . ''; } $t_summary = '' . $t_summary . '
'; } @@ -643,7 +682,7 @@ if ( !is_blank( $t_summary ) ) { if ( relationship_can_resolve_bug( $p_bug_id ) == false ) { - $t_summary .= '' . lang_get( 'relationship_warning_blocking_bugs_not_resolved' ) . ''; + $t_summary .= '' . lang_get( 'relationship_warning_blocking_bugs_not_resolved' ) . outstanding_time ( $p_bug_id ) . ''; } $t_summary = '' . $t_summary . '
'; } Index: lang/strings_english.txt =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/lang/strings_english.txt,v retrieving revision 1.267.10.1 diff -u -r1.267.10.1 strings_english.txt --- lang/strings_english.txt 7 May 2006 05:56:22 -0000 1.267.10.1 +++ lang/strings_english.txt 12 Oct 2006 10:02:05 -0000 @@ -257,6 +257,8 @@ $MANTIS_ERROR[ERROR_LOST_PASSWORD_MAX_IN_PROGRESS_ATTEMPTS_REACHED] = 'Max. number of in-progress requests reached. Please contact the system administrator'; $MANTIS_ERROR[ERROR_PROJECT_RECURSIVE_HIERARCHY] = 'That operation would create a loop in the subproject hierarchy.'; $MANTIS_ERROR[ERROR_USER_CHANGE_LAST_ADMIN] = 'You cannot change the access level of the only ADMINISTRATOR in the system.'; +# Sx: Time tracking +# $MANTIS_ERROR[ERROR_MORE_ELAPSED_THAN_ESTIMATED] = 'Elapsed time needs to be smaller or equal than estimated time!'; $MANTIS_ERROR[ERROR_PAGE_REDIRECTION] = 'Page redirection error, ensure that there are no spaces outside the PHP block (<?php ?>) in config_inc.php or custom_*.php files.'; #$s_login_error = 'Your account may be disabled or blocked (due to too many failed login attempts) or the username/password you entered is incorrect.'; @@ -574,6 +576,12 @@ $s_sticky_issue = 'Sticky Issue'; $s_profile = 'Profile'; +# Sx: Time tracking +$s_est_orig = 'Initial'; +$s_est_curr = 'Est. Effort'; +$s_elapsed = 'Elapsed'; +$s_remaining = 'Remaining'; + # bug_update_page.php $s_update_advanced_link = 'Update Advanced'; $s_updating_bug_simple_title = 'Updating Issue Information';