mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
Merge branch 'release-3.9' into merge-3.9
This commit is contained in:
@@ -378,7 +378,10 @@ export function formatAuditInfo(audit, formatMessage) {
|
||||
|
||||
if (userIdField.indexOf('user_id') >= 0) {
|
||||
userId = userIdField[userIdField.indexOf('user_id') + 1];
|
||||
username = UserStore.getProfile(userId).username;
|
||||
var profile = UserStore.getProfile(userId);
|
||||
if (profile) {
|
||||
username = profile.username;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,20 +33,18 @@ export default class NotLoggedIn extends React.Component {
|
||||
);
|
||||
}
|
||||
|
||||
if (global.window.mm_config.TermsOfServiceLink) {
|
||||
content.push(
|
||||
<a
|
||||
key='terms_link'
|
||||
id='terms_link'
|
||||
className='pull-right footer-link'
|
||||
target='_blank'
|
||||
rel='noopener noreferrer'
|
||||
href={global.window.mm_config.TermsOfServiceLink}
|
||||
>
|
||||
<FormattedMessage id='web.footer.terms'/>
|
||||
</a>
|
||||
);
|
||||
}
|
||||
content.push(
|
||||
<a
|
||||
key='terms_link'
|
||||
id='terms_link'
|
||||
className='pull-right footer-link'
|
||||
target='_blank'
|
||||
rel='noopener noreferrer'
|
||||
href={global.window.mm_config.TermsOfServiceLink}
|
||||
>
|
||||
<FormattedMessage id='web.footer.terms'/>
|
||||
</a>
|
||||
);
|
||||
|
||||
if (global.window.mm_config.PrivacyPolicyLink) {
|
||||
content.push(
|
||||
|
||||
@@ -210,7 +210,7 @@ export default class LoginController extends React.Component {
|
||||
|
||||
finishSignin(team) {
|
||||
const query = this.props.location.query;
|
||||
GlobalActions.loadDefaultLocale();
|
||||
GlobalActions.loadCurrentLocale();
|
||||
if (query.redirect_to) {
|
||||
browserHistory.push(query.redirect_to);
|
||||
} else if (team) {
|
||||
@@ -493,12 +493,14 @@ export default class LoginController extends React.Component {
|
||||
key='gitlab'
|
||||
href={Client.getOAuthRoute() + '/gitlab/login' + this.props.location.search}
|
||||
>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='login.gitlab'
|
||||
defaultMessage='GitLab'
|
||||
/>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='login.gitlab'
|
||||
defaultMessage='GitLab'
|
||||
/>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
@@ -511,12 +513,14 @@ export default class LoginController extends React.Component {
|
||||
key='google'
|
||||
href={Client.getOAuthRoute() + '/google/login' + this.props.location.search}
|
||||
>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='login.google'
|
||||
defaultMessage='Google Apps'
|
||||
/>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='login.google'
|
||||
defaultMessage='Google Apps'
|
||||
/>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
@@ -529,12 +533,14 @@ export default class LoginController extends React.Component {
|
||||
key='office365'
|
||||
href={Client.getOAuthRoute() + '/office365/login' + this.props.location.search}
|
||||
>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='login.office365'
|
||||
defaultMessage='Office 365'
|
||||
/>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='login.office365'
|
||||
defaultMessage='Office 365'
|
||||
/>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
@@ -547,9 +553,11 @@ export default class LoginController extends React.Component {
|
||||
key='saml'
|
||||
href={'/login/sso/saml' + this.props.location.search}
|
||||
>
|
||||
<span className='icon fa fa-lock fa--margin-top'/>
|
||||
<span>
|
||||
{global.window.mm_config.SamlLoginButtonText}
|
||||
<span className='icon fa fa-lock fa--margin-top'/>
|
||||
<span>
|
||||
{global.window.mm_config.SamlLoginButtonText}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
|
||||
@@ -8,6 +8,8 @@ import React from 'react';
|
||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||
import {browserHistory} from 'react-router/es6';
|
||||
|
||||
import {loadMe} from 'actions/user_actions.jsx';
|
||||
|
||||
export default class Confirm extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@@ -25,7 +27,9 @@ export default class Confirm extends React.Component {
|
||||
|
||||
submit(e) {
|
||||
e.preventDefault();
|
||||
browserHistory.push('/');
|
||||
loadMe(() => {
|
||||
browserHistory.push('/');
|
||||
});
|
||||
}
|
||||
|
||||
onKeyPress(e) {
|
||||
|
||||
@@ -2,42 +2,10 @@
|
||||
// See License.txt for license information.
|
||||
|
||||
import * as utils from 'utils/utils.jsx';
|
||||
import {getCountsStateFromStores} from 'utils/channel_utils.jsx';
|
||||
import ChannelStore from 'stores/channel_store.jsx';
|
||||
import TeamStore from 'stores/team_store.jsx';
|
||||
|
||||
function getCountsStateFromStores() {
|
||||
let mentionCount = 0;
|
||||
let messageCount = 0;
|
||||
const teamMembers = TeamStore.getMyTeamMembers();
|
||||
const channels = ChannelStore.getAll();
|
||||
const members = ChannelStore.getMyMembers();
|
||||
|
||||
teamMembers.forEach((member) => {
|
||||
if (member.team_id !== TeamStore.getCurrentId()) {
|
||||
mentionCount += (member.mention_count || 0);
|
||||
messageCount += (member.msg_count || 0);
|
||||
}
|
||||
});
|
||||
|
||||
channels.forEach((channel) => {
|
||||
const channelMember = members[channel.id];
|
||||
if (channelMember == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (channel.type === 'D') {
|
||||
mentionCount += channel.total_msg_count - channelMember.msg_count;
|
||||
} else if (channelMember.mention_count > 0) {
|
||||
mentionCount += channelMember.mention_count;
|
||||
}
|
||||
if (channelMember.notify_props.mark_unread !== 'mention' && channel.total_msg_count - channelMember.msg_count > 0) {
|
||||
messageCount += 1;
|
||||
}
|
||||
});
|
||||
|
||||
return {mentionCount, messageCount};
|
||||
}
|
||||
|
||||
import React from 'react';
|
||||
|
||||
export default class NotifyCounts extends React.Component {
|
||||
|
||||
@@ -20,8 +20,8 @@ export default class Root extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
locale: 'en',
|
||||
translations: null
|
||||
locale: LocalizationStore.getLocale(),
|
||||
translations: LocalizationStore.getTranslations()
|
||||
};
|
||||
|
||||
this.localizationChanged = this.localizationChanged.bind(this);
|
||||
@@ -113,7 +113,7 @@ export default class Root extends React.Component {
|
||||
LocalizationStore.addChangeListener(this.localizationChanged);
|
||||
|
||||
// Get our localizaiton
|
||||
GlobalActions.loadDefaultLocale();
|
||||
GlobalActions.loadCurrentLocale();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
|
||||
@@ -90,28 +90,8 @@ export default class Sidebar extends React.Component {
|
||||
}
|
||||
|
||||
getTotalUnreadCount() {
|
||||
let msgs = 0;
|
||||
let mentions = 0;
|
||||
const unreadCounts = this.state.unreadCounts;
|
||||
const teamMembers = this.state.teamMembers;
|
||||
|
||||
teamMembers.forEach((member) => {
|
||||
if (member.team_id !== this.state.currentTeam.id) {
|
||||
msgs += member.msg_count || 0;
|
||||
mentions += member.mention_count || 0;
|
||||
}
|
||||
});
|
||||
|
||||
Object.keys(unreadCounts).forEach((chId) => {
|
||||
const channel = ChannelStore.get(chId);
|
||||
|
||||
if (channel && (channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL || channel.team_id === this.state.currentTeam.id)) {
|
||||
msgs += unreadCounts[chId].msgs;
|
||||
mentions += unreadCounts[chId].mentions;
|
||||
}
|
||||
});
|
||||
|
||||
return {msgs, mentions};
|
||||
const unreads = ChannelUtils.getCountsStateFromStores(this.state.currentTeam, this.state.teamMembers, this.state.unreadCounts);
|
||||
return {msgs: unreads.messageCount, mentions: unreads.mentionCount};
|
||||
}
|
||||
|
||||
getStateFromStores() {
|
||||
|
||||
@@ -144,9 +144,8 @@ export default class SignupController extends React.Component {
|
||||
key='email'
|
||||
to={'/signup_email' + window.location.search}
|
||||
>
|
||||
|
||||
<span className='icon fa fa-envelope'/>
|
||||
<span>
|
||||
<span className='icon fa fa-envelope'/>
|
||||
<FormattedMessage
|
||||
id='signup.email'
|
||||
defaultMessage='Email and Password'
|
||||
@@ -163,12 +162,14 @@ export default class SignupController extends React.Component {
|
||||
key='gitlab'
|
||||
href={Client.getOAuthRoute() + '/gitlab/signup' + window.location.search}
|
||||
>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.gitlab'
|
||||
defaultMessage='GitLab Single-Sign-On'
|
||||
/>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.gitlab'
|
||||
defaultMessage='GitLab Single-Sign-On'
|
||||
/>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
@@ -181,12 +182,14 @@ export default class SignupController extends React.Component {
|
||||
key='google'
|
||||
href={Client.getOAuthRoute() + '/google/signup' + window.location.search}
|
||||
>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.google'
|
||||
defaultMessage='Google Account'
|
||||
/>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.google'
|
||||
defaultMessage='Google Account'
|
||||
/>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
@@ -199,12 +202,14 @@ export default class SignupController extends React.Component {
|
||||
key='office365'
|
||||
href={Client.getOAuthRoute() + '/office365/signup' + window.location.search}
|
||||
>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.office365'
|
||||
defaultMessage='Office 365'
|
||||
/>
|
||||
<span className='icon'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.office365'
|
||||
defaultMessage='Office 365'
|
||||
/>
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
@@ -217,12 +222,14 @@ export default class SignupController extends React.Component {
|
||||
key='ldap'
|
||||
to={'/signup_ldap' + window.location.search}
|
||||
>
|
||||
<span className='icon fa fa-folder-open fa--margin-top'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.ldap'
|
||||
defaultMessage='AD/LDAP Credentials'
|
||||
/>
|
||||
<span className='icon fa fa-folder-open fa--margin-top'/>
|
||||
<span>
|
||||
<FormattedMessage
|
||||
id='signup.ldap'
|
||||
defaultMessage='AD/LDAP Credentials'
|
||||
/>
|
||||
</span>
|
||||
</span>
|
||||
</Link>
|
||||
);
|
||||
@@ -242,9 +249,11 @@ export default class SignupController extends React.Component {
|
||||
key='saml'
|
||||
href={'/login/sso/saml' + window.location.search + query}
|
||||
>
|
||||
<span className='icon fa fa-lock fa--margin-top'/>
|
||||
<span>
|
||||
{global.window.mm_config.SamlLoginButtonText}
|
||||
<span className='icon fa fa-lock fa--margin-top'/>
|
||||
<span>
|
||||
{global.window.mm_config.SamlLoginButtonText}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
);
|
||||
|
||||
@@ -33,12 +33,10 @@ export default class ManageLanguage extends React.Component {
|
||||
changeLanguage(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var user = this.props.user;
|
||||
var locale = this.state.locale;
|
||||
|
||||
user.locale = locale;
|
||||
|
||||
this.submitUser(user);
|
||||
this.submitUser({
|
||||
...this.props.user,
|
||||
locale: this.state.locale
|
||||
});
|
||||
}
|
||||
submitUser(user) {
|
||||
updateUser(user, Constants.UserUpdateEvents.LANGUAGE,
|
||||
|
||||
Reference in New Issue
Block a user