summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--model/config.go57
-rw-r--r--utils/config.go3
-rw-r--r--webapp/components/admin_console/admin_navbar_dropdown.jsx69
-rwxr-xr-xwebapp/i18n/en.json3
-rw-r--r--webapp/sass/routes/_about-modal.scss105
5 files changed, 173 insertions, 64 deletions
diff --git a/model/config.go b/model/config.go
index 706d07246..e0ed85227 100644
--- a/model/config.go
+++ b/model/config.go
@@ -75,12 +75,15 @@ const (
EMAIL_SETTINGS_DEFAULT_FEEDBACK_ORGANIZATION = ""
- SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK = "https://about.mattermost.com/default-terms/"
- SUPPORT_SETTINGS_DEFAULT_PRIVACY_POLICY_LINK = "https://about.mattermost.com/default-privacy-policy/"
- SUPPORT_SETTINGS_DEFAULT_ABOUT_LINK = "https://about.mattermost.com/default-about/"
- SUPPORT_SETTINGS_DEFAULT_HELP_LINK = "https://about.mattermost.com/default-help/"
- SUPPORT_SETTINGS_DEFAULT_REPORT_A_PROBLEM_LINK = "https://about.mattermost.com/default-report-a-problem/"
- SUPPORT_SETTINGS_DEFAULT_SUPPORT_EMAIL = "feedback@mattermost.com"
+ SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK = "https://about.mattermost.com/default-terms/"
+ SUPPORT_SETTINGS_DEFAULT_PRIVACY_POLICY_LINK = "https://about.mattermost.com/default-privacy-policy/"
+ SUPPORT_SETTINGS_DEFAULT_ABOUT_LINK = "https://about.mattermost.com/default-about/"
+ SUPPORT_SETTINGS_DEFAULT_HELP_LINK = "https://about.mattermost.com/default-help/"
+ SUPPORT_SETTINGS_DEFAULT_REPORT_A_PROBLEM_LINK = "https://about.mattermost.com/default-report-a-problem/"
+ SUPPORT_SETTINGS_DEFAULT_ADMINISTRATORS_GUIDE_LINK = "https://about.mattermost.com/administrators-guide/"
+ SUPPORT_SETTINGS_DEFAULT_TROUBLESHOOTING_FORUM_LINK = "https://about.mattermost.com/troubleshooting-forum/"
+ SUPPORT_SETTINGS_DEFAULT_COMMERCIAL_SUPPORT_LINK = "https://about.mattermost.com/commercial-support/"
+ SUPPORT_SETTINGS_DEFAULT_SUPPORT_EMAIL = "feedback@mattermost.com"
LDAP_SETTINGS_DEFAULT_FIRST_NAME_ATTRIBUTE = ""
LDAP_SETTINGS_DEFAULT_LAST_NAME_ATTRIBUTE = ""
@@ -274,12 +277,15 @@ type PrivacySettings struct {
}
type SupportSettings struct {
- TermsOfServiceLink *string
- PrivacyPolicyLink *string
- AboutLink *string
- HelpLink *string
- ReportAProblemLink *string
- SupportEmail *string
+ TermsOfServiceLink *string
+ PrivacyPolicyLink *string
+ AboutLink *string
+ HelpLink *string
+ ReportAProblemLink *string
+ AdministratorsGuideLink *string
+ TroubleshootingForumLink *string
+ CommercialSupportLink *string
+ SupportEmail *string
}
type TeamSettings struct {
@@ -750,6 +756,33 @@ func (o *Config) SetDefaults() {
*o.SupportSettings.ReportAProblemLink = SUPPORT_SETTINGS_DEFAULT_REPORT_A_PROBLEM_LINK
}
+ if !IsSafeLink(o.SupportSettings.AdministratorsGuideLink) {
+ *o.SupportSettings.AdministratorsGuideLink = ""
+ }
+
+ if o.SupportSettings.AdministratorsGuideLink == nil {
+ o.SupportSettings.AdministratorsGuideLink = new(string)
+ *o.SupportSettings.AdministratorsGuideLink = SUPPORT_SETTINGS_DEFAULT_ADMINISTRATORS_GUIDE_LINK
+ }
+
+ if !IsSafeLink(o.SupportSettings.TroubleshootingForumLink) {
+ *o.SupportSettings.TroubleshootingForumLink = ""
+ }
+
+ if o.SupportSettings.TroubleshootingForumLink == nil {
+ o.SupportSettings.TroubleshootingForumLink = new(string)
+ *o.SupportSettings.TroubleshootingForumLink = SUPPORT_SETTINGS_DEFAULT_TROUBLESHOOTING_FORUM_LINK
+ }
+
+ if !IsSafeLink(o.SupportSettings.CommercialSupportLink) {
+ *o.SupportSettings.CommercialSupportLink = ""
+ }
+
+ if o.SupportSettings.CommercialSupportLink == nil {
+ o.SupportSettings.CommercialSupportLink = new(string)
+ *o.SupportSettings.CommercialSupportLink = SUPPORT_SETTINGS_DEFAULT_COMMERCIAL_SUPPORT_LINK
+ }
+
if o.SupportSettings.SupportEmail == nil {
o.SupportSettings.SupportEmail = new(string)
*o.SupportSettings.SupportEmail = SUPPORT_SETTINGS_DEFAULT_SUPPORT_EMAIL
diff --git a/utils/config.go b/utils/config.go
index 8da08245a..58bc339e1 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -403,6 +403,9 @@ func getClientConfig(c *model.Config) map[string]string {
props["AboutLink"] = *c.SupportSettings.AboutLink
props["HelpLink"] = *c.SupportSettings.HelpLink
props["ReportAProblemLink"] = *c.SupportSettings.ReportAProblemLink
+ props["AdministratorsGuideLink"] = *c.SupportSettings.AdministratorsGuideLink
+ props["TroubleshootingForumLink"] = *c.SupportSettings.TroubleshootingForumLink
+ props["CommercialSupportLink"] = *c.SupportSettings.CommercialSupportLink
props["SupportEmail"] = *c.SupportSettings.SupportEmail
props["EnableFileAttachments"] = strconv.FormatBool(*c.FileSettings.EnableFileAttachments)
diff --git a/webapp/components/admin_console/admin_navbar_dropdown.jsx b/webapp/components/admin_console/admin_navbar_dropdown.jsx
index 00cbbdb0c..d46732d40 100644
--- a/webapp/components/admin_console/admin_navbar_dropdown.jsx
+++ b/webapp/components/admin_console/admin_navbar_dropdown.jsx
@@ -6,6 +6,7 @@ import ReactDOM from 'react-dom';
import TeamStore from 'stores/team_store.jsx';
import Constants from 'utils/constants.jsx';
+import AboutBuildModal from 'components/about_build_modal.jsx';
import {sortTeamsByDisplayName} from 'utils/team_utils.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
@@ -22,10 +23,13 @@ export default class AdminNavbarDropdown extends React.Component {
super(props);
this.blockToggle = false;
this.onTeamChange = this.onTeamChange.bind(this);
+ this.handleAboutModal = this.handleAboutModal.bind(this);
+ this.aboutModalDismissed = this.aboutModalDismissed.bind(this);
this.state = {
teams: TeamStore.getAll(),
- teamMembers: TeamStore.getMyTeamMembers()
+ teamMembers: TeamStore.getMyTeamMembers(),
+ showAboutModal: false
};
}
@@ -45,6 +49,16 @@ export default class AdminNavbarDropdown extends React.Component {
TeamStore.removeChangeListener(this.onTeamChange);
}
+ handleAboutModal(e) {
+ e.preventDefault();
+
+ this.setState({showAboutModal: true});
+ }
+
+ aboutModalDismissed() {
+ this.setState({showAboutModal: false});
+ }
+
onTeamChange() {
this.setState({
teams: TeamStore.getAll(),
@@ -53,6 +67,7 @@ export default class AdminNavbarDropdown extends React.Component {
}
render() {
+ const config = global.window.mm_config;
var teamsArray = []; // Array of team objects
var teams = []; // Array of team components
let switchTeams;
@@ -138,6 +153,54 @@ export default class AdminNavbarDropdown extends React.Component {
className='divider'
/>
<li>
+ <Link
+ to={config.AdministratorsGuideLink}
+ rel='noopener noreferrer'
+ target='_blank'
+ >
+ <FormattedMessage
+ id='admin.nav.administratorsGuide'
+ defaultMessage='Administrator Guide'
+ />
+ </Link>
+ </li>
+ <li>
+ <Link
+ to={config.TroubleshootingForumLink}
+ rel='noopener noreferrer'
+ target='_blank'
+ >
+ <FormattedMessage
+ id='admin.nav.troubleshootingForum'
+ defaultMessage='Troubleshooting Forum'
+ />
+ </Link>
+ </li>
+ <li>
+ <Link
+ to={config.CommercialSupportLink}
+ rel='noopener noreferrer'
+ target='_blank'
+ >
+ <FormattedMessage
+ id='admin.nav.commercialSupport'
+ defaultMessage='Commercial Support'
+ />
+ </Link>
+ </li>
+ <li>
+ <a
+ href='#'
+ onClick={this.handleAboutModal}
+ >
+ <FormattedMessage
+ id='navbar_dropdown.about'
+ defaultMessage='About Mattermost'
+ />
+ </a>
+ </li>
+ <li className='divider'/>
+ <li>
<a
href='#'
id='logout'
@@ -149,6 +212,10 @@ export default class AdminNavbarDropdown extends React.Component {
/>
</a>
</li>
+ <AboutBuildModal
+ show={this.state.showAboutModal}
+ onModalDismissed={this.aboutModalDismissed}
+ />
</ul>
</li>
</ul>
diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json
index 951c9647e..d2bd3478b 100755
--- a/webapp/i18n/en.json
+++ b/webapp/i18n/en.json
@@ -545,10 +545,13 @@
"admin.mfa.bannerDesc": "<a href='https://docs.mattermost.com/deployment/auth.html' target='_blank'>Multi-factor authentication</a> is available for accounts with AD/LDAP or email login. If other login methods are used, MFA should be configured with the authentication provider.",
"admin.mfa.cluster": "High",
"admin.mfa.title": "Multi-factor Authentication",
+ "admin.nav.administratorsGuide": "Administrator's Guide",
+ "admin.nav.commercialSupport": "Commercial Support",
"admin.nav.help": "Help",
"admin.nav.logout": "Logout",
"admin.nav.report": "Report a Problem",
"admin.nav.switch": "Team Selection",
+ "admin.nav.troubleshootingForum": "Troubleshooting Forum",
"admin.notifications.email": "Email",
"admin.notifications.push": "Mobile Push",
"admin.notifications.title": "Notification Settings",
diff --git a/webapp/sass/routes/_about-modal.scss b/webapp/sass/routes/_about-modal.scss
index 4506eac4e..46c1676ea 100644
--- a/webapp/sass/routes/_about-modal.scss
+++ b/webapp/sass/routes/_about-modal.scss
@@ -1,9 +1,13 @@
@charset 'UTF-8';
-.app__body {
+.modal {
+ .modal-content {
+ @include box-shadow(0 0 10px rgba($black, .5));
+ border-radius: $border-rad;
+ }
- .modal {
- .about-modal {
+ .about-modal {
+ .modal-content {
.modal-header {
background: transparent;
border: none;
@@ -25,69 +29,68 @@
margin: 0 4px 0 8px;
}
}
+ }
- .modal-body {
- padding: 20px 25px 5px;
- }
+ .modal-body {
+ padding: 20px 25px 10px;
+ }
- &.large {
- .modal-body {
- padding-bottom: 20px;
- }
+ &.large {
+ .modal-body {
+ padding-bottom: 20px;
}
+ }
- .about-modal__content {
- @include clearfix;
- @include display-flex;
- @include flex-direction(row);
- padding: 1em 0 3em;
- }
+ .about-modal__content {
+ @include clearfix;
+ @include display-flex;
+ @include flex-direction(row);
+ padding: 1em 0 3em;
+ }
- .about-modal__copyright {
- @include opacity(.6);
- margin-top: .5em;
- }
+ .about-modal__copyright {
+ @include opacity(.6);
+ margin-top: .5em;
+ }
- .about-modal__footer {
- font-size: 13.5px;
- }
+ .about-modal__footer {
+ font-size: 13.5px;
+ }
- .about-modal__title {
- line-height: 1.5;
- margin: 0 0 10px;
- }
+ .about-modal__title {
+ line-height: 1.5;
+ margin: 0 0 10px;
+ }
- .about-modal__subtitle {
- @include opacity(.6);
- }
+ .about-modal__subtitle {
+ @include opacity(.6);
+ }
- .about-modal__hash {
- @include opacity(.4);
- font-size: .75em;
- text-align: right;
+ .about-modal__hash {
+ @include opacity(.4);
+ font-size: .75em;
+ text-align: right;
- p {
- &:first-child {
- float: left;
- text-align: left;
- }
+ p {
+ &:first-child {
+ float: left;
+ text-align: left;
}
}
+ }
- .about-modal__logo {
- @include opacity(.9);
- padding: 0 40px 0 20px;
+ .about-modal__logo {
+ @include opacity(.9);
+ padding: 0 40px 0 20px;
- svg {
- height: 125px;
- width: 125px;
- }
+ svg {
+ height: 125px;
+ width: 125px;
+ }
- path {
- fill: inherit;
- }
+ path {
+ fill: inherit;
}
}
}
-
-}
+} \ No newline at end of file