github.com/crspeller/mattermost-server@v0.0.0-20190328001957-a200beb3d111/app/export_converters.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package app 5 6 import ( 7 "strings" 8 9 "github.com/crspeller/mattermost-server/model" 10 ) 11 12 func ImportLineFromTeam(team *model.TeamForExport) *LineImportData { 13 return &LineImportData{ 14 Type: "team", 15 Team: &TeamImportData{ 16 Name: &team.Name, 17 DisplayName: &team.DisplayName, 18 Type: &team.Type, 19 Description: &team.Description, 20 AllowOpenInvite: &team.AllowOpenInvite, 21 Scheme: team.SchemeName, 22 }, 23 } 24 } 25 26 func ImportLineFromChannel(channel *model.ChannelForExport) *LineImportData { 27 return &LineImportData{ 28 Type: "channel", 29 Channel: &ChannelImportData{ 30 Team: &channel.TeamName, 31 Name: &channel.Name, 32 DisplayName: &channel.DisplayName, 33 Type: &channel.Type, 34 Header: &channel.Header, 35 Purpose: &channel.Purpose, 36 Scheme: channel.SchemeName, 37 }, 38 } 39 } 40 41 func ImportLineFromDirectChannel(channel *model.DirectChannelForExport) *LineImportData { 42 return &LineImportData{ 43 Type: "direct_channel", 44 DirectChannel: &DirectChannelImportData{ 45 Header: &channel.Header, 46 Members: channel.Members, 47 }, 48 } 49 } 50 51 func ImportLineFromUser(user *model.User, exportedPrefs map[string]*string) *LineImportData { 52 // Bulk Importer doesn't accept "empty string" for AuthService. 53 var authService *string 54 if user.AuthService != "" { 55 authService = &user.AuthService 56 } 57 58 return &LineImportData{ 59 Type: "user", 60 User: &UserImportData{ 61 Username: &user.Username, 62 Email: &user.Email, 63 AuthService: authService, 64 AuthData: user.AuthData, 65 Nickname: &user.Nickname, 66 FirstName: &user.FirstName, 67 LastName: &user.LastName, 68 Position: &user.Position, 69 Roles: &user.Roles, 70 Locale: &user.Locale, 71 UseMarkdownPreview: exportedPrefs["UseMarkdownPreview"], 72 UseFormatting: exportedPrefs["UseFormatting"], 73 ShowUnreadSection: exportedPrefs["ShowUnreadSection"], 74 Theme: exportedPrefs["Theme"], 75 UseMilitaryTime: exportedPrefs["UseMilitaryTime"], 76 CollapsePreviews: exportedPrefs["CollapsePreviews"], 77 MessageDisplay: exportedPrefs["MessageDisplay"], 78 ChannelDisplayMode: exportedPrefs["ChannelDisplayMode"], 79 TutorialStep: exportedPrefs["TutorialStep"], 80 EmailInterval: exportedPrefs["EmailInterval"], 81 DeleteAt: &user.DeleteAt, 82 }, 83 } 84 } 85 86 func ImportUserTeamDataFromTeamMember(member *model.TeamMemberForExport) *UserTeamImportData { 87 rolesList := strings.Fields(member.Roles) 88 if member.SchemeAdmin { 89 rolesList = append(rolesList, model.TEAM_ADMIN_ROLE_ID) 90 } 91 if member.SchemeUser { 92 rolesList = append(rolesList, model.TEAM_USER_ROLE_ID) 93 } 94 roles := strings.Join(rolesList, " ") 95 return &UserTeamImportData{ 96 Name: &member.TeamName, 97 Roles: &roles, 98 } 99 } 100 101 func ImportUserChannelDataFromChannelMemberAndPreferences(member *model.ChannelMemberForExport, preferences *model.Preferences) *UserChannelImportData { 102 rolesList := strings.Fields(member.Roles) 103 if member.SchemeAdmin { 104 rolesList = append(rolesList, model.CHANNEL_ADMIN_ROLE_ID) 105 } 106 if member.SchemeUser { 107 rolesList = append(rolesList, model.CHANNEL_USER_ROLE_ID) 108 } 109 props := member.NotifyProps 110 notifyProps := UserChannelNotifyPropsImportData{} 111 112 desktop, exist := props[model.DESKTOP_NOTIFY_PROP] 113 if exist { 114 notifyProps.Desktop = &desktop 115 } 116 mobile, exist := props[model.PUSH_NOTIFY_PROP] 117 if exist { 118 notifyProps.Mobile = &mobile 119 } 120 markUnread, exist := props[model.MARK_UNREAD_NOTIFY_PROP] 121 if exist { 122 notifyProps.MarkUnread = &markUnread 123 } 124 125 favorite := false 126 for _, preference := range *preferences { 127 if member.ChannelId == preference.Name { 128 favorite = true 129 } 130 } 131 132 roles := strings.Join(rolesList, " ") 133 return &UserChannelImportData{ 134 Name: &member.ChannelName, 135 Roles: &roles, 136 NotifyProps: ¬ifyProps, 137 Favorite: &favorite, 138 } 139 } 140 141 func ImportLineForPost(post *model.PostForExport) *LineImportData { 142 return &LineImportData{ 143 Type: "post", 144 Post: &PostImportData{ 145 Team: &post.TeamName, 146 Channel: &post.ChannelName, 147 User: &post.Username, 148 Message: &post.Message, 149 CreateAt: &post.CreateAt, 150 }, 151 } 152 } 153 154 func ImportLineForDirectPost(post *model.DirectPostForExport) *LineImportData { 155 return &LineImportData{ 156 Type: "direct_post", 157 DirectPost: &DirectPostImportData{ 158 ChannelMembers: post.ChannelMembers, 159 User: &post.User, 160 Message: &post.Message, 161 CreateAt: &post.CreateAt, 162 }, 163 } 164 } 165 166 func ImportReplyFromPost(post *model.ReplyForExport) *ReplyImportData { 167 return &ReplyImportData{ 168 User: &post.Username, 169 Message: &post.Message, 170 CreateAt: &post.CreateAt, 171 } 172 } 173 174 func ImportReactionFromPost(user *model.User, reaction *model.Reaction) *ReactionImportData { 175 return &ReactionImportData{ 176 User: &user.Username, 177 EmojiName: &reaction.EmojiName, 178 CreateAt: &reaction.CreateAt, 179 } 180 } 181 182 func ImportLineFromEmoji(emoji *model.Emoji, filePath string) *LineImportData { 183 return &LineImportData{ 184 Type: "emoji", 185 Emoji: &EmojiImportData{ 186 Name: &emoji.Name, 187 Image: &filePath, 188 }, 189 } 190 }