View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0007829 | mantisbt | bugtracker | public | 2007-03-16 09:33 | 2014-11-07 16:11 |
Reporter | andre_steffens | Assigned To | |||
Priority | normal | Severity | tweak | Reproducibility | always |
Status | new | Resolution | open | ||
Product Version | 1.0.5 | ||||
Summary | 0007829: remember / timestamp function | ||||
Description | Hi, it would be nice to have a remember function for each bug like in outlook tasks. In the overview only the bugs can be shown that matter at the moment. Thx | ||||
Tags | due_date | ||||
Attached Files | mantisbt-remind.patch (85,267 bytes)
? javascript/jscalendar Index: bug_change_status_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_change_status_page.php,v retrieving revision 1.27 diff -u -r1.27 bug_change_status_page.php --- bug_change_status_page.php 4 Jan 2007 10:07:44 -0000 1.27 +++ bug_change_status_page.php 22 Mar 2007 22:03:03 -0000 @@ -22,13 +22,13 @@ <?php $f_bug_id = gpc_get_int( 'bug_id' ); $t_bug = bug_get( $f_bug_id ); - + 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; } - + $f_new_status = gpc_get_int( 'new_status' ); $f_reopen_flag = gpc_get_int( 'reopen_flag', OFF ); @@ -68,7 +68,7 @@ $t_status_label = str_replace( " ", "_", get_enum_to_string( config_get( 'status_enum_string' ), $f_new_status ) ); $t_resolved = config_get( 'bug_resolved_status_threshold' ); - $t_bug = bug_get( $f_bug_id ); + $t_bug = bug_prepare_edit( bug_get( $f_bug_id ) ); html_page_top1( bug_format_summary( $f_bug_id, SUMMARY_CAPTION ) ); html_page_top2(); @@ -113,7 +113,7 @@ </td> <td> <select name="resolution"> - <?php + <?php $t_resolution = $t_bug_is_open ? FIXED : $t_current_resolution; print_enum_string_option_list( "resolution", $t_resolution ); ?> @@ -150,13 +150,51 @@ </select> </td> </tr> +<?php if ($t_bug->reporter_id == auth_get_current_user_id() ) { ?> +<tr <?php echo helper_alternate_class() ?>> + <td class="category"> + <?php echo lang_get( 'due' ) ?> + </td> + <td> + <input type="hidden" name="_check_due" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="due"<?php if ($t_bug->due) echo " checked" ?>> + <? print_date_calendar( 'remind_date', $t_bug->remind_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="due_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->due_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> +</tr> +<?php } ?> +<tr <?php echo helper_alternate_class() ?>> + <td class="category"> + <?php echo lang_get( 'remind' ) ?> + </td> + <td> + <input type="hidden" name="_check_remind" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="remind"<?php if ($t_bug->remind) echo " checked" ?>> + <? print_date_calendar( 'remind_date', $t_bug->remind_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="remind_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->remind_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> +</tr> <?php } ?> <!-- 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 +# 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 ) && @@ -173,7 +211,7 @@ $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; } Index: bug_report.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_report.php,v retrieving revision 1.46 diff -u -r1.46 bug_report.php --- bug_report.php 22 Apr 2006 06:19:40 -0000 1.46 +++ bug_report.php 22 Mar 2007 20:59:22 -0000 @@ -36,6 +36,10 @@ $t_bug_data->reproducibility = gpc_get_int( 'reproducibility', config_get( 'default_bug_reproducibility' ) ); $t_bug_data->severity = gpc_get_int( 'severity', config_get( 'default_bug_severity' ) ); $t_bug_data->priority = gpc_get_int( 'priority', config_get( 'default_bug_priority' ) ); + $t_bug_data->due = gpc_get_bool( 'due' ); + $t_bug_data->date_due = convert_date( gpc_get_string( 'due_date' ).' '.gpc_get_string( 'due_time' ), config_get( 'normal_date_format' ) ); + $t_bug_data->remind = gpc_get_bool( 'remind' ); + $t_bug_data->date_remind = convert_date( gpc_get_string( 'due_date' ).' '.gpc_get_string( 'due_time' ), config_get( 'normal_date_format' ) ); $t_bug_data->summary = gpc_get_string( 'summary' ); $t_bug_data->description = gpc_get_string( 'description' ); $t_bug_data->steps_to_reproduce = gpc_get_string( 'steps_to_reproduce', config_get ( 'default_bug_additional_info' ) ); Index: bug_report_advanced_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_report_advanced_page.php,v retrieving revision 1.60 diff -u -r1.60 bug_report_advanced_page.php --- bug_report_advanced_page.php 10 Mar 2007 04:30:18 -0000 1.60 +++ bug_report_advanced_page.php 20 Mar 2007 22:03:30 -0000 @@ -94,6 +94,8 @@ $f_reproducibility = gpc_get_int( 'reproducibility', config_get( 'default_bug_reproducibility' ) ); $f_severity = gpc_get_int( 'severity', config_get( 'default_bug_severity' ) ); $f_priority = gpc_get_int( 'priority', config_get( 'default_bug_priority' ) ); + $f_due_date = convert_date ( '2099-01-01', config_get( 'short_date_format' ), 'Y-m-d' ); + $f_due_time = '09:00'; $f_summary = gpc_get_string( 'summary', '' ); $f_description = gpc_get_string( 'description', '' ); $f_steps_to_reproduce = gpc_get_string( 'steps_to_reproduce', config_get( 'default_bug_steps_to_reproduce' ) ); @@ -147,12 +149,12 @@ echo "[" . project_get_field( $t_bug->project_id, 'name' ) . "] "; } ?> <select <?php echo helper_get_tab_index() ?> name="category"> - <?php + <?php if ( is_blank( $f_category ) ) { echo '<option value="" selected="selected">', string_attribute( lang_get( 'select_option' ) ), '</option>'; } - print_category_option_list( $f_category ); + print_category_option_list( $f_category ); ?> </select> </td> @@ -199,6 +201,42 @@ <?php } ?> +<!-- Reminder and due (if permission allow) --> +<?php if ( access_has_project_level( config_get( 'handle_bug_threshold' ) ) ) { ?> +<tr <?php echo helper_alternate_class() ?>> + <td class="category"> + <?php echo lang_get( 'due' ) ?> <?php print_documentation_link( 'due' ) ?> + </td> + <td> + <input <?php echo helper_get_tab_index() ?> type="text" name="due_date" size="10" maxlength="10" value="<?php echo $f_due_date ?>" /> + <select <?php echo helper_get_tab_index() ?> name="due_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $f_due_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> +</tr> +<tr <?php echo helper_alternate_class() ?>> + <td class="category"> + <?php echo lang_get( 'remind' ) ?> <?php print_documentation_link( 'remind' ) ?> + </td> + <td> + <input <?php echo helper_get_tab_index() ?> type="text" name="remind_date" size="10" maxlength="10" value="<?php echo $f_remind_date ?>" /> + <select <?php echo helper_get_tab_index() ?> name="remind_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $f_remind_time) echo ' selected="selected"'; + echo ">".$tmp."</option>"; + }?> + </select> + </td> +</tr> +<?php } ?> + <!-- spacer --> <tr> <td class="spacer" colspan="2"> </td> Index: bug_report_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_report_page.php,v retrieving revision 1.61 diff -u -r1.61 bug_report_page.php --- bug_report_page.php 10 Mar 2007 04:30:18 -0000 1.61 +++ bug_report_page.php 22 Mar 2007 21:00:17 -0000 @@ -79,6 +79,8 @@ $f_reproducibility = gpc_get_int( 'reproducibility', config_get( 'default_bug_reproducibility' ) ); $f_severity = gpc_get_int( 'severity', config_get( 'default_bug_severity' ) ); $f_priority = gpc_get_int( 'priority', config_get( 'default_bug_priority' ) ); + $f_due_date = convert_date ( '2099-01-01', 'Y-m-d', config_get( 'short_date_format' ) ); + $f_due_time = '09:00'; $f_summary = gpc_get_string( 'summary', '' ); $f_description = gpc_get_string( 'description', '' ); $f_additional_info = gpc_get_string( 'additional_info', config_get ( 'default_bug_additional_info' ) ); @@ -132,12 +134,12 @@ echo "[" . project_get_field( $t_bug->project_id, 'name' ) . "] "; } ?> <select <?php echo helper_get_tab_index() ?> name="category"> - <?php + <?php if ( is_blank( $f_category ) ) { echo '<option value="" selected="selected">', string_attribute( lang_get( 'select_option' ) ), '</option>'; } - print_category_option_list( $f_category ); + print_category_option_list( $f_category ); ?> </select> </td> @@ -185,6 +187,27 @@ <?php } ?> +<!-- date due (if permission allow) --> +<?php if ( access_has_project_level( config_get( 'handle_bug_threshold' ) ) ) { ?> +<tr <?php echo helper_alternate_class() ?>> + <td class="category"> + <?php echo lang_get( 'due' ) ?> <?php print_documentation_link( 'due' ) ?> + </td> + <td> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="due"<?php if ($t_bug->due) echo " checked" ?>> + <?php print_date_calendar( 'due_date', $f_due_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="due_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $f_due_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> +</tr> +<?php } ?> + <!-- spacer --> <tr> <td class="spacer" colspan="2"> </td> 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 22 Mar 2007 22:24:09 -0000 @@ -50,6 +50,21 @@ $t_bug_data->handler_id = gpc_get_int( 'handler_id', $t_bug_data->handler_id ); $t_bug_data->duplicate_id = gpc_get_int( 'duplicate_id', $t_bug_data->duplicate_id ); $t_bug_data->priority = gpc_get_int( 'priority', $t_bug_data->priority ); + + if (gpc_get_bool( '_check_due' )) { + $t_bug_data->due = gpc_get_bool( 'due' ); + } + list($date, $time) = split(' ', $t_bug_data->date_due); + $date = convert_date( $date, 'Y-m-d', config_get( 'short_date_format' ) ); + $t_bug_data->date_due = convert_date( gpc_get_string( 'due_date', $date ), config_get( 'short_date_format' ), 'Y-m-d' ).' '.gpc_get_string( 'due_time', $time ) . ':00'; + + if (gpc_get_bool( '_check_remind' )) { + $t_bug_data->remind = gpc_get_bool( 'remind' ); + } + list($date, $time) = split(' ', $t_bug_data->date_remind); + $date = convert_date( $date, 'Y-m-d', config_get( 'short_date_format' ) ); + $t_bug_data->date_remind = convert_date( gpc_get_string( 'remind_date', $date ), config_get( 'short_date_format' ), 'Y-m-d' ).' '.gpc_get_string( 'remind_time', $time ) . ':00'; + $t_bug_data->severity = gpc_get_int( 'severity', $t_bug_data->severity ); $t_bug_data->reproducibility = gpc_get_int( 'reproducibility', $t_bug_data->reproducibility ); $t_bug_data->status = gpc_get_int( 'status', $t_bug_data->status ); @@ -62,7 +77,7 @@ $t_bug_data->platform = gpc_get_string( 'platform', $t_bug_data->platform ); $t_bug_data->version = gpc_get_string( 'version', $t_bug_data->version ); $t_bug_data->build = gpc_get_string( 'build', $t_bug_data->build ); - $t_bug_data->fixed_in_version = gpc_get_string( 'fixed_in_version', $t_bug_data->fixed_in_version ); + $t_bug_data->fixed_in_version = gpc_get_string( 'fixed_in_version', $t_bug_data->fixed_in_version ); $t_bug_data->target_version = gpc_get_string( 'target_version', $t_bug_data->target_version ); $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 ); @@ -73,7 +88,7 @@ $f_private = gpc_get_bool( 'private' ); $f_bugnote_text = gpc_get_string( 'bugnote_text', '' ); - $f_time_tracking = gpc_get_string( 'time_tracking', '0:00' ); + $f_time_tracking = gpc_get_string( 'time_tracking', '0:00' ); $f_close_now = gpc_get_string( 'close_now', false ); # Handle auto-assigning @@ -108,7 +123,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_advanced_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_update_advanced_page.php,v retrieving revision 1.97 diff -u -r1.97 bug_update_advanced_page.php --- bug_update_advanced_page.php 10 Mar 2007 03:55:11 -0000 1.97 +++ bug_update_advanced_page.php 22 Mar 2007 22:34:50 -0000 @@ -180,8 +180,23 @@ ?> </td> - <!-- spacer --> - <td colspan="2"> </td> + <!-- Date Due --> + <td class="category"> + <?php echo lang_get( 'due' ) ?> + </td> + <td> + <input type="hidden" name="_check_due" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="due"<?php if ($t_bug->due) echo " checked" ?>> + <?php print_date_calendar( 'due_date', $t_bug->due_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="due_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->due_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> </tr> @@ -191,7 +206,7 @@ <td class="category"> <?php echo lang_get( 'assigned_to' ) ?> </td> - <td colspan="5"> + <td colspan="3"> <?php if ( access_has_project_level( config_get( 'update_bug_assign_threshold', config_get( 'update_bug_threshold' ) ) ) ) { ?> <select <?php echo helper_get_tab_index() ?> name="handler_id"> @@ -205,6 +220,23 @@ ?> </td> + <!-- Date Remind --> + <td class="category"> + <?php echo lang_get( 'remind' ) ?> + </td> + <td> + <input type="hidden" name="_check_remind" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="remind"<?php if ($t_bug->remind) echo " checked" ?>> + <?php print_date_calendar( 'remind_date', $t_bug->remind_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="remind_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->remind_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> </tr> Index: bug_update_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_update_page.php,v retrieving revision 1.97 diff -u -r1.97 bug_update_page.php --- bug_update_page.php 10 Mar 2007 03:55:12 -0000 1.97 +++ bug_update_page.php 22 Mar 2007 22:02:53 -0000 @@ -184,8 +184,23 @@ ?> </td> - <!-- spacer --> - <td colspan="2"> </td> + <!-- Date Due --> + <td class="category"> + <?php echo lang_get( 'due' ) ?> + </td> + <td> + <input type="hidden" name="_check_due" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="due"<?php if ($t_bug->due) echo " checked" ?>> + <?php print_date_calendar( 'due_date', $t_bug->due_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="due_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->due_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> </tr> @@ -195,7 +210,7 @@ <td class="category"> <?php echo lang_get( 'assigned_to' ) ?> </td> - <td colspan="5"> + <td colspan="3"> <?php if ( access_has_project_level( config_get( 'update_bug_assign_threshold', config_get( 'update_bug_threshold' ) ) ) ) { ?> <select <?php echo helper_get_tab_index() ?> name="handler_id"> @@ -209,6 +224,23 @@ ?> </td> + <!-- Date Remind --> + <td class="category"> + <?php echo lang_get( 'remind' ) ?> + </td> + <td> + <input type="hidden" name="_check_remind" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="remind"<?php if ($t_bug->remind) echo " checked" ?>> + <?php print_date_calendar( 'remind_date', $t_bug->remind_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="remind_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->remind_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> </tr> Index: bug_view_advanced_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_view_advanced_page.php,v retrieving revision 1.83 diff -u -r1.83 bug_view_advanced_page.php --- bug_view_advanced_page.php 6 Mar 2007 07:05:18 -0000 1.83 +++ bug_view_advanced_page.php 22 Mar 2007 22:32:48 -0000 @@ -29,6 +29,7 @@ access_ensure_bug_level( VIEWER, $f_bug_id ); $t_bug = bug_prepare_display( bug_get( $f_bug_id, true ) ); + $t_resolved = $t_bug->status >= config_get( 'bug_resolved_status_threshold' ) ? true : false; 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... @@ -76,7 +77,7 @@ </span> <?php } - + if ( wiki_is_enabled() ) { ?> <span class="small"> @@ -207,8 +208,38 @@ <?php echo get_enum_element( 'project_view_state', $t_bug->view_state ) ?> </td> - <!-- spacer --> - <td colspan="2"> </td> + <!-- Date Due --> + <td class="category"> + <?php echo lang_get( 'due' ) ?> + </td> + <td> + <?php + if ($t_bug->reporter_id == auth_get_current_user_id() && !$t_resolved ) { + ?> + <form method="post" action="bug_update.php"> + <input type="hidden" name="bug_id" value="<?php echo $f_bug_id ?>" /> + <input type="hidden" name="update_mode" value="1" /> + <input type="hidden" name="_check_due" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="due"<?php if ($t_bug->due) echo " checked" ?>> + <?php print_date_calendar( 'due_date', $t_bug->due_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="due_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->due_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + <input <?php echo helper_get_tab_index() ?> type="submit" class="button" value="<?php echo lang_get( 'due_update_button' ) ?>" /> + </form> + <?php + } else if ( $t_bug->due ) { + echo convert_date( $t_bug->date_due, 'Y-m-d H:i', config_get( 'normal_date_format' ) ); + } else { + echo lang_get ( 'disabled' ); + } + ?> + </td> </tr> @@ -218,13 +249,50 @@ <td class="category"> <?php echo lang_get( 'assigned_to' ) ?> </td> - <td colspan="5"> - <?php + <td colspan="3"> + <?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> + + <!-- Date Remind --> + <?php if ($t_bug->handler_id) { ?> + <td class="category"> + <?php echo lang_get( 'remind' ) ?> + </td> + <td> + <?php + if ($t_bug->handler_id == auth_get_current_user_id() && !$t_resolved ) { + ?> + <form method="post" action="bug_update.php"> + <input type="hidden" name="bug_id" value="<?php echo $f_bug_id ?>" /> + <input type="hidden" name="update_mode" value="1" /> + <input type="hidden" name="_check_remind" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="remind"<?php if ($t_bug->remind) echo " checked" ?>> + <?php print_date_calendar( 'remind_date', $t_bug->remind_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="remind_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->remind_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + <input <?php echo helper_get_tab_index() ?> type="submit" class="button" value="<?php echo lang_get( 'remind_update_button' ) ?>" /> + </form> + <?php + } else if ( $t_bug->remind ) { + echo convert_date( $t_bug->date_remind, 'Y-m-d H:i', config_get( 'normal_date_format' ) ); + } else { + echo lang_get ( 'disabled' ); + } + ?> + </td> + <?php } else { ?> + <td colspan=2></td> + <?php } ?> </tr> Index: bug_view_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bug_view_page.php,v retrieving revision 1.85 diff -u -r1.85 bug_view_page.php --- bug_view_page.php 6 Mar 2007 07:05:18 -0000 1.85 +++ bug_view_page.php 22 Mar 2007 22:30:11 -0000 @@ -32,6 +32,7 @@ access_ensure_bug_level( VIEWER, $f_bug_id ); $t_bug = bug_prepare_display( bug_get( $f_bug_id, true ) ); + $t_resolved = $t_bug->status >= config_get( 'bug_resolved_status_threshold' ) ? true : false; 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... @@ -79,7 +80,7 @@ </span> <?php } - + if ( wiki_is_enabled() ) { ?> <span class="small"> @@ -210,8 +211,38 @@ <?php echo get_enum_element( 'project_view_state', $t_bug->view_state ) ?> </td> - <!-- spacer --> - <td colspan="2"> </td> + <!-- Date Due --> + <td class="category"> + <?php echo lang_get( 'due' ) ?> + </td> + <td> + <?php + if ($t_bug->reporter_id == auth_get_current_user_id() && !$t_resolved ) { + ?> + <form method="post" action="bug_update.php"> + <input type="hidden" name="bug_id" value="<?php echo $f_bug_id ?>" /> + <input type="hidden" name="update_mode" value="1" /> + <input type="hidden" name="_check_due" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="due"<?php if ($t_bug->due) echo " checked" ?>> + <?php print_date_calendar( 'due_date', $t_bug->due_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="due_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->due_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + <input <?php echo helper_get_tab_index() ?> type="submit" class="button" value="<?php echo lang_get( 'due_update_button' ) ?>" /> + </form> + <?php + } else if ( $t_bug->due ) { + echo convert_date( $t_bug->date_due, 'Y-m-d H:i', config_get( 'normal_date_format' ) ); + } else { + echo lang_get ( 'disabled' ); + } + ?> + </td> </tr> @@ -220,13 +251,50 @@ <td class="category"> <?php echo lang_get( 'assigned_to' ) ?> </td> - <td colspan="5"> - <?php + <td colspan="3"> + <?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 ); + print_user_with_subject( $t_bug->handler_id, $f_bug_id ); } ?> </td> + + <!-- Date Remind --> + <?php if ($t_bug->handler_id) { ?> + <td class="category"> + <?php echo lang_get( 'remind' ) ?> + </td> + <td> + <?php + if ($t_bug->handler_id == auth_get_current_user_id() && !$t_resolved ) { + ?> + <form method="post" action="bug_update.php"> + <input type="hidden" name="bug_id" value="<?php echo $f_bug_id ?>" /> + <input type="hidden" name="update_mode" value="1" /> + <input type="hidden" name="_check_remind" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="remind"<?php if ($t_bug->remind) echo " checked" ?>> + <?php print_date_calendar( 'remind_date', $t_bug->remind_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="remind_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->remind_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + <input <?php echo helper_get_tab_index() ?> type="submit" class="button" value="<?php echo lang_get( 'remind_update_button' ) ?>" /> + </form> + <?php + } else if ( $t_bug->remind ) { + echo convert_date( $t_bug->date_remind, 'Y-m-d H:i', config_get( 'normal_date_format' ) ); + } else { + echo lang_get ( 'disabled' ); + } + ?> + </td> + <?php } else { ?> + <td colspan=2></td> + <?php } ?> </tr> Index: bugnote_add.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bugnote_add.php,v retrieving revision 1.48 diff -u -r1.48 bugnote_add.php --- bugnote_add.php 26 Dec 2006 10:56:06 -0000 1.48 +++ bugnote_add.php 20 Mar 2007 22:40:41 -0000 @@ -23,6 +23,8 @@ $f_private = gpc_get_bool( 'private' ); $f_time_tracking = gpc_get_string( 'time_tracking', '0:00' ); $f_bugnote_text = trim( gpc_get_string( 'bugnote_text', '' ) ); + $f_remind = gpc_get_bool( 'remind' ); + $f_date_remind = trim(gpc_get_date( 'remind_date', config_get( 'short_date_format') ).' '.gpc_get_string( 'remind_time', '09:00' )); if ( bug_is_readonly( $f_bug_id ) ) { error_parameters( $f_bug_id ); @@ -40,12 +42,25 @@ $c_time_tracking = db_prepare_time( $f_time_tracking ); + # Remind date in future? + if ( $f_remind && $f_date_remind < date( 'Y-m-d H:i', time() ) ) { + trigger_error( ERROR_REMIND_DATE, ERROR ); + } + + # Remind date younger than due date? + if ( $f_remind && $t_bug->date_due < $f_date_remind ) { + trigger_error( ERROR_REMIND_DATE_OLDER, ERROR ); + } + + # check for blank bugnote # @@@ VB: Do we want to ban adding a time without an associated note? # @@@ VB: Do we want to differentiate email notifications for normal notes from time tracking entries? if ( !is_blank( $f_bugnote_text ) || ( $c_time_tracking > 0 ) ) { $t_note_type = ( $c_time_tracking > 0 ) ? TIME_TRACKING : BUGNOTE; - bugnote_add( $f_bug_id, $f_bugnote_text, $f_time_tracking, $f_private, $t_note_type ); + if ($t_bug->handler_id != auth_get_current_user_id()) $f_date_remind = null; + else if (!$f_remind) $f_date_remind = ''; + bugnote_add( $f_bug_id, $f_bugnote_text, $f_time_tracking, $f_private, $t_note_type, '', null, $f_date_remind); # only send email if the text is not blank, otherwise, it is just recording of time without a comment. if ( !is_blank( $f_bugnote_text ) ) { Index: bugnote_add_inc.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/bugnote_add_inc.php,v retrieving revision 1.29 diff -u -r1.29 bugnote_add_inc.php --- bugnote_add_inc.php 4 Jan 2007 10:07:44 -0000 1.29 +++ bugnote_add_inc.php 22 Mar 2007 22:03:22 -0000 @@ -49,6 +49,26 @@ <textarea name="bugnote_text" cols="80" rows="10" wrap="virtual"></textarea> </td> </tr> +<?php if ( auth_get_current_user_id() == $t_bug->handler_id ) { ?> +<tr class="row-1"> + <td class="category"> + <?php echo lang_get( 'remind' ) ?> <?php print_documentation_link( 'remind' ) ?> + </td> + <td> + <input type="hidden" name="_check_remind" value="1"> + <input <?php echo helper_get_tab_index() ?> type="checkbox" name="remind"<?php if ($t_bug->remind) echo " checked" ?>> + <?php print_date_calendar( 'remind_date', $t_bug->remind_date ) ?> + <select <?php echo helper_get_tab_index() ?> name="remind_time"> + <?php for ($i=82800;$i<169200;$i=$i+300) { + $tmp = date("H:i",$i); + echo "<option"; + if ($tmp == $t_bug->remind_time) echo " selected"; + echo ">".$tmp."</option>"; + }?> + </select> + </td> +</tr> +<?php } ?> <?php if ( access_has_bug_level( config_get( 'private_bugnote_threshold' ), $f_bug_id ) ) { ?> <tr class="row-1"> <td class="category"> Index: config_defaults_inc.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/config_defaults_inc.php,v retrieving revision 1.323 diff -u -r1.323 config_defaults_inc.php --- config_defaults_inc.php 29 Dec 2006 19:24:16 -0000 1.323 +++ config_defaults_inc.php 22 Mar 2007 22:46:46 -0000 @@ -298,7 +298,7 @@ $g_smtp_username = ''; $g_smtp_password = ''; - # It is recommended to use a cronjob or a scheduler task to send emails. + # It is recommended to use a cronjob or a scheduler task to send emails. # The cronjob should typically run every 5 minutes. If no cronjob is used, # then user will have to wait for emails to be sent after performing an action # which triggers notifications. This slows user performance. @@ -464,7 +464,7 @@ # resolution, fixed_in_version, view_state, os, os_build, platform, version, date_submitted, attachment, # category, sponsorship_total, severity, status, last_updated, summary, bugnotes_count $g_view_issues_page_columns = array ( 'selection', 'edit', 'priority', 'id', 'sponsorship_total', 'bugnotes_count', 'attachment', 'category', 'severity', 'status', 'last_updated', 'summary' ); - + # A configuration option that identifies the columns to be show on the print issues page. # In Mantis 1.1, this option can be overriden using the Generic Configuration screen. # This configuration can be overriden dynamically by overriding the custom function "get_columns_to_view". @@ -562,9 +562,9 @@ # date format strings defaults to ISO 8601 formatting # go to http://www.php.net/manual/en/function.date.php # for detailed instructions on date formatting - $g_short_date_format = 'Y-m-d'; - $g_normal_date_format = 'Y-m-d H:i'; - $g_complete_date_format = 'Y-m-d H:i T'; + $g_short_date_format = 'd.m.Y'; + $g_normal_date_format = 'd.m.Y H:i'; + $g_complete_date_format = 'd.m.Y H:i T'; ############################ # Mantis News Settings @@ -610,7 +610,7 @@ # Default bug priority when reporting a new bug $g_default_bug_priority = NORMAL; - + # Default bug reproducibility when reporting a new bug $g_default_bug_reproducibility = REPRODUCIBILITY_HAVENOTTRIED; @@ -826,7 +826,7 @@ $g_ldap_bind_dn = ''; $g_ldap_bind_passwd = ''; $g_use_ldap_email = OFF; # Should we send to the LDAP email address or what MySql tells us - + # The LDAP Protocol Version, if 0, then the protocol version is not set. $g_ldap_protocol_version = 0; @@ -1069,7 +1069,7 @@ # threshold for viewing roadmap $g_roadmap_view_threshold = VIEWER; - + # status change thresholds $g_update_bug_status_threshold = DEVELOPER; @@ -1333,6 +1333,9 @@ $g_custom_field_type_enum_string = '0:string,1:numeric,2:float,3:enum,4:email,5:checkbox,6:list,7:multiselection list,8:date'; + $g_remind_enum_string = '1:disable,2:past,3:future'; + $g_due_enum_string = '1:disable,2:past,3:future'; + ############################# # Mantis Javascript Variables ############################# @@ -1531,7 +1534,7 @@ # Note: # - Extensions must be in lower case # - All icons will be displayed as 16x16 pixels. - $g_file_type_icons = array( + $g_file_type_icons = array( '7z' => 'zip.gif', 'ace' => 'zip.gif', 'arj' => 'zip.gif', @@ -1628,12 +1631,13 @@ # Boxes to be shown and their order # A box that is not to be shown can have its value set to 0 $g_my_view_boxes = array ( - 'assigned' => '1', + 'remind' => '1', 'unassigned' => '2', - 'reported' => '3', + 'assigned' => '3', 'resolved' => '4', - 'recent_mod' => '5', + 'reported' => '5', 'monitored' => '6', + 'recent_mod' => '7', 'feedback' => '0', 'verify' => '0' ); @@ -1653,7 +1657,7 @@ $g_rss_enabled = ON; # This seed is used as part of the inputs for calculating the authentication key for the RSS feeds. - # If this seed changes, all the existing keys for the RSS feeds will become invalid. This is + # If this seed changes, all the existing keys for the RSS feeds will become invalid. This is # defaulted to the database user name, but it is recommended to overwrite it with a specific value # on installation. $g_rss_key_seed = '%db_username%'; @@ -1747,26 +1751,26 @@ ##################### # Wiki Integration ##################### - + # Wiki Integration Enabled? $g_wiki_enable = OFF; # Wiki Engine $g_wiki_engine = 'dokuwiki'; - + # Wiki namespace to be used as root for all pages relating to this mantis installation. $g_wiki_root_namespace = 'mantis'; - + # URL under which the wiki engine is hosted. Must be on the same server. $g_wiki_engine_url = $t_protocol . '://' . $t_host . '/%wiki_engine%/'; - + ##################### # Recently Visited ##################### # Whether to show the most recently visited issues or not. At the moment we always track them even if this flag is off. $g_recently_visited = ON; - + # The maximum number of issues to keep in the recently visited list. $g_recently_visited_count = 5; Index: view_all_inc.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/view_all_inc.php,v retrieving revision 1.166 diff -u -r1.166 view_all_inc.php --- view_all_inc.php 3 Mar 2007 14:58:28 -0000 1.166 +++ view_all_inc.php 21 Mar 2007 00:04:01 -0000 @@ -25,7 +25,7 @@ list( $t_sort, ) = split( ',', $t_filter['sort'] ); list( $t_dir, ) = split( ',', $t_filter['dir'] ); } - + $t_checkboxes_exist = false; $t_icon_path = config_get( 'icon_path' ); @@ -78,7 +78,7 @@ if ( sizeof( $rows ) > 0 ) { if( $t_filter ) $v_start = $t_filter['per_page'] * (int)($f_page_number-1) +1; - else + else $v_start = 1; $v_end = $v_start + sizeof( $rows ) -1; } @@ -129,7 +129,7 @@ # -- Loop over bug rows -- - $t_rows = sizeof( $p_rows ); + $t_rows = sizeof( $p_rows ); for( $i=0; $i < $t_rows; $i++ ) { $t_row = $p_rows[$i]; Index: view_all_set.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/view_all_set.php,v retrieving revision 1.63 diff -u -r1.63 view_all_set.php --- view_all_set.php 17 Dec 2006 10:55:39 -0000 1.63 +++ view_all_set.php 21 Mar 2007 00:56:20 -0000 @@ -32,7 +32,7 @@ } if ( ! in_array( $f_view_type, array( 'simple', 'advanced' ) ) ) { $f_view_type = $f_default_view_type; - } + } # these are all possibly multiple selections for advanced filtering $f_show_category = array(); @@ -83,6 +83,22 @@ $f_handler_id = array( $f_handler_id ); } + $f_show_resolution = array(); + if ( is_array( gpc_get( 'show_remind', null ) ) ) { + $f_show_remind = gpc_get_string_array( 'show_remind', META_FILTER_ANY ); + } else { + $f_show_remind = gpc_get_string( 'show_remind', META_FILTER_ANY ); + $f_show_remind = array( $f_show_remind ); + } + + $f_show_due = array(); + if ( is_array( gpc_get( 'show_due', null ) ) ) { + $f_show_due = gpc_get_string_array( 'show_due', META_FILTER_ANY ); + } else { + $f_show_due = gpc_get_string( 'show_due', META_FILTER_ANY ); + $f_show_due = array( $f_show_due ); + } + $f_project_id = array(); if ( is_array( gpc_get( 'project_id', null ) ) ) { $f_project_id = gpc_get_int_array( 'project_id', META_FILTER_CURRENT ); @@ -122,7 +138,7 @@ $f_fixed_in_version = gpc_get_string( 'fixed_in_version', META_FILTER_ANY ); $f_fixed_in_version = array( $f_fixed_in_version ); } - + $f_target_version = array(); if ( is_array( gpc_get( 'target_version', null ) ) ) { $f_target_version = gpc_get_string_array( 'target_version', META_FILTER_ANY ); @@ -332,8 +348,8 @@ error_proceed_url( 'view_all_set.php?type=0' ); trigger_error( ERROR_FILTER_TOO_OLD, ERROR ); exit; # stop here - } - } + } + } } else { # no cookie found, set it $f_type = 1; @@ -359,6 +375,8 @@ $t_setting_arr['highlight_changed'] = $f_highlight_changed; $t_setting_arr['reporter_id'] = $f_reporter_id; $t_setting_arr['handler_id'] = $f_handler_id; + $t_setting_arr['show_remind'] = $f_show_remind; + $t_setting_arr['show_due'] = $f_show_due; $t_setting_arr['project_id'] = $f_project_id; $t_setting_arr['sort'] = $f_sort; $t_setting_arr['dir'] = $f_dir; @@ -408,13 +426,15 @@ error_proceed_url( 'view_all_set.php?type=0' ); trigger_error( ERROR_FILTER_TOO_OLD, ERROR ); exit; # stop here - } + } break; # Generalise the filter case '4': $t_setting_arr['show_category'] = array( META_FILTER_ANY ); $t_setting_arr['reporter_id'] = array( META_FILTER_ANY ); $t_setting_arr['handler_id'] = array( META_FILTER_ANY ); + $t_setting_arr['show_remind'] = array( META_FILTER_ANY ); + $t_setting_arr['show_due'] = array( META_FILTER_ANY ); $t_setting_arr['show_build'] = array( META_FILTER_ANY ); $t_setting_arr['show_version'] = array( META_FILTER_ANY ); $t_setting_arr['show_priority'] = array( META_FILTER_ANY ); Index: view_filters_page.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/view_filters_page.php,v retrieving revision 1.43 diff -u -r1.43 view_filters_page.php --- view_filters_page.php 15 Aug 2006 07:11:23 -0000 1.43 +++ view_filters_page.php 21 Mar 2007 00:31:58 -0000 @@ -118,7 +118,7 @@ if ( ! in_array( $t_target_field, $t_fields ) ) { $t_target_field = ''; } - + $f_for_screen = gpc_get_bool( 'for_screen', true ); $t_action = "view_all_set.php?f=3"; @@ -141,7 +141,7 @@ } if ( ! in_array( $f_view_type, array( 'simple', 'advanced' ) ) ) { $f_view_type = $f_default_view_type; - } + } $t_select_modifier = ''; if ( 'advanced' == $f_view_type ) { @@ -222,6 +222,43 @@ </tr> <tr class="row-category2"> + <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> </td> + <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> </td> + <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'remind' ) ?></td> + <td class="small-caption" colspan="<?php echo ( 2 * $t_custom_cols ); ?>"><?php echo lang_get( 'due' ) ?></td> + <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> </td> + <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> </td> + <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> </td> + <!-- <td colspan="<?php echo ( ( $t_filter_cols - 8 ) * $t_custom_cols ); ?>"> </td> --> +</tr> +<tr class="row-1"> + <td valign="top" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> + + </td> + <td valign="top" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> + + </td> + <!-- Remind --> + <td valign="top" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> + <?php print_filter_show_remind(); ?> + </td> + <!-- Due --> + <td valign="top" colspan="<?php echo ( 2 * $t_custom_cols ); ?>"> + <?php print_filter_show_due(); ?> + </td> + <td valign="top" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> + + </td> + <td valign="top" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> + + </td> + <td valign="top" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> + + </td> + <!-- <td colspan="<?php echo ( ( $t_filter_cols - 8 ) * $t_custom_cols ); ?>"> </td> --> +</tr> + +<tr class="row-category2"> <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"><?php echo lang_get( 'status' ) ?></td> <td class="small-caption" colspan="<?php echo ( 1 * $t_custom_cols ); ?>"> <?php Index: admin/schema.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/admin/schema.php,v retrieving revision 1.15 diff -u -r1.15 schema.php --- admin/schema.php 16 Mar 2007 05:13:46 -0000 1.15 +++ admin/schema.php 22 Mar 2007 18:40:45 -0000 @@ -7,7 +7,7 @@ # -------------------------------------------------------- # $Id: schema.php,v 1.15 2007/03/16 05:13:46 vboctor Exp $ # -------------------------------------------------------- - + # Each entry below defines the schema. The upgrade array consists of # two elements # The first is the function to generate SQL statements (see adodb schema doc for more details) @@ -15,8 +15,8 @@ # DropTableSQL, ChangeTableSQL, RenameTableSQL, RenameColumnSQL, AlterColumnSQL, DropColumnSQL # A local function "InsertData" has been provided to add data to the db # The second parameter is an array of the parameters to be passed to the function. - - # An update identifier is inferred from the ordering of this table. ONLY ADD NEW CHANGES TO THE + + # An update identifier is inferred from the ordering of this table. ONLY ADD NEW CHANGES TO THE # END OF THE TABLE!!! $upgrade[] = Array('CreateTableSQL',Array(config_get('mantis_config_table')," config_id C(64) NOTNULL PRIMARY, @@ -80,6 +80,10 @@ category C(64) NOTNULL DEFAULT \" '' \", date_submitted T NOTNULL DEFAULT '1970-01-01 00:00:01', last_updated T NOTNULL DEFAULT '1970-01-01 00:00:01', + due L NOTNULL DEFAULT '0', + date_due T NOTNULL DEFAULT '1970-01-01 00:00:01', + remind L NOTNULL DEFAULT '0', + date_remind T NOTNULL DEFAULT '1970-01-01 00:00:01', eta I2 NOTNULL DEFAULT '10', bug_text_id I UNSIGNED NOTNULL DEFAULT '0', os C(32) NOTNULL DEFAULT \" '' \", @@ -309,9 +313,9 @@ $upgrade[] = Array('CreateIndexSQL',Array('idx_user_username',config_get('mantis_user_table'),'username',Array('UNIQUE'))); $upgrade[] = Array('CreateIndexSQL',Array('idx_enable',config_get('mantis_user_table'),'enabled')); $upgrade[] = Array('CreateIndexSQL',Array('idx_access',config_get('mantis_user_table'),'access_level')); -$upgrade[] = Array('InsertData', Array( config_get('mantis_user_table'), - "(username, realname, email, password, date_created, last_visit, enabled, protected, access_level, login_count, lost_password_request_count, failed_login_count, cookie_string) VALUES - ('administrator', '', 'root@localhost', '63a9f0ea7bb98050796b649e85481845', " . db_now() . ", " . db_now() . ", 1, 0, 90, 3, 0, 0, '" . +$upgrade[] = Array('InsertData', Array( config_get('mantis_user_table'), + "(username, realname, email, password, date_created, last_visit, enabled, protected, access_level, login_count, lost_password_request_count, failed_login_count, cookie_string) VALUES + ('administrator', '', 'root@localhost', '63a9f0ea7bb98050796b649e85481845', " . db_now() . ", " . db_now() . ", 1, 0, 90, 3, 0, 0, '" . md5( mt_rand( 0, mt_getrandmax() ) + mt_rand( 0, mt_getrandmax() ) ) . md5( time() ) . "')" ) ); $upgrade[] = Array('AlterColumnSQL', Array( config_get( 'mantis_bug_history_table' ), "old_value C(255) NOTNULL" ) ); $upgrade[] = Array('AlterColumnSQL', Array( config_get( 'mantis_bug_history_table' ), "new_value C(255) NOTNULL" ) ); Index: core/bug_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/bug_api.php,v retrieving revision 1.105 diff -u -r1.105 bug_api.php --- core/bug_api.php 10 Mar 2007 04:30:19 -0000 1.105 +++ core/bug_api.php 22 Mar 2007 22:27:29 -0000 @@ -41,6 +41,10 @@ var $category = ''; var $date_submitted = ''; var $last_updated = ''; + var $due = 0; + var $date_due = ''; + var $remind = 0; + var $date_remind = ''; var $eta = 10; var $os = ''; var $os_build = ''; @@ -62,7 +66,7 @@ var $description = ''; var $steps_to_reproduce = ''; var $additional_information = ''; - + #internal helper objects var $_stats = null; } @@ -82,11 +86,11 @@ # Cache an object as a bug. function bug_cache_database_result( $p_bug_datebase_result, $p_stats = null ) { global $g_cache_bug; - + if ( isset( $g_cache_bug[ $p_bug_datebase_result['id'] ] ) ) { return $g_cache_bug[ $p_bug_datebase_result['id'] ]; - } - + } + if( !is_int( $p_bug_datebase_result['date_submitted'] ) ) $p_bug_datebase_result['date_submitted'] = db_unixtimestamp( $p_bug_datebase_result['date_submitted']['date_submitted'] ); if( !is_int( $p_bug_datebase_result['last_updated'] ) ) @@ -340,6 +344,10 @@ $c_severity = db_prepare_int( $p_bug_data->severity ); $c_reproducibility = db_prepare_int( $p_bug_data->reproducibility ); $c_category = db_prepare_string( $p_bug_data->category ); + $c_due = db_prepare_int( $p_bug_data->due ); + $c_date_due = db_prepare_string( $p_bug_data->date_due ); + $c_remind = db_prepare_int( $p_bug_data->remind ); + $c_date_remind = db_prepare_string( $p_bug_data->date_remind ); $c_os = db_prepare_string( $p_bug_data->os ); $c_os_build = db_prepare_string( $p_bug_data->os_build ); $c_platform = db_prepare_string( $p_bug_data->platform ); @@ -363,7 +371,7 @@ error_parameters( lang_get( 'description' ) ); trigger_error( ERROR_EMPTY_FIELD, ERROR ); } - + if ( is_blank( $c_category ) ) { error_parameters( lang_get( 'category' ) ); trigger_error( ERROR_EMPTY_FIELD, ERROR ); @@ -420,12 +428,13 @@ status, resolution, projection, category, date_submitted, last_updated, + due, date_due, eta, bug_text_id, os, os_build, platform, version, build, profile_id, summary, view_state, sponsorship_total, sticky, fixed_in_version, - target_version + target_version ) VALUES ( '$c_project_id', @@ -435,6 +444,7 @@ '$t_status', '$t_resolution', 10, '$c_category', " . db_now() . "," . db_now() . ", + $c_due, '$c_date_due', 10, '$t_text_id', '$c_os', '$c_os_build', '$c_platform', '$c_version', @@ -675,7 +685,7 @@ email_bug_deleted( $p_bug_id ); - # call post-deletion custom function. We call this here to allow the custom function to access the details of the bug before + # call post-deletion custom function. We call this here to allow the custom function to access the details of the bug before # they are deleted from the database given it's id. The other option would be to move this to the end of the function and # provide it with bug data rather than an id, but this will break backward compatibility. helper_call_custom_function( 'issue_delete_notify', array( $f_bug_id ) ); @@ -778,6 +788,17 @@ $t_bug_table = config_get( 'mantis_bug_table' ); + # Reminder OFF if no Handler + if (!$c_bug_data->handler_id ) { + $c_bug_data->remind = ''; + } + + # Reminder and Due OFF if resolved + if ($c_bug_data->status >= config_get( 'bug_resolved_status_threshold' ) ) { + $c_bug_data->due = ''; + $c_bug_data->remind = ''; + } + # Update all fields # Ignore date_submitted and last_updated since they are pulled out # as unix timestamps which could confuse the history log and they @@ -789,6 +810,10 @@ handler_id='$c_bug_data->handler_id', duplicate_id='$c_bug_data->duplicate_id', priority='$c_bug_data->priority', + due='$c_bug_data->due', + date_due='$c_bug_data->date_due', + remind='$c_bug_data->remind', + date_remind='$c_bug_data->date_remind', severity='$c_bug_data->severity', reproducibility='$c_bug_data->reproducibility', status='$c_bug_data->status', @@ -1032,8 +1057,8 @@ $c_bug_id = db_prepare_int( $p_bug_id ); if( !is_null( $g_cache_bug[ $c_bug_id ]['_stats'] ) ) { - if( $g_cache_bug[ $c_bug_id ]['_stats'] === false ) { - return false; + if( $g_cache_bug[ $c_bug_id ]['_stats'] === false ) { + return false; } else { $t_stats['last_modified'] = db_unixtimestamp( $g_cache_bug[ $c_bug_id ]['_stats']['last_modified'] ); $t_stats['count'] = $g_cache_bug[ $c_bug_id ]['_stats']['count']; @@ -1316,6 +1341,28 @@ } # -------------------- + # updates the date remind field + function bug_update_date_remind( $p_bug_id, $p_date_remind) { + $p_date_remind = trim($p_date_remind); + + $c_bug_id = db_prepare_int( $p_bug_id ); + $c_date_remind = db_prepare_string ( $p_date_remind ); + + $c_remind = empty($c_date_remind) ? 0 : 1; + + $t_bug_table = config_get( 'mantis_bug_table' ); + + $query = "UPDATE $t_bug_table + SET remind='$c_remind', date_remind='$c_date_remind' + WHERE id='$c_bug_id'"; + db_query( $query ); + + bug_clear_cache( $p_bug_id ); + + return true; + } + + # -------------------- # enable monitoring of this bug for the user function bug_monitor( $p_bug_id, $p_user_id ) { $c_bug_id = db_prepare_int( $p_bug_id ); @@ -1396,6 +1443,10 @@ $t_bug_data->category = db_prepare_string( $p_bug_data->category ); $t_bug_data->date_submitted = db_prepare_string( $p_bug_data->date_submitted ); $t_bug_data->last_updated = db_prepare_string( $p_bug_data->last_updated ); + $t_bug_data->due = db_prepare_int( $p_bug_data->due ); + $t_bug_data->date_due = db_prepare_string( $p_bug_data->date_due ); + $t_bug_data->remind = db_prepare_int( $p_bug_data->remind ); + $t_bug_data->date_remind = db_prepare_string( $p_bug_data->date_remind ); $t_bug_data->eta = db_prepare_int( $p_bug_data->eta ); $t_bug_data->os = db_prepare_string( $p_bug_data->os ); $t_bug_data->os_build = db_prepare_string( $p_bug_data->os_build ); @@ -1423,6 +1474,14 @@ $p_bug_data->category = string_attribute( $p_bug_data->category ); $p_bug_data->date_submitted = string_attribute( $p_bug_data->date_submitted ); $p_bug_data->last_updated = string_attribute( $p_bug_data->last_updated ); + + list($date, $time) = split(' ', $p_bug_data->date_due ); + $p_bug_data->due_date = convert_date( $date, 'Y-m-d', config_get( 'short_date_format' ) ); + $p_bug_data->due_time = substr( $time, 0, 5 ); + list($date, $time) = split(' ', $p_bug_data->date_remind ); + $p_bug_data->remind_date = convert_date( $date, 'Y-m-d', config_get( 'short_date_format' ) ); + $p_bug_data->remind_time = substr( $time, 0, 5 ); + $p_bug_data->os = string_attribute( $p_bug_data->os ); $p_bug_data->os_build = string_attribute( $p_bug_data->os_build ); $p_bug_data->platform = string_attribute( $p_bug_data->platform ); @@ -1444,9 +1503,18 @@ # Return a copy of the bug structure with all the instvars prepared for editing # in an HTML form function bug_prepare_display( $p_bug_data ) { + $p_bug_data->category = string_display( $p_bug_data->category ); $p_bug_data->date_submitted = string_display( $p_bug_data->date_submitted ); $p_bug_data->last_updated = string_display( $p_bug_data->last_updated ); + + list($date, $time) = split(' ', $p_bug_data->date_due ); + $p_bug_data->due_date = convert_date( $date, 'Y-m-d', config_get( 'short_date_format' ) ); + $p_bug_data->due_time = substr( $time, 0, 5 ); + list($date, $time) = split(' ', $p_bug_data->date_remind ); + $p_bug_data->remind_date = convert_date( $date, 'Y-m-d', config_get( 'short_date_format' ) ); + $p_bug_data->remind_time = substr( $time, 0, 5 ); + $p_bug_data->os = string_display( $p_bug_data->os ); $p_bug_data->os_build = string_display( $p_bug_data->os_build ); $p_bug_data->platform = string_display( $p_bug_data->platform ); Index: core/bugnote_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/bugnote_api.php,v retrieving revision 1.41 diff -u -r1.41 bugnote_api.php --- core/bugnote_api.php 7 Mar 2007 10:40:00 -0000 1.41 +++ core/bugnote_api.php 20 Mar 2007 00:03:34 -0000 @@ -87,7 +87,7 @@ # Add a bugnote to a bug # # return the ID of the new bugnote - function bugnote_add ( $p_bug_id, $p_bugnote_text, $p_time_tracking = '0:00', $p_private = false, $p_type = 0, $p_attr = '', $p_user_id = null ) { + function bugnote_add ( $p_bug_id, $p_bugnote_text, $p_time_tracking = '0:00', $p_private = false, $p_type = 0, $p_attr = '', $p_user_id = null, $p_date_remind = null) { $c_bug_id = db_prepare_int( $p_bug_id ); $c_bugnote_text = db_prepare_string( $p_bugnote_text ); $c_time_tracking = db_prepare_time( $p_time_tracking ); @@ -133,6 +133,11 @@ # get bugnote id $t_bugnote_id = db_insert_id( $t_bugnote_table ); + # update bug date remind + if (!is_null($p_date_remind)) { + bug_update_date_remind ( $p_bug_id, $p_date_remind ); + } + # update bug last updated bug_update_date( $p_bug_id ); Index: core/date_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/date_api.php,v retrieving revision 1.8 diff -u -r1.8 date_api.php --- core/date_api.php 18 May 2006 13:00:28 -0000 1.8 +++ core/date_api.php 22 Mar 2007 20:58:55 -0000 @@ -16,6 +16,29 @@ function print_date( $p_format, $p_date ) { PRINT date( $p_format, $p_date ); } + + # -------------------- + # convert the date from given format + function convert_date( $p_date, $p_format_from, $p_format_to = 'Y-m-d H:i:s') { + preg_match_all("/([YmdHis])/", $p_format_from, $order); + + $c_format_from = $p_format_from; + foreach( $order[0] as $key ){ + if ($key == "Y") $l = 4; + else $l = 2; + + $c_format_from = str_replace($key, "(.{".$l."})", $c_format_from); + } + + preg_match("/$c_format_from/", $p_date, $matches); + + $c_date = $p_format_to; + foreach( $order[0] as $pos => $key ){ + $c_date = str_replace($key, $matches[$pos+1], $c_date); + } + + return $c_date; + } # -------------------- function print_month_option_list( $p_month = 0 ) { for ($i=1; $i<=12; $i++) { @@ -135,4 +158,21 @@ } } } + # -------------------- + + function print_date_calendar( $field_name, $f_date ) { + $format = preg_replace( "=([Ymd])=", "%\$1", config_get( 'short_date_format' ) ); + + echo '<input type="text" name="' . $field_name . '" size=8 id="f_' . $field_name . '_c" readonly="1" value="' . $f_date . '"/>'; + echo '<img src="javascript/jscalendar/datepopup.gif" id="f_' . $field_name . '_trigger_c" style="cursor: pointer;" />'; + echo '<script type="text/javascript">'; + echo 'Calendar.setup({'; + echo 'inputField : "f_' . $field_name . '_c",'; + echo 'ifFormat : "' . $format . '",'; + echo 'button : "f_' . $field_name . '_trigger_c",'; + echo 'align : "cc",'; + echo 'singleClick : true'; + echo '});'; + echo '</script>'; + } ?> Index: core/filter_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/filter_api.php,v retrieving revision 1.150 diff -u -r1.150 filter_api.php --- core/filter_api.php 13 Mar 2007 06:06:58 -0000 1.150 +++ core/filter_api.php 22 Mar 2007 22:49:56 -0000 @@ -35,6 +35,8 @@ 'highlight_changed' => $t_default_show_changed, 'reporter_id' => Array ( '0' => META_FILTER_ANY ), 'handler_id' => Array ( '0' => META_FILTER_ANY ), + 'show_remind' => Array ( '0' => META_FILTER_ANY ), + 'show_due' => Array ( '0' => META_FILTER_ANY ), 'project_id' => Array ( '0' => META_FILTER_CURRENT ), 'show_resolution' => Array ( '0' => META_FILTER_ANY ), 'show_build' => Array ( '0' => META_FILTER_ANY ), @@ -154,7 +156,7 @@ $t_all_projects_found = false; $t_new_project_ids = array(); foreach ( $t_project_ids as $t_pid ) { - if ( $t_pid == META_FILTER_CURRENT ) { + if ( $t_pid == META_FILTER_CURRENT ) { $t_pid = $t_project_id; } @@ -183,7 +185,7 @@ } else { $t_project_ids = $t_new_project_ids; } - + if ( $t_projects_query_required ) { // expand project ids to include sub-projects if ( $t_include_sub_projects ) { @@ -244,7 +246,7 @@ } // both queries can't be null, so we either have one of them or both. - + if ( $t_private_and_public_query === null ) { $t_project_query = $t_public_only_query; } else if ( $t_public_only_query === null ) { @@ -295,7 +297,7 @@ } } } - + if ( 1 < count( $t_clauses ) ) { $t_reporter_query = "( $t_bug_table.reporter_id in (". implode( ', ', $t_clauses ) .") )"; } else { @@ -344,7 +346,7 @@ } } } - + if ( 1 < count( $t_clauses ) ) { $t_handler_query = "( $t_bug_table.handler_id in (". implode( ', ', $t_clauses ) .") )"; } else { @@ -357,6 +359,60 @@ log_event( LOG_FILTERING, 'FILTERING: no handler query' ); } + # due + $t_any_found = false; + + foreach( $t_filter['show_due'] as $t_filter_member ) { + if ( ( META_FILTER_ANY == $t_filter_member ) && ( is_numeric( $t_filter_member ) ) ) { + $t_any_found = true; + } + } + if ( count( $t_filter['show_due'] ) == 0 ) { + $t_any_found = true; + } + if ( !$t_any_found ) { + $t_clauses = array(); + + foreach( $t_filter['show_due'] as $t_filter_member ) { + if (1 == $t_filter_member) array_push( $t_clauses, "due=0" ); + if (2 == $t_filter_member) array_push( $t_clauses, "due=1 and $t_bug_table.date_due < now()" ); + if (3 == $t_filter_member) array_push( $t_clauses, "due=1 and $t_bug_table.date_due > now()" ); + } + + if ( 1 < count( $t_clauses ) ) { + array_push( $t_where_clauses, "( (". implode( ' ) or ( ', $t_clauses ) .") )" ); + } else { + array_push( $t_where_clauses, "( $t_clauses[0] )" ); + } + } + + # remind + $t_any_found = false; + + foreach( $t_filter['show_remind'] as $t_filter_member ) { + if ( ( META_FILTER_ANY == $t_filter_member ) && ( is_numeric( $t_filter_member ) ) ) { + $t_any_found = true; + } + } + if ( count( $t_filter['show_remind'] ) == 0 ) { + $t_any_found = true; + } + if ( !$t_any_found ) { + $t_clauses = array(); + + foreach( $t_filter['show_remind'] as $t_filter_member ) { + if (1 == $t_filter_member) array_push( $t_clauses, "remind=0" ); + if (2 == $t_filter_member) array_push( $t_clauses, "remind=1 and $t_bug_table.date_remind < now()" ); + if (3 == $t_filter_member) array_push( $t_clauses, "remind=1 and $t_bug_table.date_remind > now()" ); + } + + if ( 1 < count( $t_clauses ) ) { + array_push( $t_where_clauses, "( (". implode( ' ) or ( ', $t_clauses ) .") )" ); + } else { + array_push( $t_where_clauses, "( $t_clauses[0] )" ); + } + } + # category $t_any_found = false; @@ -670,7 +726,7 @@ array_push( $t_clauses, "'$c_target_version'" ); } } - + #echo var_dump( $t_clauses ); exit; if ( 1 < count( $t_clauses ) ) { array_push( $t_where_clauses, "( $t_bug_table.target_version in (". implode( ', ', $t_clauses ) .") )" ); @@ -818,7 +874,7 @@ $c_search = db_prepare_string( $t_filter['search'] ); $c_search_int = db_prepare_int( $t_filter['search'] ); $t_textsearch_where_clause = '(' . db_helper_like( 'summary', "%$c_search%" ) . - ' OR ' . db_helper_like( "$t_bug_text_table.description", "%$c_search%" ) . + ' OR ' . db_helper_like( "$t_bug_text_table.description", "%$c_search%" ) . ' OR ' . db_helper_like( "$t_bug_text_table.steps_to_reproduce", "%$c_search%" ) . ' OR ' . db_helper_like( "$t_bug_text_table.additional_information", "%$c_search%" ) . " OR ( $t_bug_table.id = '$c_search_int' ) )"; @@ -946,7 +1002,7 @@ if ( ( 'on' == $t_filter['sticky_issues'] ) && ( NULL !== $p_show_sticky ) ) { $t_order_array[] = "sticky DESC"; } - + $t_join = ''; for ( $i=0; $i < count( $t_sort_fields ); $i++ ) { $c_sort = db_prepare_string( $t_sort_fields[$i] ); @@ -1005,24 +1061,24 @@ $row_count = db_num_rows( $result2 ); $t_id_array_lastmod = array(); - + for ( $i=0 ; $i < $row_count ; $i++ ) { $row = db_fetch_array( $result2 ); $t_id_array_lastmod[] = db_prepare_int ( $row['id'] ); - + $row['date_submitted'] = db_unixtimestamp ( $row['date_submitted'] ); $row['last_updated'] = db_unixtimestamp ( $row['last_updated'] ); - + array_push( $rows, $row ); } $t_id_array_lastmod = array_unique( $t_id_array_lastmod ); - + // paulr: it should be impossible for t_id_array_lastmod to be array(): // that would imply that $t_id_array is null which aborts this function early //if ( count( $t_id_array_lastmod ) > 0 ) { $t_where = "WHERE $t_bugnote_table.bug_id in (" . implode( ", ", $t_id_array_lastmod ) . ")"; - + $query3 = "SELECT DISTINCT bug_id,MAX(last_modified) as last_modified, COUNT(last_modified) as count FROM $t_bugnote_table $t_where GROUP BY bug_id"; # perform query @@ -1032,7 +1088,7 @@ for ( $i=0 ; $i < $row_count ; $i++ ) { $row = db_fetch_array( $result3 ); - + $t_stats[ $row['bug_id'] ] = $row; } @@ -1208,9 +1264,9 @@ || ( ( AUTO == config_get( 'show_product_version' ) ) && ( count( version_get_all_rows_with_subs( $t_project_id ) ) > 0 ) ); # overload handler_id setting if user isn't supposed to see them (ref #6189) - if ( ! access_has_project_level( config_get( 'view_handler_threshold' ), $t_project_id ) ) { - $t_filter['handler_id'] = array( META_FILTER_ANY ); - } + if ( ! access_has_project_level( config_get( 'view_handler_threshold' ), $t_project_id ) ) { + $t_filter['handler_id'] = array( META_FILTER_ANY ); + } ?> <tr <?php PRINT "class=\"" . $t_trclass . "\""; ?>> @@ -1376,7 +1432,7 @@ <input type="hidden" name="show_category[]" value="<?php echo string_display( $t_current );?>" /> <?php $t_this_string = ''; - if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) + if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) || ( is_blank( $t_current ) ) ) { $t_any_found = true; } else { @@ -1505,6 +1561,120 @@ <tr <?php PRINT "class=\"" . $t_trclass . "\""; ?>> <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top"> + <a href="<?php PRINT $t_filters_url . 'show_remind[]'; ?>" id="show_remind_filter"><?php PRINT lang_get( 'remind' ) ?>:</a> + </td> + <td colspan="2" class="small-caption" valign="top"> + <a href="<?php PRINT $t_filters_url . 'show_due[]'; ?>" id="show_due_filter"><?php PRINT lang_get( 'due' ) ?>:</a> + </td> + <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top"> + + </td> + <?php if ( $t_filter_cols > 8 ) { + echo '<td class="small-caption" valign="top" colspan="' . ( $t_filter_cols - 8 ) . '"> </td>'; + } ?> + </tr> + + <tr class="row-1"> + <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top" id="show_remind_filter_target"> + <?php + $t_output = ''; + $t_any_found = false; + if ( count( $t_filter['show_remind'] ) == 0 ) { + PRINT lang_get( 'any' ); + } else { + $t_first_flag = true; + foreach( $t_filter['show_remind'] as $t_current ) { + ?> + <input type="hidden" name="show_remind[]" value="<?php echo $t_current;?>" /> + <?php + $t_this_string = ''; + if ( ( $t_current === META_FILTER_ANY ) || ( is_blank( $t_current ) ) || ( $t_current == 0 ) ) { + $t_any_found = true; + } else { + $t_this_string = get_enum_element( 'remind', $t_current ); + } + if ( $t_first_flag != true ) { + $t_output = $t_output . '<br />'; + } else { + $t_first_flag = false; + } + $t_output = $t_output . $t_this_string; + } + if ( true == $t_any_found ) { + PRINT lang_get( 'any' ); + } else { + PRINT $t_output; + } + } + ?> + </td> + <td colspan="2" class="small-caption" valign="top" id="show_due_filter_target"> + <?php + $t_output = ''; + $t_any_found = false; + if ( count( $t_filter['show_due'] ) == 0 ) { + PRINT lang_get( 'any' ); + } else { + $t_first_flag = true; + foreach( $t_filter['show_due'] as $t_current ) { + ?> + <input type="hidden" name="show_due[]" value="<?php echo $t_current;?>" /> + <?php + $t_this_string = ''; + if ( ( $t_current === META_FILTER_ANY ) || ( is_blank( $t_current ) ) || ( $t_current == 0 ) ) { + $t_any_found = true; + } else { + $t_this_string = get_enum_element( 'due', $t_current ); + } + if ( $t_first_flag != true ) { + $t_output = $t_output . '<br />'; + } else { + $t_first_flag = false; + } + $t_output = $t_output . $t_this_string; + } + if ( true == $t_any_found ) { + PRINT lang_get( 'any' ); + } else { + PRINT $t_output; + } + } + ?> + </td> + <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top"> + + </td> + <td class="small-caption" valign="top"> + + </td> + <?php if ( $t_filter_cols > 8 ) { + echo '<td class="small-caption" valign="top" colspan="' . ( $t_filter_cols - 8 ) . '"> </td>'; + } ?> + </tr> + + <tr <?php PRINT "class=\"" . $t_trclass . "\""; ?>> + <td class="small-caption" valign="top"> <a href="<?php PRINT $t_filters_url . 'show_status[]'; ?>" id="show_status_filter"><?php PRINT lang_get( 'status' ) ?>:</a> </td> <td class="small-caption" valign="top"> @@ -1628,7 +1798,7 @@ <input type="hidden" name="show_build[]" value="<?php echo string_display( $t_current );?>" /> <?php $t_this_string = ''; - if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) + if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) || ( is_blank( $t_current ) ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { @@ -1666,7 +1836,7 @@ <input type="hidden" name="show_version[]" value="<?php echo string_display( $t_current );?>" /> <?php $t_this_string = ''; - if ( ( ( $t_current == META_FILTER_ANY ) && (is_numeric( $t_current ) ) ) + if ( ( ( $t_current == META_FILTER_ANY ) && (is_numeric( $t_current ) ) ) || ( is_blank( $t_current ) ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { @@ -1703,7 +1873,7 @@ <input type="hidden" name="fixed_in_version[]" value="<?php echo string_display( $t_current );?>" /> <?php $t_this_string = ''; - if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) + if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) || ( is_blank( $t_current ) ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { @@ -1781,7 +1951,7 @@ <input type="hidden" name="target_version[]" value="<?php echo string_display( $t_current );?>" /> <?php $t_this_string = ''; - if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) + if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) || ( is_blank( $t_current ) ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { @@ -2074,7 +2244,7 @@ foreach( $t_filter['custom_fields'][$t_accessible_custom_fields_ids[$i]] as $t_current ) { $t_current = stripslashes( $t_current ); $t_this_string = ''; - if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) + if ( ( ( $t_current == META_FILTER_ANY ) && ( is_numeric( $t_current ) ) ) || ( is_blank( $t_current ) ) ) { $t_any_found = true; } else if ( ( META_FILTER_NONE == $t_current ) && ( is_numeric( $t_current ) ) ) { @@ -2207,7 +2377,7 @@ } ?> </td> - <?php + <?php if ( $t_filter_cols > 6 ) { echo '<td class="small-caption" valign="top" colspan="' . ( $t_filter_cols - 5 ) . '"> </td>'; } @@ -2215,7 +2385,7 @@ if ( $t_filter_cols > 3 ) { echo '<td class="small-caption" valign="top" colspan="' . ( $t_filter_cols - 2 ) . '"> </td>'; } - } + } ?> </tr> <?php @@ -2708,6 +2878,8 @@ 'show_priority' => 'int', 'show_build' => 'string', 'show_version' => 'string', + 'show_remind' => 'string', + 'show_due' => 'string', 'hide_status' => 'int', 'fixed_in_version' => 'string', 'target_version' => 'string', @@ -2898,6 +3070,26 @@ <?php } + function print_filter_show_remind(){ + global $t_select_modifier, $t_filter; + ?><!-- Remind --> + <select <?php PRINT $t_select_modifier;?> name="show_remind[]"> + <option value="<?php echo META_FILTER_ANY ?>" <?php check_selected( $t_filter['show_remind'], META_FILTER_ANY ); ?>>[<?php echo lang_get( 'any' ) ?>]</option> + <?php print_enum_string_option_list( 'remind', $t_filter['show_remind'] ) ?> + </select> + <?php + } + + function print_filter_show_due(){ + global $t_select_modifier, $t_filter; + ?><!-- Due --> + <select <?php PRINT $t_select_modifier;?> name="show_due[]"> + <option value="<?php echo META_FILTER_ANY ?>" <?php check_selected( $t_filter['show_due'], META_FILTER_ANY ); ?>>[<?php echo lang_get( 'any' ) ?>]</option> + <?php print_enum_string_option_list( 'due', $t_filter['show_due'] ) ?> + </select> + <?php + } + function print_filter_show_status(){ global $t_select_modifier, $t_filter; ?> <!-- Status --> Index: core/gpc_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/gpc_api.php,v retrieving revision 1.39 diff -u -r1.39 gpc_api.php --- core/gpc_api.php 13 Jul 2005 20:45:02 -0000 1.39 +++ core/gpc_api.php 20 Mar 2007 21:34:18 -0000 @@ -96,6 +96,53 @@ } } + # ------------------ + # Retrieve a date GPC variable. Uses gpc_get(). + # If you pass in *no* default, false will be used + function gpc_get_date( $p_var_name, $p_format = 'Y-m-d H:i', $p_default = false ) { + $t_result = gpc_get( $p_var_name, $p_default ); + + if ( $t_result === $p_default ) { + return $p_default; + } else { + if ( is_array( $t_result ) ) { + error_parameters( $p_var_name ); + trigger_error( ERROR_GPC_ARRAY_UNEXPECTED, ERROR ); + } + + // Builds up date pattern from the given $format, keeping delimiters in place. + if( !preg_match_all( "/([YmdHi])([^YmdHi])*/", $p_format, $formatTokens, PREG_SET_ORDER ) ) { + return false; + } + foreach( $formatTokens as $formatToken ) { + $delimiter = preg_quote( $formatToken[2], "/" ); + $datePattern .= "(.*)".$delimiter; + } + + // Splits up the given $date + if( !preg_match( "/".$datePattern."/", $t_result, $dateTokens) ) { + return false; + } + $dateSegments = array(); + for($i = 0; $i < count($formatTokens); $i++) { + $dateSegments[$formatTokens[$i][1]] = $dateTokens[$i+1]; + } + + // Reformats the given $date into US English date format, suitable for strtotime() + if( $dateSegments["Y"] && $dateSegments["m"] && $dateSegments["d"] ) { + $dateReformated = $dateSegments["Y"]."-".$dateSegments["m"]."-".$dateSegments["d"]; + } + else { + return false; + } + if( $dateSegments["H"] && $dateSegments["i"] ) { + $dateReformated .= " ".$dateSegments["H"].":".$dateSegments["i"]; + } + + return $dateReformated; + } + } + #=================================== # Custom Field Functions #=================================== Index: core/html_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/html_api.php,v retrieving revision 1.203 diff -u -r1.203 html_api.php --- core/html_api.php 6 Mar 2007 07:05:19 -0000 1.203 +++ core/html_api.php 22 Mar 2007 20:34:51 -0000 @@ -258,6 +258,10 @@ echo '</script>' . "\n"; echo "\t" . '<script type="text/JavaScript" src="javascript/ajax.js">'; echo '</script>' . "\n"; + echo "\t" . '<style type="text/css">@import url(javascript/jscalendar/calendar-blue.css);</style>' . "\n"; + echo "\t" . '<script type="text/javascript" src="javascript/jscalendar/calendar.js"></script>' . "\n"; + echo "\t" . '<script type="text/javascript" src="javascript/jscalendar/lang/calendar-de.js"></script>' . "\n"; + echo "\t" . '<script type="text/javascript" src="javascript/jscalendar/calendar-setup.js"></script>' . "\n"; } } @@ -899,22 +903,22 @@ if ( null === $p_fields ) { $p_fields = array(); } - + if ( strtolower( $p_method ) == 'get' ) { $t_method = 'get'; } else { $t_method = 'post'; } - + PRINT "<form method=\"$t_method\" action=\"$p_action\">\n"; - + foreach ( $p_fields as $key => $val ) { $key = string_attribute( $key ); $val = string_attribute( $val ); - + PRINT " <input type=\"hidden\" name=\"$key\" value=\"$val\" />\n"; } - + PRINT " <input type=\"submit\" class=\"button\" value=\"$p_button_text\" />\n"; PRINT "</form>\n"; } Index: core/my_view_inc.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/my_view_inc.php,v retrieving revision 1.17 diff -u -r1.17 my_view_inc.php --- core/my_view_inc.php 18 May 2006 06:32:19 -0000 1.17 +++ core/my_view_inc.php 21 Mar 2007 01:23:58 -0000 @@ -156,6 +156,22 @@ ); $url_link_parameters['verify'] = 'reporter_id=' . $t_current_user_id . '&show_status=' . $t_bug_resolved_status_threshold; + $c_filter['remind'] = array( + 'show_category' => Array ( '0' => META_FILTER_ANY ), + 'show_severity' => Array ( '0' => META_FILTER_ANY ), + 'show_status' => Array ( '0' => META_FILTER_ANY ), + 'highlight_changed' => $t_default_show_changed, + 'reporter_id' => Array ( '0' => META_FILTER_ANY ), + 'handler_id' => Array ( '0' => $t_current_user_id ), + 'show_remind' => Array ( '0' => 2), + 'show_resolution' => Array ( '0' => META_FILTER_ANY ), + 'show_build' => Array ( '0' => META_FILTER_ANY ), + 'show_version' => Array ( '0' => META_FILTER_ANY ), + 'hide_status' => Array ( '0' => $t_hide_status_default ), + 'user_monitor' => Array ( '0' => META_FILTER_ANY ) + ); + $url_link_parameters['remind'] = 'handler_id=' . $t_current_user_id . '&hide_status=' .$t_hide_status_default. '&show_remind=2'; + $rows = filter_get_bug_rows ( $f_page_number, $t_per_page, $t_page_count, $t_bug_count, $c_filter[$t_box_title] ); $box_title = lang_get( 'my_view_title_' . $t_box_title ); Index: core/user_api.php =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/core/user_api.php,v retrieving revision 1.108 diff -u -r1.108 user_api.php --- core/user_api.php 6 Mar 2007 07:05:19 -0000 1.108 +++ core/user_api.php 21 Mar 2007 00:12:24 -0000 @@ -299,8 +299,8 @@ return $t_users; } - - + + # -------------------- # Return an array of user ids that are logged in. # A user is considered logged in if the last visit timestamp is within the @@ -655,7 +655,7 @@ global $g_user_accessible_projects_cache; if ( null !== $g_user_accessible_projects_cache - && auth_get_current_user_id() == $p_user_id + && auth_get_current_user_id() == $p_user_id && false == $p_show_disabled ) { return $g_user_accessible_projects_cache; } @@ -727,7 +727,7 @@ global $g_user_accessible_subprojects_cache; if ( null !== $g_user_accessible_subprojects_cache - && auth_get_current_user_id() == $p_user_id + && auth_get_current_user_id() == $p_user_id && false == $p_show_disabled ) { if ( isset( $g_user_accessible_subprojects_cache[ $p_project_id ] ) ) { return $g_user_accessible_subprojects_cache[ $p_project_id ]; Index: lang/strings_english.txt =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/lang/strings_english.txt,v retrieving revision 1.290 diff -u -r1.290 strings_english.txt --- lang/strings_english.txt 10 Mar 2007 04:30:19 -0000 1.290 +++ lang/strings_english.txt 22 Mar 2007 22:47:27 -0000 @@ -270,6 +270,9 @@ $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.'; $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.'; +$MANTIS_ERROR[ERROR_DUE_DATE] = 'The due date must be in future.'; +$MANTIS_ERROR[ERROR_REMIND_DATE] = 'The remind date must be in future.'; +$MANTIS_ERROR[ERROR_REMIND_DATE_OLDER] = 'The remind date must be younger than due date.'; $s_login_error = 'Your account may be disabled or blocked or the username/password you entered is incorrect.'; $s_login_cookies_disabled = 'Your browser either doesn\'t know how to handle cookies, or refuses to handle them.'; @@ -304,6 +307,9 @@ $s_eta_enum_string = '10:none,20:< 1 day,30:2-3 days,40:< 1 week,50:< 1 month,60:> 1 month'; $s_sponsorship_enum_string = '0:Unpaid,1:Requested,2:Paid'; +$s_remind_enum_string = '1:disable,2:past,3:future'; +$s_due_enum_string = '1:disable,2:past,3:future'; + # Email Strings $s_new_account_subject = 'Account registration'; $s_new_account_greeting = 'Thank you for registering. You have account with username \''; @@ -569,6 +575,11 @@ $s_reporter = 'Reporter'; $s_assigned_to = 'Assigned To'; $s_priority = 'Priority'; +$s_remind = 'Date Remind'; +$s_remind_update_button = 'Change Remind'; +$s_disabled = 'disabled'; +$s_due = 'Date Due'; +$s_due_update_button = 'Change Due-Date'; $s_resolution = 'Resolution'; $s_status = 'Status'; $s_duplicate_id = 'Duplicate ID'; @@ -905,6 +916,7 @@ $s_my_view_title_monitored = 'Monitored by Me'; $s_my_view_title_feedback = 'Awaiting Feedback from Me'; $s_my_view_title_verify = 'Awaiting Confirmation of Resolution from Me'; +$s_my_view_title_remind = 'Remind'; # news_add.php $s_news_added_msg = 'News item added...'; Index: lang/strings_german.txt =================================================================== RCS file: /cvsroot/mantisbt/mantisbt/lang/strings_german.txt,v retrieving revision 1.150 diff -u -r1.150 strings_german.txt --- lang/strings_german.txt 30 Dec 2006 09:11:22 -0000 1.150 +++ lang/strings_german.txt 22 Mar 2007 22:47:16 -0000 @@ -273,6 +273,9 @@ $MANTIS_ERROR[ERROR_PROJECT_RECURSIVE_HIERARCHY] = 'Diese Operation würde eine Schleife in der Unterprojekthierarchie erzeugen.'; $MANTIS_ERROR[ERROR_USER_CHANGE_LAST_ADMIN] = 'Sie können die Zugangsrechte des einzigen System-ADMINISTRATORS nicht ändern.'; $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.'; +$MANTIS_ERROR[ERROR_DUE_DATE] = 'Das Fällig Datum muss in der Zukunft liegen.'; +$MANTIS_ERROR[ERROR_REMIND_DATE] = 'Das Erinnerungsdatum muss in der Zukunft liegen.'; +$MANTIS_ERROR[ERROR_REMIND_DATE_OLDER] = 'Das Erinnerungsdatum darf nicht später als das Fällig Datum sein.'; $s_login_error = 'Ihr Konto ist deaktiviert oder gesperrt (aufgrund von zu vielen fehlgeschlagenen Anmeldeversuchen) oder der eigegebene Benutzer/Password ist falsch.'; $s_login_cookies_disabled = 'Ihr Web-Browser akzeptiert keine Cookies.'; @@ -307,6 +310,9 @@ $s_eta_enum_string = '10:keine,20:< 1 Tag,30:2-3 Tage,40:< 1 Woche,50:< 1 Monat,60:> 1 Monat'; $s_sponsorship_enum_string = '0:Unbezahlt,1:Gefordert,2:Bezahlt'; +$s_remind_enum_string = '1:ohne Erinnerung,2:in der Vergangenheit,3:in der Zukunft'; +$s_due_enum_string = '1:ohne Fälligkeit,2:Vergangenheit,3:Zukunft'; + # Email Strings $s_new_account_subject = 'Konto Registrierung'; $s_new_account_greeting = 'Danke für ihre Registrierung. Ihr Konto hat den Benutzernamen \''; @@ -572,6 +578,11 @@ $s_reporter = 'Reporter'; $s_assigned_to = 'Bearbeitung durch'; $s_priority = 'Priorität'; +$s_remind = 'Erinnerung'; +$s_remind_update_button = 'Erinnerung ändern'; +$s_disabled = 'deaktiviert'; +$s_due = 'Fällig'; +$s_due_update_button = 'Fälligkeit ändern'; $s_resolution = 'Lösung'; $s_status = 'Status'; $s_duplicate_id = 'ID doppelt'; @@ -908,6 +919,7 @@ $s_my_view_title_monitored = 'Von mir beobachtet'; $s_my_view_title_feedback = 'Warte auf Rückmeldung von MIR'; $s_my_view_title_verify = 'Warte auf Bestätigung der Lösung durch MICH'; +$s_my_view_title_remind = 'Erinnerungen'; # news_add.php $s_news_added_msg = 'Nachricht hinzugefügt...'; | ||||
Hi I've realised this feature and add it to the 1.1.0a2 version. How can I add it to the project? At the moment I don't have a cvs developer account. changes:
I've upload the complete source. I think this is the best way at the moment. Please check the syntax and functions... |
|
I've added some bugfixes in mantisbt-v2 version. Do the following query in sql: "alter table mantis_bug_table |
|
This seems to me like a hybrid feature between two features that have patches or are in development:
|
|