diff --git a/webapp/components/user_settings/user_settings_general.jsx b/webapp/components/user_settings/user_settings_general.jsx index 87cce9dc0f..eddbc1efe3 100644 --- a/webapp/components/user_settings/user_settings_general.jsx +++ b/webapp/components/user_settings/user_settings_general.jsx @@ -14,7 +14,7 @@ import Constants from 'utils/constants.jsx'; import * as AsyncClient from 'utils/async_client.jsx'; import * as Utils from 'utils/utils.jsx'; -import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedDate} from 'react-intl'; +import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedHTMLMessage, FormattedDate} from 'react-intl'; const holders = defineMessages({ usernameReserved: { @@ -37,18 +37,6 @@ const holders = defineMessages({ id: 'user.settings.general.checkEmail', defaultMessage: 'Check your email at {email} to verify the address.' }, - newAddress: { - id: 'user.settings.general.newAddress', - defaultMessage: 'New Address: {email}
Check your email to verify the above address.' - }, - checkEmailNoAddress: { - id: 'user.settings.general.checkEmailNoAddress', - defaultMessage: 'Check your email to verify your new address' - }, - loginGitlab: { - id: 'user.settings.general.loginGitlab', - defaultMessage: 'Log in done through GitLab' - }, validImage: { id: 'user.settings.general.validImage', defaultMessage: 'Only JPG or PNG images may be used for profile pictures' @@ -73,10 +61,6 @@ const holders = defineMessages({ id: 'user.settings.general.username', defaultMessage: 'Username' }, - email: { - id: 'user.settings.general.email', - defaultMessage: 'Email' - }, profilePicture: { id: 'user.settings.general.profilePicture', defaultMessage: 'Profile Picture' @@ -299,9 +283,224 @@ class UserSettingsGeneralTab extends React.Component { return {username: user.username, firstName: user.first_name, lastName: user.last_name, nickname: user.nickname, email: user.email, confirmEmail: '', picture: null, loadingPicture: false, emailChangeInProgress: false}; } + createEmailSection() { + let emailSection; + + if (this.props.activeSection === 'email') { + const emailEnabled = global.window.mm_config.SendEmailNotifications === 'true'; + const emailVerificationEnabled = global.window.mm_config.RequireEmailVerification === 'true'; + const inputs = []; + + let helpText = ( + + ); + + if (!emailEnabled) { + helpText = ( +
+ +
+ ); + } else if (!emailVerificationEnabled) { + helpText = ( + + ); + } else if (this.state.emailChangeInProgress) { + const newEmail = UserStore.getCurrentUser().email; + if (newEmail) { + helpText = ( + + ); + } + } + + let submit = null; + + if (this.props.user.auth_service === '') { + inputs.push( +
+
+ +
+ +
+
+
+ ); + + inputs.push( +
+
+ +
+ +
+
+ {helpText} +
+ ); + + submit = this.submitEmail; + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + inputs.push( +
+
+ +
+ {helpText} +
+ ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + inputs.push( +
+
+ +
+ {helpText} +
+ ); + } + + emailSection = ( + + } + inputs={inputs} + submit={submit} + server_error={this.state.serverError} + client_error={this.state.emailError} + updateSection={(e) => { + this.updateSection(''); + e.preventDefault(); + }} + /> + ); + } else { + let describe = ''; + if (this.props.user.auth_service === '') { + if (this.state.emailChangeInProgress) { + const newEmail = UserStore.getCurrentUser().email; + if (newEmail) { + describe = ( + + ); + } else { + describe = ( + + ); + } + } else { + describe = UserStore.getCurrentUser().email; + } + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + describe = ( + + ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + describe = ( + + ); + } + + emailSection = ( + + } + describe={describe} + updateSection={() => { + this.updateSection('email'); + }} + /> + ); + } + + return emailSection; + } render() { const user = this.props.user; - const {formatMessage, formatHTMLMessage} = this.props.intl; + const {formatMessage} = this.props.intl; let clientError = null; if (this.state.clientError) { @@ -311,10 +510,6 @@ class UserSettingsGeneralTab extends React.Component { if (this.state.serverError) { serverError = this.state.serverError; } - let emailError = null; - if (this.state.emailError) { - emailError = this.state.emailError; - } let nameSection; const inputs = []; @@ -409,20 +604,27 @@ class UserSettingsGeneralTab extends React.Component { /> ); } else { - let fullName = ''; + let describe = ''; if (user.first_name && user.last_name) { - fullName = user.first_name + ' ' + user.last_name; + describe = user.first_name + ' ' + user.last_name; } else if (user.first_name) { - fullName = user.first_name; + describe = user.first_name; } else if (user.last_name) { - fullName = user.last_name; + describe = user.last_name; + } else { + describe = ( + + ); } nameSection = ( { this.updateSection('name'); }} @@ -483,10 +685,22 @@ class UserSettingsGeneralTab extends React.Component { /> ); } else { + let describe = ''; + if (user.nickname) { + describe = user.nickname; + } else { + describe = ( + + ); + } + nicknameSection = ( { this.updateSection('nickname'); }} @@ -559,152 +773,7 @@ class UserSettingsGeneralTab extends React.Component { ); } - let emailSection; - if (this.props.activeSection === 'email') { - const emailEnabled = global.window.mm_config.SendEmailNotifications === 'true'; - const emailVerificationEnabled = global.window.mm_config.RequireEmailVerification === 'true'; - let helpText = ( - - ); - - if (!emailEnabled) { - helpText = ( -
- -
- ); - } else if (!emailVerificationEnabled) { - helpText = ( - - ); - } else if (this.state.emailChangeInProgress) { - const newEmail = UserStore.getCurrentUser().email; - if (newEmail) { - helpText = ( - - ); - } - } - - let submit = null; - - if (this.props.user.auth_service === '') { - inputs.push( -
-
- -
- -
-
-
- ); - - inputs.push( -
-
- -
- -
-
- {helpText} -
- ); - - submit = this.submitEmail; - } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { - inputs.push( -
-
- -
- {helpText} -
- ); - } - - emailSection = ( - { - this.updateSection(''); - e.preventDefault(); - }} - /> - ); - } else { - let describe = ''; - if (this.props.user.auth_service === '') { - if (this.state.emailChangeInProgress) { - const newEmail = UserStore.getCurrentUser().email; - if (newEmail) { - describe = formatHTMLMessage(holders.newAddress, {email: newEmail}); - } else { - describe = formatMessage(holders.checkEmailNoAddress); - } - } else { - describe = UserStore.getCurrentUser().email; - } - } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { - describe = formatMessage(holders.loginGitlab); - } - - emailSection = ( - { - this.updateSection('email'); - }} - /> - ); - } + const emailSection = this.createEmailSection(); let pictureSection; if (this.props.activeSection === 'picture') { diff --git a/webapp/components/user_settings/user_settings_security.jsx b/webapp/components/user_settings/user_settings_security.jsx index b34fa8582b..f24beb6b3d 100644 --- a/webapp/components/user_settings/user_settings_security.jsx +++ b/webapp/components/user_settings/user_settings_security.jsx @@ -30,14 +30,6 @@ const holders = defineMessages({ id: 'user.settings.security.passwordMatchError', defaultMessage: 'The new passwords you entered do not match' }, - password: { - id: 'user.settings.security.password', - defaultMessage: 'Password' - }, - lastUpdated: { - id: 'user.settings.security.lastUpdated', - defaultMessage: 'Last updated {date} at {time}' - }, method: { id: 'user.settings.security.method', defaultMessage: 'Sign-in Method' @@ -131,74 +123,106 @@ class SecurityTab extends React.Component { } createPasswordSection() { let updateSectionStatus; - const {formatMessage} = this.props.intl; - if (this.props.activeSection === 'password' && this.props.user.auth_service === '') { + if (this.props.activeSection === 'password') { const inputs = []; + let submit; - inputs.push( -
- -
- + if (this.props.user.auth_service === '') { + submit = this.submitPassword; + + inputs.push( +
+ +
+ +
-
- ); - inputs.push( -
- -
- + ); + inputs.push( +
+ +
+ +
-
- ); - inputs.push( -
- -
- + ); + inputs.push( +
+ +
+ +
-
- ); + ); + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + inputs.push( +
+
+ +
+
+ ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + inputs.push( +
+
+ +
+
+ ); + } updateSectionStatus = function resetSection(e) { this.props.updateSection(''); @@ -209,9 +233,14 @@ class SecurityTab extends React.Component { return ( + } inputs={inputs} - submit={this.submitPassword} + submit={submit} server_error={this.state.serverError} client_error={this.state.passwordError} updateSection={updateSectionStatus} @@ -219,34 +248,51 @@ class SecurityTab extends React.Component { ); } - var describe; - var d = new Date(this.props.user.last_password_update); + let describe; - const hours12 = !Utils.isMilitaryTime(); - describe = ( - - ), - time: ( - - ) - }} - /> - ); + if (this.props.user.auth_service === '') { + const d = new Date(this.props.user.last_password_update); + const hours12 = !Utils.isMilitaryTime(); + + describe = ( + + ), + time: ( + + ) + }} + /> + ); + } else if (this.props.user.auth_service === Constants.GITLAB_SERVICE) { + describe = ( + + ); + } else if (this.props.user.auth_service === Constants.LDAP_SERVICE) { + describe = ( + + ); + } updateSectionStatus = function updateSection() { this.props.updateSection('password'); @@ -254,7 +300,12 @@ class SecurityTab extends React.Component { return ( + } describe={describe} updateSection={updateSectionStatus} /> diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json index 40e4864340..c8e40f0a36 100644 --- a/webapp/i18n/en.json +++ b/webapp/i18n/en.json @@ -1287,18 +1287,22 @@ "user.settings.general.close": "Close", "user.settings.general.confirmEmail": "Confirm Email", "user.settings.general.email": "Email", - "user.settings.general.emailCantUpdate": "Log in occurs through GitLab. Email cannot be updated.", + "user.settings.general.emailGitlabCantUpdate": "Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.", + "user.settings.general.emailLdapCantUpdate": "Login occurs through LDAP. Email cannot be updated. Email address used for notifications is {email}.", "user.settings.general.emailHelp1": "Email is used for sign-in, notifications, and password reset. Email requires verification if changed.", "user.settings.general.emailHelp2": "Email has been disabled by your system administrator. No notification emails will be sent until it is enabled.", "user.settings.general.emailHelp3": "Email is used for sign-in, notifications, and password reset.", "user.settings.general.emailHelp4": "A verification email was sent to {email}.", "user.settings.general.emailMatch": "The new emails you entered do not match.", + "user.settings.general.emptyName": "Click 'Edit' to add your full name", + "user.settings.general.emptyNickname": "Click 'Edit' to add a nickname", "user.settings.general.firstName": "First Name", "user.settings.general.fullName": "Full Name", "user.settings.general.imageTooLarge": "Unable to upload profile image. File is too large.", "user.settings.general.imageUpdated": "Image last updated {date}", "user.settings.general.lastName": "Last Name", - "user.settings.general.loginGitlab": "Log in done through GitLab", + "user.settings.general.loginGitlab": "Login done through GitLab ({email})", + "user.settings.general.loginLdap": "Login done through LDAP ({email})", "user.settings.general.newAddress": "New Address: {email}
Check your email to verify the above address.", "user.settings.general.nickname": "Nickname", "user.settings.general.nicknameExtra": "Use Nickname for a name you might be called that is different from your first name and username. This is most often used when two or more people have similar sounding names and usernames.", @@ -1363,11 +1367,15 @@ "user.settings.security.emailPwd": "Email and Password", "user.settings.security.gitlab": "GitLab SSO", "user.settings.security.lastUpdated": "Last updated {date} at {time}", + "user.settings.security.loginGitlab": "Login done through Gitlab", + "user.settings.security.loginLdap": "Login done through LDAP", "user.settings.security.logoutActiveSessions": "View and Logout of Active Sessions", "user.settings.security.method": "Sign-in Method", "user.settings.security.newPassword": "New Password", "user.settings.security.oneSignin": "You may only have one sign-in method at a time. Switching sign-in method will send an email notifying you if the change was successful.", "user.settings.security.password": "Password", + "user.settings.security.passwordGitlabCantUpdate": "Login occurs through GitLab. Password cannot be updated.", + "user.settings.security.passwordLdapCantUpdate": "Login occurs through LDAP. Password cannot be updated.", "user.settings.security.passwordLengthError": "New passwords must be at least {chars} characters", "user.settings.security.passwordMatchError": "The new passwords you entered do not match", "user.settings.security.retypePassword": "Retype New Password", diff --git a/webapp/i18n/es.json b/webapp/i18n/es.json index 607e46483f..d30792b8c2 100644 --- a/webapp/i18n/es.json +++ b/webapp/i18n/es.json @@ -1247,7 +1247,6 @@ "user.settings.general.close": "Cerrar", "user.settings.general.confirmEmail": "Confirmar Correo electrónico", "user.settings.general.email": "Correo electrónico", - "user.settings.general.emailCantUpdate": "El inicio de sesión ocurre a través de GitLab. El correo electrónico no puede ser cambiado.", "user.settings.general.emailHelp1": "El correo electrónico es utilizado para iniciar sesión, recibir notificaciones y para restablecer la contraseña. Si se cambia el correo electrónico deberás verificarlo nuevamente.", "user.settings.general.emailHelp2": "El correo ha sido deshabilitado por el administrador de sistemas. No llegarán correos de notificación hasta que se vuelva a habilitar.", "user.settings.general.emailHelp3": "El correo electrónico es utilizado para iniciar sesión, recibir notificaciones y para restablecer la contraseña.", @@ -1258,7 +1257,7 @@ "user.settings.general.imageTooLarge": "No se puede subir la imagen del perfil. El archivo es muy grande.", "user.settings.general.imageUpdated": "Última actualizacón de la imagen {date}", "user.settings.general.lastName": "Apellido", - "user.settings.general.loginGitlab": "Inicio de sesión realizado a través de GitLab", + "user.settings.general.loginGitlab": "Inicio de sesión realizado a través de GitLab ({email})", "user.settings.general.newAddress": "Nueva dirección: {email}
Revisa tu correo electrónico para verificar tu nueva dirección.", "user.settings.general.nickname": "Sobrenombre", "user.settings.general.nicknameExtra": "Utiliza un Sobrenombre por el cual te conocen que sea diferente de tu nombre y del nombre de tu usuario. Esto se utiliza con mayor frecuencia cuando dos o más personas tienen nombres y nombres de usuario que suenan similares.", diff --git a/webapp/i18n/fr.json b/webapp/i18n/fr.json index 9d68c54ec3..f05987e15e 100644 --- a/webapp/i18n/fr.json +++ b/webapp/i18n/fr.json @@ -1247,7 +1247,6 @@ "user.settings.general.close": "Quitter", "user.settings.general.confirmEmail": "Courriel de confirmation", "user.settings.general.email": "Adresse électronique", - "user.settings.general.emailCantUpdate": "La connexion s'effectue par GitLab. L'adresse électronique ne peut être modifiée.", "user.settings.general.emailHelp1": "L'adresse électronique est utilisé pour la connexion, les notifications et la réinitialisation du mot de passe. Votre adresse électronique doit être validé si vous le changez.", "user.settings.general.emailHelp2": "Les courriels sont désactivés par votre administrateur système. Aucune notification ne peut être envoyée.", "user.settings.general.emailHelp3": "L'adresse électronique est utilisée pour la connexion, les notifications et la réinitialisation du mot de passe.", @@ -1258,7 +1257,7 @@ "user.settings.general.imageTooLarge": "Impossible de mettre à jour votre photo de profil. Le fichier est trop grand.", "user.settings.general.imageUpdated": "Image mise à jour le {date}", "user.settings.general.lastName": "Nom", - "user.settings.general.loginGitlab": "Connexion avec GitLab", + "user.settings.general.loginGitlab": "Connexion avec GitLab ({email})", "user.settings.general.newAddress": "Nouvelle adresse : {email}
Vérifiez votre messagerie pour valider votre adresse électronique.", "user.settings.general.nickname": "Pseudo", "user.settings.general.nicknameExtra": "Vous pouvez utiliser un pseudo à la place de vos prénom, nom et nom d'utilisateur. Ceci est pratique lorsque deux personnes de votre équipe ont des noms proches.", diff --git a/webapp/i18n/pt.json b/webapp/i18n/pt.json index c9ab089fb9..466d4b6eaa 100644 --- a/webapp/i18n/pt.json +++ b/webapp/i18n/pt.json @@ -1246,7 +1246,6 @@ "user.settings.general.close": "Fechar", "user.settings.general.confirmEmail": "Confirmar o email", "user.settings.general.email": "E-mail", - "user.settings.general.emailCantUpdate": "Login ocorreu através do GitLab. Email não pode ser atualizado.", "user.settings.general.emailHelp1": "Email é usado para login, notificações, e redefinição de senha. Requer verificação de email se alterado.", "user.settings.general.emailHelp2": "Email foi desativado pelo seu administrador de sistema. Nenhuma notificação por email será enviada até isto ser habilitado.", "user.settings.general.emailHelp3": "Email é usado para login, notificações e redefinição de senha.", @@ -1257,7 +1256,7 @@ "user.settings.general.imageTooLarge": "Não é possível fazer upload da imagem de perfil. O arquivo é muito grande.", "user.settings.general.imageUpdated": "Imagem última atualização {date}", "user.settings.general.lastName": "Último Nome", - "user.settings.general.loginGitlab": "Login feito através do GitLab", + "user.settings.general.loginGitlab": "Login feito através do GitLab ({email})", "user.settings.general.newAddress": "Novo Endereço: {email}
Verifique seu email para checar o endereço acima.", "user.settings.general.nickname": "Apelido", "user.settings.general.nicknameExtra": "Use Apelidos para um nome você pode ser chamado assim, isso é diferente de seu primeiro nome e nome de usuário. Este é mais frequentemente usado quando duas ou mais pessoas têm nomes semelhantes de usuário.",