From: <pri...@us...> - 2007-11-03 18:45:43
|
Revision: 4717 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=4717&view=rev Author: prichards Date: 2007-11-03 11:45:34 -0700 (Sat, 03 Nov 2007) Log Message: ----------- Performance optimisation: - based on analysis of Xdebug cachegrind output. + 'pgsql' fix. Note: filter_api really should be updated to use query_bound stuff Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2007-11-03 13:19:28 UTC (rev 4716) +++ trunk/mantisbt/core/filter_api.php 2007-11-03 18:45:34 UTC (rev 4717) @@ -459,7 +459,7 @@ $t_view_type = $t_filter['_view_type']; - $t_where_clauses = array( "$t_project_table.enabled = 1", "$t_project_table.id = $t_bug_table.project_id" ); + $t_where_clauses = array( "$t_project_table.enabled = '1'", "$t_project_table.id = $t_bug_table.project_id" ); $t_select_clauses = array( "$t_bug_table.*" ); $t_join_clauses = array(); $t_from_clauses = array(); @@ -1261,6 +1261,9 @@ # 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; for ( $i = 0; $i < 2; $i++ ) { $t_id_where = $t_where; $t_id_join = $t_join; @@ -1273,30 +1276,38 @@ $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 = "SELECT DISTINCT $t_bug_table.id AS id - $t_from + $query = " $t_from $t_id_join $t_id_where"; + if ( ( $i == 0 ) || ( !is_blank( $t_textsearch_wherejoin_clause ) ) ) { - $result = db_query( $query ); - $row_count = db_num_rows( $result ); - - for ( $j=0; $j < $row_count; $j++ ) { - $row = db_fetch_array( $result ); - $t_id_array[] = db_prepare_int ( $row['id'] ); + if( $i == 0) { + $q1 = "SELECT DISTINCT $t_bug_table.id AS id" . $query; + } else { + $q2 = "SELECT DISTINCT $t_bug_table.id AS id" . $query; } + + $result = db_query( "SELECT Count(DISTINCT $t_bug_table.id) as idcnt" . $query ); + $row = db_fetch_array( $result ); + $bug_count += $row['idcnt']; } } - $t_id_array = array_unique( $t_id_array ); - # Get the total number of bugs that meet the criteria. - $bug_count = count( $t_id_array ); $rows = array(); - + $t_where = ''; if ( $bug_count > 0 ) { - $t_where = "WHERE $t_bug_table.id in (" . implode( ", ", $t_id_array ) . ")"; + $t_where .= "WHERE $t_bug_table.id in ( "; + if ( !is_blank($q1) ) { + $t_where .= "$q1"; + if ( !is_blank($q2) ) { + $t_where .= " OR $q2"; + } + $t_where .= ")"; + } else { + $t_where .= " $q2)"; + } } else { return $rows; } @@ -1415,9 +1426,7 @@ $result2 = db_query( $query2, $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'] ); @@ -1425,37 +1434,10 @@ $row['date_submitted'] = db_unixtimestamp ( $row['date_submitted'] ); $row['last_updated'] = db_unixtimestamp ( $row['last_updated'] ); + bug_cache_database_result( $row, $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( $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; - } - - foreach($rows as $row) { - if( !isset( $t_stats[ $row['id'] ] ) ) { - bug_cache_database_result( $row, false ); - } else { - bug_cache_database_result( $row, $t_stats[ $row['id'] ] ); - } - } - + return $rows; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pri...@us...> - 2007-12-09 17:38:41
|
Revision: 4826 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=4826&view=rev Author: prichards Date: 2007-12-09 09:38:36 -0800 (Sun, 09 Dec 2007) Log Message: ----------- Performance optimisation - more caching of db queries ;/ Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2007-12-09 17:33:32 UTC (rev 4825) +++ trunk/mantisbt/core/filter_api.php 2007-12-09 17:38:36 UTC (rev 4826) @@ -2823,6 +2823,8 @@ $c_filter_id = db_prepare_int( $p_filter_id ); if ( isset( $g_cache_filter_db_filters[$p_filter_id] ) ) { + if ( $g_cache_filter_db_filters[$p_filter_id] === false ) + return null; return $g_cache_filter_db_filters[$p_filter_id]; } @@ -2853,9 +2855,10 @@ $g_cache_filter_db_filters[$p_filter_id] = $row['filter_string']; return $row['filter_string']; - } - - return null; + } else { + $g_cache_filter_db_filters[$p_filter_id] = false; + return false; + } } function filter_db_get_project_current( $p_project_id, $p_user_id = null ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vb...@us...> - 2008-01-21 04:02:40
|
Revision: 4923 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=4923&view=rev Author: vboctor Date: 2008-01-20 20:02:30 -0800 (Sun, 20 Jan 2008) Log Message: ----------- Fixed a bug where filters were escaped twice before savings, hence causing de-serialization errors. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-01-21 02:31:05 UTC (rev 4922) +++ trunk/mantisbt/core/filter_api.php 2008-01-21 04:02:30 UTC (rev 4923) @@ -2888,7 +2888,6 @@ $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 ); - $c_filter_string = db_prepare_string( $p_filter_string ); $t_filters_table = db_get_table( 'mantis_filters_table' ); @@ -2917,7 +2916,7 @@ SET is_public=" . db_param(0) . ", filter_string=" . db_param(1) . " WHERE id=" . db_param(2); - db_query_bound( $query, Array( $c_is_public, $c_filter_string, $row['id'] ) ); + db_query_bound( $query, Array( $c_is_public, $p_filter_string, $row['id'] ) ); return $row['id']; } else { @@ -2925,7 +2924,7 @@ ( user_id, project_id, is_public, name, filter_string ) VALUES ( " . db_param(0) . ", " . db_param(1) . ", " . db_param(2) . ", " . db_param(3) . ", " . db_param(4) . " )"; - db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_is_public, $c_name, $c_filter_string ) ); + db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_is_public, $c_name, $p_filter_string ) ); # Recall the query, we want the filter ID $query = "SELECT id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pri...@us...> - 2008-02-15 19:48:18
|
Revision: 5005 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5005&view=rev Author: prichards Date: 2008-02-15 11:48:12 -0800 (Fri, 15 Feb 2008) Log Message: ----------- fix double escaping Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-02-14 21:49:04 UTC (rev 5004) +++ trunk/mantisbt/core/filter_api.php 2008-02-15 19:48:12 UTC (rev 5005) @@ -885,10 +885,10 @@ foreach( $t_filter['show_build'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); if ( META_FILTER_NONE == $t_filter_member ) { - array_push( $t_clauses, "''" ); + array_push( $t_clauses, '' ); } else { $c_show_build = db_prepare_string( $t_filter_member ); - array_push( $t_clauses, "'$c_show_build'" ); + array_push( $t_clauses, $c_show_build ); } } if ( 1 < count( $t_clauses ) ) { @@ -910,10 +910,10 @@ foreach( $t_filter['show_version'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); if ( META_FILTER_NONE == $t_filter_member ) { - array_push( $t_clauses, "''" ); + array_push( $t_clauses, '' ); } else { $c_show_version = db_prepare_string( $t_filter_member ); - array_push( $t_clauses, "'$c_show_version'" ); + array_push( $t_clauses, $c_show_version ); } } @@ -964,7 +964,7 @@ array_push( $t_clauses, '' ); } else { $c_platform = db_prepare_string( $t_filter_member ); - array_push( $t_clauses, "'$c_platform'" ); + array_push( $t_clauses, $c_platform ); } } @@ -990,7 +990,7 @@ array_push( $t_clauses, '' ); } else { $c_os = db_prepare_string( $t_filter_member ); - array_push( $t_clauses, "'$c_os'" ); + array_push( $t_clauses, $c_os ); } } @@ -1016,7 +1016,7 @@ array_push( $t_clauses, '' ); } else { $c_os_build = db_prepare_string( $t_filter_member ); - array_push( $t_clauses, "'$c_os_build'" ); + array_push( $t_clauses, $c_os_build ); } } @@ -1057,10 +1057,10 @@ foreach( $t_filter['fixed_in_version'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); if ( META_FILTER_NONE == $t_filter_member ) { - array_push( $t_clauses, "''" ); + array_push( $t_clauses, '' ); } else { $c_fixed_in_version = db_prepare_string( $t_filter_member ); - array_push( $t_clauses, "'$c_fixed_in_version'" ); + array_push( $t_clauses, $c_fixed_in_version ); } } if ( 1 < count( $t_clauses ) ) { @@ -1082,10 +1082,10 @@ foreach( $t_filter['target_version'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); if ( META_FILTER_NONE == $t_filter_member ) { - array_push( $t_clauses, "''" ); + array_push( $t_clauses, '' ); } else { $c_target_version = db_prepare_string( $t_filter_member ); - array_push( $t_clauses, "'$c_target_version'" ); + array_push( $t_clauses, $c_target_version ); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-04-03 14:34:21
|
Revision: 5153 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5153&view=rev Author: dwarrine5 Date: 2008-04-03 07:33:35 -0700 (Thu, 03 Apr 2008) Log Message: ----------- Tables were added to the from list as well as the join list. Only the join is needed in these cases. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-04-01 20:57:48 UTC (rev 5152) +++ trunk/mantisbt/core/filter_api.php 2008-04-03 14:33:35 UTC (rev 5153) @@ -1115,7 +1115,6 @@ if ( !$t_any_found ) { $t_clauses = array(); $t_table_name = 'user_monitor'; - array_push( $t_from_clauses, $t_bug_monitor_table ); array_push( $t_join_clauses, "LEFT JOIN $t_bug_monitor_table $t_table_name ON $t_table_name.bug_id = $t_bug_table.id" ); foreach( $t_filter['user_monitor'] as $t_filter_member ) { @@ -1149,7 +1148,6 @@ $t_comp_type = relationship_get_complementary_type( $c_rel_type ); $t_clauses = array(); $t_table_name = 'relationship'; - array_push( $t_from_clauses, $t_bug_relationship_table ); array_push( $t_join_clauses, "LEFT JOIN $t_bug_relationship_table $t_table_name ON $t_table_name.destination_bug_id = $t_bug_table.id" ); array_push( $t_join_clauses, "LEFT JOIN $t_bug_relationship_table ${t_table_name}2 ON ${t_table_name}2.source_bug_id = $t_bug_table.id" ); // get reverse relationships This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-04-25 19:17:55
|
Revision: 5204 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5204&view=rev Author: dwarrine5 Date: 2008-04-25 12:17:38 -0700 (Fri, 25 Apr 2008) Log Message: ----------- Fix for Bug #8916 Monitor by filter ignores show_monitor_list_threshold Added threshold check before printing user list. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-04-24 22:03:05 UTC (rev 5203) +++ trunk/mantisbt/core/filter_api.php 2008-04-25 19:17:38 UTC (rev 5204) @@ -3436,8 +3436,13 @@ check_selected( $t_filter['user_monitor'], META_FILTER_MYSELF ); PRINT '>[' . lang_get( 'myself' ) . ']</option>'; } + $t_threshold = config_get( 'show_monitor_list_threshold' ); + $t_has_project_level = access_has_project_level( $t_threshold ); + + if ( $t_has_project_level ) { + print_reporter_option_list( $t_filter['user_monitor'] ); + } ?> - <?php print_reporter_option_list( $t_filter['user_monitor'] ) ?> </select> <?php } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pri...@us...> - 2008-05-03 23:51:15
|
Revision: 5244 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5244&view=rev Author: prichards Date: 2008-05-03 16:51:09 -0700 (Sat, 03 May 2008) Log Message: ----------- return t_rows, which is prepared wrt to dates. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-05-03 23:48:22 UTC (rev 5243) +++ trunk/mantisbt/core/filter_api.php 2008-05-03 23:51:09 UTC (rev 5244) @@ -1573,7 +1573,7 @@ } } - return $rows; + return $t_rows; } # -------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-06-05 13:32:58
|
Revision: 5328 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5328&view=rev Author: dwarrine5 Date: 2008-06-05 06:32:34 -0700 (Thu, 05 Jun 2008) Log Message: ----------- Fix bug #9099. t_where_tmp array should be reset for each property. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-06-05 06:48:03 UTC (rev 5327) +++ trunk/mantisbt/core/filter_api.php 2008-06-05 13:32:34 UTC (rev 5328) @@ -708,6 +708,7 @@ } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -737,6 +738,7 @@ array_push( $t_clauses, $c_show_severity ); } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -799,6 +801,7 @@ array_push( $t_clauses, $c_show_status ); } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -829,6 +832,7 @@ array_push( $t_clauses, $c_show_resolution ); } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -858,6 +862,7 @@ array_push( $t_clauses, $c_show_priority ); } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -892,6 +897,7 @@ } } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -918,6 +924,7 @@ } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -943,6 +950,7 @@ } } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -969,6 +977,7 @@ } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -995,6 +1004,7 @@ } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -1021,6 +1031,7 @@ } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -1064,6 +1075,7 @@ } } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -1091,6 +1103,7 @@ #echo var_dump( $t_clauses ); exit; if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; @@ -1126,6 +1139,7 @@ } } if ( 1 < count( $t_clauses ) ) { + $t_where_tmp = array(); foreach( $t_clauses as $t_clause ) { $t_where_tmp[] = db_param($t_where_param_count++); $t_where_params[] = $t_clause; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-06-06 21:12:56
|
Revision: 5335 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5335&view=rev Author: dwarrine5 Date: 2008-06-06 14:12:54 -0700 (Fri, 06 Jun 2008) Log Message: ----------- Fix bug where filter api was broken when limit reporters config was ON. t_where_params was being assigned as a scalar rather than an array element. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-06-06 13:28:30 UTC (rev 5334) +++ trunk/mantisbt/core/filter_api.php 2008-06-06 21:12:54 UTC (rev 5335) @@ -659,7 +659,7 @@ # if ( ( ON === $t_limit_reporters ) && ( ! access_has_project_level( REPORTER + 1, $t_project_id, $t_user_id ) ) ) { $c_reporter_id = $c_user_id; - $t_where_params = $c_reporter_id; + $t_where_params[] = $c_reporter_id; array_push( $t_where_clauses, "($t_bug_table.reporter_id=" . db_param($t_where_param_count++) . ")" ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-06-11 22:20:45
|
Revision: 5355 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5355&view=rev Author: dwarrine5 Date: 2008-06-11 15:20:35 -0700 (Wed, 11 Jun 2008) Log Message: ----------- Update documentation to phpdocs format. Add function docs where none existed. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-06-11 13:58:56 UTC (rev 5354) +++ trunk/mantisbt/core/filter_api.php 2008-06-11 22:20:35 UTC (rev 5355) @@ -31,9 +31,11 @@ require_once( $t_core_dir . 'tag_api.php' ); require_once( $g_absolute_path . 'config_filter_defaults_inc.php' ); - # Checks the supplied value to see if it is an ANY value. - # $p_field_value - The value to check. - # Returns true for "ANY" values and false for others. "ANY" means filter criteria not active. + /** + * Checks the supplied value to see if it is an ANY value. + * @param string $p_field_value - The value to check. + * @return bool true for "ANY" values and false for others. "ANY" means filter criteria not active. + */ function filter_str_field_is_any( $p_field_value ) { if ( is_array( $p_field_value ) ) { if ( count( $p_field_value ) == 0 ) { @@ -62,10 +64,13 @@ return false; } - # Encodes a field and it's value for the filter URL. This handles the URL encoding - # and arrays. - # $p_field_name - The field name. - # $p_field_value - The field value (can be an array) + /** + * Encodes a field and it's value for the filter URL. This handles the URL encoding + * and arrays. + * @param string $p_field_name The field name. + * @param string $p_field_value The field value (can be an array) + * @return string url encoded string + */ function filter_encode_field_and_value( $p_field_name, $p_field_value ) { $t_query_array = array(); if ( is_array( $p_field_value ) ) { @@ -84,10 +89,13 @@ return implode( $t_query_array, '&' ); } - # Get a permalink for the current active filter. The results of using these fields by other users - # can be inconsistent with the original results due to fields like "Myself", "Current Project", - # and due to access level. - # Returns the search.php?xxxx or an empty string if no criteria applied. + /** + * Get a permalink for the current active filter. The results of using these fields by other users + * can be inconsistent with the original results due to fields like "Myself", "Current Project", + * and due to access level. + * @param array $p_custom_filter + * @return string the search.php?xxxx or an empty string if no criteria applied. + */ function filter_get_url( $p_custom_filter ) { $t_query = array(); @@ -274,9 +282,12 @@ # Filter API ########################################################################### - # Get the standard filter that is to be used when no filter was previously saved. - # When creating specific filters, this can be used as a basis for the filter, where - # specific entries can be overridden. + /** + * Get the standard filter that is to be used when no filter was previously saved. + * When creating specific filters, this can be used as a basis for the filter, where + * specific entries can be overridden. + * @return mixed + */ function filter_get_default() { $t_hide_status_default = config_get( 'hide_status_default' ); $t_default_show_changed = config_get( 'default_show_changed' ); @@ -302,32 +313,24 @@ return filter_ensure_valid_filter( $t_filter ); } - # @@@ 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 - # rid of the errors for now. If we can think of a better way later - # (maybe return an object) that would be great. - # - # $p_page_numer - # - the page you want to see (set to the actual page on return) - # $p_per_page - # - the number of bugs to see per page (set to actual on return) - # -1 indicates you want to see all bugs - # null indicates you want to use the value specified in the filter - # $p_page_count - # - you don't need to give a value here, the number of pages will be - # stored here on return - # $p_bug_count - # - you don't need to give a value here, the number of bugs will be - # stored here on return - # $p_custom_filter - # - Filter to use. - # $p_project_id - # - project id to use in filtering. - # $p_user_id - # - user id to use as current user when filtering. - # $p_show_sticky - # - get sticky issues only. + /** + * @@@ 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 + * rid of the errors for now. If we can think of a better way later + * (maybe return an object) that would be great. + * + * @param int $p_page_number the page you want to see (set to the actual page on return) + * @param int $p_per_page the number of bugs to see per page (set to actual on return) + * -1 indicates you want to see all bugs + * null indicates you want to use the value specified in the filter + * @param int $p_page_count you don't need to give a value here, the number of pages will be stored here on return + * @param int $p_bug_count you don't need to give a value here, the number of bugs will be stored here on return + * @param mixed $p_custom_filter Filter to use. + * @param int $p_project_id project id to use in filtering. + * @param int $p_user_id user id to use as current user when filtering. + * @param bool $p_show_sticky get sticky issues only. + */ function filter_get_bug_rows( &$p_page_number, &$p_per_page, &$p_page_count, &$p_bug_count, $p_custom_filter = null, $p_project_id = null, $p_user_id = null, $p_show_sticky = null ) { log_event( LOG_FILTERING, 'FILTERING: START NEW FILTER QUERY' ); @@ -1548,9 +1551,10 @@ return $t_rows; } - # -------------------- - # return true if the filter cookie exists and is of the correct version, - # false otherwise + /** + * Check if the filter cookie exists and is of the correct version. + * @return bool + */ function filter_is_cookie_valid() { $t_view_all_cookie_id = gpc_get_cookie( config_get( 'view_all_cookie' ), '' ); $t_view_all_cookie = filter_db_get_filter( $t_view_all_cookie_id ); @@ -1584,8 +1588,12 @@ return true; } - # -------------------- - # return filter array if supplied serialized filter is valid, otherwise false.otherwise + /** + * Deserialize filter string + * @param string $p_serialized_filter + * @return mixed $t_filter array + * @see filter_ensure_valid_filter + */ function filter_deserialize( $p_serialized_filter ) { if ( is_blank( $p_serialized_filter ) ) { return false; @@ -1617,11 +1625,14 @@ return $t_filter_array; } - # -------------------- - # Mainly based on filter_draw_selection_area2() but adds the support for the collapsible - # filter display. - function filter_draw_selection_area( $p_page_number, $p_for_screen = true ) - { + /** + * Mainly based on filter_draw_selection_area2() but adds the support for the collapsible + * filter display. + * @param int $p_page_number + * @param bool $p_for_screen + * @see filter_draw_selection_area2 + */ + function filter_draw_selection_area( $p_page_number, $p_for_screen = true ) { collapse_open( 'filter' ); filter_draw_selection_area2( $p_page_number, $p_for_screen, true ); collapse_closed( 'filter' ); @@ -1629,12 +1640,15 @@ collapse_end( 'filter' ); } - # -------------------- - # Will print the filter selection area for both the bug list view screen, as well - # as the bug list print screen. This function was an attempt to make it easier to - # add new filters and rearrange them on screen for both pages. - function filter_draw_selection_area2( $p_page_number, $p_for_screen = true, $p_expanded = true ) - { + /** + * Prints the filter selection area for both the bug list view screen and + * the bug list print screen. This function was an attempt to make it easier to + * add new filters and rearrange them on screen for both pages. + * @param int $p_page_number + * @param bool $p_for_screen + * @param bool $p_expanded + */ + function filter_draw_selection_area2( $p_page_number, $p_for_screen = true, $p_expanded = true ) { $t_form_name_suffix = $p_expanded ? '_open' : '_closed'; $t_filter = current_user_get_bug_filter(); @@ -2902,9 +2916,15 @@ <?php } - # Add a filter to the database for the current user - function filter_db_set_for_current_user( $p_project_id, $p_is_public, - $p_name, $p_filter_string ) { + /** + * Add a filter to the database for the current user + * @param int $p_project_id + * @param bool $p_is_public + * @param string $p_name + * @param string $p_filter_string + * @return int + */ + function filter_db_set_for_current_user( $p_project_id, $p_is_public, $p_name, $p_filter_string ) { $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 ); @@ -2967,10 +2987,15 @@ # We cache filter requests to reduce the number of SQL queries $g_cache_filter_db_filters = array(); - # This function will return the filter string that is - # tied to the unique id parameter. If the user doesn't - # have permission to see this filter, the function will - # return null + /** + * This function returns the filter string that is + * tied to the unique id parameter. If the user doesn't + * have permission to see this filter, the function + * returns null + * @param int $p_filter_id + * @param int $p_user_id + * @return mixed + */ function filter_db_get_filter( $p_filter_id, $p_user_id = null ) { global $g_cache_filter_db_filters; $t_filters_table = db_get_table( 'mantis_filters_table' ); @@ -3015,6 +3040,11 @@ } } + /** + * @param int $p_project_id + * @param int $p_user_id + * @return int + */ function filter_db_get_project_current( $p_project_id, $p_user_id = null ) { $t_filters_table = db_get_table( 'mantis_filters_table' ); $c_project_id = db_prepare_int( $p_project_id ); @@ -3042,6 +3072,11 @@ return null; } + /** + * Query for the filter name using the filter id + * @param int $p_filter_id + * @return string + */ function filter_db_get_name( $p_filter_id ) { $t_filters_table = db_get_table( 'mantis_filters_table' ); $c_filter_id = db_prepare_int( $p_filter_id ); @@ -3066,7 +3101,11 @@ return null; } - # Will return true if the user can delete this query + /** + * Check if the current user has permissions to delete the stored query + * @param $p_filter_id + * @return bool + */ function filter_db_can_delete_filter( $p_filter_id ) { $t_filters_table = db_get_table( 'mantis_filters_table' ); $c_filter_id = db_prepare_int( $p_filter_id ); @@ -3092,6 +3131,11 @@ return false; } + /** + * Delete the filter specified by $p_filter_id + * @param $p_filter_id + * @return bool + */ function filter_db_delete_filter( $p_filter_id ) { $t_filters_table = db_get_table( 'mantis_filters_table' ); $c_filter_id = db_prepare_int( $p_filter_id ); @@ -3112,6 +3156,9 @@ return false; } + /** + * Delete all the unnamed filters + */ function filter_db_delete_current_filters( ) { $t_filters_table = db_get_table( 'mantis_filters_table' ); $t_all_id = ALL_PROJECTS; @@ -3122,6 +3169,11 @@ $result = db_query_bound( $query, Array( $t_all_id, '' ) ); } + /** + * @param int $p_project_id + * @param int $p_user_id + * @return mixed + */ function filter_db_get_available_queries( $p_project_id = null, $p_user_id = null ) { $t_filters_table = db_get_table( 'mantis_filters_table' ); $t_overall_query_arr = array(); @@ -3167,8 +3219,13 @@ return $t_overall_query_arr; } - # 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. + /** + * 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 + * @return mixed + * @todo function needs to be abstracted + */ function filter_ensure_valid_filter( $p_filter_arr ) { # extend current filter to add information passed via POST if ( !isset( $p_filter_arr['_version'] ) ) { @@ -3391,23 +3448,25 @@ /** - * The following functions each print out an individual filter field. - * They are derived from view_filters_page.php + * @internal The following functions each print out filter field inputs. + * They are derived from view_filters_page.php + * The functions follow a strict naming convention: * - * The functions follow a strict naming convention: + * print_filter_[filter_name] * - * print_filter_[filter_name] - * - * Where [filter_name] is the same as the "name" of the form element for - * that filter. This naming convention is depended upon by the controller - * at the end of the script. + * Where [filter_name] is the same as the "name" of the form element for + * that filter. This naming convention is depended upon by the controller + * at the end of the script. + * + * @todo print functions should be abstracted. Many of these functions + * are virtually identical except for the property name. + * Perhaps this code could be made simpler by refactoring into a + * class so as to avoid all those calls to global(which are pretty ugly) + * These functions could also be shared by view_filters_page.php */ + /** - * I expect that this code could be made simpler by refactoring into a - * class so as to avoid all those calls to global(which are pretty ugly) - * - * These functions could also be shared by view_filters_page.php - * + * Print the reporter field */ function print_filter_reporter_id(){ global $t_select_modifier, $t_filter; @@ -3443,7 +3502,9 @@ <?php } - + /** + * Print the user monitor field + */ function print_filter_user_monitor(){ global $t_select_modifier, $t_filter; ?> @@ -3467,6 +3528,9 @@ <?php } + /** + * print the handler field + */ function print_filter_handler_id(){ global $t_select_modifier, $t_filter, $f_view_type; ?> @@ -3488,6 +3552,9 @@ <?php } + /** + * print the category field + */ function print_filter_show_category(){ global $t_select_modifier, $t_filter; ?> @@ -3498,7 +3565,10 @@ </select> <?php } - + + /** + * print the platform field + */ function print_filter_platform() { global $t_select_modifier, $t_filter; @@ -3514,6 +3584,9 @@ <?php } + /** + * print the os field + */ function print_filter_os() { global $t_select_modifier, $t_filter; @@ -3526,6 +3599,9 @@ <?php } + /** + * print the os build field + */ function print_filter_os_build() { global $t_select_modifier, $t_filter; @@ -3538,6 +3614,9 @@ <?php } + /** + * print the severity field + */ function print_filter_show_severity(){ global $t_select_modifier, $t_filter; ?><!-- Severity --> @@ -3548,6 +3627,9 @@ <?php } + /** + * print resolution field + */ function print_filter_show_resolution(){ global $t_select_modifier, $t_filter; ?><!-- Resolution --> @@ -3558,6 +3640,9 @@ <?php } + /** + * print status field + */ function print_filter_show_status(){ global $t_select_modifier, $t_filter; ?> <!-- Status --> @@ -3568,6 +3653,9 @@ <?php } + /** + * print hide status field + */ function print_filter_hide_status(){ global $t_select_modifier, $t_filter; ?><!-- Hide Status --> @@ -3578,6 +3666,9 @@ <?php } + /** + * print build field + */ function print_filter_show_build(){ global $t_select_modifier, $t_filter; ?><!-- Build --> @@ -3589,6 +3680,9 @@ <?php } + /** + * print version field + */ function print_filter_show_version(){ global $t_select_modifier, $t_filter; ?><!-- Version --> @@ -3600,6 +3694,9 @@ <?php } + /** + * print fixed in version field + */ function print_filter_show_fixed_in_version(){ global $t_select_modifier, $t_filter; ?><!-- Fixed in Version --> @@ -3611,6 +3708,9 @@ <?php } + /** + * print target version field + */ function print_filter_show_target_version(){ global $t_select_modifier, $t_filter; ?><!-- Fixed in Version --> @@ -3622,6 +3722,9 @@ <?php } + /** + * print priority field + */ function print_filter_show_priority(){ global $t_select_modifier, $t_filter; ?><!-- Priority --> @@ -3632,6 +3735,9 @@ <?php } + /** + * print profile field + */ function print_filter_show_profile() { global $t_select_modifier, $t_filter; ?><!-- Profile --> @@ -3642,6 +3748,9 @@ <?php } + /** + * print issues per page field + */ function print_filter_per_page(){ global $t_filter; ?><!-- Number of bugs per page --> @@ -3649,6 +3758,9 @@ <?php } + /** + * print view state field + */ function print_filter_view_state(){ global $t_select_modifier, $t_filter; ?><!-- View Status --> @@ -3668,6 +3780,9 @@ <?php } + /** + * print sticky issues field + */ function print_filter_sticky_issues(){ global $t_filter; ?><!-- Show or hide sticky bugs --> @@ -3675,6 +3790,9 @@ <?php } + /** + * print highlight changed field + */ function print_filter_highlight_changed(){ global $t_filter; ?><!-- Highlight changed bugs --> @@ -3682,6 +3800,11 @@ <?php } + /** + * print filter by date fields with javascript + * @todo Javascript should be removed and added dynamically + * via external script + */ function print_filter_do_filter_by_date( $p_hide_checkbox=false ){ global $t_filter; ?> @@ -3759,6 +3882,9 @@ <?php } + /** + * print relationship fields + */ function print_filter_relationship_type(){ global $t_filter; $c_reltype_value = $t_filter['relationship_type']; @@ -3771,6 +3897,9 @@ } + /** + * print tag fields + */ function print_filter_tag_string() { global $t_filter; $t_tag_string = $t_filter['tag_string']; @@ -3787,6 +3916,9 @@ <?php } + /** + * print note reporter field + */ function print_filter_note_user_id(){ global $t_select_modifier, $t_filter, $f_view_type; ?> @@ -3808,6 +3940,10 @@ <?php } + /** + * print custom fields + * @param int $p_field_id + */ function print_filter_custom_field($p_field_id){ global $t_filter, $t_accessible_custom_fields_names, $t_accessible_custom_fields_types, $t_accessible_custom_fields_values, $t_accessible_custom_fields_ids, $t_select_modifier; @@ -3848,6 +3984,9 @@ } + /** + * print sort fields + */ function print_filter_show_sort() { global $t_filter; @@ -3921,8 +4060,11 @@ } } - - + /** + * print custom field date fields + * @param int $p_field_num + * @param int $p_field_id + */ function print_filter_custom_field_date($p_field_num, $p_field_id) { global $t_filter, $t_accessible_custom_fields_names, $t_accessible_custom_fields_types, $t_accessible_custom_fields_values, $t_accessible_custom_fields_ids, $t_select_modifier; @@ -4031,6 +4173,9 @@ print "</td></tr>\n</table>"; } + /** + * print project field + */ function print_filter_project_id(){ global $t_select_modifier, $t_filter, $f_view_type; ?> @@ -4041,10 +4186,12 @@ </select> <?php } - - # Prints a multi-value filter field. For example, platform, etc. - # $p_field_name - The name of the field, e.g. "platform" - # $p_field_value - an array of values. + + /** + * Prints a multi-value filter field. + * @param string $p_field_name + * @param mixed $p_field_value + */ function print_multivalue_field( $p_field_name, $p_field_value ) { $t_output = ''; $t_any_found = false; @@ -4087,21 +4234,25 @@ } } - #=================================== - # Caching - #=================================== - - ######################################### - # SECURITY NOTE: cache globals are initialized here to prevent them - # being spoofed if register_globals is turned on - + #========================================================================== + # CACHING + #========================================================================== + /** + * @internal SECURITY NOTE: cache globals are initialized here to prevent them + * being spoofed if register_globals is turned on + * @global mixed $g_cache_filter + */ $g_cache_filter = array(); - # -------------------- - # Cache a filter row if necessary and return the cached copy - # If the second parameter is true (default), trigger an error - # if the filter can't be found. If the second parameter is - # false, return false if the filter can't be found. + /** + * Cache a filter row if necessary and return the cached copy + * If the second parameter is true (default), trigger an error + * if the filter can't be found. If the second parameter is + * false, return false if the filter can't be found. + * @param int $p_filter_id + * @param bool $p_trigger_errors + * @return mixed + */ function filter_cache_row( $p_filter_id, $p_trigger_errors=true) { global $g_cache_filter; @@ -4134,8 +4285,11 @@ return $row; } - # -------------------- - # Clear the filter cache (or just the given id if specified) + /** + * Clear the filter cache (or just the given id if specified) + * @param int $p_filter_id + * @return bool + */ function filter_clear_cache( $p_filter_id = null ) { global $g_cache_filter; @@ -4149,13 +4303,22 @@ return true; } - # -------------------- - # return a filter row + /** + * Get the array fields specified by $p_filter_id + * using the cached row if it's available + * @param int $p_filter_id + * @return mixed a filter row + */ function filter_get_row( $p_filter_id ) { return filter_cache_row( $p_filter_id ); } - # -------------------- + /** + * Get the value of the filter field specified by filter id and field name + * @param int $p_filter_id + * @param string $p_field_name + * @return string + */ function filter_get_field( $p_filter_id, $p_field_name ) { $row = filter_get_row( $p_filter_id ); @@ -4168,10 +4331,13 @@ } } - # -------------------- - # Checks if a filter value is "any". Supports both single value as well as multiple value - # fields (array). - # $p_filter_value - The value which can be a simple value or an array. + /** + * Checks if a filter value is "any". Supports both single value as well as multiple value + * fields (array). + * @param mixed $p_filter_value - The value which can be a simple value or an array. + * @return bool + * @todo remove this function and merge with filter_str_field_is_any + */ function _filter_is_any( $p_filter_value ) { if ( ( META_FILTER_ANY == $p_filter_value ) && is_numeric( $p_filter_value ) ) { return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-06-12 04:13:59
|
Revision: 5356 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5356&view=rev Author: dwarrine5 Date: 2008-06-11 21:13:58 -0700 (Wed, 11 Jun 2008) Log Message: ----------- Reorganize functions to prepare for future modification. No logic changes. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-06-11 22:20:35 UTC (rev 5355) +++ trunk/mantisbt/core/filter_api.php 2008-06-12 04:13:58 UTC (rev 5356) @@ -31,65 +31,10 @@ require_once( $t_core_dir . 'tag_api.php' ); require_once( $g_absolute_path . 'config_filter_defaults_inc.php' ); + #========================================================================== + # PERMALINK FUNCTIONS = + #========================================================================== /** - * Checks the supplied value to see if it is an ANY value. - * @param string $p_field_value - The value to check. - * @return bool true for "ANY" values and false for others. "ANY" means filter criteria not active. - */ - function filter_str_field_is_any( $p_field_value ) { - if ( is_array( $p_field_value ) ) { - if ( count( $p_field_value ) == 0 ) { - return true; - } - - foreach( $p_field_value as $t_value ) { - if ( ( META_FILTER_ANY == $t_value ) && ( is_numeric( $t_value ) ) ) { - return true; - } - } - } else { - if ( is_string( $p_field_value ) && is_blank( $p_field_value ) ) { - return true; - } - - if ( is_bool( $p_field_value ) && !$p_field_value ) { - return true; - } - - if ( ( META_FILTER_ANY == $p_field_value ) && ( is_numeric( $p_field_value ) ) ) { - return true; - } - } - - return false; - } - - /** - * Encodes a field and it's value for the filter URL. This handles the URL encoding - * and arrays. - * @param string $p_field_name The field name. - * @param string $p_field_value The field value (can be an array) - * @return string url encoded string - */ - function filter_encode_field_and_value( $p_field_name, $p_field_value ) { - $t_query_array = array(); - if ( is_array( $p_field_value ) ) { - $t_count = count( $p_field_value ); - if ( $t_count > 1 ) { - foreach ( $p_field_value as $t_value ) { - $t_query_array[] = urlencode( $p_field_name . '[]' ) . '=' . urlencode( $t_value ); - } - } else if ( $t_count == 1 ) { - $t_query_array[] = urlencode( $p_field_name ) . '=' . urlencode( $p_field_value[0] ); - } - } else { - $t_query_array[] = urlencode( $p_field_name ) . '=' . urlencode( $p_field_value ); - } - - return implode( $t_query_array, '&' ); - } - - /** * Get a permalink for the current active filter. The results of using these fields by other users * can be inconsistent with the original results due to fields like "Myself", "Current Project", * and due to access level. @@ -278,11 +223,320 @@ return $t_url; } - ########################################################################### - # Filter API - ########################################################################### + /** + * Encodes a field and it's value for the filter URL. This handles the URL encoding + * and arrays. + * @param string $p_field_name The field name. + * @param string $p_field_value The field value (can be an array) + * @return string url encoded string + */ + function filter_encode_field_and_value( $p_field_name, $p_field_value ) { + $t_query_array = array(); + if ( is_array( $p_field_value ) ) { + $t_count = count( $p_field_value ); + if ( $t_count > 1 ) { + foreach ( $p_field_value as $t_value ) { + $t_query_array[] = urlencode( $p_field_name . '[]' ) . '=' . urlencode( $t_value ); + } + } else if ( $t_count == 1 ) { + $t_query_array[] = urlencode( $p_field_name ) . '=' . urlencode( $p_field_value[0] ); + } + } else { + $t_query_array[] = urlencode( $p_field_name ) . '=' . urlencode( $p_field_value ); + } + return implode( $t_query_array, '&' ); + } + + #========================================================================== + # GENERAL FUNCTIONS = + #========================================================================== /** + * Checks the supplied value to see if it is an ANY value. + * @param string $p_field_value - The value to check. + * @return bool true for "ANY" values and false for others. "ANY" means filter criteria not active. + */ + function filter_str_field_is_any( $p_field_value ) { + if ( is_array( $p_field_value ) ) { + if ( count( $p_field_value ) == 0 ) { + return true; + } + + foreach( $p_field_value as $t_value ) { + if ( ( META_FILTER_ANY == $t_value ) && ( is_numeric( $t_value ) ) ) { + return true; + } + } + } else { + if ( is_string( $p_field_value ) && is_blank( $p_field_value ) ) { + return true; + } + + if ( is_bool( $p_field_value ) && !$p_field_value ) { + return true; + } + + if ( ( META_FILTER_ANY == $p_field_value ) && ( is_numeric( $p_field_value ) ) ) { + return true; + } + } + + return false; + } + + /** + * Checks if a filter value is "any". Supports both single value as well as multiple value + * fields (array). + * @param mixed $p_filter_value - The value which can be a simple value or an array. + * @return bool + * @todo remove this function and merge with filter_str_field_is_any + */ + function _filter_is_any( $p_filter_value ) { + if ( ( META_FILTER_ANY == $p_filter_value ) && is_numeric( $p_filter_value ) ) { + return true; + } + + if ( count( $p_filter_value ) == 0 ) { + return true; + } + + foreach( $p_filter_value as $t_value ) { + if ( ( META_FILTER_ANY == $t_value ) && ( is_numeric( $t_value ) ) ) { + return true; + } + } + + return false; + } + + /** + * 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 + * @return mixed + * @todo function needs to be abstracted + */ + function filter_ensure_valid_filter( $p_filter_arr ) { + # extend current filter to add information passed via POST + if ( !isset( $p_filter_arr['_version'] ) ) { + $p_filter_arr['_version'] = config_get( 'cookie_version' ); + } + $t_cookie_vers = (int) substr( $p_filter_arr['_version'], 1 ); + if ( substr( config_get( 'cookie_version' ), 1 ) > $t_cookie_vers ) { # if the version is old, update it + $p_filter_arr['_version'] = config_get( 'cookie_version' ); + } + if ( !isset( $p_filter_arr['_view_type'] ) ) { + $p_filter_arr['_view_type'] = gpc_get_string( 'view_type', 'simple' ); + } + if ( !isset( $p_filter_arr['per_page'] ) ) { + $p_filter_arr['per_page'] = gpc_get_int( 'per_page', config_get( 'default_limit_view' ) ); + } + if ( !isset( $p_filter_arr['highlight_changed'] ) ) { + $p_filter_arr['highlight_changed'] = config_get( 'default_show_changed' ); + } + if ( !isset( $p_filter_arr['sticky_issues'] ) ) { + $p_filter_arr['sticky_issues'] = config_get( 'show_sticky_issues' ); + } + if ( !isset( $p_filter_arr['sort'] ) ) { + $p_filter_arr['sort'] = "last_updated"; + } + if ( !isset( $p_filter_arr['dir'] ) ) { + $p_filter_arr['dir'] = "DESC"; + } + + if ( !isset( $p_filter_arr['platform'] ) ) { + $p_filter_arr['platform'] = array( 0 => META_FILTER_ANY ); + } + + if ( !isset( $p_filter_arr['os'] ) ) { + $p_filter_arr['os'] = array( 0 => META_FILTER_ANY ); + } + + if ( !isset( $p_filter_arr['os_build'] ) ) { + $p_filter_arr['os_build'] = array( 0 => META_FILTER_ANY ); + } + + if ( !isset( $p_filter_arr['project_id'] ) ) { + $p_filter_arr['project_id'] = array( 0 => META_FILTER_CURRENT ); + } + + if ( !isset( $p_filter_arr['start_month'] ) ) { + $p_filter_arr['start_month'] = gpc_get_string( 'start_month', date( 'm' ) ); + } + if ( !isset( $p_filter_arr['start_day'] ) ) { + $p_filter_arr['start_day'] = gpc_get_string( 'start_day', 1 ); + } + if ( !isset( $p_filter_arr['start_year'] ) ) { + $p_filter_arr['start_year'] = gpc_get_string( 'start_year', date( 'Y' ) ); + } + if ( !isset( $p_filter_arr['end_month'] ) ) { + $p_filter_arr['end_month'] = gpc_get_string( 'end_month', date( 'm' ) ); + } + if ( !isset( $p_filter_arr['end_day'] ) ) { + $p_filter_arr['end_day'] = gpc_get_string( 'end_day', date( 'd' ) ); + } + if ( !isset( $p_filter_arr['end_year'] ) ) { + $p_filter_arr['end_year'] = gpc_get_string( 'end_year', date( 'Y' ) ); + } + if ( !isset( $p_filter_arr['search'] ) ) { + $p_filter_arr['search'] = ''; + } + if ( !isset( $p_filter_arr['and_not_assigned'] ) ) { + $p_filter_arr['and_not_assigned'] = gpc_get_bool( 'and_not_assigned', false ); + } + if ( !isset( $p_filter_arr['do_filter_by_date'] ) ) { + $p_filter_arr['do_filter_by_date'] = gpc_get_bool( 'do_filter_by_date', false ); + } + if ( !isset( $p_filter_arr['view_state'] ) ) { + $p_filter_arr['view_state'] = gpc_get( 'view_state', '' ); + } else if ( ( $p_filter_arr['view_state'] == 'any' ) || ( $p_filter_arr['view_state'] == 0 ) ) { + $p_filter_arr['view_state'] = META_FILTER_ANY; + } + if ( !isset( $p_filter_arr['relationship_type'] ) ) { + $p_filter_arr['relationship_type'] = gpc_get_int( 'relationship_type', -1 ); + } + if ( !isset( $p_filter_arr['relationship_bug'] ) ) { + $p_filter_arr['relationship_bug'] = gpc_get_int( 'relationship_bug', 0 ); + } + if ( !isset( $p_filter_arr['target_version'] ) ) { + $p_filter_arr['target_version'] = META_FILTER_ANY; + } + if ( !isset( $p_filter_arr['tag_string'] ) ) { + $p_filter_arr['tag_string'] = gpc_get_string( 'tag_string', '' ); + } + if ( !isset( $p_filter_arr['tag_select'] ) ) { + $p_filter_arr['tag_select'] = gpc_get_string( 'tag_select', '' ); + } + + $t_custom_fields = custom_field_get_ids(); # @@@ (thraxisp) This should really be the linked ids, but we don't know the project + $f_custom_fields_data = array(); + if ( is_array( $t_custom_fields ) && ( sizeof( $t_custom_fields ) > 0 ) ) { + foreach( $t_custom_fields as $t_cfid ) { + if ( is_array( gpc_get( 'custom_field_' . $t_cfid, null ) ) ) { + $f_custom_fields_data[$t_cfid] = gpc_get_string_array( 'custom_field_' . $t_cfid, META_FILTER_ANY ); + } else { + $f_custom_fields_data[$t_cfid] = gpc_get_string( 'custom_field_' . $t_cfid, META_FILTER_ANY ); + $f_custom_fields_data[$t_cfid] = array( $f_custom_fields_data[$t_cfid] ); + } + } + } + + #validate sorting + $t_fields = helper_get_columns_to_view(); + $t_n_fields = count( $t_fields ); + for ( $i=0; $i < $t_n_fields; $i++ ) { + if ( isset( $t_fields[$i] ) && in_array( $t_fields[$i], array( 'selection', 'edit', 'bugnotes_count', 'attachment' ) ) ) { + unset( $t_fields[$i] ); + } + } + $t_sort_fields = split( ',', $p_filter_arr['sort'] ); + $t_dir_fields = split( ',', $p_filter_arr['dir'] ); + for ( $i=0; $i<2; $i++ ) { + if ( isset( $t_sort_fields[$i] ) ) { + $t_drop = false; + $t_sort = $t_sort_fields[$i]; + if ( strpos( $t_sort, 'custom_' ) === 0 ) { + if ( false === custom_field_get_id_from_name( substr( $t_sort, strlen( 'custom_' ) ) ) ) { + $t_drop = true; + } + } else { + if ( ! in_array( $t_sort, $t_fields ) ) { + $t_drop = true; + } + } + if ( ! in_array( $t_dir_fields[$i], array( "ASC", "DESC" ) ) ) { + $t_drop = true; + } + if ( $t_drop ) { + unset( $t_sort_fields[$i] ); + unset( $t_dir_fields[$i] ); + } + } + } + if ( count( $t_sort_fields ) > 0 ) { + $p_filter_arr['sort'] = implode( ',', $t_sort_fields ); + $p_filter_arr['dir'] = implode( ',', $t_dir_fields ); + } else { + $p_filter_arr['sort'] = "last_updated"; + $p_filter_arr['dir'] = "DESC"; + } + + # validate or filter junk from other fields + $t_multi_select_list = array( 'show_category' => 'string', + 'show_severity' => 'int', + 'show_status' => 'int', + 'reporter_id' => 'int', + 'handler_id' => 'int', + 'note_user_id' => 'int', + 'show_resolution' => 'int', + 'show_priority' => 'int', + 'show_build' => 'string', + 'show_version' => 'string', + 'hide_status' => 'int', + 'fixed_in_version' => 'string', + 'target_version' => 'string', + 'user_monitor' => 'int', + 'show_profile' => 'int' + ); + foreach( $t_multi_select_list as $t_multi_field_name => $t_multi_field_type ) { + if ( !isset( $p_filter_arr[$t_multi_field_name] ) ) { + if ( 'hide_status' == $t_multi_field_name ) { + $p_filter_arr[$t_multi_field_name] = array( config_get( 'hide_status_default' ) ); + } else if ( 'custom_fields' == $t_multi_field_name ) { + $p_filter_arr[$t_multi_field_name] = array( $f_custom_fields_data ); + } else { + $p_filter_arr[$t_multi_field_name] = array( META_FILTER_ANY ); + } + } else { + if ( !is_array( $p_filter_arr[$t_multi_field_name] ) ) { + $p_filter_arr[$t_multi_field_name] = array( $p_filter_arr[$t_multi_field_name] ); + } + $t_checked_array = array(); + foreach ( $p_filter_arr[$t_multi_field_name] as $t_filter_value ) { + $t_filter_value = stripslashes( $t_filter_value ); + if ( ( $t_filter_value === 'any' ) || ( $t_filter_value === '[any]' ) ) { + $t_filter_value = META_FILTER_ANY; + } + if ( ( $t_filter_value === 'none' ) || ( $t_filter_value === '[none]' ) ) { + $t_filter_value = META_FILTER_NONE; + } + if ( 'string' == $t_multi_field_type ) { + $t_checked_array[] = db_prepare_string( $t_filter_value ); + } else if ( 'int' == $t_multi_field_type ) { + $t_checked_array[] = db_prepare_int( $t_filter_value ); + } else if ( 'array' == $t_multi_field_type ) { + $t_checked_array[] = $t_filter_value; + } + } + $p_filter_arr[$t_multi_field_name] = $t_checked_array; + } + } + + if ( is_array( $t_custom_fields ) && ( sizeof( $t_custom_fields ) > 0 ) ) { + foreach( $t_custom_fields as $t_cfid ) { + if ( !isset( $p_filter_arr['custom_fields'][$t_cfid] ) ) { + $p_filter_arr['custom_fields'][$t_cfid] = array( META_FILTER_ANY ); + } else { + if ( !is_array( $p_filter_arr['custom_fields'][$t_cfid] ) ) { + $p_filter_arr['custom_fields'][$t_cfid] = array( $p_filter_arr['custom_fields'][$t_cfid] ); + } + $t_checked_array = array(); + foreach ( $p_filter_arr['custom_fields'][$t_cfid] as $t_filter_value ) { + $t_filter_value = stripslashes( $t_filter_value ); + if ( ( $t_filter_value === 'any' ) || ( $t_filter_value === '[any]' ) ) { + $t_filter_value = META_FILTER_ANY; + } + $t_checked_array[] = db_prepare_string( $t_filter_value ); + } + $p_filter_arr['custom_fields'][$t_cfid] = $t_checked_array; + } + } + } + # all of our filter values are now guaranteed to be there, and correct. + return $p_filter_arr; + } + + /** * Get the standard filter that is to be used when no filter was previously saved. * When creating specific filters, this can be used as a basis for the filter, where * specific entries can be overridden. @@ -314,6 +568,108 @@ } /** + * Deserialize filter string + * @param string $p_serialized_filter + * @return mixed $t_filter array + * @see filter_ensure_valid_filter + */ + function filter_deserialize( $p_serialized_filter ) { + if ( is_blank( $p_serialized_filter ) ) { + return false; + } + + # check to see if new cookie is needed + $t_setting_arr = explode( '#', $p_serialized_filter, 2 ); + if ( ( $t_setting_arr[0] == 'v1' ) || + ( $t_setting_arr[0] == 'v2' ) || + ( $t_setting_arr[0] == 'v3' ) || + ( $t_setting_arr[0] == 'v4' ) ) { + # these versions can't be salvaged, they are too old to update + return false; + } + + # We shouldn't need to do this anymore, as filters from v5 onwards should cope with changing + # filter indices dynamically + $t_filter_array = array(); + if ( isset( $t_setting_arr[1] ) ) { + $t_filter_array = unserialize( $t_setting_arr[1] ); + } else { + return false; + } + if ( $t_filter_array['_version'] != config_get( 'cookie_version' ) ) { + # if the version is not new enough, update it using defaults + return filter_ensure_valid_filter( $t_filter_array ); + } + + return $t_filter_array; + } + + /** + * Check if the filter cookie exists and is of the correct version. + * @return bool + */ + function filter_is_cookie_valid() { + $t_view_all_cookie_id = gpc_get_cookie( config_get( 'view_all_cookie' ), '' ); + $t_view_all_cookie = filter_db_get_filter( $t_view_all_cookie_id ); + + # check to see if the cookie does not exist + if ( is_blank( $t_view_all_cookie ) ) { + return false; + } + + # check to see if new cookie is needed + $t_setting_arr = explode( '#', $t_view_all_cookie, 2 ); + if ( ( $t_setting_arr[0] == 'v1' ) || + ( $t_setting_arr[0] == 'v2' ) || + ( $t_setting_arr[0] == 'v3' ) || + ( $t_setting_arr[0] == 'v4' ) ) { + return false; + } + + # We shouldn't need to do this anymore, as filters from v5 onwards should cope with changing + # filter indices dynamically + $t_filter_cookie_arr = array(); + if ( isset( $t_setting_arr[1] ) ) { + $t_filter_cookie_arr = unserialize( $t_setting_arr[1] ); + } else { + return false; + } + if ( $t_filter_cookie_arr['_version'] != config_get( 'cookie_version' ) ) { + return false; + } + + return true; + } + + /** + * Get the array fields specified by $p_filter_id + * using the cached row if it's available + * @param int $p_filter_id + * @return mixed a filter row + */ + function filter_get_row( $p_filter_id ) { + return filter_cache_row( $p_filter_id ); + } + + /** + * Get the value of the filter field specified by filter id and field name + * @param int $p_filter_id + * @param string $p_field_name + * @return string + */ + function filter_get_field( $p_filter_id, $p_field_name ) { + $row = filter_get_row( $p_filter_id ); + + if ( isset( $row[$p_field_name] ) ) { + return $row[$p_field_name]; + } else { + error_parameters( $p_field_name ); + trigger_error( ERROR_DB_FIELD_NOT_FOUND, WARNING ); + return ''; + } + } + + /** * @@@ 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 @@ -1551,81 +1907,10 @@ return $t_rows; } + #========================================================================== + # PRINT FUNCTIONS = + #========================================================================== /** - * Check if the filter cookie exists and is of the correct version. - * @return bool - */ - function filter_is_cookie_valid() { - $t_view_all_cookie_id = gpc_get_cookie( config_get( 'view_all_cookie' ), '' ); - $t_view_all_cookie = filter_db_get_filter( $t_view_all_cookie_id ); - - # check to see if the cookie does not exist - if ( is_blank( $t_view_all_cookie ) ) { - return false; - } - - # check to see if new cookie is needed - $t_setting_arr = explode( '#', $t_view_all_cookie, 2 ); - if ( ( $t_setting_arr[0] == 'v1' ) || - ( $t_setting_arr[0] == 'v2' ) || - ( $t_setting_arr[0] == 'v3' ) || - ( $t_setting_arr[0] == 'v4' ) ) { - return false; - } - - # We shouldn't need to do this anymore, as filters from v5 onwards should cope with changing - # filter indices dynamically - $t_filter_cookie_arr = array(); - if ( isset( $t_setting_arr[1] ) ) { - $t_filter_cookie_arr = unserialize( $t_setting_arr[1] ); - } else { - return false; - } - if ( $t_filter_cookie_arr['_version'] != config_get( 'cookie_version' ) ) { - return false; - } - - return true; - } - - /** - * Deserialize filter string - * @param string $p_serialized_filter - * @return mixed $t_filter array - * @see filter_ensure_valid_filter - */ - function filter_deserialize( $p_serialized_filter ) { - if ( is_blank( $p_serialized_filter ) ) { - return false; - } - - # check to see if new cookie is needed - $t_setting_arr = explode( '#', $p_serialized_filter, 2 ); - if ( ( $t_setting_arr[0] == 'v1' ) || - ( $t_setting_arr[0] == 'v2' ) || - ( $t_setting_arr[0] == 'v3' ) || - ( $t_setting_arr[0] == 'v4' ) ) { - # these versions can't be salvaged, they are too old to update - return false; - } - - # We shouldn't need to do this anymore, as filters from v5 onwards should cope with changing - # filter indices dynamically - $t_filter_array = array(); - if ( isset( $t_setting_arr[1] ) ) { - $t_filter_array = unserialize( $t_setting_arr[1] ); - } else { - return false; - } - if ( $t_filter_array['_version'] != config_get( 'cookie_version' ) ) { - # if the version is not new enough, update it using defaults - return filter_ensure_valid_filter( $t_filter_array ); - } - - return $t_filter_array; - } - - /** * Mainly based on filter_draw_selection_area2() but adds the support for the collapsible * filter display. * @param int $p_page_number @@ -2917,537 +3202,6 @@ } /** - * Add a filter to the database for the current user - * @param int $p_project_id - * @param bool $p_is_public - * @param string $p_name - * @param string $p_filter_string - * @return int - */ - function filter_db_set_for_current_user( $p_project_id, $p_is_public, $p_name, $p_filter_string ) { - $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' ); - - # check that the user can save non current filters (if required) - if ( ( ALL_PROJECTS <= $c_project_id ) && ( !is_blank( $p_name ) ) && - ( !access_has_project_level( config_get( 'stored_query_create_threshold' ) ) ) ) { - return -1; - } - - # ensure that we're not making this filter public if we're not allowed - if ( !access_has_project_level( config_get( 'stored_query_create_shared_threshold' ) ) ) { - $c_is_public = db_prepare_bool( false ); - } - - # Do I need to update or insert this value? - $query = "SELECT id FROM $t_filters_table - WHERE user_id=" . db_param(0) . " - AND project_id=" . db_param(1) . " - AND name=" . db_param(2); - $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_name ) ); - - if ( db_num_rows( $result ) > 0 ) { - $row = db_fetch_array( $result ); - - $query = "UPDATE $t_filters_table - SET is_public=" . db_param(0) . ", - filter_string=" . db_param(1) . " - WHERE id=" . db_param(2); - db_query_bound( $query, Array( $c_is_public, $p_filter_string, $row['id'] ) ); - - return $row['id']; - } else { - $query = "INSERT INTO $t_filters_table - ( user_id, project_id, is_public, name, filter_string ) - VALUES - ( " . db_param(0) . ", " . db_param(1) . ", " . db_param(2) . ", " . db_param(3) . ", " . db_param(4) . " )"; - db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_is_public, $c_name, $p_filter_string ) ); - - # Recall the query, we want the filter ID - $query = "SELECT id - FROM $t_filters_table - WHERE user_id=" . db_param(0) . " - AND project_id=" . db_param(1) . " - AND name=" . db_param(2); - $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_name ) ); - - if ( db_num_rows( $result ) > 0 ) { - $row = db_fetch_array( $result ); - return $row['id']; - } - - return -1; - } - } - - # We cache filter requests to reduce the number of SQL queries - $g_cache_filter_db_filters = array(); - - /** - * This function returns the filter string that is - * tied to the unique id parameter. If the user doesn't - * have permission to see this filter, the function - * returns null - * @param int $p_filter_id - * @param int $p_user_id - * @return mixed - */ - function filter_db_get_filter( $p_filter_id, $p_user_id = null ) { - global $g_cache_filter_db_filters; - $t_filters_table = db_get_table( 'mantis_filters_table' ); - $c_filter_id = db_prepare_int( $p_filter_id ); - - if ( isset( $g_cache_filter_db_filters[$p_filter_id] ) ) { - if ( $g_cache_filter_db_filters[$p_filter_id] === false ) - return null; - return $g_cache_filter_db_filters[$p_filter_id]; - } - - if ( null === $p_user_id ) { - $t_user_id = auth_get_current_user_id(); - } else { - $t_user_id = $p_user_id; - } - - $query = "SELECT * - FROM $t_filters_table - WHERE id=" . db_param(0); - $result = db_query_bound( $query, Array( $c_filter_id ) ); - - if ( db_num_rows( $result ) > 0 ) { - $row = db_fetch_array( $result ); - - if ( $row['user_id'] != $t_user_id ) { - if ( $row['is_public'] != true ) { - return null; - } - } - - # check that the user has access to non current filters - if ( ( ALL_PROJECTS <= $row['project_id'] ) && ( !is_blank( $row['name'] ) ) && ( !access_has_project_level( config_get( 'stored_query_use_threshold', $row['project_id'], $t_user_id ) ) ) ) { - return null; - } - - $g_cache_filter_db_filters[$p_filter_id] = $row['filter_string']; - return $row['filter_string']; - } else { - $g_cache_filter_db_filters[$p_filter_id] = false; - return false; - } - } - - /** - * @param int $p_project_id - * @param int $p_user_id - * @return int - */ - function filter_db_get_project_current( $p_project_id, $p_user_id = null ) { - $t_filters_table = db_get_table( 'mantis_filters_table' ); - $c_project_id = db_prepare_int( $p_project_id ); - $c_project_id = $c_project_id * -1; - - if ( null === $p_user_id ) { - $c_user_id = auth_get_current_user_id(); - } else { - $c_user_id = db_prepare_int( $p_user_id ); - } - - # we store current filters for each project with a special project index - $query = "SELECT * - FROM $t_filters_table - WHERE user_id=" . db_param(0) . " - AND project_id=" . db_param(1) . " - AND name=" . db_param(2); - $result = db_query_bound( $query, Array( $c_user_id, $c_project_id, '' ) ); - - if ( db_num_rows( $result ) > 0 ) { - $row = db_fetch_array( $result ); - return $row['id']; - } - - return null; - } - - /** - * Query for the filter name using the filter id - * @param int $p_filter_id - * @return string - */ - function filter_db_get_name( $p_filter_id ) { - $t_filters_table = db_get_table( 'mantis_filters_table' ); - $c_filter_id = db_prepare_int( $p_filter_id ); - - $query = "SELECT * - FROM $t_filters_table - WHERE id=" . db_param(0); - $result = db_query_bound( $query, Array( $c_filter_id ) ); - - if ( db_num_rows( $result ) > 0 ) { - $row = db_fetch_array( $result ); - - if ( $row['user_id'] != auth_get_current_user_id() ) { - if ( $row['is_public'] != true ) { - return null; - } - } - - return $row['name']; - } - - return null; - } - - /** - * Check if the current user has permissions to delete the stored query - * @param $p_filter_id - * @return bool - */ - function filter_db_can_delete_filter( $p_filter_id ) { - $t_filters_table = db_get_table( 'mantis_filters_table' ); - $c_filter_id = db_prepare_int( $p_filter_id ); - $t_user_id = auth_get_current_user_id(); - - # Administrators can delete any filter - if ( access_has_global_level( ADMINISTRATOR ) ) { - return true; - } - - $query = "SELECT id - FROM $t_filters_table - WHERE id=" . db_param(0) . " - AND user_id=" . db_param(1) . " - AND project_id!=" . db_param(2); - - $result = db_query_bound( $query, Array( $c_filter_id, $t_user_id, -1 ) ); - - if ( db_num_rows( $result ) > 0 ) { - return true; - } - - return false; - } - - /** - * Delete the filter specified by $p_filter_id - * @param $p_filter_id - * @return bool - */ - function filter_db_delete_filter( $p_filter_id ) { - $t_filters_table = db_get_table( 'mantis_filters_table' ); - $c_filter_id = db_prepare_int( $p_filter_id ); - $t_user_id = auth_get_current_user_id(); - - if ( !filter_db_can_delete_filter( $c_filter_id ) ) { - return false; - } - - $query = "DELETE FROM $t_filters_table - WHERE id=" . db_param(0); - $result = db_query_bound( $query, Array( $c_filter_id ) ); - - if ( db_affected_rows( $result ) > 0 ) { - return true; - } - - return false; - } - - /** - * Delete all the unnamed filters - */ - function filter_db_delete_current_filters( ) { - $t_filters_table = db_get_table( 'mantis_filters_table' ); - $t_all_id = ALL_PROJECTS; - - $query = "DELETE FROM $t_filters_table - WHERE project_id<=" . db_param(0) ." - AND name=" . db_param(1); - $result = db_query_bound( $query, Array( $t_all_id, '' ) ); - } - - /** - * @param int $p_project_id - * @param int $p_user_id - * @return mixed - */ - function filter_db_get_available_queries( $p_project_id = null, $p_user_id = null ) { - $t_filters_table = db_get_table( 'mantis_filters_table' ); - $t_overall_query_arr = array(); - - if ( null === $p_project_id ) { - $t_project_id = helper_get_current_project(); - } else { - $t_project_id = db_prepare_int( $p_project_id ); - } - - if ( null === $p_user_id ) { - $t_user_id = auth_get_current_user_id(); - } else { - $t_user_id = db_prepare_int( $p_user_id ); - } - - # If the user doesn't have access rights to stored queries, just return - if ( !access_has_project_level( config_get( 'stored_query_use_threshold' ) ) ) { - return $t_overall_query_arr; - } - - # Get the list of available queries. By sorting such that public queries are - # first, we can override any query that has the same name as a private query - # with that private one - $query = "SELECT * FROM $t_filters_table - WHERE (project_id='$t_project_id' - OR project_id='0') - AND name!='' - ORDER BY is_public DESC, name ASC"; - $result = db_query( $query ); - $query_count = db_num_rows( $result ); - - for ( $i = 0; $i < $query_count; $i++ ) { - $row = db_fetch_array( $result ); - if ( ( $row['user_id'] == $t_user_id ) || db_prepare_bool( $row['is_public'] ) ) { - $t_overall_query_arr[$row['id']] = $row['name']; - } - } - - $t_overall_query_arr = array_unique( $t_overall_query_arr ); - asort( $t_overall_query_arr ); - - return $t_overall_query_arr; - } - - /** - * 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 - * @return mixed - * @todo function needs to be abstracted - */ - function filter_ensure_valid_filter( $p_filter_arr ) { - # extend current filter to add information passed via POST - if ( !isset( $p_filter_arr['_version'] ) ) { - $p_filter_arr['_version'] = config_get( 'cookie_version' ); - } - $t_cookie_vers = (int) substr( $p_filter_arr['_version'], 1 ); - if ( substr( config_get( 'cookie_version' ), 1 ) > $t_cookie_vers ) { # if the version is old, update it - $p_filter_arr['_version'] = config_get( 'cookie_version' ); - } - if ( !isset( $p_filter_arr['_view_type'] ) ) { - $p_filter_arr['_view_type'] = gpc_get_string( 'view_type', 'simple' ); - } - if ( !isset( $p_filter_arr['per_page'] ) ) { - $p_filter_arr['per_page'] = gpc_get_int( 'per_page', config_get( 'default_limit_view' ) ); - } - if ( !isset( $p_filter_arr['highlight_changed'] ) ) { - $p_filter_arr['highlight_changed'] = config_get( 'default_show_changed' ); - } - if ( !isset( $p_filter_arr['sticky_issues'] ) ) { - $p_filter_arr['sticky_issues'] = config_get( 'show_sticky_issues' ); - } - if ( !isset( $p_filter_arr['sort'] ) ) { - $p_filter_arr['sort'] = "last_updated"; - } - if ( !isset( $p_filter_arr['dir'] ) ) { - $p_filter_arr['dir'] = "DESC"; - } - - if ( !isset( $p_filter_arr['platform'] ) ) { - $p_filter_arr['platform'] = array( 0 => META_FILTER_ANY ); - } - - if ( !isset( $p_filter_arr['os'] ) ) { - $p_filter_arr['os'] = array( 0 => META_FILTER_ANY ); - } - - if ( !isset( $p_filter_arr['os_build'] ) ) { - $p_filter_arr['os_build'] = array( 0 => META_FILTER_ANY ); - } - - if ( !isset( $p_filter_arr['project_id'] ) ) { - $p_filter_arr['project_id'] = array( 0 => META_FILTER_CURRENT ); - } - - if ( !isset( $p_filter_arr['start_month'] ) ) { - $p_filter_arr['start_month'] = gpc_get_string( 'start_month', date( 'm' ) ); - } - if ( !isset( $p_filter_arr['start_day'] ) ) { - $p_filter_arr['start_day'] = gpc_get_string( 'start_day', 1 ); - } - if ( !isset( $p_filter_arr['start_year'] ) ) { - $p_filter_arr['start_year'] = gpc_get_string( 'start_year', date( 'Y' ) ); - } - if ( !isset( $p_filter_arr['end_month'] ) ) { - $p_filter_arr['end_month'] = gpc_get_string( 'end_month', date( 'm' ) ); - } - if ( !isset( $p_filter_arr['end_day'] ) ) { - $p_filter_arr['end_day'] = gpc_get_string( 'end_day', date( 'd' ) ); - } - if ( !isset( $p_filter_arr['end_year'] ) ) { - $p_filter_arr['end_year'] = gpc_get_string( 'end_year', date( 'Y' ) ); - } - if ( !isset( $p_filter_arr['search'] ) ) { - $p_filter_arr['search'] = ''; - } - if ( !isset( $p_filter_arr['and_not_assigned'] ) ) { - $p_filter_arr['and_not_assigned'] = gpc_get_bool( 'and_not_assigned', false ); - } - if ( !isset( $p_filter_arr['do_filter_by_date'] ) ) { - $p_filter_arr['do_filter_by_date'] = gpc_get_bool( 'do_filter_by_date', false ); - } - if ( !isset( $p_filter_arr['view_state'] ) ) { - $p_filter_arr['view_state'] = gpc_get( 'view_state', '' ); - } else if ( ( $p_filter_arr['view_state'] == 'any' ) || ( $p_filter_arr['view_state'] == 0 ) ) { - $p_filter_arr['view_state'] = META_FILTER_ANY; - } - if ( !isset( $p_filter_arr['relationship_type'] ) ) { - $p_filter_arr['relationship_type'] = gpc_get_int( 'relationship_type', -1 ); - } - if ( !isset( $p_filter_arr['relationship_bug'] ) ) { - $p_filter_arr['relationship_bug'] = gpc_get_int( 'relationship_bug', 0 ); - } - if ( !isset( $p_filter_arr['target_version'] ) ) { - $p_filter_arr['target_version'] = META_FILTER_ANY; - } - if ( !isset( $p_filter_arr['tag_string'] ) ) { - $p_filter_arr['tag_string'] = gpc_get_string( 'tag_string', '' ); - } - if ( !isset( $p_filter_arr['tag_select'] ) ) { - $p_filter_arr['tag_select'] = gpc_get_string( 'tag_select', '' ); - } - - $t_custom_fields = custom_field_get_ids(); # @@@ (thraxisp) This should really be the linked ids, but we don't know the project - $f_custom_fields_data = array(); - if ( is_array( $t_custom_fields ) && ( sizeof( $t_custom_fields ) > 0 ) ) { - foreach( $t_custom_fields as $t_cfid ) { - if ( is_array( gpc_get( 'custom_field_' . $t_cfid, null ) ) ) { - $f_custom_fields_data[$t_cfid] = gpc_get_string_array( 'custom_field_' . $t_cfid, META_FILTER_ANY ); - } else { - $f_custom_fields_data[$t_cfid] = gpc_get_string( 'custom_field_' . $t_cfid, META_FILTER_ANY ); - $f_custom_fields_data[$t_cfid] = array( $f_custom_fields_data[$t_cfid] ); - } - } - } - - #validate sorting - $t_fields = helper_get_columns_to_view(); - $t_n_fields = count( $t_fields ); - for ( $i=0; $i < $t_n_fields; $i++ ) { - if ( isset( $t_fields[$i] ) && in_array( $t_fields[$i], array( 'selection', 'edit', 'bugnotes_count', 'attachment' ) ) ) { - unset( $t_fields[$i] ); - } - } - $t_sort_fields = split( ',', $p_filter_arr['sort'] ); - $t_dir_fields = split( ',', $p_filter_arr['dir'] ); - for ( $i=0; $i<2; $i++ ) { - if ( isset( $t_sort_fields[$i] ) ) { - $t_drop = false; - $t_sort = $t_sort_fields[$i]; - if ( strpos( $t_sort, 'custom_' ) === 0 ) { - if ( false === custom_field_get_id_from_name( substr( $t_sort, strlen( 'custom_' ) ) ) ) { - $t_drop = true; - } - } else { - if ( ! in_array( $t_sort, $t_fields ) ) { - $t_drop = true; - } - } - if ( ! in_array( $t_dir_fields[$i], array( "ASC", "DESC" ) ) ) { - $t_drop = true; - } - if ( $t_drop ) { - unset( $t_sort_fields[$i] ); - unset( $t_dir_fields[$i] ); - } - } - } - if ( count( $t_sort_fields ) > 0 ) { - $p_filter_arr['sort'] = implode( ',', $t_sort_fields ); - $p_filter_arr['dir'] = implode( ',', $t_dir_fields ); - } else { - $p_filter_arr['sort'] = "last_updated"; - $p_filter_arr['dir'] = "DESC"; - } - - # validate or filter junk from other fields - $t_multi_select_list = array( 'show_category' => 'string', - 'show_severity' => 'int', - 'show_status' => 'int', - 'reporter_id' => 'int', - 'handler_id' => 'int', - 'note_user_id' => 'int', - 'show_resolution' => 'int', - 'show_priority' => 'int', - 'show_build' => 'string', - 'show_version' => 'string', - 'hide_status' => 'int', - 'fixed_in_version' => 'string', - 'target_version' => 'string', - 'user_monitor' => 'int', - 'show_profile' => 'int' - ); - foreach( $t_multi_select_list as $t_multi_field_name => $t_multi_field_type ) { - if ( !isset( $p_filter_arr[$t_multi_field_name] ) ) { - if ( 'hide_status' == $t_multi_field_name ) { - $p_filter_arr[$t_multi_field_name] = array( config_get( 'hide_status_default' ) ); - } else if ( 'custom_fields' == $t_multi_field_name ) { - $p_filter_arr[$t_multi_field_name] = array( $f_custom_fields_data ); - } else { - $p_filter_arr[$t_multi_field_name] = array( META_FILTER_ANY ); - } - } else { - if ( !is_array( $p_filter_arr[$t_multi_field_name] ) ) { - $p_filter_arr[$t_multi_field_name] = array( $p_filter_arr[$t_multi_field_name] ); - } - $t_checked_array = array(); - foreach ( $p_filter_arr[$t_multi_field_name] as $t_filter_value ) { - $t_filter_value = stripslashes( $t_filter_value ); - if ( ( $t_filter_value === 'any' ) || ( $t_filter_value === '[any]' ) ) { - $t_filter_value = META_FILTER_ANY; - } - if ( ( $t_filter_value === 'none' ) || ( $t_filter_value === '[none]' ) ) { - $t_filter_value = META_FILTER_NONE; - } - if ( 'string' == $t_multi_field_type ) { - $t_checked_array[] = db_prepare_string( $t_filter_value ); - } else if ( 'int' == $t_multi_field_type ) { - $t_checked_array[] = db_prepare_int( $t_filter_value ); - } else if ( 'array' == $t_multi_field_type ) { - $t_checked_array[] = $t_filter_value; - } - } - $p_filter_arr[$t_multi_field_name] = $t_checked_array; - } - } - - if ( is_array( $t_custom_fields ) && ( sizeof( $t_custom_fields ) > 0 ) ) { - foreach( $t_custom_fields as $t_cfid ) { - if ( !isset( $p_filter_arr['custom_fields'][$t_cfid] ) ) { - $p_filter_arr['custom_fields'][$t_cfid] = array( META_FILTER_ANY ); - } else { - if ( !is_array( $p_filter_arr['custom_fields'][$t_cfid] ) ) { - $p_filter_arr['custom_fields'][$t_cfid] = array( $p_filter_arr['custom_fields'][$t_cfid] ); - } - $t_checked_array = array(); - foreach ( $p_filter_arr['custom_fields'][$t_cfid] as $t_filter_value ) { - $t_filter_value = stripslashes( $t_filter_value ); - if ( ( $t_filter_value === 'any' ) || ( $t_filter_value === '[any]' ) ) { - $t_filter_value = META_FILTER_ANY; - } - $t_checked_array[] = db_prepare_string( $t_filter_value ); - } - $p_filter_arr['custom_fields'][$t_cfid] = $t_checked_array; - } - } - } - # all of our filter values are now guaranteed to be there, and correct. - return $p_filter_arr; - } - - - /** * @internal The following functions each print out filter field inputs. * They are derived from view_filters_page.php * The functions follow a strict naming convention: @@ -4303,56 +4057,309 @@ return true; } + #========================================================================== + # FILTER DB FUNCTIONS + #========================================================================== /** - * Get the array fields specified by $p_filter_id - * using the cached row if it's available + * Add a filter to the database for the current user + * @param int $p_project_id + * @param bool $p_is_public + * @param string $p_name + * @param string $p_filter_string + * @return int + */ + function filter_db_set_for_current_user( $p_project_id, $p_is_public, $p_name, $p_filter_string ) { + $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' ); + + # check that the user can save non current filters (if required) + if ( ( ALL_PROJECTS <= $c_project_id ) && ( !is_blank( $p_name ) ) && + ( !access_has_project_level( config_get( 'stored_query_create_threshold' ) ) ) ) { + return -1; + } + + # ensure that we're not making this filter public if we're not allowed + if ( !access_has_project_level( config_get( 'stored_query_create_shared_threshold' ) ) ) { + $c_is_public = db_prepare_bool( false ); + } + + # Do I need to update or insert this value? + $query = "SELECT id FROM $t_filters_table + WHERE user_id=" . db_param(0) . " + AND project_id=" . db_param(1) . " + AND name=" . db_param(2); + $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_name ) ); + + if ( db_num_rows( $result ) > 0 ) { + $row = db_fetch_array( $result ); + + $query = "UPDATE $t_filters_table + SET is_public=" . db_param(0) . ", + filter_string=" . db_param(1) . " + WHERE id=" . db_param(2); + db_query_bound( $query, Array( $c_is_public, $p_filter_string, $row['id'] ) ); + + return $row['id']; + } else { + $query = "INSERT INTO $t_filters_table + ( user_id, project_id, is_public, name, filter_string ) + VALUES + ( " . db_param(0) . ", " . db_param(1) . ", " . db_param(2) . ", " . db_param(3) . ", " . db_param(4) . " )"; + db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_is_public, $c_name, $p_filter_string ) ); + + # Recall the query, we want the filter ID + $query = "SELECT id + FROM $t_filters_table + WHERE user_id=" . db_param(0) . " + AND project_id=" . db_param(1) . " + AND name=" . db_param(2); + $result = db_query_bound( $query, Array( $t_user_id, $c_project_id, $c_name ) ); + + if ( db_num_rows( $result ) > 0 ) { + $row = db_fetch_array( $result ); + return $row['id']; + } + + return -1; + } + } + + # We cache filter requests to reduce the number of SQL queries + $g_cache_filter_db_filters = array(); + + /** + * This function returns the filter string that is + * tied to the unique id parameter. If the user doesn't + * have permission to see this filter, the function + * returns null * @param int $p_filter_id - * @return mixed a filter row + * @param int $p_user_id + * @return mixed */ - function filter_get_row( $p_filter_id ) { - return filter_cache_row( $p_filter_id ); + function filter_db_get_filter( $p_filter_id, $p_user_id = null ) { + global $g_cache_filter_db_filters; + $t_filters_table = db_get_table( 'mantis_filters_table' ); + $c_filter_id = db_prepare_int( $p_filter_id ); + + if ( isset( $g_cache_filter_db_filters[$p_filter_id] ) ) { + if ( $g_cache_filter_db_filters[$p_filter_id] === false ) + return null; + return $g_cache_filter_db_filters[$p_filter_id]; + } + + if ( null === $p_user_id ) { + $t_user_id = auth_get_current_user_id(); + } else { + $t_user_id = $p_user_id; + } + + $query = "SELECT * + FROM $t_filters_table + WHERE id=" . db_param(0); + $result = db_query_bound( $query, Array( $c_filter_id ) ); + + if ( db_num_rows( $result ) > 0 ) { + $row = db_fetch_array( $result ); + + if ( $row['user_id'] != $t_user_id ) { + if ( $row['is_public'] != true ) { + return null; + } + } + + # check that the user has access to non current filters + if ( ( ALL_PROJECTS <= $row['project_id'] ) && ( !is_blank( $row['name'] ) ) && ( !access_has_project_level( config_get( 'stored_query_use_threshold', $row['project_id'], $t_user_id ) ) ) ) { + return null; + } + + $g_cache_filter_db_filters[$p_filter_id] = $row['filter_string']; + return $row['filter_string']; + } else { + $g_cache_filter_db_filters[$p_filter_id] = false; + return false; + } } /** - * Get the value of the filter field specified by filter id and field name + * @param int $p_project_id + * @param int $p_user_id + * @return int + */ + function filter_db_get_project_current( $p_project_id, $p_user_id = null ) { + $t_filters_table = db_get_table( 'mantis_filters_table' ); + $c_project_id = db_prepare_int( $p_project_id ); + $c_project_id = $c_project_id * -1; + + if ( null === $p_user_id ) { + $c_user_id = auth_get_current_user_id(); + } else { + $c_user_id = db_prepare_int( $p_user_id ); + } + + # we store current filters for each project with a special project index + $query = "SELECT * + FROM $t_filters_table + WHERE user_id=" . db_param(0) . " + AND project_id=" . db_param(1) . " + AND name=" . db_param(2); + $result = db_query_bound( $query, Array( $c_user_id, $c_project_id, '' ) ); + + if ( db_num_rows( $result ) > 0 ) { + $row = db_fetch_array( $result ); + return $row['id']; + } + + return null; + } + + /** + * Query for the filter name using the filter id * @param int $p_filter_id - * @param string $p_field_name * @return string */ - function filter_get_field( $p_filter_id, $p_field_name ) { - $row = filter_get_row( $p_filter_id ); + function filter_db_get_name( $p_filter_id ) { + $t_filters_table = db_get_table( 'mantis_filters_table' ); + $c_filter_id = db_prepare_int( $p_filter_id ); - if ( isset( $row[$p_field_name] ) ) { - return $row[$p_field_name]; - } else { - error_parameters( $p_field_name ); - trigger_error( ERROR_DB_FIELD_NOT_FOUND, WARNING ); - return ''; + $query = "SELECT * + FROM $t_filters_table + WHERE id=" . db_param(0); + $result = db_query_bound( $query, Array( $c_filter_id ) ); + + if ( db_num_rows( $result ) > 0 ) { + $row = db_fetch_array( $result ); + + if ( $row['user_id'] != auth_get_current_user_id() ) { + if ( $row['is_public'] != true ) { + return null; + } + } + + return $row['name']; } + + return null; } - + /** - * Checks if a filter value is "any". Supports both single value as well as multiple value - * fields (array). - * @param mixed $p_filter_value - The value which can be a simple value or an array. - * @return bool - * @todo remove this function and merge with filter_str_field_is_any + * Check if the current user has permissions to delete the stored query + * @param $p_filter_id + * @return bool */ - function _filter_is_any( $p_filter_value ) { - if ( ( META_FILTER_ANY == $p_filter_value ) && is_numeric( $p_filter_value ) ) { + function filter_db_can_delete_filter( $p_filter_id ) { + $t_filters_table = db_get_table( 'mantis_filters_table' ); + $c_filter_id = db_prepare_int( $p_filter_id ); + $t_user_id = auth_get_current_user_id(); + + # Administrators can delete any filter + if ( access_has_global_level( ADMINISTRATOR ) ) { return true; } - if ( count( $p_filter_value ) == 0 ) { + $query = "SELECT id + FROM $t_filters_table + WHERE id=" . db_param(0) . " + AND user_id=" . db_param(1) . " + AND project_id!=" . db_param(2); + + $result = db_query_bound( $query, Array( $c_filter_id, $t_user_id, -1 ) ); + + if ( db_num_rows( $result ) > 0 ) { return true; } - foreach( $p_filter_value as $t_value ) { - if ( ( META_FILTER_ANY == $t_value ) && ( is_numeric( $t_value ) ) ) { - return true; - } + return false; + } + + /** + * Delete the filter specified by $p_filter_id + * @param $p_filter_id + * @return bool + */ + function filter_db_delete_filter( $p_filter_id ) { + $t_filters_table = db_get_table( 'mantis_filters_table' ); + $c_filter_id = db_prepare_int( $p_filter_id ); + $t_user_id = auth_get_current_user_id(); + + if ( !filter_db_can_delete_filter( $c_filter_id ) ) { + return false; } + $query = "DELETE FROM $t_filters_table + WHERE id=" . db_param(0); + $result = db_query_bound( $query, Array( $c_filter_id ) ); + + if ( db_affected_rows( $result ) > 0 ) { + return true; + } + return false; } + + /** + * Delete all the unnamed filters + */ + function filter_db_delete_current_filters( ) { + $t_filters_table = db_get_table( 'mantis_filters_table' ); + $t_all_id = ALL_PROJECTS; + + $query = "DELETE FROM $t_filters_table + WHERE project_id<=" . db_param(0) ." + AND name=" . db_param(1); + $result = db_query_bound( $query, Array( $t_all_id, '' ) ); + } + + /** + * @param int $p_project_id + * @param int $p_user_id + * @return mixed + */ + function filter_db_get_available_queries( $p_project_id = null, $p_user_id = null ) { + $t_filters_table = db_get_table( 'mantis_filters_table' ); + $t_overall_query_arr = array(); + + if ( null === $p_project_id ) { + $t_project_id = helper_get_current_project(); + } else { + $t_project_id = db_prepare_int( $p_project_id ); + } + + if ( null === $p_user_id ) { + $t_user_id = auth_get_current_user_id(); + } else { + $t_user_id = db_prepare_int( $p_user_id ); + } + + # If the user doesn't have access rights to stored queries, just return + if ( !access_has_project_level( config_get( 'stored_query_use_threshold' ) ) ) { + return $t_overall_query_arr; + } + + # Get the list of available queries. By sorting such that public queries are + # first, we can override any query that has the same name as a private query + # with that private one + $query = "SELECT * FROM $t_filters_table + WHERE (project_id='$t_project_id' + OR project_id='0') + AND name!='' + ORDER BY is_public DESC, name ASC"; + $result = db_query( $query ); + $query_count = db_num_rows( $result ); + + for ( $i = 0; $i < $query_count; $i++ ) { + $row = db_fetch_array( $result ); + if ( ( $row['user_id'] == $t_user_id ) || db_prepare_bool( $row['is_public'] ) ) { + $t_overall_query_arr[$row['id']] = $row['name']; + } + } + + $t_overall_query_arr = array_unique( $t_overall_query_arr ); + asort( $t_overall_query_arr ); + + 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-06-12 04:51:03
|
Revision: 5357 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5357&view=rev Author: dwarrine5 Date: 2008-06-11 21:50:57 -0700 (Wed, 11 Jun 2008) Log Message: ----------- Delete duplicate function. consolidate all tests for META_FILTER_ANY to use the same function. Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-06-12 04:13:58 UTC (rev 5356) +++ trunk/mantisbt/core/filter_api.php 2008-06-12 04:50:57 UTC (rev 5357) @@ -44,7 +44,7 @@ function filter_get_url( $p_custom_filter ) { $t_query = array(); - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_PROJECT_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_PROJECT_ID] ) ) { $t_project_id = $p_custom_filter[FILTER_PROPERTY_PROJECT_ID]; if ( count( $t_project_id ) == 1 && $t_project_id[0] == META_FILTER_CURRENT ) { @@ -54,160 +54,160 @@ $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_PROJECT_ID, $t_project_id ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_FREE_TEXT] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_FREE_TEXT] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_FREE_TEXT, $p_custom_filter[FILTER_PROPERTY_FREE_TEXT] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_CATEGORY] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_CATEGORY] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_CATEGORY, $p_custom_filter[FILTER_PROPERTY_CATEGORY] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_REPORTER_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_REPORTER_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_REPORTER_ID, $p_custom_filter[FILTER_PROPERTY_REPORTER_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_STATUS_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_STATUS_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_STATUS_ID, $p_custom_filter[FILTER_PROPERTY_STATUS_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_MONITOR_USER_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_MONITOR_USER_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_MONITOR_USER_ID, $p_custom_filter[FILTER_PROPERTY_MONITOR_USER_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_HANDLER_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_HANDLER_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_HANDLER_ID, $p_custom_filter[FILTER_PROPERTY_HANDLER_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_NOTE_USER_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_NOTE_USER_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_NOTE_USER_ID, $p_custom_filter[FILTER_PROPERTY_NOTE_USER_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_SEVERITY_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_SEVERITY_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_SEVERITY_ID, $p_custom_filter[FILTER_PROPERTY_SEVERITY_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_RESOLUTION_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_RESOLUTION_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_RESOLUTION_ID, $p_custom_filter[FILTER_PROPERTY_RESOLUTION_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_PRIORITY_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_PRIORITY_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_PRIORITY_ID, $p_custom_filter[FILTER_PROPERTY_PRIORITY_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_VIEW_STATE_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_VIEW_STATE_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_VIEW_STATE_ID, $p_custom_filter[FILTER_PROPERTY_VIEW_STATE_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_SHOW_STICKY_ISSUES] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_SHOW_STICKY_ISSUES] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_SHOW_STICKY_ISSUES, $p_custom_filter[FILTER_PROPERTY_SHOW_STICKY_ISSUES] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_PRODUCT_VERSION] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_PRODUCT_VERSION] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_PRODUCT_VERSION, $p_custom_filter[FILTER_PROPERTY_PRODUCT_VERSION] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_PRODUCT_BUILD] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_PRODUCT_BUILD] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_PRODUCT_BUILD, $p_custom_filter[FILTER_PROPERTY_PRODUCT_BUILD] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_FIXED_IN_VERSION] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_FIXED_IN_VERSION] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_FIXED_IN_VERSION, $p_custom_filter[FILTER_PROPERTY_FIXED_IN_VERSION] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_TARGET_VERSION] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_TARGET_VERSION] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_TARGET_VERSION, $p_custom_filter[FILTER_PROPERTY_TARGET_VERSION] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_SORT_FIELD_NAME] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_SORT_FIELD_NAME] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_SORT_FIELD_NAME, $p_custom_filter[FILTER_PROPERTY_SORT_FIELD_NAME] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_SORT_DIRECTION] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_SORT_DIRECTION] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_SORT_DIRECTION, $p_custom_filter[FILTER_PROPERTY_SORT_DIRECTION] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_SEARCH_ISSUES_PER_PAGE] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_SEARCH_ISSUES_PER_PAGE] ) ) { if ( $p_custom_filter[FILTER_SEARCH_ISSUES_PER_PAGE] != config_get( 'default_limit_view' ) ) { $t_query[] = filter_encode_field_and_value( FILTER_PROPERTY_ISSUES_PER_PAGE, $p_custom_filter[FILTER_SEARCH_ISSUES_PER_PAGE] ); } } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_HIGHLIGHT_CHANGED] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_HIGHLIGHT_CHANGED] ) ) { if ( $p_custom_filter[FILTER_PROPERTY_HIGHLIGHT_CHANGED] != config_get( 'default_show_changed' ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_HIGHLIGHT_CHANGED, $p_custom_filter[FILTER_PROPERTY_HIGHLIGHT_CHANGED] ); } } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_HIDE_STATUS_ID] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_HIDE_STATUS_ID] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_HIDE_STATUS_ID, $p_custom_filter[FILTER_PROPERTY_HIDE_STATUS_ID] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_NOT_ASSIGNED] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_NOT_ASSIGNED] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_NOT_ASSIGNED, $p_custom_filter[FILTER_PROPERTY_NOT_ASSIGNED] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_FILTER_BY_DATE] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_FILTER_BY_DATE] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_FILTER_BY_DATE, $p_custom_filter[FILTER_PROPERTY_FILTER_BY_DATE] ); # The start and end dates are only applicable if filter by date is set. - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_START_DAY] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_START_DAY] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_START_DAY, $p_custom_filter[FILTER_PROPERTY_START_DAY] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_END_DAY] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_END_DAY] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_END_DAY, $p_custom_filter[FILTER_PROPERTY_END_DAY] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_START_MONTH] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_START_MONTH] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_START_MONTH, $p_custom_filter[FILTER_PROPERTY_START_MONTH] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_END_MONTH] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_END_MONTH] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_END_MONTH, $p_custom_filter[FILTER_PROPERTY_END_MONTH] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_START_YEAR] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_START_YEAR] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_START_YEAR, $p_custom_filter[FILTER_PROPERTY_START_YEAR] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_END_YEAR] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_END_YEAR] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_END_YEAR, $p_custom_filter[FILTER_PROPERTY_END_YEAR] ); } } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_TYPE] ) ) { + 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_SEARCH_RELATIONSHIP_TYPE, $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_TYPE] ); } } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_BUG] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_BUG] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_RELATIONSHIP_BUG, $p_custom_filter[FILTER_PROPERTY_RELATIONSHIP_BUG] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_PLATFORM] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_PLATFORM] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_PLATFORM, $p_custom_filter[FILTER_PROPERTY_PLATFORM] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_OS] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_OS] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_OS, $p_custom_filter[FILTER_PROPERTY_OS] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_OS_BUILD] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_OS_BUILD] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_OS_BUILD, $p_custom_filter[FILTER_PROPERTY_OS_BUILD] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_TAG_STRING] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_TAG_STRING] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_TAG_STRING, $p_custom_filter[FILTER_PROPERTY_TAG_STRING] ); } - if ( !filter_str_field_is_any( $p_custom_filter[FILTER_PROPERTY_TAG_SELECT] ) ) { + if ( !filter_field_is_any( $p_custom_filter[FILTER_PROPERTY_TAG_SELECT] ) ) { $t_query[] = filter_encode_field_and_value( FILTER_SEARCH_TAG_SELECT, $p_custom_filter[FILTER_PROPERTY_TAG_SELECT] ); } if ( isset( $p_custom_filter['custom_fields'] ) ) { foreach( $p_custom_filter['custom_fields'] as $t_custom_field_id => $t_custom_field_values ) { - if ( !filter_str_field_is_any( $t_custom_field_values ) ) { + if ( !filter_field_is_any( $t_custom_field_values ) ) { $t_query[] = filter_encode_field_and_value( 'custom_field_' . $t_custom_field_id, $t_custom_field_values ); } } @@ -256,7 +256,7 @@ * @param string $p_field_value - The value to check. * @return bool true for "ANY" values and false for others. "ANY" means filter criteria not active. */ - function filter_str_field_is_any( $p_field_value ) { + function filter_field_is_any( $p_field_value ) { if ( is_array( $p_field_value ) ) { if ( count( $p_field_value ) == 0 ) { return true; @@ -285,31 +285,6 @@ } /** - * Checks if a filter value is "any". Supports both single value as well as multiple value - * fields (array). - * @param mixed $p_filter_value - The value which can be a simple value or an array. - * @return bool - * @todo remove this function and merge with filter_str_field_is_any - */ - function _filter_is_any( $p_filter_value ) { - if ( ( META_FILTER_ANY == $p_filter_value ) && is_numeric( $p_filter_value ) ) { - return true; - } - - if ( count( $p_filter_value ) == 0 ) { - return true; - } - - foreach( $p_filter_value as $t_value ) { - if ( ( META_FILTER_ANY == $t_value ) && ( is_numeric( $t_value ) ) ) { - return true; - } - } - - return false; - } - - /** * 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 @@ -876,7 +851,7 @@ # view state $t_view_state = db_prepare_int( $t_filter['view_state'] ); - if ( ( $t_filter['view_state'] !== META_FILTER_ANY ) && ( !is_blank( $t_filter['view_state'] ) ) ) { + if ( !filter_field_is_any( $t_filter['view_state'] ) ) { $t_view_state_query = "($t_bug_table.view_state=" . db_param($t_where_param_count++) .")"; log_event( LOG_FILTERING, 'FILTERING: view_state query = ' . $t_view_state_query ); $t_where_params[] = $t_view_state; @@ -886,19 +861,7 @@ } # reporter - $t_any_found = false; - - foreach( $t_filter['reporter_id'] as $t_filter_member ) { - if ( ( META_FILTER_ANY === $t_filter_member ) || ( 0 === $t_filter_member ) ) { - $t_any_found = true; - } - } - - if ( count( $t_filter['reporter_id'] ) == 0 ) { - $t_any_found = true; - } - - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['reporter_id'] ) ) { $t_clauses = array(); foreach( $t_filter['reporter_id'] as $t_filter_member ) { @@ -937,18 +900,7 @@ } # handler - $t_any_found = false; - - foreach( $t_filter['handler_id'] as $t_filter_member ) { - if ( ( META_FILTER_ANY === $t_filter_member ) || ( 0 === $t_filter_member ) ) { - $t_any_found = true; - } - } - if ( count( $t_filter['handler_id'] ) == 0 ) { - $t_any_found = true; - } - - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['handler_id'] ) ) { $t_clauses = array(); foreach( $t_filter['handler_id'] as $t_filter_member ) { @@ -977,7 +929,7 @@ } # category - if ( !_filter_is_any( $t_filter['show_category'] ) ) { + if ( !filter_field_is_any( $t_filter['show_category'] ) ) { $t_clauses = array(); foreach( $t_filter['show_category'] as $t_filter_member ) { @@ -1001,16 +953,7 @@ } # severity - $t_any_found = false; - foreach( $t_filter['show_severity'] as $t_filter_member ) { - if ( ( META_FILTER_ANY == $t_filter_member ) || ( 0 === $t_filter_member ) ) { - $t_any_found = true; - } - } - if ( count( $t_filter['show_severity'] ) == 0 ) { - $t_any_found = true; - } - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['show_severity'] ) ) { $t_clauses = array(); foreach( $t_filter['show_severity'] as $t_filter_member ) { @@ -1047,10 +990,7 @@ $t_this_status = $t_filter['show_status'][0]; $t_this_hide_status = $t_filter['hide_status'][0]; - if ( ( META_FILTER_ANY == $t_this_status ) || ( is_blank( $t_this_status ) ) || ( 0 === $t_this_status ) ) { - $t_any_found = true; - } - if ( $t_any_found ) { + if ( filter_field_is_any( $t_this_status ) ) { foreach( $t_available_statuses as $t_this_available_status ) { if ( $t_this_hide_status > $t_this_available_status ) { $t_desired_statuses[] = $t_this_available_status; @@ -1061,16 +1001,13 @@ } } else { # advanced filtering: ignore the hide - $t_any_found = false; - foreach( $t_filter['show_status'] as $t_this_status ) { - $t_desired_statuses[] = $t_this_status; - if ( ( META_FILTER_ANY == $t_this_status ) || ( is_blank( $t_this_status ) ) || ( 0 === $t_this_status ) ) { - $t_any_found = true; + if ( filter_field_is_any( $t_filter['show_status'] ) ) { + $t_desired_statuses = array(); + } else { + foreach( $t_filter['show_status'] as $t_this_status ) { + $t_desired_statuses[] = $t_this_status; } } - if ( $t_any_found ) { - $t_desired_statuses = array(); - } } if ( count( $t_desired_statuses ) > 0 ) { @@ -1095,16 +1032,7 @@ } # resolution - $t_any_found = false; - foreach( $t_filter['show_resolution'] as $t_filter_member ) { - if ( META_FILTER_ANY == $t_filter_member ) { - $t_any_found = true; - } - } - if ( count( $t_filter['show_resolution'] ) == 0 ) { - $t_any_found = true; - } - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['show_resolution'] ) ) { $t_clauses = array(); foreach( $t_filter['show_resolution'] as $t_filter_member ) { @@ -1125,16 +1053,7 @@ } # priority - $t_any_found = false; - foreach( $t_filter['show_priority'] as $t_filter_member ) { - if ( ( META_FILTER_ANY == $t_filter_member ) || ( 0 === $t_filter_member ) ) { - $t_any_found = true; - } - } - if ( count( $t_filter['show_priority'] ) == 0 ) { - $t_any_found = true; - } - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['show_priority'] ) ) { $t_clauses = array(); foreach( $t_filter['show_priority'] as $t_filter_member ) { @@ -1155,16 +1074,7 @@ } # product build - $t_any_found = false; - foreach( $t_filter['show_build'] 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_build'] ) == 0 ) { - $t_any_found = true; - } - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['show_build'] ) ) { $t_clauses = array(); foreach( $t_filter['show_build'] as $t_filter_member ) { @@ -1190,7 +1100,7 @@ } # product version - if ( !_filter_is_any( $t_filter['show_version'] ) ) { + if ( !filter_field_is_any( $t_filter['show_version'] ) ) { $t_clauses = array(); foreach( $t_filter['show_version'] as $t_filter_member ) { @@ -1217,7 +1127,7 @@ } # profile - if ( !_filter_is_any( $t_filter['show_profile'] ) ) { + if ( !filter_field_is_any( $t_filter['show_profile'] ) ) { $t_clauses = array(); foreach( $t_filter['show_profile'] as $t_filter_member ) { @@ -1243,7 +1153,7 @@ } # platform - if ( !_filter_is_any( $t_filter['platform'] ) ) { + if ( !filter_field_is_any( $t_filter['platform'] ) ) { $t_clauses = array(); foreach( $t_filter['platform'] as $t_filter_member ) { @@ -1270,7 +1180,7 @@ } # os - if ( !_filter_is_any( $t_filter['os'] ) ) { + if ( !filter_field_is_any( $t_filter['os'] ) ) { $t_clauses = array(); foreach( $t_filter['os'] as $t_filter_member ) { @@ -1297,7 +1207,7 @@ } # os_build - if ( !_filter_is_any( $t_filter['os_build'] ) ) { + if ( !filter_field_is_any( $t_filter['os_build'] ) ) { $t_clauses = array(); foreach( $t_filter['os_build'] as $t_filter_member ) { @@ -1342,7 +1252,7 @@ } # fixed in version - if ( !_filter_is_any( $t_filter['fixed_in_version'] ) ) { + if ( !filter_field_is_any( $t_filter['fixed_in_version'] ) ) { $t_clauses = array(); foreach( $t_filter['fixed_in_version'] as $t_filter_member ) { @@ -1368,7 +1278,7 @@ } # target version - if ( !_filter_is_any( $t_filter['target_version'] ) ) { + if ( !filter_field_is_any( $t_filter['target_version'] ) ) { $t_clauses = array(); foreach( $t_filter['target_version'] as $t_filter_member ) { @@ -1396,16 +1306,7 @@ } # users monitoring a bug - $t_any_found = false; - foreach( $t_filter['user_monitor'] as $t_filter_member ) { - if ( ( META_FILTER_ANY == $t_filter_member ) || ( 0 === $t_filter_member ) ) { - $t_any_found = true; - } - } - if ( count( $t_filter['user_monitor'] ) == 0 ) { - $t_any_found = true; - } - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['user_monitor'] ) ) { $t_clauses = array(); $t_table_name = 'user_monitor'; array_push( $t_join_clauses, "LEFT JOIN $t_bug_monitor_table $t_table_name ON $t_table_name.bug_id = $t_bug_table.id" ); @@ -1513,16 +1414,7 @@ } # note user id - $t_any_found = false; - foreach( $t_filter['note_user_id'] as $t_filter_member ) { - if ( ( META_FILTER_ANY == $t_filter_member ) || ( 0 === $t_filter_member ) ) { - $t_any_found = true; - } - } - if ( count( $t_filter['note_user_id'] ) == 0 ) { - $t_any_found = true; - } - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['note_user_id'] ) ) { $t_bugnote_table_alias = 'mbnt'; $t_clauses = array(); array_push( $t_from_clauses, "$t_bugnote_table $t_bugnote_table_alias" ); @@ -1565,16 +1457,7 @@ $t_custom_where_clause = ''; # Ignore all custom filters that are not set, or that are set to '' or "any" - $t_any_found = false; - foreach( $t_filter['custom_fields'][$t_cfid] as $t_filter_member ) { - if ( ( META_FILTER_ANY == $t_filter_member ) && ( is_numeric( $t_filter_member ) ) ) { - $t_any_found = true; - } - } - if ( !isset( $t_filter['custom_fields'][$t_cfid] ) ) { - $t_any_found = true; - } - if ( !$t_any_found ) { + if ( !filter_field_is_any( $t_filter['custom_fields'][$t_cfid] ) ) { $t_def = custom_field_get_definition( $t_cfid ); $t_table_name = $t_custom_field_string_table . '_' . $t_cfid; # We need to filter each joined table or the result query will explode in dimensions @@ -2054,7 +1937,7 @@ ?> <input type="hidden" name="reporter_id[]" value="<?php echo $t_current;?>" /> <?php - if ( ( $t_current === 0 ) || ( is_blank( $t_current ) ) || ( META_FILTER_ANY == $t_current ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_MYSELF == $t_current ) { if ( access_has_project_level( config_get( 'report_bug_threshold' ) ) ) { @@ -2095,7 +1978,7 @@ <input type="hidden" name="user_monitor[]" value="<?php echo $t_current;?>" /> <?php $t_this_name = ''; - if ( ( $t_current === 0 ) || ( is_blank( $t_current ) ) || ( META_FILTER_ANY == $t_current ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_MYSELF == $t_current ) { if ( access_has_project_level( config_get( 'monitor_bug_threshold' ) ) ) { @@ -2136,7 +2019,7 @@ $t_this_name = ''; if ( META_FILTER_NONE == $t_current ) { $t_this_name = lang_get( 'none' ); - } else if ( ( $t_current === 0 ) || ( is_blank( $t_current ) ) || ( META_FILTER_ANY == $t_current ) ) { + } else if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_MYSELF == $t_current ) { if ( access_has_project_level( config_get( 'handle_bug_threshold' ) ) ) { @@ -2175,7 +2058,7 @@ <input type="hidden" name="show_category[]" value="<?php echo $t_current;?>" /> <?php $t_this_string = ''; - if ( is_blank( $t_current ) || $t_current === "0" || $t_current === META_FILTER_ANY ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else { $t_this_string = string_display( $t_current ); @@ -2208,7 +2091,7 @@ <input type="hidden" name="show_severity[]" value="<?php echo $t_current;?>" /> <?php $t_this_string = ''; - if ( ( $t_current === META_FILTER_ANY ) || ( is_blank( $t_current ) ) || ( $t_current == 0 ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else { $t_this_string = get_enum_element( 'severity', $t_current ); @@ -2241,7 +2124,7 @@ <input type="hidden" name="show_resolution[]" value="<?php echo $t_current;?>" /> <?php $t_this_string = ''; - if ( ( $t_current === META_FILTER_ANY ) || ( is_blank( $t_current ) ) || ( $t_current === 0 ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else { $t_this_string = get_enum_element( 'resolution', $t_current ); @@ -2274,7 +2157,7 @@ <input type="hidden" name="show_profile[]" value="<?php echo $t_current;?>" /> <?php $t_this_string = ''; - if ( ( $t_current === META_FILTER_ANY ) || ( is_blank( $t_current ) ) || ( $t_current === 0 ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else { $t_profile = profile_get_row_direct( $t_current ); @@ -2353,7 +2236,7 @@ <input type="hidden" name="show_status[]" value="<?php echo $t_current;?>" /> <?php $t_this_string = ''; - if ( ( $t_current === META_FILTER_ANY ) || ( is_blank( $t_current ) ) || ( $t_current === 0 ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else { $t_this_string = get_enum_element( 'status', $t_current ); @@ -2426,8 +2309,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 ) ) ) - || ( is_blank( $t_current ) ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { $t_this_string = lang_get( 'none' ); @@ -2464,8 +2346,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 ) ) ) - || ( is_blank( $t_current ) ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { $t_this_string = lang_get( 'none' ); @@ -2501,8 +2382,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 ) ) ) - || ( is_blank( $t_current ) ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { $t_this_string = lang_get( 'none' ); @@ -2540,16 +2420,16 @@ PRINT lang_get( 'any' ); } else { $t_first_flag = true; - foreach( $t_filter['show_priority'] as $t_current ) { - ?> - <input type="hidden" name="show_priority[]" 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( 'priority', $t_current ); - } + foreach( $t_filter['show_priority'] as $t_current ) { + ?> + <input type="hidden" name="show_priority[]" value="<?php echo $t_current;?>" /> + <?php + $t_this_string = ''; + if ( filter_field_is_any( $t_current ) ) { + $t_any_found = true; + } else { + $t_this_string = get_enum_element( 'priority', $t_current ); + } if ( $t_first_flag != true ) { $t_output = $t_output . '<br />'; } else { @@ -2579,8 +2459,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 ) ) ) - || ( is_blank( $t_current ) ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_NONE == $t_current ) { $t_this_string = lang_get( 'none' ); @@ -2917,8 +2796,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 ) ) ) - || ( is_blank( $t_current ) ) ) { + if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( ( META_FILTER_NONE == $t_current ) && ( is_numeric( $t_current ) ) ) { $t_this_string = lang_get( 'none' ); @@ -3004,7 +2882,7 @@ $t_this_name = ''; if ( META_FILTER_NONE == $t_current ) { $t_this_name = lang_get( 'none' ); - } else if ( ( $t_current === 0 ) || ( is_blank( $t_current ) ) || ( META_FILTER_ANY == $t_current ) ) { + } else if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; } else if ( META_FILTER_MYSELF == $t_current ) { if ( access_has_project_level( config_get( 'handle_bug_threshold' ) ) ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dwa...@us...> - 2008-06-12 18:49:19
|
Revision: 5360 http://mantisbt.svn.sourceforge.net/mantisbt/?rev=5360&view=rev Author: dwarrine5 Date: 2008-06-12 11:49:11 -0700 (Thu, 12 Jun 2008) Log Message: ----------- Merge branch 'trunk-filter_incremental' into local-trunk Modified Paths: -------------- trunk/mantisbt/core/filter_api.php Modified: trunk/mantisbt/core/filter_api.php =================================================================== --- trunk/mantisbt/core/filter_api.php 2008-06-12 17:55:28 UTC (rev 5359) +++ trunk/mantisbt/core/filter_api.php 2008-06-12 18:49:11 UTC (rev 5360) @@ -290,6 +290,41 @@ } /** + * Checks the supplied value to see if it is a NONE value. + * @param string $p_field_value - The value to check. + * @return bool true for "NONE" values and false for others. + * @todo is a check for these necessary? if ( ( $t_filter_value === 'none' ) || ( $t_filter_value === '[none]' ) ) { + */ + function filter_field_is_none( $p_field_value ) { + if ( is_array( $p_field_value ) ) { + foreach( $p_field_value as $t_value ) { + if ( ( META_FILTER_NONE == $t_value ) && ( is_numeric( $t_value ) ) ) { + return true; + } + } + } else { + if ( is_string( $p_field_value ) && is_blank( $p_field_value ) ) { + return false; + } + + if ( ( META_FILTER_NONE == $p_field_value ) && ( is_numeric( $p_field_value ) ) ) { + return true; + } + } + + return false; + } + + /** + * Checks the supplied value to see if it is a MYSELF value. + * @param string $p_field_value - The value to check. + * @return bool true for "MYSELF" values and false for others. + */ + function filter_field_is_myself( $p_field_value ) { + return ( META_FILTER_MYSELF == $p_field_value ? TRUE : FALSE ); + } + + /** * 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 @@ -870,11 +905,11 @@ $t_clauses = array(); foreach( $t_filter['reporter_id'] as $t_filter_member ) { - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, "0" ); } else { $c_reporter_id = db_prepare_int( $t_filter_member ); - if ( META_FILTER_MYSELF == $c_reporter_id ) { + if ( filter_field_is_myself( $c_reporter_id ) ) { array_push( $t_clauses, $c_user_id ); } else { array_push( $t_clauses, $c_reporter_id ); @@ -909,11 +944,11 @@ $t_clauses = array(); foreach( $t_filter['handler_id'] as $t_filter_member ) { - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, 0 ); } else { $c_handler_id = db_prepare_int( $t_filter_member ); - if ( META_FILTER_MYSELF == $c_handler_id ) { + if ( filter_field_is_myself( $c_handler_id ) ) { array_push( $t_clauses, $c_user_id ); } else { array_push( $t_clauses, $c_handler_id ); @@ -938,7 +973,7 @@ $t_clauses = array(); foreach( $t_filter['show_category'] as $t_filter_member ) { - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { } else { array_push( $t_clauses, $t_filter_member ); } @@ -1084,7 +1119,7 @@ foreach( $t_filter['show_build'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, '' ); } else { $c_show_build = db_prepare_string( $t_filter_member ); @@ -1110,7 +1145,7 @@ foreach( $t_filter['show_version'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, '' ); } else { $c_show_version = db_prepare_string( $t_filter_member ); @@ -1137,7 +1172,7 @@ foreach( $t_filter['show_profile'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, "0" ); } else { $c_show_profile = db_prepare_int( $t_filter_member ); @@ -1163,7 +1198,7 @@ foreach( $t_filter['platform'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, '' ); } else { $c_platform = db_prepare_string( $t_filter_member ); @@ -1190,7 +1225,7 @@ foreach( $t_filter['os'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, '' ); } else { $c_os = db_prepare_string( $t_filter_member ); @@ -1217,7 +1252,7 @@ foreach( $t_filter['os_build'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, '' ); } else { $c_os_build = db_prepare_string( $t_filter_member ); @@ -1262,7 +1297,7 @@ foreach( $t_filter['fixed_in_version'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, '' ); } else { $c_fixed_in_version = db_prepare_string( $t_filter_member ); @@ -1288,7 +1323,7 @@ foreach( $t_filter['target_version'] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { array_push( $t_clauses, '' ); } else { $c_target_version = db_prepare_string( $t_filter_member ); @@ -1318,7 +1353,7 @@ foreach( $t_filter['user_monitor'] as $t_filter_member ) { $c_user_monitor = db_prepare_int( $t_filter_member ); - if ( META_FILTER_MYSELF == $c_user_monitor ) { + if ( filter_field_is_myself( $c_user_monitor ) ) { array_push( $t_clauses, $c_user_id ); } else { array_push( $t_clauses, $c_user_monitor ); @@ -1427,7 +1462,7 @@ foreach( $t_filter['note_user_id'] as $t_filter_member ) { $c_note_user_id = db_prepare_int( $t_filter_member ); - if ( META_FILTER_MYSELF == $c_note_user_id ) { + if ( filter_field_is_myself( $c_note_user_id ) ) { array_push( $t_clauses, $c_user_id ); } else { array_push( $t_clauses, $c_note_user_id ); @@ -1499,7 +1534,7 @@ $t_filter_array = array(); foreach( $t_filter['custom_fields'][$t_cfid] as $t_filter_member ) { $t_filter_member = stripslashes( $t_filter_member ); - if ( META_FILTER_NONE == $t_filter_member ) { + if ( filter_field_is_none( $t_filter_member ) ) { # coerce filter value if selecting META_FILTER_NONE so it will match empty fields $t_filter_member = ''; # but also add those _not_ present in the custom field string table @@ -1944,13 +1979,13 @@ <?php if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_MYSELF == $t_current ) { + } else if ( filter_field_is_myself( $t_current ) ) { if ( access_has_project_level( config_get( 'report_bug_threshold' ) ) ) { $t_this_name = '[' . lang_get( 'myself' ) . ']'; } else { $t_any_found = true; } - } else if ( META_FILTER_NONE == $t_current ) { + } else if ( filter_field_is_none( $t_current ) ) { $t_this_name = lang_get( 'none' ); } else { $t_this_name = user_get_name( $t_current ); @@ -1985,7 +2020,7 @@ $t_this_name = ''; if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_MYSELF == $t_current ) { + } else if ( filter_field_is_myself( $t_current ) ) { if ( access_has_project_level( config_get( 'monitor_bug_threshold' ) ) ) { $t_this_name = '[' . lang_get( 'myself' ) . ']'; } else { @@ -2022,11 +2057,11 @@ <input type="hidden" name="handler_id[]" value="<?php echo $t_current;?>" /> <?php $t_this_name = ''; - if ( META_FILTER_NONE == $t_current ) { + if ( filter_field_is_none( $t_current ) ) { $t_this_name = lang_get( 'none' ); } else if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_MYSELF == $t_current ) { + } else if ( filter_field_is_myself( $t_current ) ) { if ( access_has_project_level( config_get( 'handle_bug_threshold' ) ) ) { $t_this_name = '[' . lang_get( 'myself' ) . ']'; } else { @@ -2275,7 +2310,7 @@ <input type="hidden" name="hide_status[]" value="<?php echo $t_current;?>" /> <?php $t_this_string = ''; - if ( ( $t_current == META_FILTER_NONE ) || ( is_blank( $t_current ) ) || ( $t_current === 0 ) ) { + if ( filter_field_is_none( $t_current ) ) { $t_none_found = true; } else { $t_this_string = get_enum_element( 'status', $t_current ); @@ -2316,7 +2351,7 @@ $t_this_string = ''; if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_NONE == $t_current ) { + } else if ( filter_field_is_none( $t_current ) ) { $t_this_string = lang_get( 'none' ); } else { $t_this_string = string_display( $t_current ); @@ -2353,7 +2388,7 @@ $t_this_string = ''; if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_NONE == $t_current ) { + } else if ( filter_field_is_none( $t_current ) ) { $t_this_string = lang_get( 'none' ); } else { $t_this_string = string_display( $t_current ); @@ -2389,7 +2424,7 @@ $t_this_string = ''; if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_NONE == $t_current ) { + } else if ( filter_field_is_none( $t_current ) ) { $t_this_string = lang_get( 'none' ); } else { $t_this_string = string_display( $t_current ); @@ -2466,7 +2501,7 @@ $t_this_string = ''; if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_NONE == $t_current ) { + } else if ( filter_field_is_none( $t_current ) ) { $t_this_string = lang_get( 'none' ); } else { $t_this_string = string_display( $t_current ); @@ -2803,7 +2838,7 @@ $t_this_string = ''; if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( ( META_FILTER_NONE == $t_current ) && ( is_numeric( $t_current ) ) ) { + } else if ( filter_field_is_none( $t_current ) ) { $t_this_string = lang_get( 'none' ); } else { $t_this_string = string_display( $t_current ); @@ -2885,11 +2920,11 @@ <input type="hidden" name="note_user_id[]" value="<?php echo $t_current;?>" /> <?php $t_this_name = ''; - if ( META_FILTER_NONE == $t_current ) { + if ( filter_field_is_none( $t_current ) ) { $t_this_name = lang_get( 'none' ); } else if ( filter_field_is_any( $t_current ) ) { $t_any_found = true; - } else if ( META_FILTER_MYSELF == $t_current ) { + } else if ( filter_field_is_myself( $t_current ) ) { if ( access_has_project_level( config_get( 'handle_bug_threshold' ) ) ) { $t_this_name = '[' . lang_get( 'myself' ) . ']'; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |