View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0010592 | mantisbt | api soap | public | 2009-06-15 11:01 | 2010-02-22 14:34 |
Reporter | cbasset | Assigned To | rombert | ||
Priority | normal | Severity | major | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 1.1.6 | ||||
Target Version | 1.2.0 | Fixed in Version | 1.2.0 | ||
Summary | 0010592: mc_enum functions doesn't take customization into account | ||||
Description | When a customization of mantis standard field possible values has been done by override of default global variable in file config_inc.php, soap api function that lists the possible values doesn't take customization into account. | ||||
Steps To Reproduce | in config_inc.php insert the following line: call the api method The result is standard mantis possible values not taking customization into account: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://futureware.biz/mantisconnect"> | ||||
Tags | No tags attached. | ||||
Attached Files | 0001-Fixes-10592-mc_enum-functions-doesn-t-take-customiza.patch (9,624 bytes)
From bbf23fa80ed72a8c7c710eaa1bffbc91c7e39427 Mon Sep 17 00:00:00 2001 From: Robert Munteanu <robert.munteanu@gmail.com> Date: Tue, 27 Oct 2009 18:36:58 +0200 Subject: [PATCH] Fixes #10592: mc_enum functions doesn't take customization into account The mc_enum_xxx functions have been updated to return the keys according to the customised values, while the names remain the translated ones. mc_enum_get has not been updated, as it returns a raw enum string, not an ObjectRefArray. Unfortunately no new tests can be added since we don't control the customisation settings on the mantis installation on a per-test basis. --- api/soap/mc_enum_api.php | 130 ++++++++++++++++++++++++++++++++++----------- 1 files changed, 98 insertions(+), 32 deletions(-) diff --git a/api/soap/mc_enum_api.php b/api/soap/mc_enum_api.php index 8d980ae..09c344d 100644 --- a/api/soap/mc_enum_api.php +++ b/api/soap/mc_enum_api.php @@ -14,7 +14,11 @@ * @return Array The requested enumeration */ function mc_enum_status( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'status' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'status' ); } /** @@ -25,7 +29,11 @@ function mc_enum_status( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_priorities( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'priority' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'priority' ); } /** @@ -36,7 +44,11 @@ function mc_enum_priorities( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_severities( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'severity' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'severity' ); } /** @@ -47,7 +59,11 @@ function mc_enum_severities( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_reproducibilities( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'reproducibility' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'reproducibility' ); } /** @@ -58,7 +74,11 @@ function mc_enum_reproducibilities( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_projections( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'projection' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'projection' ); } /** @@ -69,7 +89,11 @@ function mc_enum_projections( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_etas( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'eta' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'eta' ); } /** @@ -80,7 +104,11 @@ function mc_enum_etas( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_resolutions( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'resolution' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'resolution' ); } /** @@ -91,7 +119,11 @@ function mc_enum_resolutions( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_access_levels( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'access_levels' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'access_levels' ); } /** @@ -102,7 +134,11 @@ function mc_enum_access_levels( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_project_status( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'project_status' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'project_status' ); } /** @@ -113,7 +149,11 @@ function mc_enum_project_status( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_project_view_states( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'project_view_state' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'project_view_state' ); } /** @@ -124,7 +164,11 @@ function mc_enum_project_view_states( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_view_states( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'view_state' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'view_state' ); } /** @@ -135,7 +179,11 @@ function mc_enum_view_states( $p_username, $p_password ) { * @return Array The requested enumeration */ function mc_enum_custom_field_types( $p_username, $p_password ) { - return mci_explode_to_objectref( mc_enum_get( $p_username, $p_password, 'custom_field_type' ) ); + if ( !mci_validate_enum_access( $p_username, $p_password ) ) { + return new soap_fault( 'Client', '', 'Access Denied' ); + } + + return mci_explode_to_objectref( 'custom_field_type' ); } /** @@ -147,11 +195,7 @@ function mc_enum_custom_field_types( $p_username, $p_password ) { * @return string The requested enumeration. */ function mc_enum_get( $p_username, $p_password, $p_enumeration ) { - $t_user_id = mci_check_login( $p_username, $p_password ); - if( $t_user_id === false ) { - return new soap_fault( 'Client', '', 'Access Denied' ); - } - if( !mci_has_readonly_access( $t_user_id ) ) { + if ( ! mci_validate_enum_access($p_username, $p_password)) { return new soap_fault( 'Client', '', 'Access Denied' ); } $t_lang = mci_get_user_lang( $t_user_id ); @@ -159,32 +203,54 @@ function mc_enum_get( $p_username, $p_password, $p_enumeration ) { } /** - * Explode a configuration enumeration string into an array structure that can + * Explode a configuration enumeration name into an array structure that can * be safely converted into an ObjectRef structure. - * - * @param string $p_config_enum_string The string to convert + * + * @param string $p_enumeration_name The name of the enumeration to convert * @return Array The converted enumeration */ -function mci_explode_to_objectref( $p_config_enum_string ) { - if( get_class( (object) $p_config_enum_string ) == 'soap_fault' ) { - return $p_config_enum_string; - } +function mci_explode_to_objectref( $p_enumeration_name ) { - $t_result = array(); - - $t_assoc_array = MantisEnum::getAssocArrayIndexedByValues( $p_config_enum_string ); + $t_config_var_name = $p_enumeration_name . '_enum_string'; + $t_config_var_value = config_get( $t_config_var_name ); + $t_translated_values = lang_get( $t_config_var_name ); - foreach ( $t_assoc_array as $t_id => $t_name ) { + $t_enum_values = MantisEnum::getValues( $t_config_var_value ); + + $t_result = array(); + + foreach ( $t_enum_values as $t_key ) { + $t_translated = MantisEnum::getLocalizedLabel( $t_config_var_value, $t_translated_values, $t_key ); + $t_result[] = array( - 'id' => $t_id, - 'name' => $t_name, + 'id' => $t_key, + 'name' => $t_translated, ); } - return $t_result; } /** + * Validates that the user has access to the enumeration values + * + * @param string $p_username + * @param string $p_password + * @return boolean true if the user has access, false otherwise + */ +function mci_validate_enum_access($p_username, $p_password) { + + $t_user_id = mci_check_login( $p_username, $p_password ); + if( $t_user_id === false ) { + return false; + } + if( !mci_has_readonly_access( $t_user_id ) ) { + return false; + } + + return true; +} + +/** * Get a localized enumeration element. * * @param integer $p_enum_id The id of the enumeration element to retrieve. @@ -240,7 +306,7 @@ function mci_get_enum_id_from_objectref( $p_enum, $p_object_ref ) { } else { $t_default_id = config_get( 'default_bug_' . $p_enum, 0 ); if( $t_default_id == 0 ) { - $t_array = mci_explode_to_objectref( $t_enum ); + $t_array = mci_explode_to_objectref( $p_enum ); $t_id = (int) $t_array[0]['id']; } else { $t_id = $t_default_id; -- 1.6.4.2 | ||||
@vboctor : can you please review this patch for me? I'm not 100% sure I'm doing the right thing and whether it should land in master-1.2.x besides master. Thanks. |
|
The patch is incorrect. The patch should do the following:
This will return the localized labels while using the $g_xxxx_enum as the master copy. From memory, the MantisEnum class had a method to do that. We should make sure to utilize it here. |
|
@vboctor - I've updated the patch, please have a look. Thanks. |
|
Looks right to me. Thanks. |
|
Should this be resolved now? |
|
@vboctor: yes, forgot to resolve. Thanks. |
|
MantisBT: master-1.2.x 8faebae6 2009-10-27 12:36 Details Diff |
Fixes 0010592: mc_enum functions doesn't take customization into account The mc_enum_xxx functions have been updated to return the customised keys, while the names remain the translated ones. mc_enum_get has not been updated, as it returns a raw enum string, not an ObjectRefArray. Unfortunately no new tests can be added since we don't control the customisation settings on the mantis installation on a per-test basis. - split functionality from mc_issue_get - explode_bla_bla now takes a enumeration name - localized labels are properly used |
Affected Issues 0010592 |
|
mod - api/soap/mc_enum_api.php | Diff File | ||
MantisBT: master 834c8ed7 2009-10-27 12:36 Details Diff |
Fixes 0010592: mc_enum functions doesn't take customization into account The mc_enum_xxx functions have been updated to return the customised keys, while the names remain the translated ones. mc_enum_get has not been updated, as it returns a raw enum string, not an ObjectRefArray. Unfortunately no new tests can be added since we don't control the customisation settings on the mantis installation on a per-test basis. - split functionality from mc_issue_get - explode_bla_bla now takes a enumeration name - localized labels are properly used |
Affected Issues 0010592 |
|
mod - api/soap/mc_enum_api.php | Diff File |