Ejegg has uploaded a new change for review.
https://gerrit.wikimedia.org/r/227512
Change subject: Use country-specific field names in error messages
......................................................................
Use country-specific field names in error messages
I hate having to hardcode the list of country-specific fields, but
using WmfFramework::messageExists will give the wrong answer for the
country-specific fiscal number translations, which are often the same
abbreviation in multiple languages.
Bug: T106137
Change-Id: I0e133d64168abecab848cc09746180a47e364b95
---
M astropay_gateway/astropay.adapter.php
M gateway_common/DataValidator.php
M tests/Adapter/Astropay/AstropayTest.php
3 files changed, 40 insertions(+), 21 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DonationInterface
refs/changes/12/227512/1
diff --git a/astropay_gateway/astropay.adapter.php
b/astropay_gateway/astropay.adapter.php
index 18b5f63..19aad55 100644
--- a/astropay_gateway/astropay.adapter.php
+++ b/astropay_gateway/astropay.adapter.php
@@ -667,7 +667,8 @@
// Something wrong with the fiscal
number
$context = 'fiscal_number';
$language =
$this->dataObj->getVal_Escaped( 'language' );
- $message =
DataValidator::getErrorMessage( 'fiscal_number', 'calculated', $language );
+ $country =
$this->dataObj->getVal_Escaped( 'country' );
+ $message =
DataValidator::getErrorMessage( 'fiscal_number', 'calculated', $language,
$country );
}
}
$this->transaction_response->setErrors( array(
diff --git a/gateway_common/DataValidator.php b/gateway_common/DataValidator.php
index 12db4c0..0d3d576 100644
--- a/gateway_common/DataValidator.php
+++ b/gateway_common/DataValidator.php
@@ -12,6 +12,14 @@
* @author awight
*/
class DataValidator {
+
+ // because of the hacky way we test for translation existence in
getErrorMessage,
+ // we need to explicitly specify which fields we want to try to get
country-
+ // specific names for.
+ protected static $countrySpecificFields = array(
+ 'fiscal_number',
+ );
+
/**
* getErrorToken, intended to be used by classes that exist relatively
close
* to the form classes, returns the error token (defined on the forms)
that
@@ -92,9 +100,10 @@
* 'calculated' - fields that failed some kind of multiple-field
data
* integrity check.
* @param string $language MediaWiki language code
+ * @param string $country ISO country code
* @return String
*/
- public static function getErrorMessage( $field, $type, $language ){
+ public static function getErrorMessage( $field, $type, $language,
$country = null ){
//this is gonna get ugly up in here.
//error_log( __FUNCTION__ . " $field, $type, $value " );
@@ -109,16 +118,24 @@
//postal code is a weird one. More L10n than I18n.
//'donate_interface-error-msg-postal' => 'postal code',
- $error_message_field_string = 'donate_interface-error-msg-' .
$message_field;
+ $error_message_field_key = 'donate_interface-error-msg-' .
$message_field;
+
+ if ( $country !== null && in_array( $message_field,
self::$countrySpecificFields ) ) {
+ $translated_field_name =
MessageUtils::getCountrySpecificMessage( $error_message_field_key, $country,
$language );
+ } else if ( MessageUtils::messageExists(
$error_message_field_key, $language ) ) {
+ $translated_field_name = WmfFramework::formatMessage(
$error_message_field_key );
+ } else {
+ $translated_field_name = false;
+ }
//Empty messages should get:
//'donate_interface-error-msg' => 'Please enter your $1';
//If they have no defined error message, give 'em the default.
if ($type === 'not_empty'){
- if ( $message_field != 'general' &&
MessageUtils::messageExists( $error_message_field_string, $language ) ) {
+ if ( $message_field != 'general' &&
$translated_field_name ) {
return WmfFramework::formatMessage(
'donate_interface-error-msg',
- WmfFramework::formatMessage(
$error_message_field_string )
+ $translated_field_name
);
}
}
@@ -134,28 +151,24 @@
$suffix = 'invalid-amount';
break;
}
-
- $error_message_string = 'donate_interface-error-msg-' .
$suffix;
-
+
+ $error_key_calc = 'donate_interface-error-msg-' .
$suffix . '-calc';
+
if ( $type === 'calculated'){
- //try for the special "calculated" error
message.
- if ( MessageUtils::messageExists(
$error_message_string . '-calc', $language ) ) {
- return
WmfFramework::formatMessage($error_message_string . '-calc');
+ // try for the special "calculated" error
message.
+ // Note: currently only used for country
+ if ( MessageUtils::messageExists(
$error_key_calc, $language ) ) {
+ return WmfFramework::formatMessage(
$error_key_calc );
}
}
-
-// //try for the "invalid whatever" error message.
-// if ( MessageUtils::messageExists(
$error_message_string, $language ) ) {
-// return WmfFramework::formatMessage(
$error_message_string );
-// }
-
+
//try for new more specific default correction message
if ( $message_field != 'general'
- && MessageUtils::messageExists(
$error_message_field_string, $language )
+ && $translated_field_name
&& MessageUtils::messageExists(
'donate_interface-error-msg-field-correction', $language ) ) {
return WmfFramework::formatMessage(
'donate_interface-error-msg-field-correction',
- WmfFramework::formatMessage(
$error_message_field_string )
+ $translated_field_name
);
}
}
@@ -256,6 +269,11 @@
$errors = array();
$language = DataValidator::guessLanguage( $data );
+ if ( empty( $data['country'] ) ) {
+ $country = null;
+ } else {
+ $country = $data['country'];
+ }
foreach ( $validations as $phase => $fields ) {
foreach ( $fields as $key => $custom ) {
@@ -314,7 +332,7 @@
$results[$phase][$field] = $result;
if ( $result === false ) {
// We did the check, and it failed.
- $errors[$errorToken] =
self::getErrorMessage( $field, $phase, $language );
+ $errors[$errorToken] =
self::getErrorMessage( $field, $phase, $language, $country );
}
}
}
diff --git a/tests/Adapter/Astropay/AstropayTest.php
b/tests/Adapter/Astropay/AstropayTest.php
index 4561132..0866ed5 100644
--- a/tests/Adapter/Astropay/AstropayTest.php
+++ b/tests/Adapter/Astropay/AstropayTest.php
@@ -240,7 +240,7 @@
$this->assertTrue( $result->getRefresh(), 'PaymentResult should
be a refresh' );
$errors = $gateway->getTransactionResponse()->getErrors();
- $expectedMessage = DataValidator::getErrorMessage(
'fiscal_number', 'calculated', $init['language'] );
+ $expectedMessage = DataValidator::getErrorMessage(
'fiscal_number', 'calculated', $init['language'], $init['country'] );
$this->assertEquals( $expectedMessage,
$errors['internal-0000']['message'] );
$this->assertEquals( 'fiscal_number',
$errors['internal-0000']['context'] );
}
--
To view, visit https://gerrit.wikimedia.org/r/227512
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0e133d64168abecab848cc09746180a47e364b95
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/DonationInterface
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits