diff --git a/i18n/en.json b/i18n/en.json index 79b0079e9f..bcaf7befdb 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -4708,12 +4708,12 @@ "translation": "Cluster ping successful with hostname=%v on=%v with id=%v self=%v" }, { - "id": "ent.cluster.incompatibile.warn", - "translation": "Potential incompatibile version detected for clustering with %v" + "id": "ent.cluster.incompatible.warn", + "translation": "Potential incompatible version detected for clustering with %v" }, { - "id": "ent.cluster.incompatibile_config.warn", - "translation": "Potential incompatibile config detected for clustering with %v" + "id": "ent.cluster.incompatible_config.warn", + "translation": "Potential incompatible config detected for clustering with %v" }, { "id": "ent.cluster.debug_fail.debug", diff --git a/model/config.go b/model/config.go index 7fe575e58e..61d13360c8 100644 --- a/model/config.go +++ b/model/config.go @@ -1001,7 +1001,7 @@ func (o *Config) IsValid() *AppError { } if *o.SamlSettings.Enable { - if len(*o.SamlSettings.IdpUrl) == 0 || !IsValidHttpUrl(*o.SamlSettings.IdpDescriptorUrl) { + if len(*o.SamlSettings.IdpUrl) == 0 || !IsValidHttpUrl(*o.SamlSettings.IdpUrl) { return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_idp_url.app_error", nil, "") } diff --git a/model/version.go b/model/version.go index c6f49525be..49e8af0482 100644 --- a/model/version.go +++ b/model/version.go @@ -13,6 +13,7 @@ import ( // It should be maitained in chronological order with most current // release at the front of the list. var versions = []string{ + "3.3.0", "3.2.0", "3.1.0", "3.0.0", diff --git a/webapp/components/admin_console/admin_sidebar.jsx b/webapp/components/admin_console/admin_sidebar.jsx index 3966f02199..4fcfe2731f 100644 --- a/webapp/components/admin_console/admin_sidebar.jsx +++ b/webapp/components/admin_console/admin_sidebar.jsx @@ -323,6 +323,25 @@ export default class AdminSidebar extends React.Component { ); } + let otherCategory = null; + if (license || audits) { + otherCategory = ( + + } + > + {license} + {audits} + + ); + } + return (
@@ -347,7 +366,6 @@ export default class AdminSidebar extends React.Component { /> } /> - {audits} {this.renderTeams()} - - } - > - {license} - + {otherCategory}
); } diff --git a/webapp/components/channel_header.jsx b/webapp/components/channel_header.jsx index 609a15d73e..65c856b4a2 100644 --- a/webapp/components/channel_header.jsx +++ b/webapp/components/channel_header.jsx @@ -224,7 +224,7 @@ export default class ChannelHeader extends React.Component { } render() { - const flagIcon = Constants.FLAG_ICON_OUTLINE_SVG; + const flagIcon = Constants.FLAG_ICON_SVG; if (!this.validState()) { return null; diff --git a/webapp/components/integrations/components/add_command.jsx b/webapp/components/integrations/components/add_command.jsx index cf18241458..300e55a70b 100644 --- a/webapp/components/integrations/components/add_command.jsx +++ b/webapp/components/integrations/components/add_command.jsx @@ -552,8 +552,8 @@ export default class AddCommand extends React.Component { htmlFor='autocomplete' >
diff --git a/webapp/components/rhs_header_post.jsx b/webapp/components/rhs_header_post.jsx index 7b71bd7cc4..978c58c850 100644 --- a/webapp/components/rhs_header_post.jsx +++ b/webapp/components/rhs_header_post.jsx @@ -57,7 +57,7 @@ export default class RhsHeaderPost extends React.Component { const closeSidebarTooltip = ( @@ -87,7 +87,7 @@ export default class RhsHeaderPost extends React.Component { const expandSidebarTooltip = ( @@ -96,7 +96,7 @@ export default class RhsHeaderPost extends React.Component { const shrinkSidebarTooltip = ( diff --git a/webapp/components/user_settings/user_settings_notifications.jsx b/webapp/components/user_settings/user_settings_notifications.jsx index 336e614f9d..e0e3bf9794 100644 --- a/webapp/components/user_settings/user_settings_notifications.jsx +++ b/webapp/components/user_settings/user_settings_notifications.jsx @@ -393,7 +393,7 @@ class NotificationsTab extends React.Component { return ( @@ -430,7 +430,7 @@ class NotificationsTab extends React.Component { onChange={this.handleNotifyRadio.bind(this, 'all')} /> @@ -596,7 +596,7 @@ class NotificationsTab extends React.Component { if (!this.state.soundNeeded) { describe = ( ); diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json index 74b13c9af8..1dc2f49d1b 100644 --- a/webapp/i18n/en.json +++ b/webapp/i18n/en.json @@ -128,6 +128,7 @@ "add_outgoing_webhook.triggerWordsTriggerWhen.help": "Choose when to trigger the outgoing webhook; if the first word of a message matches a Trigger Word exactly, or if it starts with a Trigger Word.", "add_outgoing_webhook.triggerWordsTriggerWhenFullWord": "First word matches a trigger word exactly", "add_outgoing_webhook.triggerWordsTriggerWhenStartsWith": "First word starts with a trigger word", + "admin.advance.cluster": "High Availability (Beta)", "admin.audits.reload": "Reload User Activity Logs", "admin.audits.title": "User Activity Logs", "admin.authentication.email": "Email Auth", @@ -135,6 +136,24 @@ "admin.authentication.oauth": "OAuth 2.0", "admin.authentication.saml": "SAML", "admin.banner.heading": "Note:", + "admin.cluster.enableDescription": "When true, Mattermost will run in High Availability mode. Please see documentation to learn more about configuring High Availability for Mattermost.", + "admin.cluster.enableTitle": "Enable High Availability Mode:", + "admin.cluster.interNodeListenAddressDesc": "The address the server will listen on for communicating with other servers.", + "admin.cluster.interNodeListenAddressEx": "Ex \":8075\"", + "admin.cluster.interNodeListenAddressTitle": "Inter-Node Listen Address:", + "admin.cluster.interNodeUrlsDesc": "The internal/private URLs of all the Mattermost servers separated by commas.", + "admin.cluster.interNodeUrlsEx": "Ex \"http://10.10.10.30, http://10.10.10.31\"", + "admin.cluster.interNodeUrlsTitle": "Inter-Node URLs:", + "admin.cluster.loadedFrom": "This configuration file was loaded from Node ID {clusterId}. Please see the Troubleshooting Guide in our documentation if you are accessing the System Console through a load balancer and experiencing issues.", + "admin.cluster.noteDescription": "Changing properties in this section will require a server restart before taking effect. When High Availability mode is enabled, the System Console is set to read-only and can only be changed from the configuration file.", + "admin.cluster.should_not_change": "WARNING: These settings may not sync with the other servers in the cluster. High Availability inter-node communication will not start until you modify the config.json to be identical on all servers and restart Mattermost. Please see the documentation on how to add or remove a server from the cluster. If you are accessing the System Console through a load balancer and experiencing issues, please see the Troubleshooting Guide in our documentation.", + "admin.cluster.status_table.config_hash": "Config File MD5", + "admin.cluster.status_table.hostname": "Hostname", + "admin.cluster.status_table.id": "Node ID", + "admin.cluster.status_table.reload": " Reload Cluster Status", + "admin.cluster.status_table.status": "Status", + "admin.cluster.status_table.url": "Inter-Node URL", + "admin.cluster.status_table.version": "Version", "admin.compliance.directoryDescription": "Directory to which compliance reports are written. If blank, will be set to ./data/.", "admin.compliance.directoryExample": "Ex \"./data/\"", "admin.compliance.directoryTitle": "Compliance Report Directory:", @@ -459,10 +478,10 @@ "admin.oauth.google": "Google Apps", "admin.oauth.off": "Do not allow sign-in via an OAuth 2.0 provider", "admin.oauth.office365": "Office 365", - "admin.oauth.providerDescription": "When true, Mattermost can act as an OAuth 2.0 service provider allowing external applications to authorize API requests to Mattermost.", + "admin.oauth.providerDescription": "When true, Mattermost can act as an OAuth 2.0 service provider allowing Mattermost to authorize API requests from external applications.", "admin.oauth.providerTitle": "Enable OAuth 2.0 Service Provider: ", "admin.oauth.select": "Select OAuth 2.0 service provider:", - "admin.office365.EnableHtmlDesc": "
  1. Log in to your Microsoft or Office 365 account. Make sure it's the account on the same tenant that you would like users to log in with.
  2. Go to https://apps.dev.microsoft.com, click Add an app and use Mattermost - as the application name.
  3. Under Application Secrets, click Generate New Password and save it to later complete the field below.
  4. Under Platforms, click Add Platform, choose Web and enter /signup/office365/complete (example: http://localhost:8065/signup/office365/complete) under Redirect URIs. Also uncheck Allow Implicit Flow.
  5. Finally, click Save and complete the Application ID and Application Secret Password fields below.
", + "admin.office365.EnableHtmlDesc": "
  1. Log in to your Microsoft or Office 365 account. Make sure it's the account on the same tenant that you would like users to log in with.
  2. Go to https://apps.dev.microsoft.com, click Go to app list > Add an app and use \"Mattermost - your-company-name\" as the Application Name.
  3. Under Application Secrets, click Generate New Password and paste it to the Application Secret Password field below.
  4. Under Platforms, click Add Platform, choose Web and enter your-mattermost-url/signup/office365/complete (example: http://localhost:8065/signup/office365/complete) under Redirect URIs. Also uncheck Allow Implicit Flow.
  5. Finally, click Save and then paste the Application ID below.
", "admin.office365.authTitle": "Auth Endpoint:", "admin.office365.clientIdDescription": "The Application/Client ID you received when registering your application with Microsoft.", "admin.office365.clientIdExample": "Ex \"adf3sfa2-ag3f-sn4n-ids0-sh1hdax192qq\"", @@ -569,24 +588,6 @@ "admin.saml.usernameAttrTitle": "Username Attribute:", "admin.saml.verifyDescription": "When true, Mattermost verifies that the signature sent from the SAML Response matches the Service Provider Login URL", "admin.saml.verifyTitle": "Verify Signature:", - "admin.cluster.loadedFrom": "This configuration file was loaded from Node ID {clusterId}. Please see the Troubleshooting Guide in our documentation if you are accessing the System Console through a load balancer and experiencing issues.", - "admin.cluster.should_not_change": "WARNING: These settings may not sync with the other servers in the cluster. High Availability inter-node communication will not start until you modify the config.json to be identical on all servers and restart Mattermost. Please see the documentation on how to add or remove a server from the cluster. If you are accessing the System Console through a load balancer and experiencing issues, please see the Troubleshooting Guide in our documentation.", - "admin.cluster.noteDescription": "Changing properties in this section will require a server restart before taking effect. When High Availability mode is enabled, the System Console is set to read-only and can only be changed from the configuration file.", - "admin.cluster.enableTitle": "Enable High Availability Mode:", - "admin.cluster.enableDescription": "When true, Mattermost will run in High Availability mode. Please see documentation to learn more about configuring High Availability for Mattermost.", - "admin.cluster.interNodeListenAddressTitle": "Inter-Node Listen Address:", - "admin.cluster.interNodeListenAddressEx": "Ex \":8075\"", - "admin.cluster.interNodeListenAddressDesc": "The address the server will listen on for communicating with other servers.", - "admin.cluster.interNodeUrlsTitle": "Inter-Node URLs:", - "admin.cluster.interNodeUrlsEx": "Ex \"http://10.10.10.30, http://10.10.10.31\"", - "admin.cluster.interNodeUrlsDesc": "The internal/private URLs of all the Mattermost servers separated by commas.", - "admin.cluster.status_table.reload": " Reload Cluster Status", - "admin.cluster.status_table.status": "Status", - "admin.cluster.status_table.hostname": "Hostname", - "admin.cluster.status_table.version": "Version", - "admin.cluster.status_table.config_hash": "Config File MD5", - "admin.cluster.status_table.url": "Inter-Node URL", - "admin.cluster.status_table.id": "Node ID", "admin.save": "Save", "admin.saving": "Saving Config...", "admin.security.connection": "Connections", @@ -651,6 +652,7 @@ "admin.sidebar.advanced": "Advanced", "admin.sidebar.audits": "Compliance and Auditing", "admin.sidebar.authentication": "Authentication", + "admin.sidebar.cluster": "High Availability (Beta)", "admin.sidebar.compliance": "Compliance", "admin.sidebar.configuration": "Configuration", "admin.sidebar.connections": "Connections", @@ -686,8 +688,6 @@ "admin.sidebar.reports": "REPORTING", "admin.sidebar.rmTeamSidebar": "Remove team from sidebar menu", "admin.sidebar.saml": "SAML", - "admin.sidebar.cluster": "High Availability (Beta)", - "admin.advance.cluster": "High Availability (Beta)", "admin.sidebar.security": "Security", "admin.sidebar.sessions": "Sessions", "admin.sidebar.settings": "SETTINGS", @@ -1038,8 +1038,6 @@ "create_comment.files": "Files uploading", "create_post.comment": "Comment", "create_post.post": "Post", - "flag_post.flag": "Flag for follow up", - "flag_post.unflag": "Unflag", "create_post.tutorialTip": "

Sending Messages

Type here to write a message and press Enter to post it.

Click the Attachment button to upload an image or a file.

", "create_post.write": "Write a message...", "create_team.agreement": "By proceeding to create your account and use {siteName}, you agree to our Terms of Service and Privacy Policy. If you do not agree, you cannot use {siteName}.", @@ -1147,6 +1145,8 @@ "find_team.placeholder": "you@domain.com", "find_team.send": "Send", "find_team.submitError": "Please enter a valid email address", + "flag_post.flag": "Flag for follow up", + "flag_post.unflag": "Unflag", "general_tab.chooseName": "Please choose a new name for your team", "general_tab.codeDesc": "Click 'Edit' to regenerate Invite Code.", "general_tab.codeLongDesc": "The Invite Code is used as part of the URL in the team invitation link created by Get Team Invite Link in the main menu. Regenerating creates a new team invitation link and invalidates the previous link.", @@ -1392,9 +1392,9 @@ "post_delete.someone": "Someone deleted the message on which you tried to post a comment.", "post_focus_view.beginning": "Beginning of Channel Archives", "post_info.del": "Delete", + "post_info.edit": "Edit", "post_info.mobile.flag": "Flag", "post_info.mobile.unflag": "Unflag", - "post_info.edit": "Edit", "post_info.permalink": "Permalink", "post_info.reply": "Reply", "posts_view.loadMore": "Load more messages", @@ -1417,21 +1417,21 @@ "rename_channel.title": "Rename Channel", "rhs_comment.comment": "Comment", "rhs_comment.del": "Delete", + "rhs_comment.edit": "Edit", "rhs_comment.mobile.flag": "Flag", "rhs_comment.mobile.unflag": "Unflag", - "rhs_comment.edit": "Edit", "rhs_comment.permalink": "Permalink", - "rhs_header.backToResultsTooltip": "Back to Search Results", "rhs_header.backToFlaggedTooltip": "Back to Flagged Posts", + "rhs_header.backToResultsTooltip": "Back to Search Results", "rhs_header.closeSidebarTooltip": "Close Sidebar", "rhs_header.details": "Message Details", "rhs_header.expandSidebarTooltip": "Expand Sidebar", "rhs_header.shrinkSidebarTooltip": "Shrink Sidebar", "rhs_root.del": "Delete", - "rhs_root.mobile.flag": "Flag", - "rhs_root.mobile.unflag": "Unflag", "rhs_root.direct": "Direct Message", "rhs_root.edit": "Edit", + "rhs_root.mobile.flag": "Flag", + "rhs_root.mobile.unflag": "Unflag", "rhs_root.permalink": "Permalink", "search_bar.cancel": "Cancel", "search_bar.search": "Search", @@ -1470,8 +1470,8 @@ "sidebar.unreadBelow": "Unread post(s) below", "sidebar_header.tutorial": "

Main Menu

The Main Menu is where you can Invite New Members, access your Account Settings and set your Theme Color.

Team administrators can also access their Team Settings from this menu.

System administrators will find a System Console option to administrate the entire system.

", "sidebar_right_menu.accountSettings": "Account Settings", - "sidebar_right_menu.flagged": "Flagged Posts", "sidebar_right_menu.console": "System Console", + "sidebar_right_menu.flagged": "Flagged Posts", "sidebar_right_menu.help": "Help", "sidebar_right_menu.inviteNew": "Invite New Member", "sidebar_right_menu.logout": "Logout", @@ -1721,6 +1721,7 @@ "user.settings.mfa.qrCode": "Bar Code", "user.settings.mfa.remove": "Remove MFA from your account", "user.settings.mfa.removeHelp": "Removing multi-factor authentication means you will no longer require a phone-based passcode to sign-in to your account.", + "user.settings.mfa.title": "Multi-factor Authentication", "user.settings.modal.advanced": "Advanced", "user.settings.modal.confirmBtns": "Yes, Discard", "user.settings.modal.confirmMsg": "You have unsaved changes, are you sure you want to discard them?", @@ -1730,9 +1731,7 @@ "user.settings.modal.notifications": "Notifications", "user.settings.modal.security": "Security", "user.settings.modal.title": "Account Settings", - "user.settings.notification.allActivity": "For all activity", - "user.settings.notification.push": "Mobile push notifications", - "user.settings.notification.soundConfig": "Please configure notification sounds in your browser settings", + "user.settings.notifications.allActivity": "For all activity", "user.settings.notifications.channelWide": "Channel-wide mentions \"@channel\", \"@all\"", "user.settings.notifications.close": "Close", "user.settings.notifications.comments": "Comment threads notifications", @@ -1751,9 +1750,11 @@ "user.settings.notifications.off": "Off", "user.settings.notifications.on": "On", "user.settings.notifications.onlyMentions": "Only for mentions and direct messages", + "user.settings.notifications.push": "Mobile push notifications", "user.settings.notifications.sensitiveName": "Your case sensitive first name \"{first_name}\"", "user.settings.notifications.sensitiveUsername": "Your non-case sensitive username \"{username}\"", "user.settings.notifications.sensitiveWords": "Other non-case sensitive words, separated by commas:", + "user.settings.notifications.soundConfig": "Please configure notification sounds in your browser settings", "user.settings.notifications.sounds_info": "Desktop notifications sounds are available on Firefox, Safari, Chrome, Internet Explorer, and Edge.", "user.settings.notifications.teamWide": "Team-wide mentions \"@all\"", "user.settings.notifications.title": "Notification Settings", diff --git a/webapp/sass/components/_modal.scss b/webapp/sass/components/_modal.scss index 5ea1337f1d..b7772c16dc 100644 --- a/webapp/sass/components/_modal.scss +++ b/webapp/sass/components/_modal.scss @@ -531,6 +531,7 @@ flex-grow: 1; flex-shrink: 1; overflow: hidden; + padding-left: 10px; text-overflow: ellipsis; } diff --git a/webapp/sass/layout/_headers.scss b/webapp/sass/layout/_headers.scss index 832bed50ef..c3a5f8fda5 100644 --- a/webapp/sass/layout/_headers.scss +++ b/webapp/sass/layout/_headers.scss @@ -396,7 +396,7 @@ .icon__flag { svg { - height: 18px; + height: 19px; position: relative; top: 2px; width: 19px; diff --git a/webapp/sass/layout/_sidebar-right.scss b/webapp/sass/layout/_sidebar-right.scss index 497cd3cea8..d43ddf5b94 100644 --- a/webapp/sass/layout/_sidebar-right.scss +++ b/webapp/sass/layout/_sidebar-right.scss @@ -178,7 +178,7 @@ } .usage__icon { - @include opacity(.6); + @include opacity(.9); margin: 0 3px; position: relative; top: 1px; diff --git a/webapp/sass/responsive/_desktop.scss b/webapp/sass/responsive/_desktop.scss index 38037d1055..d891fe17f8 100644 --- a/webapp/sass/responsive/_desktop.scss +++ b/webapp/sass/responsive/_desktop.scss @@ -34,9 +34,7 @@ } } } -} -@media screen and (max-width: 1258px) { .backstage-content { margin: 46px 46px 46px 150px; } diff --git a/webapp/utils/utils.jsx b/webapp/utils/utils.jsx index 9f8b1ef6c9..e3db6d827a 100644 --- a/webapp/utils/utils.jsx +++ b/webapp/utils/utils.jsx @@ -567,7 +567,7 @@ export function applyTheme(theme) { if (theme.centerChannelColor) { changeCss('.app__body .post-list__arrows, .app__body .post .flag-icon__container', 'fill:' + changeOpacity(theme.centerChannelColor, 0.3), 1); - changeCss('.app__body .channel-header__links .icon', 'stroke:' + theme.centerChannelColor, 1); + changeCss('.app__body .channel-header__links .icon, .app__body .sidebar--right .sidebar--right__subheader .usage__icon', 'fill:' + theme.centerChannelColor, 1); changeCss('@media(min-width: 768px){.app__body .post:hover .post__header .col__reply, .app__body .post.post--hovered .post__header .col__reply', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 2); changeCss('.app__body .sidebar--left, .app__body .sidebar--right .sidebar--right__header, .app__body .suggestion-list__content .command', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1); changeCss('.app__body .post.post--system .post__body', 'color:' + changeOpacity(theme.centerChannelColor, 0.6), 1); @@ -640,7 +640,6 @@ export function applyTheme(theme) { changeCss('.app__body a, .app__body a:focus, .app__body a:hover, .app__body .btn, .app__body .btn:focus, .app__body .btn:hover', 'color:' + theme.linkColor, 1); changeCss('.app__body .attachment .attachment__container', 'border-left-color:' + changeOpacity(theme.linkColor, 0.5), 1); changeCss('.app__body .channel-header__links .icon:hover, .app__body .post .flag-icon__container.visible, .app__body .post .comment-icon__container, .app__body .post .post__reply', 'fill:' + theme.linkColor, 1); - changeCss('.app__body .channel-header__links .icon:hover', 'stroke:' + theme.linkColor, 1); } if (theme.buttonBg) {