casdoor/object/user_upload.go

119 lines
3.7 KiB
Go
Raw Normal View History

2022-02-13 23:39:27 +08:00
// Copyright 2021 The Casdoor Authors. All Rights Reserved.
2021-12-31 12:56:19 +08:00
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package object
import (
2022-01-20 14:11:46 +08:00
"github.com/casdoor/casdoor/util"
"github.com/casdoor/casdoor/xlsx"
2021-12-31 12:56:19 +08:00
)
func getUserMap(owner string) map[string]*User {
m := map[string]*User{}
users := GetUsers(owner)
for _, user := range users {
m[user.GetId()] = user
}
return m
}
func parseLineItem(line *[]string, i int) string {
if i >= len(*line) {
return ""
} else {
return (*line)[i]
}
}
func parseLineItemInt(line *[]string, i int) int {
s := parseLineItem(line, i)
return util.ParseInt(s)
}
func parseLineItemBool(line *[]string, i int) bool {
return parseLineItemInt(line, i) != 0
}
func UploadUsers(owner string, fileId string) bool {
table := xlsx.ReadXlsxFile(fileId)
oldUserMap := getUserMap(owner)
newUsers := []*User{}
for index, line := range table {
if index == 0 || parseLineItem(&line, 0) == "" {
2021-12-31 12:56:19 +08:00
continue
}
user := &User{
Owner: parseLineItem(&line, 0),
Name: parseLineItem(&line, 1),
CreatedTime: parseLineItem(&line, 2),
UpdatedTime: parseLineItem(&line, 3),
Id: parseLineItem(&line, 4),
Type: parseLineItem(&line, 5),
Password: parseLineItem(&line, 6),
PasswordSalt: parseLineItem(&line, 7),
DisplayName: parseLineItem(&line, 8),
FirstName: parseLineItem(&line, 9),
LastName: parseLineItem(&line, 10),
Avatar: parseLineItem(&line, 11),
2021-12-31 12:56:19 +08:00
PermanentAvatar: "",
Email: parseLineItem(&line, 12),
Phone: parseLineItem(&line, 13),
Location: parseLineItem(&line, 14),
Address: []string{parseLineItem(&line, 15)},
Affiliation: parseLineItem(&line, 16),
Title: parseLineItem(&line, 17),
IdCardType: parseLineItem(&line, 18),
IdCard: parseLineItem(&line, 19),
Homepage: parseLineItem(&line, 20),
Bio: parseLineItem(&line, 21),
Tag: parseLineItem(&line, 22),
Region: parseLineItem(&line, 23),
Language: parseLineItem(&line, 24),
Gender: parseLineItem(&line, 25),
Birthday: parseLineItem(&line, 26),
Education: parseLineItem(&line, 27),
Score: parseLineItemInt(&line, 28),
Karma: parseLineItemInt(&line, 29),
Ranking: parseLineItemInt(&line, 30),
2021-12-31 12:56:19 +08:00
IsDefaultAvatar: false,
IsOnline: parseLineItemBool(&line, 31),
IsAdmin: parseLineItemBool(&line, 32),
IsGlobalAdmin: parseLineItemBool(&line, 33),
IsForbidden: parseLineItemBool(&line, 34),
IsDeleted: parseLineItemBool(&line, 35),
SignupApplication: parseLineItem(&line, 36),
2021-12-31 12:56:19 +08:00
Hash: "",
PreHash: "",
CreatedIp: parseLineItem(&line, 37),
LastSigninTime: parseLineItem(&line, 38),
LastSigninIp: parseLineItem(&line, 39),
Ldap: "",
2021-12-31 12:56:19 +08:00
Properties: map[string]string{},
}
if _, ok := oldUserMap[user.GetId()]; !ok {
newUsers = append(newUsers, user)
}
}
if len(newUsers) == 0 {
return false
}
return AddUsersInBatch(newUsers)
}