github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/app/export_converters.go (about) 1 // Copyright (c) 2015-present Xenia, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package app 5 6 import ( 7 "strings" 8 9 "github.com/xzl8028/xenia-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 if member.SchemeGuest { 95 rolesList = append(rolesList, model.TEAM_GUEST_ROLE_ID) 96 } 97 roles := strings.Join(rolesList, " ") 98 return &UserTeamImportData{ 99 Name: &member.TeamName, 100 Roles: &roles, 101 } 102 } 103 104 func ImportUserChannelDataFromChannelMemberAndPreferences(member *model.ChannelMemberForExport, preferences *model.Preferences) *UserChannelImportData { 105 rolesList := strings.Fields(member.Roles) 106 if member.SchemeAdmin { 107 rolesList = append(rolesList, model.CHANNEL_ADMIN_ROLE_ID) 108 } 109 if member.SchemeUser { 110 rolesList = append(rolesList, model.CHANNEL_USER_ROLE_ID) 111 } 112 if member.SchemeGuest { 113 rolesList = append(rolesList, model.CHANNEL_GUEST_ROLE_ID) 114 } 115 props := member.NotifyProps 116 notifyProps := UserChannelNotifyPropsImportData{} 117 118 desktop, exist := props[model.DESKTOP_NOTIFY_PROP] 119 if exist { 120 notifyProps.Desktop = &desktop 121 } 122 mobile, exist := props[model.PUSH_NOTIFY_PROP] 123 if exist { 124 notifyProps.Mobile = &mobile 125 } 126 markUnread, exist := props[model.MARK_UNREAD_NOTIFY_PROP] 127 if exist { 128 notifyProps.MarkUnread = &markUnread 129 } 130 131 favorite := false 132 for _, preference := range *preferences { 133 if member.ChannelId == preference.Name { 134 favorite = true 135 } 136 } 137 138 roles := strings.Join(rolesList, " ") 139 return &UserChannelImportData{ 140 Name: &member.ChannelName, 141 Roles: &roles, 142 NotifyProps: ¬ifyProps, 143 Favorite: &favorite, 144 } 145 } 146 147 func ImportLineForPost(post *model.PostForExport) *LineImportData { 148 return &LineImportData{ 149 Type: "post", 150 Post: &PostImportData{ 151 Team: &post.TeamName, 152 Channel: &post.ChannelName, 153 User: &post.Username, 154 Message: &post.Message, 155 CreateAt: &post.CreateAt, 156 }, 157 } 158 } 159 160 func ImportLineForDirectPost(post *model.DirectPostForExport) *LineImportData { 161 return &LineImportData{ 162 Type: "direct_post", 163 DirectPost: &DirectPostImportData{ 164 ChannelMembers: post.ChannelMembers, 165 User: &post.User, 166 Message: &post.Message, 167 CreateAt: &post.CreateAt, 168 }, 169 } 170 } 171 172 func ImportReplyFromPost(post *model.ReplyForExport) *ReplyImportData { 173 return &ReplyImportData{ 174 User: &post.Username, 175 Message: &post.Message, 176 CreateAt: &post.CreateAt, 177 } 178 } 179 180 func ImportReactionFromPost(user *model.User, reaction *model.Reaction) *ReactionImportData { 181 return &ReactionImportData{ 182 User: &user.Username, 183 EmojiName: &reaction.EmojiName, 184 CreateAt: &reaction.CreateAt, 185 } 186 } 187 188 func ImportLineFromEmoji(emoji *model.Emoji, filePath string) *LineImportData { 189 return &LineImportData{ 190 Type: "emoji", 191 Emoji: &EmojiImportData{ 192 Name: &emoji.Name, 193 Image: &filePath, 194 }, 195 } 196 }