From: <pri...@us...> - 2008-07-28 17:39:19
|
Revision: 5439 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5439&view=rev Author: prichards Date: 2008-07-28 17:39:17 +0000 (Mon, 28 Jul 2008) Log Message: ----------- Fix custom field bug in filters Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-07-28 17:28:20 UTC (rev 5438) +++ trunk/mantisbt/core/filter_api.php 2008-07-28 17:39:17 UTC (rev 5439) @@ -3614,13 +3614,15 @@ check_selected( $t_filter['custom_fields'][ $p_field_id ], META_FILTER_NONE ); echo '>[' . lang_get( 'none' ) .']</option>'; } - foreach( $t_accessible_custom_fields_values[$j] as $t_item ) { - if ( ( strtolower( $t_item ) !== META_FILTER_ANY ) && ( strtolower( $t_item ) !== META_FILTER_NONE ) ) { - echo '<option value="' . string_html_entities( $t_item ) . '" '; - if ( isset( $t_filter['custom_fields'][ $p_field_id ] ) ) { - check_selected( $t_filter['custom_fields'][ $p_field_id ], $t_item ); + if ( is_array( $t_accessible_custom_fields_values[$j] ) ) { + foreach( $t_accessible_custom_fields_values[$j] as $t_item ) { + if ( ( strtolower( $t_item ) !== META_FILTER_ANY ) && ( strtolower( $t_item ) !== META_FILTER_NONE ) ) { + echo '<option value="' . string_html_entities( $t_item ) . '" '; + if ( isset( $t_filter['custom_fields'][ $p_field_id ] ) ) { + check_selected( $t_filter['custom_fields'][ $p_field_id ], $t_item ); + } + echo '>' . string_shorten( $t_item ) . '</option>' . "\n"; } - echo '>' . string_shorten( $t_item ) . '</option>' . "\n"; } } echo '</select>'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vb...@us...> - 2008-07-28 23:22:44
|
Revision: 5450 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5450&view=rev Author: vboctor Date: 2008-07-28 23:22:43 +0000 (Mon, 28 Jul 2008) Log Message: ----------- Removed colon that was misplaced in the filter box. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-07-28 22:39:15 UTC (rev 5449) +++ trunk/mantisbt/core/filter_api.php 2008-07-28 23:22:43 UTC (rev 5450) @@ -3005,9 +3005,9 @@ <td colspan="2"> <?php collapse_icon( 'filter' ); - echo lang_get( 'search' ); + echo lang_get( 'search' ) . ' '; echo '<input type="text" size="16" name="', FILTER_PROPERTY_FREE_TEXT, '" value="', string_html_specialchars( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ), '" />'; - ?>: + ?> <input type="submit" name="filter" class="button-small" value="<?php PRINT lang_get( 'filter_button' ) ?>" /> </td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-08-01 05:41:45
|
Revision: 5475 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5475&view=rev Author: dwarrine5 Date: 2008-08-01 05:41:38 +0000 (Fri, 01 Aug 2008) Log Message: ----------- Fix for bug #9104. Broken bug count in filter. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-07-31 21:25:41 UTC (rev 5474) +++ trunk/mantisbt/core/filter_api.php 2008-08-01 05:41:38 UTC (rev 5475) @@ -325,6 +325,60 @@ } /** + * @param $p_count + * @param $p_per_page + * @return int + */ + function filter_per_page( $p_filter, $p_count, $p_per_page ) { + $p_per_page = ( ( NULL == $p_per_page ) ? (int)$p_filter[ FILTER_PROPERTY_ISSUES_PER_PAGE ] : $p_per_page ); + $p_per_page = ( ( 0 == $p_per_page || -1 == $p_per_page ) ? $p_count : $p_per_page ); + + return (int)abs( $p_per_page ); + } + + /** + * Use $p_count and $p_per_page to determine how many pages to split this list up into. + * For the sake of consistency have at least one page, even if it is empty. + * @param $p_count + * @param $p_per_page + * @return $t_page_count + */ + function filter_page_count( $p_count, $p_per_page ) { + $t_page_count = ceil($p_count / $p_per_page); + if ( $t_page_count < 1 ) { + $t_page_count = 1; + } + return $t_page_count; + } + + /** + * Checks to make sure $p_page_number isn't past the last page. + * and that $p_page_number isn't before the first page + * @param $p_page_number + * @param $p_page_count + */ + function filter_valid_page_number( $p_page_number, $p_page_count ) { + if ( $p_page_number > $p_page_count ) { + $p_page_number = $p_page_count; + } + + if ( $p_page_number < 1 ) { + $p_page_number = 1; + } + return $p_page_number; + } + + /** + * Figure out the offset into the db query, offset is which record to start querying from + * @param int $p_page_number + * @param int $p_per_page + * @return int + */ + function filter_offset( $p_page_number, $p_per_page ) { + return ( ( (int)$p_page_number - 1 ) * (int)$p_per_page ); + } + + /** * Make sure that our filters are entirely correct and complete (it is possible that they are not). * We need to do this to cover cases where we don't have complete control over the filters given.s * @param array $p_filter_arr @@ -684,7 +738,101 @@ } } + /** + * Add sort parameters to the query clauses + * @param array $p_filter + * @param bool $p_show_sticky + * @param array $p_query_clauses + * @return array $p_query_clauses + */ + function filter_get_query_sort_data( &$p_filter, $p_show_sticky, $p_query_clauses ) { + $t_bug_table = db_get_table( 'mantis_bug_table' ); + $t_custom_field_string_table = db_get_table( 'mantis_custom_field_string_table' ); + + # if sort is blank then default the sort and direction. This is to fix the + # symptoms of #3953. Note that even if the main problem is fixed, we may + # have to keep this code for a while to handle filters saved with this blank field. + if ( is_blank( $p_filter[ FILTER_PROPERTY_SORT_FIELD_NAME ] ) ) { + $p_filter[ FILTER_PROPERTY_SORT_FIELD_NAME ] = 'last_updated'; + $p_filter[ FILTER_PROPERTY_SORT_DIRECTION ] = 'DESC'; + } + + $p_query_clauses['order'] = array(); + $t_sort_fields = split( ',', $p_filter[ FILTER_PROPERTY_SORT_FIELD_NAME ] ); + $t_dir_fields = split( ',', $p_filter[ FILTER_PROPERTY_SORT_DIRECTION ] ); + + if ( ( 'on' == $p_filter[ FILTER_PROPERTY_SHOW_STICKY_ISSUES ] ) && ( NULL !== $p_show_sticky ) ) { + $p_query_clauses['order'][] = "sticky DESC"; + } + + for ( $i=0; $i < count( $t_sort_fields ); $i++ ) { + $c_sort = db_prepare_string( $t_sort_fields[$i] ); + if ( ! in_array( $t_sort_fields[$i], array_slice( $t_sort_fields, $i + 1) ) ) { + # if sorting by a custom field + if ( strpos( $c_sort, 'custom_' ) === 0 ) { + $t_custom_field = substr( $c_sort, strlen( 'custom_' ) ); + $t_custom_field_id = custom_field_get_id_from_name( $t_custom_field ); + + $c_cf_alias = str_replace(' ', '_', $t_custom_field ); + $t_cf_table_alias = $t_custom_field_string_table . '_' . $t_custom_field_id; + $t_cf_select = "$t_cf_table_alias.value $c_cf_alias"; + # check to be sure this field wasn't already added to the query. + if ( !in_array( $t_cf_select, $p_query_clauses['select'] ) ) { + $p_query_clauses['select'][] = $t_cf_select; + $p_query_clauses['join'][] = "LEFT JOIN $t_custom_field_string_table $t_cf_table_alias ON $t_bug_table.id = $t_cf_table_alias.bug_id AND $t_cf_table_alias.field_id = " . db_param(); + $p_query_clauses['where_values'][] = $t_custom_field_id; +#$c_sort = "$t_custom_field_string_table.value"; + } + + } + $c_dir = 'DESC' == $t_dir_fields[$i] ? 'DESC' : 'ASC'; + $p_query_clauses['order'][] = "$c_sort $c_dir"; + } + } + + # add basic sorting if necessary + if ( ! in_array( 'last_updated', $t_sort_fields ) ) { + $p_query_clauses['order'][] = "$t_bug_table.last_updated DESC"; + } + if ( ! in_array( 'date_submitted', $t_sort_fields ) ) { + $p_query_clauses['order'][] = 'date_submitted DESC'; } + + return $p_query_clauses; + } + /** + * Remove any duplicate values in certain elements of query_clauses + * Do not loop over query clauses as some keys may contain valid duplicate values. + * We basically want unique values for just the base query elements select, from, and join + * 'where' and 'where_values' key should not have duplicates as that is handled earlier and applying + * array_unique here could cause problems with the query. + * @param $p_query_clauses + * @return $p_query_clauses + */ + function filter_unique_query_clauses( $p_query_clauses ) { + $p_query_clauses['select'] = array_unique( $p_query_clauses['select'] ); + $p_query_clauses['from'] = array_unique( $p_query_clauses['from'] ); + $p_query_clauses['join'] = array_unique( $p_query_clauses['join'] ); + return $p_query_clauses; + } + + /** + * Build a query with the query clauses array, query for bug count and return the result + * @param array $p_query_clauses + * @return int + */ + function filter_get_bug_count( $p_query_clauses ) { + $t_bug_table = db_get_table( 'mantis_bug_table' ); + $p_query_clauses = filter_unique_query_clauses( $p_query_clauses ); + $t_select_string = "SELECT Count( DISTINCT $t_bug_table.id ) as idcnt "; + $t_from_string = " FROM " . implode( ', ', $p_query_clauses['from'] ); + $t_join_string = ( ( count( $p_query_clauses['join'] ) > 0 ) ? implode( ' ', $p_query_clauses['join'] ) : '' ); + $t_where_string = ( ( count( $p_query_clauses['where'] ) > 0 ) ? 'WHERE ' . implode( ' AND ', $p_query_clauses['where'] ) : '' ); + $t_result = db_query_bound( "$t_select_string $t_from_string $t_join_string $t_where_string", $p_query_clauses['where_values'] ); + return db_result( $t_result ); + } + + /** * @@@ Had to make all these parameters required because we can't use * call-time pass by reference anymore. I really preferred not having * to pass all the params in if you didn't want to, but I wanted to get @@ -709,7 +857,7 @@ $t_bug_text_table = db_get_table( 'mantis_bug_text_table' ); $t_bugnote_table = db_get_table( 'mantis_bugnote_table' ); $t_category_table = db_get_table( 'mantis_category_table' ); - $t_custom_field_string_table = db_get_table( 'mantis_custom_field_string_table' ); + $t_custom_field_string_table = db_get_table( 'mantis_custom_field_string_table' ); $t_bugnote_text_table = db_get_table( 'mantis_bugnote_text_table' ); $t_project_table = db_get_table( 'mantis_project_table' ); $t_bug_monitor_table = db_get_table( 'mantis_bug_monitor_table' ); @@ -755,10 +903,10 @@ } $t_view_type = $t_filter['_view_type']; - $t_where_clauses = array( "$t_project_table.enabled = " . db_param(), "$t_project_table.id = $t_bug_table.project_id" ); $t_where_params = array( 1 ); - $t_select_clauses = array( "$t_bug_table.*" ); + $t_select_clauses = array( "$t_bug_table.*", "$t_bug_table.last_updated", "$t_bug_table.date_submitted" ); + $t_join_clauses = array(); $t_from_clauses = array(); @@ -1371,6 +1519,7 @@ array_push( $t_where_clauses, "( $t_table_name.user_id=" . db_param(). " )" ); } } + # bug relationship $t_any_found = false; $c_rel_type = $t_filter[ FILTER_PROPERTY_RELATIONSHIP_TYPE ]; @@ -1560,276 +1709,109 @@ } } - $t_textsearch_where_clause = ''; - $t_textsearch_wherejoin_clause = ''; - # Simple Text Search - Thanks to Alan Knowles + # Text search if ( !is_blank( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ) ) { - array_push( $t_where_clauses, "($t_bug_text_table.id = $t_bug_table.bug_text_id)" ); + $c_search = '%' . $t_filter[ FILTER_PROPERTY_FREE_TEXT ] . '%'; + $t_textsearch_where_clause = '(' . db_helper_like( 'summary' ) . + ' OR ' . db_helper_like( "$t_bug_text_table.description" ) . + ' OR ' . db_helper_like( "$t_bug_text_table.steps_to_reproduce" ) . + ' OR ' . db_helper_like( "$t_bug_text_table.additional_information" ) . + ' OR ' . db_helper_like( "$t_bugnote_text_table.note" ); - $t_from_clauses = array_merge( array( $t_bug_text_table, $t_project_table, $t_bug_table ), $t_from_clauses ); - } else { - $t_from_clauses = array_merge( array( $t_project_table, $t_bug_table ), $t_from_clauses ); - } + $t_where_params[] = $c_search; + $t_where_params[] = $c_search; + $t_where_params[] = $c_search; + $t_where_params[] = $c_search; + $t_where_params[] = $c_search; - $t_select = implode( ', ', array_unique( $t_select_clauses ) ); - $t_from = 'FROM ' . implode( ', ', array_unique( $t_from_clauses ) ); - $t_join = implode( ' ', $t_join_clauses ); - if ( count( $t_where_clauses ) > 0 ) { - $t_where = 'WHERE ' . implode( ' AND ', $t_where_clauses ); - } else { - $t_where = ''; - } + if ( is_numeric( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ) ) { + $c_search_int = (int)$t_filter[ FILTER_PROPERTY_FREE_TEXT ]; + $t_textsearch_where_clause .= " OR $t_bug_table.id = " . db_param(); + $t_textsearch_where_clause .= " OR $t_bugnote_table.id = " . db_param(); + $t_where_params[] = $c_search_int; + $t_where_params[] = $c_search_int; + } + $t_textsearch_where_clause .= " )"; - # Possibly do two passes. First time, grab the IDs of issues that match the filters. Second time, grab the IDs of issues that - # have bugnotes that match the text search if necessary. - $t_id_array = array(); - $q1 = ""; - $q2 = ""; - $bug_count = 0; - $t_search_where_params = array(); - $t_search_where_params2 = array(); - for ( $i = 0; $i < 2; $i++ ) { - $t_search_where_param_count = $t_where_param_count; - $t_id_where = $t_where; - $t_id_join = $t_join; - if ( $i == 0 ) { - if ( !is_blank( $t_id_where ) && !is_blank( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ) ) { - $c_search = '%' . $t_filter[ FILTER_PROPERTY_FREE_TEXT ] . '%'; - $c_search_int = db_prepare_int( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ); - $t_textsearch_where_clause = '(' . db_helper_like( 'summary' ) . - ' OR ' . db_helper_like( "$t_bug_text_table.description" ) . - ' OR ' . db_helper_like( "$t_bug_text_table.steps_to_reproduce" ) . - ' OR ' . db_helper_like( "$t_bug_text_table.additional_information" ) . - " OR ( $t_bug_table.id = " . db_param($t_search_where_param_count++) . " ) )"; - $t_search_where_params = array(); - $t_search_where_params[] = $c_search; - $t_search_where_params[] = $c_search; - $t_search_where_params[] = $c_search; - $t_search_where_params[] = $c_search; - $t_search_where_params[] = $c_search_int; - $t_id_where = $t_id_where . ' AND ' . $t_textsearch_where_clause; - } - } else if ( !is_blank( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ) ) { - $c_search = '%' . $t_filter[ FILTER_PROPERTY_FREE_TEXT ] . '%'; - $c_search_int = db_prepare_int( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ); - $t_textsearch_wherejoin_clause = '(' . db_helper_like( 'summary' ) . - ' OR ' . db_helper_like( "$t_bug_text_table.description" ) . - ' OR ' . db_helper_like( "$t_bug_text_table.steps_to_reproduce" ) . - ' OR ' . db_helper_like( "$t_bug_text_table.additional_information" ) . - ' OR ' . db_helper_like( "$t_bug_table.id" ) . - ' OR ' . db_helper_like( "$t_bugnote_text_table.note" ) . ' )'; - $t_search_where_params2 = array(); - $t_search_where_params2[] = $c_search; - $t_search_where_params2[] = $c_search; - $t_search_where_params2[] = $c_search; - $t_search_where_params2[] = $c_search; - $t_search_where_params2[] = $c_search; - $t_search_where_params2[] = $c_search; - $t_id_where = $t_id_where . ' AND ' . $t_textsearch_wherejoin_clause; - $t_id_join = $t_id_join . " INNER JOIN $t_bugnote_table ON $t_bugnote_table.bug_id = $t_bug_table.id"; - $t_id_join = $t_id_join . " INNER JOIN $t_bugnote_text_table ON $t_bugnote_text_table.id = $t_bugnote_table.bugnote_text_id"; - - } - $query = " $t_from - $t_id_join - $t_id_where"; - $t_query_params = array(); - - if ( ( $i == 0 ) || ( !is_blank( $t_filter[ FILTER_PROPERTY_FREE_TEXT ] ) ) ) { - if( $i == 0) { - $q1 = "SELECT DISTINCT $t_bug_table.id AS id" . $query; - $t_query_params = array_merge($t_where_params, $t_search_where_params); - } else { - $q2 = "SELECT DISTINCT $t_bug_table.id AS id" . $query; - $t_query_params = array_merge($t_where_params, $t_search_where_params2); - } - - $result = db_query_bound( "SELECT Count(DISTINCT $t_bug_table.id) as idcnt" . $query, $t_query_params ); - $row = db_fetch_array( $result ); - $bug_count += $row['idcnt']; - } - } + # add text query elements to arrays + $t_from_clauses[] = "$t_bug_text_table"; + $t_where_clauses[] = "$t_bug_table.bug_text_id = $t_bug_text_table.id"; + $t_where_clauses[] = $t_textsearch_where_clause; + $t_join_clauses[] = " LEFT JOIN $t_bugnote_table ON $t_bug_table.id = $t_bugnote_table.bug_id"; + $t_join_clauses[] = " LEFT JOIN $t_bugnote_text_table ON $t_bugnote_table.bugnote_text_id = $t_bugnote_text_table.id"; + } # End text search - # Get the total number of bugs that meet the criteria. + $t_from_clauses[] = $t_project_table; + $t_from_clauses[] = $t_bug_table; - $rows = array(); - $t_where = ''; - $t_where_params2 = array(); - if ( $bug_count > 0 ) { - $t_where .= "WHERE $t_bug_table.id in ( "; - if ( !is_blank($q1) ) { - $t_where .= "$q1"; - $t_where_params2 = array_merge($t_where_params, $t_search_where_params); - if ( !is_blank($q2) ) { - $t_where .= ") OR $t_bug_table.id in ( $q2"; - $t_where_params2 = array_merge($t_where_params2, $t_where_params, $t_search_where_params2); - } - $t_where .= ")"; - } else { - $t_where .= " $q2)"; - $t_where_params2 = array_merge($t_where_params, $t_search_where_params2); - } - } else { - return $rows; - } + $t_query_clauses['select'] = $t_select_clauses; + $t_query_clauses['from'] = $t_from_clauses; + $t_query_clauses['join'] = $t_join_clauses; + $t_query_clauses['where'] = $t_where_clauses; + $t_query_clauses['where_values'] = $t_where_params; + $t_query_clauses = filter_get_query_sort_data( $t_filter, $p_show_sticky, $t_query_clauses ); - $t_from = 'FROM ' . $t_bug_table; + # assigning to $p_* for this function writes the values back in case the caller wants to know + # Get the total number of bugs that meet the criteria. + $p_bug_count = filter_get_bug_count( $t_query_clauses ); + if ( 0 == $p_bug_count ) { + return array(); + } + $p_per_page = filter_per_page( $t_filter, $p_bug_count, $p_per_page ); + $p_page_count = filter_page_count( $p_bug_count, $p_per_page ); + $p_page_number = filter_valid_page_number( $p_page_number, $p_page_count ); + $t_offset = filter_offset( $p_page_number, $p_per_page ); + $t_query_clauses = filter_unique_query_clauses( $t_query_clauses ); + $t_select_string = "SELECT DISTINCT " . implode( ', ', $t_query_clauses['select'] ); + $t_from_string = " FROM " . implode( ', ', $t_query_clauses['from'] ); + $t_order_string = " ORDER BY " . implode( ', ', $t_query_clauses['order']); + $t_join_string = count( $t_query_clauses['join'] ) > 0 ? implode( ' ', $t_query_clauses['join'] ) : ''; + $t_where_string = count( $t_query_clauses['where'] ) > 0 ? 'WHERE ' . implode( ' AND ', $t_query_clauses['where'] ) : ''; + $t_result = db_query_bound( "$t_select_string $t_from_string $t_join_string $t_where_string $t_order_string", $t_query_clauses['where_values'], $p_per_page, $t_offset ); + $t_row_count = db_num_rows( $t_result ); - # write the value back in case the caller wants to know - $p_bug_count = $bug_count; + $t_id_array_lastmod = array(); + for ( $i=0 ; $i < $t_row_count ; $i++ ) { + $t_row = db_fetch_array( $t_result ); + $t_id_array_lastmod[] = (int) $t_row['id']; + $t_rows[] = $t_row; + } - if ( null === $p_per_page ) { - $p_per_page = (int)$t_filter[ FILTER_PROPERTY_ISSUES_PER_PAGE ]; - } else if ( -1 == $p_per_page ) { - $p_per_page = $bug_count; - } + return filter_cache_result( $t_rows, $t_id_array_lastmod ); + } - # Guard against silly values of $f_per_page. - if ( 0 == $p_per_page ) { - $p_per_page = $bug_count; // 0 - means show all - } + /** + * Cache the filter results with bugnote stats for later use + * @param array $p_rows results of the filter query + * @param array $p_id_array_lastmod array of bug ids + * @return array + */ + function filter_cache_result( $p_rows, $p_id_array_lastmod ) { + $t_bugnote_table = db_get_table( 'mantis_bugnote_table' ); - $p_per_page = (int)abs( $p_per_page ); + $t_id_array_lastmod = array_unique( $p_id_array_lastmod ); + $t_where_string = "WHERE $t_bugnote_table.bug_id in (" . implode( ", ", $t_id_array_lastmod ) . ")"; + $t_query = "SELECT DISTINCT bug_id,MAX(last_modified) as last_modified, COUNT(last_modified) as count FROM $t_bugnote_table $t_where_string GROUP BY bug_id"; - # Use $bug_count and $p_per_page to determine how many pages - # to split this list up into. - # For the sake of consistency have at least one page, even if it - # is empty. - $t_page_count = ceil($bug_count / $p_per_page); - if ( $t_page_count < 1 ) { - $t_page_count = 1; - } + # perform query + $t_result = db_query_bound( $t_query ); + $t_row_count = db_num_rows( $t_result ); + for ( $i=0; $i < $t_row_count ; $i++ ) { + $t_row = db_fetch_array( $t_result ); + $t_stats[ $t_row['bug_id'] ] = $t_row; + } - # write the value back in case the caller wants to know - $p_page_count = $t_page_count; - - # Make sure $p_page_number isn't past the last page. - if ( $p_page_number > $t_page_count ) { - $p_page_number = $t_page_count; - } - - # Make sure $p_page_number isn't before the first page - if ( $p_page_number < 1 ) { - $p_page_number = 1; - } - - # Now add the rest of the criteria i.e. sorting, limit. - - # if sort is blank then default the sort and direction. This is to fix the - # symptoms of #3953. Note that even if the main problem is fixed, we may - # have to keep this code for a while to handle filters saved with this blank field. - if ( is_blank( $t_filter[ FILTER_PROPERTY_SORT_FIELD_NAME ] ) ) { - $t_filter[ FILTER_PROPERTY_SORT_FIELD_NAME ] = 'last_updated'; - $t_filter[ FILTER_PROPERTY_SORT_DIRECTION ] = 'DESC'; - } - - $t_order_array = array(); - $t_sort_fields = split( ',', $t_filter[ FILTER_PROPERTY_SORT_FIELD_NAME ] ); - $t_dir_fields = split( ',', $t_filter[ FILTER_PROPERTY_SORT_DIRECTION ] ); - - if ( ( 'on' == $t_filter[ FILTER_PROPERTY_SHOW_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] ); - - if ( ! in_array( $t_sort_fields[$i], array_slice( $t_sort_fields, $i + 1) ) ) { - - # if sorting by a custom field - if ( strpos( $c_sort, 'custom_' ) === 0 ) { - $t_custom_field = substr( $c_sort, strlen( 'custom_' ) ); - $t_custom_field_id = custom_field_get_id_from_name( $t_custom_field ); - $t_join .= " LEFT JOIN $t_custom_field_string_table ON ( ( $t_custom_field_string_table.bug_id = $t_bug_table.id ) AND ( $t_custom_field_string_table.field_id = $t_custom_field_id ) )"; - $c_sort = "$t_custom_field_string_table.value"; - $t_select_clauses[] = "$t_custom_field_string_table.value"; - } - - if ( 'DESC' == $t_dir_fields[$i] ) { - $c_dir = 'DESC'; - } else { - $c_dir = 'ASC'; - } - - $t_order_array[] = "$c_sort $c_dir"; - } - } - - # add basic sorting if necessary - if ( ! in_array( 'last_updated', $t_sort_fields ) ) { - $t_order_array[] = 'last_updated DESC'; + $t_rows = array(); + foreach($p_rows as $t_row) { + if( !isset( $t_stats[ $t_row['id'] ] ) ) { + $t_rows[] = bug_cache_database_result( $t_row, false ); + } else { + $t_rows[] = bug_cache_database_result( $t_row, $t_stats[ $t_row['id'] ] ); + } } - if ( ! in_array( 'date_submitted', $t_sort_fields ) ) { - $t_order_array[] = 'date_submitted DESC'; - } + return $t_rows; + } - $t_order = " ORDER BY " . implode( ', ', $t_order_array ); - $t_select = implode( ', ', array_unique( $t_select_clauses ) ); - - $query2 = "SELECT DISTINCT $t_select - $t_from - $t_join - $t_where - $t_order"; - - # Figure out the offset into the db query - # - # for example page number 1, per page 5: - # t_offset = 0 - # for example page number 2, per page 5: - # t_offset = 5 - $c_per_page = db_prepare_int( $p_per_page ); - $c_page_number = db_prepare_int( $p_page_number ); - $t_offset = ( ( $c_page_number - 1 ) * $c_per_page ); - - # perform query - $result2 = db_query_bound( $query2, $t_where_params2, $c_per_page, $t_offset ); - - $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'] ); - - 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 - $result3 = db_query_bound( $query3 ); - - $row_count = db_num_rows( $result3 ); - - for ( $i=0 ; $i < $row_count ; $i++ ) { - $row = db_fetch_array( $result3 ); - - $t_stats[ $row['bug_id'] ] = $row; - } - - - $t_rows = array(); - foreach($rows as $row) { - if( !isset( $t_stats[ $row['id'] ] ) ) { - $t_rows[] = bug_cache_database_result( $row, false ); - } else { - $t_rows[] = bug_cache_database_result( $row, $t_stats[ $row['id'] ] ); - } - } - - return $t_rows; - } - #========================================================================== # PRINT FUNCTIONS = #========================================================================== @@ -4255,4 +4237,3 @@ return $t_overall_query_arr; } -?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-08-06 04:34:27
|
Revision: 5500 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5500&view=rev Author: dwarrine5 Date: 2008-08-06 04:34:23 +0000 (Wed, 06 Aug 2008) Log Message: ----------- Fix for custom field sorting errors Bug #6661 Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-08-06 03:07:55 UTC (rev 5499) +++ trunk/mantisbt/core/filter_api.php 2008-08-06 04:34:23 UTC (rev 5500) @@ -779,14 +779,12 @@ # check to be sure this field wasn't already added to the query. if ( !in_array( $t_cf_select, $p_query_clauses['select'] ) ) { $p_query_clauses['select'][] = $t_cf_select; - $p_query_clauses['join'][] = "LEFT JOIN $t_custom_field_string_table $t_cf_table_alias ON $t_bug_table.id = $t_cf_table_alias.bug_id AND $t_cf_table_alias.field_id = " . db_param(); - $p_query_clauses['where_values'][] = $t_custom_field_id; -#$c_sort = "$t_custom_field_string_table.value"; + $p_query_clauses['join'][] = "LEFT JOIN $t_custom_field_string_table $t_cf_table_alias ON $t_bug_table.id = $t_cf_table_alias.bug_id AND $t_cf_table_alias.field_id = $t_custom_field_id"; } + $c_dir = 'DESC' == $t_dir_fields[$i] ? 'DESC' : 'ASC'; + $p_query_clauses['order'][] = "$c_cf_alias $c_dir"; } - $c_dir = 'DESC' == $t_dir_fields[$i] ? 'DESC' : 'ASC'; - $p_query_clauses['order'][] = "$c_sort $c_dir"; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-08-12 13:54:26
|
Revision: 5506 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5506&view=rev Author: dwarrine5 Date: 2008-08-12 13:54:21 +0000 (Tue, 12 Aug 2008) Log Message: ----------- Fix for bug #9508. Double string escape for stored query name Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-08-11 15:07:16 UTC (rev 5505) +++ trunk/mantisbt/core/filter_api.php 2008-08-12 13:54:21 UTC (rev 5506) @@ -3037,7 +3037,7 @@ <option value="-1"></option> <?php foreach( $t_stored_queries_arr as $t_query_id => $t_query_name ) { - PRINT '<option value="' . $t_query_id . '">' . $t_query_name . '</option>'; + PRINT '<option value="' . $t_query_id . '">' . stripslashes( $t_query_name ) . '</option>'; } ?> </select> @@ -3948,7 +3948,6 @@ $t_user_id = auth_get_current_user_id(); $c_project_id = db_prepare_int( $p_project_id ); $c_is_public = db_prepare_bool( $p_is_public, false ); - $c_name = db_prepare_string( $p_name ); $t_filters_table = db_get_table( 'mantis_filters_table' ); @@ -3968,7 +3967,7 @@ WHERE user_id=" . db_param() . " AND project_id=" . db_param() . " AND name=" . db_param(); - $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_name ) ); + $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $p_name ) ); if ( db_num_rows( $result ) > 0 ) { $row = db_fetch_array( $result ); @@ -3985,7 +3984,7 @@ ( user_id, project_id, is_public, name, filter_string ) VALUES ( " . db_param() . ", " . db_param() . ", " . db_param() . ", " . db_param() . ", " . db_param() . " )"; - db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_is_public, $c_name, $p_filter_string ) ); + db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_is_public, $p_name, $p_filter_string ) ); # Recall the query, we want the filter ID $query = "SELECT id @@ -3993,7 +3992,7 @@ WHERE user_id=" . db_param() . " AND project_id=" . db_param() . " AND name=" . db_param(); - $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_name ) ); + $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $p_name ) ); if ( db_num_rows( $result ) > 0 ) { $row = db_fetch_array( $result ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-08-12 17:42:11
|
Revision: 5508 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5508&view=rev Author: dwarrine5 Date: 2008-08-12 17:42:07 +0000 (Tue, 12 Aug 2008) Log Message: ----------- Remove stray test change in wrong directory Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-08-12 15:28:23 UTC (rev 5507) +++ trunk/mantisbt/core/filter_api.php 2008-08-12 17:42:07 UTC (rev 5508) @@ -3037,7 +3037,7 @@ <option value="-1"></option> <?php foreach( $t_stored_queries_arr as $t_query_id => $t_query_name ) { - PRINT '<option value="' . $t_query_id . '">' . stripslashes( $t_query_name ) . '</option>'; + PRINT '<option value="' . $t_query_id . '">' . $t_query_name . '</option>'; } ?> </select> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pri...@us...> - 2008-09-27 20:29:32
|
Revision: 5598 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5598&view=rev Author: prichards Date: 2008-09-27 20:29:30 +0000 (Sat, 27 Sep 2008) Log Message: ----------- Fix mssql query issue - date_submitted is ambigious - we're after bug_table one. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-09-27 20:28:06 UTC (rev 5597) +++ trunk/mantisbt/core/filter_api.php 2008-09-27 20:29:30 UTC (rev 5598) @@ -793,7 +793,7 @@ $p_query_clauses['order'][] = "$t_bug_table.last_updated DESC"; } if ( ! in_array( 'date_submitted', $t_sort_fields ) ) { - $p_query_clauses['order'][] = 'date_submitted DESC'; } + $p_query_clauses['order'][] = $t_bug_table . '.date_submitted DESC'; } return $p_query_clauses; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vb...@us...> - 2008-10-26 04:04:43
|
Revision: 5737 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5737&view=rev Author: vboctor Date: 2008-10-26 04:04:38 +0000 (Sun, 26 Oct 2008) Log Message: ----------- Fixes #9743: sorting doesn't work in the View Issues page Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-10-25 20:31:42 UTC (rev 5736) +++ trunk/mantisbt/core/filter_api.php 2008-10-26 04:04:38 UTC (rev 5737) @@ -832,6 +832,8 @@ for( $i = 0;$i < count( $t_sort_fields );$i++ ) { $c_sort = db_prepare_string( $t_sort_fields[$i] ); + $c_dir = 'DESC' == $t_dir_fields[$i] ? 'DESC' : 'ASC'; + if( !in_array( $t_sort_fields[$i], array_slice( $t_sort_fields, $i + 1 ) ) ) { # if sorting by a custom field @@ -849,8 +851,9 @@ $p_query_clauses['join'][] = "LEFT JOIN $t_custom_field_string_table $t_cf_table_alias ON $t_bug_table.id = $t_cf_table_alias.bug_id AND $t_cf_table_alias.field_id = $t_custom_field_id"; } - $c_dir = 'DESC' == $t_dir_fields[$i] ? 'DESC' : 'ASC'; $p_query_clauses['order'][] = "$c_cf_alias $c_dir"; + } else { + $p_query_clauses['order'][] = $c_sort . " " . $c_dir; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |