github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/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/mattermost/mattermost-server/v5/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 channelMembers := *channel.Members 43 if len(channelMembers) == 1 { 44 channelMembers = []string{channelMembers[0], channelMembers[0]} 45 } 46 return &LineImportData{ 47 Type: "direct_channel", 48 DirectChannel: &DirectChannelImportData{ 49 Header: &channel.Header, 50 Members: &channelMembers, 51 }, 52 } 53 } 54 55 func ImportLineFromUser(user *model.User, exportedPrefs map[string]*string) *LineImportData { 56 // Bulk Importer doesn't accept "empty string" for AuthService. 57 var authService *string 58 if user.AuthService != "" { 59 authService = &user.AuthService 60 } 61 62 return &LineImportData{ 63 Type: "user", 64 User: &UserImportData{ 65 Username: &user.Username, 66 Email: &user.Email, 67 AuthService: authService, 68 AuthData: user.AuthData, 69 Nickname: &user.Nickname, 70 FirstName: &user.FirstName, 71 LastName: &user.LastName, 72 Position: &user.Position, 73 Roles: &user.Roles, 74 Locale: &user.Locale, 75 UseMarkdownPreview: exportedPrefs["UseMarkdownPreview"], 76 UseFormatting: exportedPrefs["UseFormatting"], 77 ShowUnreadSection: exportedPrefs["ShowUnreadSection"], 78 Theme: exportedPrefs["Theme"], 79 UseMilitaryTime: exportedPrefs["UseMilitaryTime"], 80 CollapsePreviews: exportedPrefs["CollapsePreviews"], 81 MessageDisplay: exportedPrefs["MessageDisplay"], 82 ChannelDisplayMode: exportedPrefs["ChannelDisplayMode"], 83 TutorialStep: exportedPrefs["TutorialStep"], 84 EmailInterval: exportedPrefs["EmailInterval"], 85 DeleteAt: &user.DeleteAt, 86 }, 87 } 88 } 89 90 func ImportUserTeamDataFromTeamMember(member *model.TeamMemberForExport) *UserTeamImportData { 91 rolesList := strings.Fields(member.Roles) 92 if member.SchemeAdmin { 93 rolesList = append(rolesList, model.TEAM_ADMIN_ROLE_ID) 94 } 95 if member.SchemeUser { 96 rolesList = append(rolesList, model.TEAM_USER_ROLE_ID) 97 } 98 if member.SchemeGuest { 99 rolesList = append(rolesList, model.TEAM_GUEST_ROLE_ID) 100 } 101 roles := strings.Join(rolesList, " ") 102 return &UserTeamImportData{ 103 Name: &member.TeamName, 104 Roles: &roles, 105 } 106 } 107 108 func ImportUserChannelDataFromChannelMemberAndPreferences(member *model.ChannelMemberForExport, preferences *model.Preferences) *UserChannelImportData { 109 rolesList := strings.Fields(member.Roles) 110 if member.SchemeAdmin { 111 rolesList = append(rolesList, model.CHANNEL_ADMIN_ROLE_ID) 112 } 113 if member.SchemeUser { 114 rolesList = append(rolesList, model.CHANNEL_USER_ROLE_ID) 115 } 116 if member.SchemeGuest { 117 rolesList = append(rolesList, model.CHANNEL_GUEST_ROLE_ID) 118 } 119 props := member.NotifyProps 120 notifyProps := UserChannelNotifyPropsImportData{} 121 122 desktop, exist := props[model.DESKTOP_NOTIFY_PROP] 123 if exist { 124 notifyProps.Desktop = &desktop 125 } 126 mobile, exist := props[model.PUSH_NOTIFY_PROP] 127 if exist { 128 notifyProps.Mobile = &mobile 129 } 130 markUnread, exist := props[model.MARK_UNREAD_NOTIFY_PROP] 131 if exist { 132 notifyProps.MarkUnread = &markUnread 133 } 134 135 favorite := false 136 for _, preference := range *preferences { 137 if member.ChannelId == preference.Name { 138 favorite = true 139 } 140 } 141 142 roles := strings.Join(rolesList, " ") 143 return &UserChannelImportData{ 144 Name: &member.ChannelName, 145 Roles: &roles, 146 NotifyProps: ¬ifyProps, 147 Favorite: &favorite, 148 } 149 } 150 151 func ImportLineForPost(post *model.PostForExport) *LineImportData { 152 return &LineImportData{ 153 Type: "post", 154 Post: &PostImportData{ 155 Team: &post.TeamName, 156 Channel: &post.ChannelName, 157 User: &post.Username, 158 Message: &post.Message, 159 Props: &post.Props, 160 CreateAt: &post.CreateAt, 161 }, 162 } 163 } 164 165 func ImportLineForDirectPost(post *model.DirectPostForExport) *LineImportData { 166 channelMembers := *post.ChannelMembers 167 if len(channelMembers) == 1 { 168 channelMembers = []string{channelMembers[0], channelMembers[0]} 169 } 170 return &LineImportData{ 171 Type: "direct_post", 172 DirectPost: &DirectPostImportData{ 173 ChannelMembers: &channelMembers, 174 User: &post.User, 175 Message: &post.Message, 176 Props: &post.Props, 177 CreateAt: &post.CreateAt, 178 }, 179 } 180 } 181 182 func ImportReplyFromPost(post *model.ReplyForExport) *ReplyImportData { 183 return &ReplyImportData{ 184 User: &post.Username, 185 Message: &post.Message, 186 CreateAt: &post.CreateAt, 187 } 188 } 189 190 func ImportReactionFromPost(user *model.User, reaction *model.Reaction) *ReactionImportData { 191 return &ReactionImportData{ 192 User: &user.Username, 193 EmojiName: &reaction.EmojiName, 194 CreateAt: &reaction.CreateAt, 195 } 196 } 197 198 func ImportLineFromEmoji(emoji *model.Emoji, filePath string) *LineImportData { 199 return &LineImportData{ 200 Type: "emoji", 201 Emoji: &EmojiImportData{ 202 Name: &emoji.Name, 203 Image: &filePath, 204 }, 205 } 206 }