diff --git a/smp-angular/src/app/common/panels/document-edit-panel/document-edit-panel.component.html b/smp-angular/src/app/common/panels/document-edit-panel/document-edit-panel.component.html index d9011a7dd661dd94f04deee2c71728889e3e1dbf..e0b2fa6d735140a34878c7ddc1b435c772955042 100644 --- a/smp-angular/src/app/common/panels/document-edit-panel/document-edit-panel.component.html +++ b/smp-angular/src/app/common/panels/document-edit-panel/document-edit-panel.component.html @@ -226,7 +226,7 @@ <mat-icon>task</mat-icon> <span>{{ "document.edit.panel.button.version.review.request" | translate }}</span> </button> - <button mat-raised-button + <button mat-raised-button id="reviewApprove_id" *ngIf="!isNotReviewMode || hasReviewPermission" color="primary" matTooltip="{{ 'document.edit.panel.tooltip.version.review.approve' | translate }}" @@ -235,7 +235,7 @@ <mat-icon>check_circle</mat-icon> <span>{{ "document.edit.panel.button.version.review.approve" | translate }}</span> </button> - <button mat-raised-button + <button mat-raised-button id="reviewReject_id" color="primary" matTooltip="{{ 'document.edit.panel.tooltip.version.review.reject' | translate }}" [disabled]="reviewRejectButtonDisabled" diff --git a/smp-angular/src/app/common/utils/date-utils.ts b/smp-angular/src/app/common/utils/date-utils.ts index f1e51eee27983c9eb93b3dff9c011f54b78deb73..c067640c7dd2ffd61598753f1eb64e5280765afa 100644 --- a/smp-angular/src/app/common/utils/date-utils.ts +++ b/smp-angular/src/app/common/utils/date-utils.ts @@ -11,7 +11,7 @@ import StringUtils from "./string-utils"; * such as date comparison and date formatting */ export default class DateUtils { - public static readonly DEFAULT_LOCALE: string = 'fr'; + public static readonly DEFAULT_LOCALE: string = 'en'; // ISO8601 extended format + Z indicator for offset 0 (= XXXXX) example -08:00 // see details getLocaleDateTimeFormat/ getLocaleTimeFormat public static readonly DEFAULT_ZONE_FORMAT: string = ' ZZZZZ'; diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/UserROToDBUserConverter.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/UserROToDBUserConverter.java index bc1a77fd69157cc3c93818d7d602f735b4dd9b8b..1e9bcbe7e95913aa8186f30c7a42aaec9532a32a 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/UserROToDBUserConverter.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/conversion/UserROToDBUserConverter.java @@ -20,6 +20,7 @@ package eu.europa.ec.edelivery.smp.conversion; import eu.europa.ec.edelivery.smp.data.model.user.DBUser; import eu.europa.ec.edelivery.smp.data.ui.UserRO; +import eu.europa.ec.edelivery.smp.utils.LocaleUtils; import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; @@ -41,7 +42,7 @@ public class UserROToDBUserConverter implements Converter<UserRO, DBUser> { target.setEmailAddress(source.getEmailAddress()); target.setFullName(source.getFullName()); target.setSmpTheme(source.getSmpTheme()); - target.setSmpLocale(source.getSmpLocale()); + target.setSmpLocale(LocaleUtils.validateLocale(source.getSmpLocale())); return target; } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java index b91007e3c8ddc17a626e90e096ecaaa2ce2e3774..86dcb70941f73daba67212097451de602652159b 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIUserService.java @@ -42,6 +42,7 @@ import eu.europa.ec.edelivery.smp.services.ConfigurationService; import eu.europa.ec.edelivery.smp.services.CredentialService; import eu.europa.ec.edelivery.smp.services.CredentialsAlertService; import eu.europa.ec.edelivery.smp.utils.BCryptPasswordHash; +import eu.europa.ec.edelivery.smp.utils.LocaleUtils; import eu.europa.ec.edelivery.smp.utils.SessionSecurityUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.core.convert.ConversionService; @@ -313,7 +314,7 @@ public class UIUserService extends UIServiceBase<DBUser, UserRO> { dbUser.setEmailAddress(user.getEmailAddress()); dbUser.setFullName(user.getFullName()); dbUser.setSmpTheme(user.getSmpTheme()); - dbUser.setSmpLocale(user.getSmpLocale()); + dbUser.setSmpLocale(LocaleUtils.validateLocale(user.getSmpLocale())); } @Transactional @@ -330,7 +331,7 @@ public class UIUserService extends UIServiceBase<DBUser, UserRO> { dbUser.setEmailAddress(user.getEmailAddress()); dbUser.setFullName(user.getFullName()); dbUser.setSmpTheme(user.getSmpTheme()); - dbUser.setSmpLocale(user.getSmpLocale()); + dbUser.setSmpLocale(LocaleUtils.validateLocale(user.getSmpLocale())); alertService.alertUserUpdated(dbUser); } @@ -348,7 +349,7 @@ public class UIUserService extends UIServiceBase<DBUser, UserRO> { dbUser.setEmailAddress(user.getEmailAddress()); dbUser.setFullName(user.getFullName()); dbUser.setSmpTheme(user.getSmpTheme()); - dbUser.setSmpLocale(user.getSmpLocale()); + dbUser.setSmpLocale(LocaleUtils.validateLocale(user.getSmpLocale())); return createDBUser(dbUser); } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/LocaleUtils.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/LocaleUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..daa57691774717bc5d84380066096dfa82d0b428 --- /dev/null +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/utils/LocaleUtils.java @@ -0,0 +1,54 @@ +/*- + * #START_LICENSE# + * smp-server-library + * %% + * Copyright (C) 2017 - 2024 European Commission | eDelivery | DomiSMP + * %% + * Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * + * [PROJECT_HOME]\license\eupl-1.2\license.txt or https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Unless required by applicable law or agreed to in writing, software distributed under the Licence is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and limitations under the Licence. + * #END_LICENSE# + */ +package eu.europa.ec.edelivery.smp.utils; + +import eu.europa.ec.edelivery.smp.logging.SMPLogger; +import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory; +import org.apache.commons.lang3.StringUtils; + +/** + * Utility class for locale operations. + * @since 5.1 + * @author Joze RIHTARSIC + */ +public class LocaleUtils { + private static final SMPLogger LOG = SMPLoggerFactory.getLogger(LocaleUtils.class); + + private LocaleUtils() { + // private constructor + } + + + /** + * Method validates the locale string if locale is valid then returns "en" + * @param locale localeString to validate + * @return validated locale or "en" if locale is invalid + */ + public static String validateLocale(String locale) { + if (StringUtils.isBlank(locale)) { + LOG.warn("Locale is not set, defaulting to 'en'"); + return "en"; + } + if (locale.length() != 2) { + LOG.warn("Invalid locale [{}], defaulting to 'en'", locale); + return "en"; + } + return locale; + } +} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java index fe9c78cb265e40f9a7ee877bf3c141ecd119cba3..0554b235be31d6fdcdcbfcd673e6edf658fef111 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java @@ -404,7 +404,8 @@ class UIUserServiceIntegrationTest extends AbstractJunit5BaseDao { // changed assertEquals(userRO.getEmailAddress(), changedUser.getEmailAddress()); assertEquals(userRO.getSmpTheme(), changedUser.getSmpTheme()); - assertEquals(userRO.getSmpLocale(), changedUser.getSmpLocale()); + // if locale is not valid, it should be set to default + assertEquals("en", changedUser.getSmpLocale()); assertEquals(userRO.getEmailAddress(), changedUser.getEmailAddress()); assertEquals(userRO.getFullName(), changedUser.getFullName()); }