mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
added team-wide and channel-wide mentions
This commit is contained in:
14
api/post.go
14
api/post.go
@@ -273,7 +273,7 @@ func fireAndForgetNotifications(post *model.Post, teamId, teamUrl string) {
|
||||
|
||||
} else {
|
||||
|
||||
// Find out who is a member of the channel only keep those profiles
|
||||
// Find out who is a member of the channel, only keep those profiles
|
||||
if eResult := <-echan; eResult.Err != nil {
|
||||
l4g.Error("Failed to get channel members channel_id=%v err=%v", post.ChannelId, eResult.Err.Message)
|
||||
return
|
||||
@@ -306,13 +306,23 @@ func fireAndForgetNotifications(post *model.Post, teamId, teamUrl string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add @all to keywords if user has them turned on
|
||||
if profile.NotifyProps["all"] == "true" {
|
||||
keywordMap["@all"] = append(keywordMap["@all"], profile.Id)
|
||||
}
|
||||
|
||||
// Add @channel to keywords if user has them turned on
|
||||
if profile.NotifyProps["channel"] == "true" {
|
||||
keywordMap["@channel"] = append(keywordMap["@channel"], profile.Id)
|
||||
}
|
||||
}
|
||||
|
||||
// Build a map as a list of unique user_ids that are mentioned in this post
|
||||
splitF := func(c rune) bool {
|
||||
return model.SplitRunes[c]
|
||||
}
|
||||
splitMessage := strings.FieldsFunc(strings.Replace(post.Message, "<br>", " ", -1), splitF)
|
||||
splitMessage := strings.FieldsFunc(post.Message, splitF)
|
||||
for _, word := range splitMessage {
|
||||
|
||||
// Non-case-sensitive check for regular keys
|
||||
|
||||
@@ -148,9 +148,12 @@ func (u *User) SetDefaultNotifications() {
|
||||
u.NotifyProps["desktop"] = USER_NOTIFY_ALL
|
||||
u.NotifyProps["desktop_sound"] = "true"
|
||||
u.NotifyProps["mention_keys"] = u.Username
|
||||
u.NotifyProps["first_name"] = "true"
|
||||
u.NotifyProps["first_name"] = "false"
|
||||
u.NotifyProps["all"] = "true"
|
||||
u.NotifyProps["channel"] = "true"
|
||||
splitName := strings.Split(u.FullName, " ")
|
||||
if len(splitName) > 0 && splitName[0] != "" {
|
||||
u.NotifyProps["first_name"] = "true"
|
||||
u.NotifyProps["mention_keys"] += "," + splitName[0]
|
||||
}
|
||||
}
|
||||
@@ -277,17 +280,17 @@ func ComparePassword(hash string, password string) bool {
|
||||
|
||||
func IsUsernameValid(username string) bool {
|
||||
|
||||
var restrictedUsernames = []string {
|
||||
var restrictedUsernames = []string{
|
||||
BOT_USERNAME,
|
||||
"all",
|
||||
"channel",
|
||||
}
|
||||
|
||||
for _,restrictedUsername := range restrictedUsernames {
|
||||
for _, restrictedUsername := range restrictedUsernames {
|
||||
if username == restrictedUsername {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -20,11 +20,10 @@ function getNotificationsStateFromStores() {
|
||||
var mention_key = false;
|
||||
var custom_keys = "";
|
||||
var first_name_key = false;
|
||||
var all_key = false;
|
||||
var channel_key = false;
|
||||
|
||||
if (!user.notify_props) {
|
||||
mention_keys = user.username;
|
||||
if (user.full_name.length > 0) mention_keys += ","+ user.full_name.split(" ")[0];
|
||||
} else {
|
||||
if (user.notify_props) {
|
||||
if (user.notify_props.mention_keys !== undefined) {
|
||||
var keys = user.notify_props.mention_keys.split(',');
|
||||
|
||||
@@ -48,9 +47,17 @@ function getNotificationsStateFromStores() {
|
||||
if (user.notify_props.first_name !== undefined) {
|
||||
first_name_key = user.notify_props.first_name === "true";
|
||||
}
|
||||
|
||||
if (user.notify_props.all !== undefined) {
|
||||
all_key = user.notify_props.all === "true";
|
||||
}
|
||||
|
||||
if (user.notify_props.channel !== undefined) {
|
||||
channel_key = user.notify_props.channel === "true";
|
||||
}
|
||||
}
|
||||
|
||||
return { notify_level: desktop, enable_email: email, enable_sound: sound, username_key: username_key, mention_key: mention_key, custom_keys: custom_keys, custom_keys_checked: custom_keys.length > 0, first_name_key: first_name_key };
|
||||
return { notify_level: desktop, enable_email: email, enable_sound: sound, username_key: username_key, mention_key: mention_key, custom_keys: custom_keys, custom_keys_checked: custom_keys.length > 0, first_name_key: first_name_key, all_key: all_key, channel_key: channel_key };
|
||||
}
|
||||
|
||||
|
||||
@@ -73,6 +80,8 @@ var NotificationsTab = React.createClass({
|
||||
|
||||
data["mention_keys"] = string_keys;
|
||||
data["first_name"] = this.state.first_name_key ? "true" : "false";
|
||||
data["all"] = this.state.all_key ? "true" : "false";
|
||||
data["channel"] = this.state.channel_key ? "true" : "false";
|
||||
|
||||
client.updateUserNotifyProps(data,
|
||||
function(data) {
|
||||
@@ -120,6 +129,12 @@ var NotificationsTab = React.createClass({
|
||||
updateFirstNameKey: function(val) {
|
||||
this.setState({ first_name_key: val });
|
||||
},
|
||||
updateAllKey: function(val) {
|
||||
this.setState({ all_key: val });
|
||||
},
|
||||
updateChannelKey: function(val) {
|
||||
this.setState({ channel_key: val });
|
||||
},
|
||||
updateCustomMentionKeys: function() {
|
||||
var checked = this.refs.customcheck.getDOMNode().checked;
|
||||
|
||||
@@ -339,6 +354,26 @@ var NotificationsTab = React.createClass({
|
||||
</div>
|
||||
);
|
||||
|
||||
inputs.push(
|
||||
<div>
|
||||
<div className="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" checked={this.state.all_key} onChange={function(e){self.updateAllKey(e.target.checked);}}>{'Team-wide mentions "@all"'}</input>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
inputs.push(
|
||||
<div>
|
||||
<div className="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" checked={this.state.channel_key} onChange={function(e){self.updateChannelKey(e.target.checked);}}>{'Channel-wide mentions "@channel"'}</input>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
inputs.push(
|
||||
<div>
|
||||
<div className="checkbox">
|
||||
@@ -369,6 +404,8 @@ var NotificationsTab = React.createClass({
|
||||
}
|
||||
if (this.state.username_key) keys.push(this.props.user.username);
|
||||
if (this.state.mention_key) keys.push('@'+this.props.user.username);
|
||||
if (this.state.all_key) keys.push('@all');
|
||||
if (this.state.channel_key) keys.push('@channel');
|
||||
if (this.state.custom_keys.length > 0) keys = keys.concat(this.state.custom_keys.split(','));
|
||||
|
||||
var describe = "";
|
||||
|
||||
Reference in New Issue
Block a user