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