mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
* add support for exporting and importing props * merge master * add export test for post props * add check if postData exists * add import tests for post props * fix ci bot issues Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> * fix gofmt errors * remove test comment and add name instead * remove uneccessary changes Co-authored-by: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com>
207 lines
5.6 KiB
Go
207 lines
5.6 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package app
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/mattermost/mattermost-server/v5/model"
|
|
)
|
|
|
|
func ImportLineFromTeam(team *model.TeamForExport) *LineImportData {
|
|
return &LineImportData{
|
|
Type: "team",
|
|
Team: &TeamImportData{
|
|
Name: &team.Name,
|
|
DisplayName: &team.DisplayName,
|
|
Type: &team.Type,
|
|
Description: &team.Description,
|
|
AllowOpenInvite: &team.AllowOpenInvite,
|
|
Scheme: team.SchemeName,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ImportLineFromChannel(channel *model.ChannelForExport) *LineImportData {
|
|
return &LineImportData{
|
|
Type: "channel",
|
|
Channel: &ChannelImportData{
|
|
Team: &channel.TeamName,
|
|
Name: &channel.Name,
|
|
DisplayName: &channel.DisplayName,
|
|
Type: &channel.Type,
|
|
Header: &channel.Header,
|
|
Purpose: &channel.Purpose,
|
|
Scheme: channel.SchemeName,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ImportLineFromDirectChannel(channel *model.DirectChannelForExport) *LineImportData {
|
|
channelMembers := *channel.Members
|
|
if len(channelMembers) == 1 {
|
|
channelMembers = []string{channelMembers[0], channelMembers[0]}
|
|
}
|
|
return &LineImportData{
|
|
Type: "direct_channel",
|
|
DirectChannel: &DirectChannelImportData{
|
|
Header: &channel.Header,
|
|
Members: &channelMembers,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ImportLineFromUser(user *model.User, exportedPrefs map[string]*string) *LineImportData {
|
|
// Bulk Importer doesn't accept "empty string" for AuthService.
|
|
var authService *string
|
|
if user.AuthService != "" {
|
|
authService = &user.AuthService
|
|
}
|
|
|
|
return &LineImportData{
|
|
Type: "user",
|
|
User: &UserImportData{
|
|
Username: &user.Username,
|
|
Email: &user.Email,
|
|
AuthService: authService,
|
|
AuthData: user.AuthData,
|
|
Nickname: &user.Nickname,
|
|
FirstName: &user.FirstName,
|
|
LastName: &user.LastName,
|
|
Position: &user.Position,
|
|
Roles: &user.Roles,
|
|
Locale: &user.Locale,
|
|
UseMarkdownPreview: exportedPrefs["UseMarkdownPreview"],
|
|
UseFormatting: exportedPrefs["UseFormatting"],
|
|
ShowUnreadSection: exportedPrefs["ShowUnreadSection"],
|
|
Theme: exportedPrefs["Theme"],
|
|
UseMilitaryTime: exportedPrefs["UseMilitaryTime"],
|
|
CollapsePreviews: exportedPrefs["CollapsePreviews"],
|
|
MessageDisplay: exportedPrefs["MessageDisplay"],
|
|
ChannelDisplayMode: exportedPrefs["ChannelDisplayMode"],
|
|
TutorialStep: exportedPrefs["TutorialStep"],
|
|
EmailInterval: exportedPrefs["EmailInterval"],
|
|
DeleteAt: &user.DeleteAt,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ImportUserTeamDataFromTeamMember(member *model.TeamMemberForExport) *UserTeamImportData {
|
|
rolesList := strings.Fields(member.Roles)
|
|
if member.SchemeAdmin {
|
|
rolesList = append(rolesList, model.TEAM_ADMIN_ROLE_ID)
|
|
}
|
|
if member.SchemeUser {
|
|
rolesList = append(rolesList, model.TEAM_USER_ROLE_ID)
|
|
}
|
|
if member.SchemeGuest {
|
|
rolesList = append(rolesList, model.TEAM_GUEST_ROLE_ID)
|
|
}
|
|
roles := strings.Join(rolesList, " ")
|
|
return &UserTeamImportData{
|
|
Name: &member.TeamName,
|
|
Roles: &roles,
|
|
}
|
|
}
|
|
|
|
func ImportUserChannelDataFromChannelMemberAndPreferences(member *model.ChannelMemberForExport, preferences *model.Preferences) *UserChannelImportData {
|
|
rolesList := strings.Fields(member.Roles)
|
|
if member.SchemeAdmin {
|
|
rolesList = append(rolesList, model.CHANNEL_ADMIN_ROLE_ID)
|
|
}
|
|
if member.SchemeUser {
|
|
rolesList = append(rolesList, model.CHANNEL_USER_ROLE_ID)
|
|
}
|
|
if member.SchemeGuest {
|
|
rolesList = append(rolesList, model.CHANNEL_GUEST_ROLE_ID)
|
|
}
|
|
props := member.NotifyProps
|
|
notifyProps := UserChannelNotifyPropsImportData{}
|
|
|
|
desktop, exist := props[model.DESKTOP_NOTIFY_PROP]
|
|
if exist {
|
|
notifyProps.Desktop = &desktop
|
|
}
|
|
mobile, exist := props[model.PUSH_NOTIFY_PROP]
|
|
if exist {
|
|
notifyProps.Mobile = &mobile
|
|
}
|
|
markUnread, exist := props[model.MARK_UNREAD_NOTIFY_PROP]
|
|
if exist {
|
|
notifyProps.MarkUnread = &markUnread
|
|
}
|
|
|
|
favorite := false
|
|
for _, preference := range *preferences {
|
|
if member.ChannelId == preference.Name {
|
|
favorite = true
|
|
}
|
|
}
|
|
|
|
roles := strings.Join(rolesList, " ")
|
|
return &UserChannelImportData{
|
|
Name: &member.ChannelName,
|
|
Roles: &roles,
|
|
NotifyProps: ¬ifyProps,
|
|
Favorite: &favorite,
|
|
}
|
|
}
|
|
|
|
func ImportLineForPost(post *model.PostForExport) *LineImportData {
|
|
return &LineImportData{
|
|
Type: "post",
|
|
Post: &PostImportData{
|
|
Team: &post.TeamName,
|
|
Channel: &post.ChannelName,
|
|
User: &post.Username,
|
|
Message: &post.Message,
|
|
Props: &post.Props,
|
|
CreateAt: &post.CreateAt,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ImportLineForDirectPost(post *model.DirectPostForExport) *LineImportData {
|
|
channelMembers := *post.ChannelMembers
|
|
if len(channelMembers) == 1 {
|
|
channelMembers = []string{channelMembers[0], channelMembers[0]}
|
|
}
|
|
return &LineImportData{
|
|
Type: "direct_post",
|
|
DirectPost: &DirectPostImportData{
|
|
ChannelMembers: &channelMembers,
|
|
User: &post.User,
|
|
Message: &post.Message,
|
|
Props: &post.Props,
|
|
CreateAt: &post.CreateAt,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ImportReplyFromPost(post *model.ReplyForExport) *ReplyImportData {
|
|
return &ReplyImportData{
|
|
User: &post.Username,
|
|
Message: &post.Message,
|
|
CreateAt: &post.CreateAt,
|
|
}
|
|
}
|
|
|
|
func ImportReactionFromPost(user *model.User, reaction *model.Reaction) *ReactionImportData {
|
|
return &ReactionImportData{
|
|
User: &user.Username,
|
|
EmojiName: &reaction.EmojiName,
|
|
CreateAt: &reaction.CreateAt,
|
|
}
|
|
}
|
|
|
|
func ImportLineFromEmoji(emoji *model.Emoji, filePath string) *LineImportData {
|
|
return &LineImportData{
|
|
Type: "emoji",
|
|
Emoji: &EmojiImportData{
|
|
Name: &emoji.Name,
|
|
Image: &filePath,
|
|
},
|
|
}
|
|
}
|