summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2015-12-07 08:48:37 -0500
committerChristopher Speller <crspeller@gmail.com>2015-12-07 08:48:37 -0500
commit2a1788650fdda22afb491f834600a4b9ed7c4714 (patch)
treeb0b3cb6504935e1a9a439e9d45e063d9c5ad2c51
parentdbb42939aa596de5b549e8436fe059b14242303a (diff)
parent18d29a19e5ec7e4b52a79ec77bff6cc9a63cd5e9 (diff)
downloadchat-2a1788650fdda22afb491f834600a4b9ed7c4714.tar.gz
chat-2a1788650fdda22afb491f834600a4b9ed7c4714.tar.bz2
chat-2a1788650fdda22afb491f834600a4b9ed7c4714.zip
Merge pull request #1616 from florianorben/PLT-1380
PLT-1380: Post system message when user updates channel header
-rw-r--r--api/channel.go34
-rw-r--r--model/post.go3
-rw-r--r--web/react/components/post.jsx2
3 files changed, 36 insertions, 3 deletions
diff --git a/api/channel.go b/api/channel.go
index 6fa6ec295..659121bf0 100644
--- a/api/channel.go
+++ b/api/channel.go
@@ -268,19 +268,51 @@ func updateChannelHeader(c *Context, w http.ResponseWriter, r *http.Request) {
if !c.HasPermissionsToTeam(channel.TeamId, "updateChannelHeader") {
return
}
-
+ oldChannelHeader := channel.Header
channel.Header = channelHeader
if ucresult := <-Srv.Store.Channel().Update(channel); ucresult.Err != nil {
c.Err = ucresult.Err
return
} else {
+ PostUpdateChannelHeaderMessageAndForget(c, channel.Id, oldChannelHeader, channelHeader)
c.LogAudit("name=" + channel.Name)
w.Write([]byte(channel.ToJson()))
}
}
}
+func PostUpdateChannelHeaderMessageAndForget(c *Context, channelId string, oldChannelHeader, newChannelHeader string) {
+ go func() {
+ uc := Srv.Store.User().Get(c.Session.UserId)
+
+ if uresult := <-uc; uresult.Err != nil {
+ l4g.Error("Failed to retrieve user while trying to save update channel header message %v", uresult.Err)
+ return
+ } else {
+ user := uresult.Data.(*model.User)
+
+ var message string
+ if oldChannelHeader == "" {
+ message = fmt.Sprintf("%s updated the channel header to: %s", user.Username, newChannelHeader)
+ } else if newChannelHeader == "" {
+ message = fmt.Sprintf("%s removed the channel header (was: %s)", user.Username, oldChannelHeader)
+ } else {
+ message = fmt.Sprintf("%s updated the channel header from: %s to: %s", user.Username, oldChannelHeader, newChannelHeader)
+ }
+
+ post := &model.Post{
+ ChannelId: channelId,
+ Message: message,
+ Type: model.POST_HEADER_CHANGE,
+ }
+ if _, err := CreatePost(c, post, false); err != nil {
+ l4g.Error("Failed to post join/leave message %v", err)
+ }
+ }
+ }()
+}
+
func updateChannelPurpose(c *Context, w http.ResponseWriter, r *http.Request) {
props := model.MapFromJson(r.Body)
channelId := props["channel_id"]
diff --git a/model/post.go b/model/post.go
index 2c90d8b7b..5c86ce70d 100644
--- a/model/post.go
+++ b/model/post.go
@@ -14,6 +14,7 @@ const (
POST_DEFAULT = ""
POST_SLACK_ATTACHMENT = "slack_attachment"
POST_JOIN_LEAVE = "system_join_leave"
+ POST_HEADER_CHANGE = "system_header_change"
)
type Post struct {
@@ -105,7 +106,7 @@ func (o *Post) IsValid() *AppError {
}
// should be removed once more message types are supported
- if !(o.Type == POST_DEFAULT || o.Type == POST_JOIN_LEAVE || o.Type == POST_SLACK_ATTACHMENT) {
+ if !(o.Type == POST_DEFAULT || o.Type == POST_JOIN_LEAVE || o.Type == POST_SLACK_ATTACHMENT || o.Type == POST_HEADER_CHANGE) {
return NewAppError("Post.IsValid", "Invalid type", "id="+o.Type)
}
diff --git a/web/react/components/post.jsx b/web/react/components/post.jsx
index 786a4a325..695d7daef 100644
--- a/web/react/components/post.jsx
+++ b/web/react/components/post.jsx
@@ -152,7 +152,7 @@ export default class Post extends React.Component {
}
let currentUserCss = '';
- if (UserStore.getCurrentId() === post.user_id && !post.props.from_webhook) {
+ if (UserStore.getCurrentId() === post.user_id && !post.props.from_webhook && !utils.isSystemMessage(post)) {
currentUserCss = 'current--user';
}