View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0028669 | mantisbt | filters | public | 2021-06-05 02:52 | 2023-09-17 04:45 |
Reporter | gthomas | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | confirmed | Resolution | open | ||
Product Version | 2.25.1 | ||||
Summary | 0028669: Due date is not filterable | ||||
Description | Why can't we filter by due date - just as by last updated or created? | ||||
Additional Information | I've copied the LAST_UPDATED filter as DUE - se the attached patch. | ||||
Tags | No tags attached. | ||||
Attached Files | filter_due_date.patch (19,179 bytes)
diff --git a/core/classes/BugFilterQuery.class.php b/core/classes/BugFilterQuery.class.php index 048ddfd67..a78d188d5 100644 --- a/core/classes/BugFilterQuery.class.php +++ b/core/classes/BugFilterQuery.class.php @@ -428,6 +428,9 @@ class BugFilterQuery extends DbQuery { case FILTER_PROPERTY_FILTER_BY_DATE_SUBMITTED: $this->build_prop_date_created(); break; + case FILTER_PROPERTY_FILTER_BY_DUE_DATE: + $this->build_prop_date_due(); + break; case FILTER_PROPERTY_FILTER_BY_LAST_UPDATED_DATE: $this->build_prop_date_updated(); break; @@ -770,6 +773,35 @@ class BugFilterQuery extends DbQuery { } } + /** + * Build the query parts for the filter property "due date" + * @return void + */ + protected function build_prop_date_due() { + if( ( gpc_string_to_bool( $this->filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ) ) + && is_numeric( $this->filter[FILTER_PROPERTY_DUE_START_MONTH] ) + && is_numeric( $this->filter[FILTER_PROPERTY_DUE_START_DAY] ) + && is_numeric( $this->filter[FILTER_PROPERTY_DUE_START_YEAR] ) + && is_numeric( $this->filter[FILTER_PROPERTY_DUE_END_MONTH] ) + && is_numeric( $this->filter[FILTER_PROPERTY_DUE_END_DAY] ) + && is_numeric( $this->filter[FILTER_PROPERTY_DUE_END_YEAR] ) + ) { + $t_start_string = $this->filter[FILTER_PROPERTY_DUE_START_YEAR] + . '-' . $this->filter[FILTER_PROPERTY_DUE_START_MONTH] + . '-' . $this->filter[FILTER_PROPERTY_DUE_START_DAY] + . ' 00:00:00'; + $t_end_string = $this->filter[FILTER_PROPERTY_DUE_END_YEAR] + . '-' . $this->filter[FILTER_PROPERTY_DUE_END_MONTH] + . '-' . $this->filter[FILTER_PROPERTY_DUE_END_DAY] + . ' 23:59:59'; + + $t_query_due_at = '{bug}.due_date BETWEEN ' + . $this->param( strtotime( $t_start_string ) ) . ' AND ' + . $this->param( strtotime( $t_end_string ) ) ; + $this->add_fixed_where( $t_query_due_at ); + } + } + /** * Build the query parts for the filter property "view state" * @return void diff --git a/core/filter_api.php b/core/filter_api.php index f03ea5a8b..5d75aa189 100644 --- a/core/filter_api.php +++ b/core/filter_api.php @@ -322,6 +322,37 @@ function filter_get_url( array $p_custom_filter ) { } } + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ) ) { + $t_query[] = filter_encode_field_and_value( + FILTER_PROPERTY_FILTER_BY_DUE_DATE, + $p_custom_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ? 'on' : 'off' ); + + # The start and end dates are only applicable if filter by date is set. + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_DUE_START_DAY] ) ) { + $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_DUE_START_DAY, $p_custom_filter[FILTER_PROPERTY_DUE_START_DAY] ); + } + + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_DUE_END_DAY] ) ) { + $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_DUE_END_DAY, $p_custom_filter[FILTER_PROPERTY_DUE_END_DAY] ); + } + + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_DUE_START_MONTH] ) ) { + $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_DUE_START_MONTH, $p_custom_filter[FILTER_PROPERTY_DUE_START_MONTH] ); + } + + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_DUE_END_MONTH] ) ) { + $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_DUE_END_MONTH, $p_custom_filter[FILTER_PROPERTY_DUE_END_MONTH] ); + } + + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_DUE_START_YEAR] ) ) { + $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_DUE_START_YEAR, $p_custom_filter[FILTER_PROPERTY_DUE_START_YEAR] ); + } + + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_DUE_END_YEAR] ) ) { + $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_DUE_END_YEAR, $p_custom_filter[FILTER_PROPERTY_DUE_END_YEAR] ); + } + } + if( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_TYPE] ) ) { if( $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_TYPE] != -1 ) { $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_RELATIONSHIP_TYPE, $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_TYPE] ); @@ -899,6 +930,13 @@ function filter_get_default_array( $p_view_type = null ) { FILTER_PROPERTY_LAST_UPDATED_END_DAY => date( 'd' ), FILTER_PROPERTY_LAST_UPDATED_START_YEAR => date( 'Y' ), FILTER_PROPERTY_LAST_UPDATED_END_YEAR => date( 'Y' ), + FILTER_PROPERTY_FILTER_BY_DUE_DATE => false, + FILTER_PROPERTY_DUE_START_MONTH => date( 'm' ), + FILTER_PROPERTY_DUE_END_MONTH => date( 'm' ), + FILTER_PROPERTY_DUE_START_DAY => 1, + FILTER_PROPERTY_DUE_END_DAY => date( 'd' ), + FILTER_PROPERTY_DUE_START_YEAR => date( 'Y' ), + FILTER_PROPERTY_DUE_END_YEAR => date( 'Y' ), FILTER_PROPERTY_SEARCH => '', FILTER_PROPERTY_VIEW_STATE => META_FILTER_ANY, FILTER_PROPERTY_TAG_STRING => '', @@ -2083,6 +2121,14 @@ function filter_gpc_get( array $p_filter = null ) { $f_last_updated_end_day = gpc_get_int( FILTER_PROPERTY_LAST_UPDATED_END_DAY, $t_filter[FILTER_PROPERTY_LAST_UPDATED_END_DAY] ); $f_last_updated_start_year = gpc_get_int( FILTER_PROPERTY_LAST_UPDATED_START_YEAR, $t_filter[FILTER_PROPERTY_LAST_UPDATED_START_YEAR] ); $f_last_updated_end_year = gpc_get_int( FILTER_PROPERTY_LAST_UPDATED_END_YEAR, $t_filter[FILTER_PROPERTY_LAST_UPDATED_END_YEAR] ); + # due date values + $f_do_filter_by_due_date = gpc_get_bool( FILTER_PROPERTY_FILTER_BY_DUE_DATE, $t_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ); + $f_due_start_month = gpc_get_int( FILTER_PROPERTY_DUE_START_MONTH, $t_filter[FILTER_PROPERTY_DUE_START_MONTH] ); + $f_due_end_month = gpc_get_int( FILTER_PROPERTY_DUE_END_MONTH, $t_filter[FILTER_PROPERTY_DUE_END_MONTH] ); + $f_due_start_day = gpc_get_int( FILTER_PROPERTY_DUE_START_DAY, $t_filter[FILTER_PROPERTY_DUE_START_DAY] ); + $f_due_end_day = gpc_get_int( FILTER_PROPERTY_DUE_END_DAY, $t_filter[FILTER_PROPERTY_DUE_END_DAY] ); + $f_due_start_year = gpc_get_int( FILTER_PROPERTY_DUE_START_YEAR, $t_filter[FILTER_PROPERTY_DUE_START_YEAR] ); + $f_due_end_year = gpc_get_int( FILTER_PROPERTY_DUE_END_YEAR, $t_filter[FILTER_PROPERTY_DUE_END_YEAR] ); $f_search = gpc_get_string( FILTER_PROPERTY_SEARCH, $t_filter[FILTER_PROPERTY_SEARCH] ); $f_view_state = gpc_get_int( FILTER_PROPERTY_VIEW_STATE, $t_filter[FILTER_PROPERTY_VIEW_STATE] ); @@ -2258,6 +2304,13 @@ function filter_gpc_get( array $p_filter = null ) { $t_filter_input[FILTER_PROPERTY_LAST_UPDATED_END_MONTH] = $f_last_updated_end_month; $t_filter_input[FILTER_PROPERTY_LAST_UPDATED_END_DAY] = $f_last_updated_end_day; $t_filter_input[FILTER_PROPERTY_LAST_UPDATED_END_YEAR] = $f_last_updated_end_year; + $t_filter_input[FILTER_PROPERTY_FILTER_BY_DUE_DATE] = $f_do_filter_by_due_date; + $t_filter_input[FILTER_PROPERTY_DUE_START_MONTH] = $f_due_start_month; + $t_filter_input[FILTER_PROPERTY_DUE_START_DAY] = $f_due_start_day; + $t_filter_input[FILTER_PROPERTY_DUE_START_YEAR] = $f_due_start_year; + $t_filter_input[FILTER_PROPERTY_DUE_END_MONTH] = $f_due_end_month; + $t_filter_input[FILTER_PROPERTY_DUE_END_DAY] = $f_due_end_day; + $t_filter_input[FILTER_PROPERTY_DUE_END_YEAR] = $f_due_end_year; $t_filter_input[FILTER_PROPERTY_SEARCH] = $f_search; $t_filter_input[FILTER_PROPERTY_HIDE_STATUS] = $f_hide_status; $t_filter_input[FILTER_PROPERTY_RESOLUTION] = $f_show_resolution; diff --git a/core/filter_constants_inc.php b/core/filter_constants_inc.php index 37ffd1cfa..13d7d5c78 100644 --- a/core/filter_constants_inc.php +++ b/core/filter_constants_inc.php @@ -49,6 +49,14 @@ define( 'FILTER_PROPERTY_LAST_UPDATED_END_MONTH', 'last_updated_end_month' ); define( 'FILTER_PROPERTY_LAST_UPDATED_END_YEAR', 'last_updated_end_year' ); define( 'FILTER_PROPERTY_FILTER_BY_LAST_UPDATED_DATE', 'filter_by_last_updated_date' ); #do_filter_by_last_updated_date +define( 'FILTER_PROPERTY_DUE_START_DAY', 'due_start_day' ); +define( 'FILTER_PROPERTY_DUE_START_MONTH', 'due_start_month' ); +define( 'FILTER_PROPERTY_DUE_START_YEAR', 'due_start_year' ); +define( 'FILTER_PROPERTY_DUE_END_DAY', 'due_end_day' ); +define( 'FILTER_PROPERTY_DUE_END_MONTH', 'due_end_month' ); +define( 'FILTER_PROPERTY_DUE_END_YEAR', 'due_end_year' ); +define( 'FILTER_PROPERTY_FILTER_BY_DUE_DATE', 'filter_by_due_date' ); #do_filter_by_due_date + define( 'FILTER_PROPERTY_RELATIONSHIP_TYPE', 'relationship_type' ); define( 'FILTER_PROPERTY_RELATIONSHIP_BUG', 'relationship_bug' ); define( 'FILTER_PROPERTY_TAG_STRING', 'tag_string' ); diff --git a/core/filter_form_api.php b/core/filter_form_api.php index ff051eae1..fde5b6658 100644 --- a/core/filter_form_api.php +++ b/core/filter_form_api.php @@ -99,6 +99,7 @@ function filter_form_get_input( array $p_filter, $p_filter_target, $p_show_input # override non standard calls switch( $p_filter_target ) { case 'do_filter_by_date': + case 'do_filter_by_due_date': case 'do_filter_by_last_updated_date': if( $p_show_inputs ) { $t_params = array( false, $p_filter ); @@ -1530,6 +1531,158 @@ function print_filter_do_filter_by_last_updated_date( $p_hide_checkbox = false, <?php } +/** + * Print the current value of this filter field, as visible string, and as a hidden form input. + * @param array $p_filter Filter array + * @return void + */ +function print_filter_values_do_filter_by_due_date( array $p_filter ) { + $t_filter = $p_filter; + if( 'on' == $t_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ) { + echo '<input type="hidden" name="', FILTER_PROPERTY_FILTER_BY_DUE_DATE, '" value="', string_attribute( $t_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ), '" />'; + echo '<input type="hidden" name="', FILTER_PROPERTY_DUE_START_MONTH, '" value="', string_attribute( $t_filter[FILTER_PROPERTY_DUE_START_MONTH] ), '" />'; + echo '<input type="hidden" name="', FILTER_PROPERTY_DUE_START_DAY, '" value="', string_attribute( $t_filter[FILTER_PROPERTY_DUE_START_DAY] ), '" />'; + echo '<input type="hidden" name="', FILTER_PROPERTY_DUE_START_YEAR, '" value="', string_attribute( $t_filter[FILTER_PROPERTY_DUE_START_YEAR] ), '" />'; + echo '<input type="hidden" name="', FILTER_PROPERTY_DUE_END_MONTH, '" value="', string_attribute( $t_filter[FILTER_PROPERTY_DUE_END_MONTH] ), '" />'; + echo '<input type="hidden" name="', FILTER_PROPERTY_DUE_END_DAY, '" value="', string_attribute( $t_filter[FILTER_PROPERTY_DUE_END_DAY] ), '" />'; + echo '<input type="hidden" name="', FILTER_PROPERTY_DUE_END_YEAR, '" value="', string_attribute( $t_filter[FILTER_PROPERTY_DUE_END_YEAR] ), '" />'; + + $t_chars = preg_split( '//', config_get( 'short_date_format' ), -1, PREG_SPLIT_NO_EMPTY ); + $t_time = mktime( 0, 0, 0, $t_filter[FILTER_PROPERTY_DUE_START_MONTH], $t_filter[FILTER_PROPERTY_DUE_START_DAY], $t_filter[FILTER_PROPERTY_DUE_START_YEAR] ); + foreach( $t_chars as $t_char ) { + if( strcasecmp( $t_char, 'M' ) == 0 ) { + echo ' '; + echo lang_get( 'month_' . strtolower (date( 'F', $t_time ) ) ); + } + if( strcasecmp( $t_char, 'D' ) == 0 ) { + echo ' '; + echo date( 'd', $t_time ); + } + if( strcasecmp( $t_char, 'Y' ) == 0 ) { + echo ' '; + echo date( 'Y', $t_time ); + } + } + + echo ' - '; + + $t_time = mktime( 0, 0, 0, $t_filter[FILTER_PROPERTY_DUE_END_MONTH], $t_filter[FILTER_PROPERTY_DUE_END_DAY], $t_filter[FILTER_PROPERTY_DUE_END_YEAR] ); + foreach( $t_chars as $t_char ) { + if( strcasecmp( $t_char, 'M' ) == 0 ) { + echo ' '; + echo lang_get( 'month_' . strtolower ( date( 'F', $t_time ) ) ); + } + if( strcasecmp( $t_char, 'D' ) == 0 ) { + echo ' '; + echo date( 'd', $t_time ); + } + if( strcasecmp( $t_char, 'Y' ) == 0 ) { + echo ' '; + echo date( 'Y', $t_time ); + } + } + } else { + echo lang_get( 'no' ); + } +} + +/** + * Print filter by last update date fields + * @global array $g_filter + * @param boolean $p_hide_checkbox Hide data filter checkbox. + * @param array $p_filter Filter array + * @return void + */ +function print_filter_do_filter_by_due_date( $p_hide_checkbox = false, array $p_filter = null ) { + global $g_filter; + if( null === $p_filter ) { + $p_filter = $g_filter; + } +?> + <table cellspacing="0" cellpadding="0"> +<?php + $t_menu_disabled = ''; + if( !$p_hide_checkbox ) { +?> + <tr> + <td colspan="2"> + <input type="hidden" name="<?php echo FILTER_PROPERTY_FILTER_BY_DUE_DATE ?>" value="<?php echo OFF ?>" /> + <label> + <input class="input-xs ace js_switch_date_inputs_trigger" type="checkbox" id="use_due_date_filters" class="input-xs" + name="<?php echo FILTER_PROPERTY_FILTER_BY_DUE_DATE ?>" + <?php check_checked( gpc_string_to_bool( $p_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ), true ) ?> /> + <span class="lbl padding-6 small"><?php echo lang_get( 'use_due_date_filters' )?></span> + </label> + </td> + </tr> +<?php + + if( ON != $p_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] ) { + $t_menu_disabled = ' disabled="disabled" '; + } + } +?> + + <!-- Start date --> + <tr> + <td> + <?php echo lang_get( 'start_date_label' )?> + </td> + <td class="nowrap"> + <?php + $t_chars = preg_split( '//', config_get( 'short_date_format' ), -1, PREG_SPLIT_NO_EMPTY ); + foreach( $t_chars as $t_char ) { + if( strcasecmp( $t_char, 'M' ) == 0 ) { + echo '<select class="input-xs" name="', FILTER_PROPERTY_DUE_START_MONTH, '"', $t_menu_disabled, '>'; + print_month_option_list( $p_filter[FILTER_PROPERTY_DUE_START_MONTH] ); + print "</select>\n"; + } + if( strcasecmp( $t_char, 'D' ) == 0 ) { + echo '<select class="input-xs" name="', FILTER_PROPERTY_DUE_START_DAY, '"', $t_menu_disabled, '>'; + print_day_option_list( $p_filter[FILTER_PROPERTY_DUE_START_DAY] ); + print "</select>\n"; + } + if( strcasecmp( $t_char, 'Y' ) == 0 ) { + echo '<select class="input-xs" name="', FILTER_PROPERTY_DUE_START_YEAR, '"', $t_menu_disabled, '>'; + print_year_option_list( $p_filter[FILTER_PROPERTY_DUE_START_YEAR] ); + print "</select>\n"; + } + } + ?> + </td> + </tr> + <!-- End date --> + <tr> + <td> + <?php echo lang_get( 'end_date_label' )?> + </td> + <td> + <?php + $t_chars = preg_split( '//', config_get( 'short_date_format' ), -1, PREG_SPLIT_NO_EMPTY ); + foreach( $t_chars as $t_char ) { + if( strcasecmp( $t_char, 'M' ) == 0 ) { + echo '<select class="input-xs" name="', FILTER_PROPERTY_DUE_END_MONTH, '"', $t_menu_disabled, '>'; + print_month_option_list( $p_filter[FILTER_PROPERTY_DUE_END_MONTH] ); + print "</select>\n"; + } + if( strcasecmp( $t_char, 'D' ) == 0 ) { + echo '<select class="input-xs" name="', FILTER_PROPERTY_DUE_END_DAY, '"', $t_menu_disabled, '>'; + print_day_option_list( $p_filter[FILTER_PROPERTY_DUE_END_DAY] ); + print "</select>\n"; + } + if( strcasecmp( $t_char, 'Y' ) == 0 ) { + echo '<select class="input-xs" name="', FILTER_PROPERTY_DUE_END_YEAR, '"', $t_menu_disabled, '>'; + print_year_option_list( $p_filter[FILTER_PROPERTY_DUE_END_YEAR] ); + print "</select>\n"; + } + } + ?> + </td> + </tr> + </table> + <?php +} + /** * Print the current value of this filter field, as visible string, and as a hidden form input. * @param array $p_filter Filter array @@ -2089,6 +2242,10 @@ function print_filter_show_sort( array $p_filter = null ) { echo lang_get_defaulted( 'last_updated' ) . lang_get( 'bugnote_order_desc' ); echo '<input type="hidden" name="', FILTER_PROPERTY_SORT_FIELD_NAME, '_array[]" value="last_updated" />'; echo '<input type="hidden" name="', FILTER_PROPERTY_SORT_DIRECTION, '_array[]" value="DESC" />'; + + echo lang_get_defaulted( 'due' ) . lang_get( 'bugnote_order_desc' ); + echo '<input type="hidden" name="', FILTER_PROPERTY_SORT_FIELD_NAME, '_array[]" value="due" />'; + echo '<input type="hidden" name="', FILTER_PROPERTY_SORT_DIRECTION, '_array[]" value="DESC" />'; } } @@ -2547,6 +2704,13 @@ function filter_form_draw_inputs( $p_filter, $p_for_screen = true, $p_static = f null /* class */, 'do_filter_by_last_updated_date_filter_target' /* content id */ )); + $t_row2->add_item( new TableFieldsItem( + $get_field_header( 'do_filter_by_due_date_filter', lang_get( 'use_due_date_filters' ) ), + filter_form_get_input( $t_filter, 'do_filter_by_due_date', $t_show_inputs ), + 2 /* colspan */, + null /* class */, + 'do_filter_by_due_date_filter_target' /* content id */ + )); if( FILTER_VIEW_TYPE_ADVANCED == $t_view_type ) { $t_row2->add_item( new TableFieldsItem( $get_field_header( 'project_id_filter', lang_get( 'email_project' ) ), diff --git a/lang/strings_english.txt b/lang/strings_english.txt index 017721546..17dab319a 100644 --- a/lang/strings_english.txt +++ b/lang/strings_english.txt @@ -1207,6 +1207,7 @@ $s_start_date_label = 'Start Date:'; $s_end_date_label = 'End Date:'; $s_use_date_filters = 'Filter by Date Submitted'; $s_use_last_updated_date_filters = 'Filter by Last Updated Date'; +$s_use_due_date_filters = 'Filter by Due Date'; $s_yes = 'Yes'; $s_no = 'No'; $s_open_filters = 'Change Filter'; diff --git a/lang/strings_hungarian.txt b/lang/strings_hungarian.txt index f3029ecdb..57ccc61c8 100644 --- a/lang/strings_hungarian.txt +++ b/lang/strings_hungarian.txt @@ -911,6 +911,7 @@ $s_start_date_label = 'Kezdődátum:'; $s_end_date_label = 'Záródátum:'; $s_use_date_filters = 'Szűrés a beküldés dátuma szerint'; $s_use_last_updated_date_filters = 'Szűrés a frissítés dátuma szerint'; +$s_use_due_date_filters = 'Szűrés az esedékesség dátuma szerint'; $s_yes = 'Igen'; $s_no = 'Nem'; $s_open_filters = 'Szűrő megváltoztatása'; diff --git a/search.php b/search.php index a320b191e..713ada421 100644 --- a/search.php +++ b/search.php @@ -115,6 +115,14 @@ $t_my_filter[FILTER_PROPERTY_LAST_UPDATED_START_YEAR] = gpc_get_int( FILTER_PROP $t_my_filter[FILTER_PROPERTY_LAST_UPDATED_END_MONTH] = gpc_get_int( FILTER_PROPERTY_LAST_UPDATED_END_MONTH, META_FILTER_ANY ); $t_my_filter[FILTER_PROPERTY_LAST_UPDATED_END_DAY] = gpc_get_int( FILTER_PROPERTY_LAST_UPDATED_END_DAY, META_FILTER_ANY ); $t_my_filter[FILTER_PROPERTY_LAST_UPDATED_END_YEAR] = gpc_get_int( FILTER_PROPERTY_LAST_UPDATED_END_YEAR, META_FILTER_ANY ); +# Due Date +$t_my_filter[FILTER_PROPERTY_FILTER_BY_DUE_DATE] = gpc_get_bool( FILTER_PROPERTY_FILTER_BY_DUE_DATE ); +$t_my_filter[FILTER_PROPERTY_DUE_START_MONTH] = gpc_get_int( FILTER_PROPERTY_DUE_START_MONTH, META_FILTER_ANY ); +$t_my_filter[FILTER_PROPERTY_DUE_START_DAY] = gpc_get_int( FILTER_PROPERTY_DUE_START_DAY, META_FILTER_ANY ); +$t_my_filter[FILTER_PROPERTY_DUE_START_YEAR] = gpc_get_int( FILTER_PROPERTY_DUE_START_YEAR, META_FILTER_ANY ); +$t_my_filter[FILTER_PROPERTY_DUE_END_MONTH] = gpc_get_int( FILTER_PROPERTY_DUE_END_MONTH, META_FILTER_ANY ); +$t_my_filter[FILTER_PROPERTY_DUE_END_DAY] = gpc_get_int( FILTER_PROPERTY_DUE_END_DAY, META_FILTER_ANY ); +$t_my_filter[FILTER_PROPERTY_DUE_END_YEAR] = gpc_get_int( FILTER_PROPERTY_DUE_END_YEAR, META_FILTER_ANY ); $t_my_filter[FILTER_PROPERTY_RELATIONSHIP_TYPE] = gpc_get_int( FILTER_PROPERTY_RELATIONSHIP_TYPE, -1 ); $t_my_filter[FILTER_PROPERTY_RELATIONSHIP_BUG] = gpc_get_int( FILTER_PROPERTY_RELATIONSHIP_BUG, 0 ); | ||||
Patch submitted as PR https://github.com/mantisbt/mantisbt/pull/1755 to facilitate review. @gthomas next time if you could, please submit a PR instead of posting a patch here. |
|
Filtering by due date is a much needed feature. Thanks for the contribution. Ideally, it would be possible to create an “Upcoming” filter that shows all issues with due date less than today + one month. That would require support for relative date filters. Having said that, it is not a blocker for basic filtering. |
|
Simply use this plugin: https://github.com/mantisbt-plugins/DD_Filter |
|