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: &notifyProps,
   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  }