From: <gi...@ma...> - 2009-02-09 04:12:13
|
The branch, master has been updated via 5c3b15efb6402f28ce0f78ad4e3e726aa161e9ee (commit) via 3af855558f5abd668a7521649dd5bac36f5fb6e1 (commit) from b5414ad235affe4f92891b25ee1fac7b3c1d191d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5c3b15efb6402f28ce0f78ad4e3e726aa161e9ee Author: Glenn Henshaw <thr...@lo...> Date: Sun Feb 8 23:05:18 2009 -0500 fix display of CF lists in history/email commit 3af855558f5abd668a7521649dd5bac36f5fb6e1 Author: Glenn Henshaw <thr...@lo...> Date: Sun Feb 8 21:06:58 2009 -0500 fix for bug #9606: Custom fields not enforced. ----------------------------------------------------------------------- Summary of changes: core/cfdefs/cfdef_standard.php | 6 ++- core/custom_field_api.php | 92 +++++++++++++++++----------------------- lang/strings_english.txt | 2 +- 3 files changed, 44 insertions(+), 56 deletions(-) ----------------------------------------------------------------------- commit 5c3b15efb6402f28ce0f78ad4e3e726aa161e9ee Author: Glenn Henshaw <thr...@lo...> Date: Sun Feb 8 23:05:18 2009 -0500 fix display of CF lists in history/email diff --git a/core/cfdefs/cfdef_standard.php b/core/cfdefs/cfdef_standard.php index bac6303..0d0aca5 100644 --- a/core/cfdefs/cfdef_standard.php +++ b/core/cfdefs/cfdef_standard.php @@ -164,7 +164,7 @@ function cfdef_prepare_list_database_to_value($p_value) { function cfdef_prepare_list_value_for_email($p_value) { // strip start and end markers before converting markers to commas - return str_replace( '|', ', ', substr( $p_value, 1, -1 ) ); + return str_replace( '|', ', ', substr( str_replace( '||', '|', '|' . $p_value . '|' ), 1, -1 ) ); } function cfdef_prepare_email_value_for_email($p_value) { commit 3af855558f5abd668a7521649dd5bac36f5fb6e1 Author: Glenn Henshaw <thr...@lo...> Date: Sun Feb 8 21:06:58 2009 -0500 fix for bug #9606: Custom fields not enforced. diff --git a/core/cfdefs/cfdef_standard.php b/core/cfdefs/cfdef_standard.php index df780dc..bac6303 100644 --- a/core/cfdefs/cfdef_standard.php +++ b/core/cfdefs/cfdef_standard.php @@ -163,7 +163,8 @@ function cfdef_prepare_list_database_to_value($p_value) { } function cfdef_prepare_list_value_for_email($p_value) { - return str_replace( '|', ', ', $p_value ); + // strip start and end markers before converting markers to commas + return str_replace( '|', ', ', substr( $p_value, 1, -1 ) ); } function cfdef_prepare_email_value_for_email($p_value) { @@ -209,7 +210,8 @@ function cfdef_prepare_date_default( $p_value ) { #string_custom_field_value function cfdef_prepare_list_value($p_value) { - return str_replace( '|', ', ', $p_value ); + // strip start and end markers before converting markers to commas + return str_replace( '|', ', ', substr( $p_value, 1, -1 ) ); } function cfdef_prepare_email_value($p_value) { diff --git a/core/custom_field_api.php b/core/custom_field_api.php index 6da681f..1ef7ae9 100644 --- a/core/custom_field_api.php +++ b/core/custom_field_api.php @@ -1160,22 +1160,40 @@ function custom_field_validate( $p_field_id, $p_value ) { $t_length_max = $row['length_max']; $t_default_value = $row['default_value']; - # check for valid value - if( !is_blank( $t_valid_regexp ) ) { - if( !ereg( $t_valid_regexp, $p_value ) ) { - return false; - } - } - - if( strlen( $p_value ) < $t_length_min ) { - return false; - } - - if(( 0 != $t_length_max ) && ( strlen( $p_value ) > $t_length_max ) ) { - return false; - } - - return true; + $t_valid = true; + $t_length = strlen( $p_value ); + switch ($t_type) { + case CUSTOM_FIELD_TYPE_STRING: + // validate against regexp + if( !is_blank( $t_valid_regexp ) && !is_blank( $p_value ) ) { + $t_valid &= ereg( $t_valid_regexp, $p_value ); + } + // check string length + $t_valid &= ( 0 == $t_length_min ) || ( $t_length > $t_length_min ); + $t_valid &= ( 0 == $t_length_max ) || ( $t_length <= $t_length_max ); + break; + case CUSTOM_FIELD_TYPE_NUMERIC: + $t_valid &= ( $t_length == 0 ) || is_numeric( $p_value ); + break; + case CUSTOM_FIELD_TYPE_FLOAT: + // handle both number and number with decimal + $t_valid &= ( $t_length == 0 ) || is_numeric( $p_value ) || is_float( $p_value ); + break; + case CUSTOM_FIELD_TYPE_DATE: + // gpc_get_cf for date returns the value from strftime + // either false (php >= 5.1) or -1 (php < 5.1) for failure + $t_valid &= ( $p_value !== false ) && ( $p_value > 0 ); + break; + case CUSTOM_FIELD_TYPE_ENUM: + case CUSTOM_FIELD_TYPE_EMAIL: + case CUSTOM_FIELD_TYPE_CHECKBOX: + case CUSTOM_FIELD_TYPE_LIST: + case CUSTOM_FIELD_TYPE_MULTILIST: + case CUSTOM_FIELD_TYPE_RADIO: + default: + break; + } + return $t_valid; } /** @@ -1302,47 +1320,15 @@ function custom_field_default_to_value( $p_value, $p_type ) { function custom_field_set_value( $p_field_id, $p_bug_id, $p_value ) { $c_field_id = db_prepare_int( $p_field_id ); $c_bug_id = db_prepare_int( $p_bug_id ); + $c_value = db_prepare_string( $p_value ); custom_field_ensure_exists( $p_field_id ); - $t_custom_field_table = db_get_table( 'mantis_custom_field_table' ); - $query = "SELECT name, type, possible_values, valid_regexp, - access_level_rw, length_min, length_max, default_value - FROM $t_custom_field_table - WHERE id='$c_field_id'"; - $result = db_query( $query ); - $row = db_fetch_array( $result ); - - $t_name = $row['name']; - $t_type = $row['type']; - $t_possible_values = $row['possible_values']; - $t_valid_regexp = $row['valid_regexp']; - $t_access_level_rw = $row['access_level_rw']; - $t_length_min = $row['length_min']; - $t_length_max = $row['length_max']; - $t_default_value = $row['default_value']; - - $c_value = db_prepare_string( custom_field_value_to_database( $p_value, $t_type ) ); - - # check for valid value - if( !is_blank( $t_valid_regexp ) ) { - if( !ereg( $t_valid_regexp, $p_value ) ) { - return false; - } - } - - if( strlen( $p_value ) < $t_length_min ) { - return false; - } - - if(( 0 != $t_length_max ) && ( strlen( $p_value ) > $t_length_max ) ) { + if (! custom_field_validate( $p_field_id, $p_value ) ) return false; - } - - if( !custom_field_has_write_access( $p_field_id, $p_bug_id, auth_get_current_user_id() ) ) { - return false; - } - + + $t_name = custom_field_get_field( $p_field_id, 'name' ); + $t_type = custom_field_get_field( $p_field_id, 'type' ); $t_custom_field_string_table = db_get_table( 'mantis_custom_field_string_table' ); # do I need to update or insert this value? diff --git a/lang/strings_english.txt b/lang/strings_english.txt index aaab06c..3601d0f 100644 --- a/lang/strings_english.txt +++ b/lang/strings_english.txt @@ -255,7 +255,7 @@ $MANTIS_ERROR[ERROR_BUG_DUPLICATE_SELF] = 'You cannot set an issue as a duplicat $MANTIS_ERROR[ERROR_CUSTOM_FIELD_NOT_FOUND] = 'Custom field not found.'; $MANTIS_ERROR[ERROR_CUSTOM_FIELD_NAME_NOT_UNIQUE] = 'This is a duplicate name.'; $MANTIS_ERROR[ERROR_CUSTOM_FIELD_IN_USE] = 'At least one project still uses this field.'; -$MANTIS_ERROR[ERROR_CUSTOM_FIELD_INVALID_VALUE] = 'Invalid value for %1$s.'; +$MANTIS_ERROR[ERROR_CUSTOM_FIELD_INVALID_VALUE] = 'Invalid value for field "%1$s".'; $MANTIS_ERROR[ERROR_CUSTOM_FIELD_INVALID_DEFINITION] = 'Invalid custom field definition.'; $MANTIS_ERROR[ERROR_LDAP_AUTH_FAILED] = 'LDAP Authentication Failed.'; $MANTIS_ERROR[ERROR_LDAP_SERVER_CONNECT_FAILED] = 'LDAP Server Connection Failed.'; ----------------------------------------------------------------------- -- Mantis Bug Tracker |