Merge branch 'release-3.9' into merge-3.9

This commit is contained in:
JoramWilander
2017-05-12 08:00:28 -04:00
66 changed files with 799 additions and 494 deletions

View File

@@ -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;
}
}
}

View File

@@ -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(

View File

@@ -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>
);

View File

@@ -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) {

View File

@@ -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 {

View File

@@ -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() {

View File

@@ -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() {

View File

@@ -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>
);

View File

@@ -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,