Files: removed .result
This commit is contained in:
parent
a941da35b4
commit
0973f4e8d1
@ -55,7 +55,7 @@ public class EmployeeDtoHelper
|
||||
private readonly ApiContext _httpContext;
|
||||
private readonly DisplayUserSettingsHelper _displayUserSettingsHelper;
|
||||
private readonly CommonLinkUtility _commonLinkUtility;
|
||||
private readonly ConcurrentDictionary<Guid, EmployeeDto> _concurrentDictionary;
|
||||
private readonly Dictionary<Guid, EmployeeDto> _dictionary;
|
||||
|
||||
public EmployeeDtoHelper(
|
||||
ApiContext httpContext,
|
||||
@ -69,27 +69,34 @@ public class EmployeeDtoHelper
|
||||
_httpContext = httpContext;
|
||||
_displayUserSettingsHelper = displayUserSettingsHelper;
|
||||
_commonLinkUtility = commonLinkUtility;
|
||||
_concurrentDictionary = new ConcurrentDictionary<Guid, EmployeeDto>();
|
||||
_dictionary = new Dictionary<Guid, EmployeeDto>();
|
||||
}
|
||||
|
||||
public EmployeeDto Get(UserInfo userInfo)
|
||||
{
|
||||
return _concurrentDictionary.GetOrAdd(userInfo.Id, (id) => Init(new EmployeeDto(), userInfo));
|
||||
public async Task<EmployeeDto> Get(UserInfo userInfo)
|
||||
{
|
||||
if (_dictionary.ContainsKey(userInfo.Id))
|
||||
{
|
||||
return _dictionary[userInfo.Id];
|
||||
}
|
||||
var employee = await Init(new EmployeeDto(), userInfo);
|
||||
_dictionary.Add(userInfo.Id, employee);
|
||||
|
||||
return employee;
|
||||
}
|
||||
|
||||
public EmployeeDto Get(Guid userId)
|
||||
public async Task<EmployeeDto> Get(Guid userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return Get(_userManager.GetUsers(userId));
|
||||
return await Get(_userManager.GetUsers(userId));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return Get(ASC.Core.Users.Constants.LostUser);
|
||||
return await Get(ASC.Core.Users.Constants.LostUser);
|
||||
}
|
||||
}
|
||||
|
||||
protected EmployeeDto Init(EmployeeDto result, UserInfo userInfo)
|
||||
protected async Task<EmployeeDto> Init(EmployeeDto result, UserInfo userInfo)
|
||||
{
|
||||
result.Id = userInfo.Id;
|
||||
result.DisplayName = _displayUserSettingsHelper.GetFullUserName(userInfo);
|
||||
@ -103,8 +110,7 @@ public class EmployeeDtoHelper
|
||||
|
||||
if (_httpContext.Check("avatarSmall"))
|
||||
{
|
||||
result.AvatarSmall = _userPhotoManager.GetSmallPhotoURL(userInfo.Id, out var isdef)
|
||||
+ (isdef ? "" : $"?_={userInfoLM}");
|
||||
result.AvatarSmall = (await _userPhotoManager.GetSmallPhotoURL(userInfo.Id)) + $"?_={userInfoLM}";
|
||||
}
|
||||
|
||||
if (result.Id != Guid.Empty)
|
||||
|
@ -169,7 +169,7 @@ public class EmployeeFullDtoHelper : EmployeeDtoHelper
|
||||
return result;
|
||||
}
|
||||
|
||||
public EmployeeFullDto GetFull(UserInfo userInfo)
|
||||
public async Task<EmployeeFullDto> GetFull(UserInfo userInfo)
|
||||
{
|
||||
var result = new EmployeeFullDto
|
||||
{
|
||||
@ -189,7 +189,7 @@ public class EmployeeFullDtoHelper : EmployeeDtoHelper
|
||||
IsSSO = userInfo.IsSSO()
|
||||
};
|
||||
|
||||
Init(result, userInfo);
|
||||
await Init(result, userInfo);
|
||||
|
||||
if (userInfo.Sex.HasValue)
|
||||
{
|
||||
@ -225,17 +225,17 @@ public class EmployeeFullDtoHelper : EmployeeDtoHelper
|
||||
|
||||
if (_context.Check("avatarMax"))
|
||||
{
|
||||
result.AvatarMax = _userPhotoManager.GetMaxPhotoURL(userInfo.Id, out var isdef) + (isdef ? "" : $"?_={userInfoLM}");
|
||||
result.AvatarMax = await _userPhotoManager.GetMaxPhotoURL(userInfo.Id) + $"?_={userInfoLM}";
|
||||
}
|
||||
|
||||
if (_context.Check("avatarMedium"))
|
||||
{
|
||||
result.AvatarMedium = _userPhotoManager.GetMediumPhotoURL(userInfo.Id, out var isdef) + (isdef ? "" : $"?_={userInfoLM}");
|
||||
result.AvatarMedium = await _userPhotoManager.GetMediumPhotoURL(userInfo.Id) + $"?_={userInfoLM}";
|
||||
}
|
||||
|
||||
if (_context.Check("avatar"))
|
||||
{
|
||||
result.Avatar = _userPhotoManager.GetBigPhotoURL(userInfo.Id, out var isdef) + (isdef ? "" : $"?_={userInfoLM}");
|
||||
result.Avatar = await _userPhotoManager.GetBigPhotoURL(userInfo.Id) + $"?_={userInfoLM}";
|
||||
}
|
||||
|
||||
if (_context.Check("listAdminModules"))
|
||||
|
@ -48,15 +48,11 @@ public abstract class FileEntryDto
|
||||
public string ProviderKey { get; set; }
|
||||
public int? ProviderId { get; set; }
|
||||
|
||||
protected FileEntryDto(FileEntry entry, EmployeeDtoHelper employeeWraperHelper, ApiDateTimeHelper apiDateTimeHelper)
|
||||
protected FileEntryDto(FileEntry entry)
|
||||
{
|
||||
Title = entry.Title;
|
||||
Access = entry.Access;
|
||||
Shared = entry.Shared;
|
||||
Created = apiDateTimeHelper.Get(entry.CreateOn);
|
||||
CreatedBy = employeeWraperHelper.Get(entry.CreateBy);
|
||||
Updated = apiDateTimeHelper.Get(entry.ModifiedOn);
|
||||
UpdatedBy = employeeWraperHelper.Get(entry.ModifiedBy);
|
||||
RootFolderType = entry.RootFolderType;
|
||||
ProviderItem = entry.ProviderEntry.NullIfDefault();
|
||||
ProviderKey = entry.ProviderKey;
|
||||
@ -73,8 +69,8 @@ public abstract class FileEntryDto<T> : FileEntryDto
|
||||
public bool CanShare { get; set; }
|
||||
public bool CanEdit { get; set; }
|
||||
|
||||
protected FileEntryDto(FileEntry<T> entry, EmployeeDtoHelper employeeWraperHelper, ApiDateTimeHelper apiDateTimeHelper)
|
||||
: base(entry, employeeWraperHelper, apiDateTimeHelper)
|
||||
protected FileEntryDto(FileEntry<T> entry)
|
||||
: base(entry)
|
||||
{
|
||||
Id = entry.Id;
|
||||
RootFolderId = entry.RootId;
|
||||
@ -112,9 +108,9 @@ public class FileEntryDtoHelper
|
||||
Access = entry.Access,
|
||||
Shared = entry.Shared,
|
||||
Created = _apiDateTimeHelper.Get(entry.CreateOn),
|
||||
CreatedBy = _employeeWraperHelper.Get(entry.CreateBy),
|
||||
CreatedBy = await _employeeWraperHelper.Get(entry.CreateBy),
|
||||
Updated = _apiDateTimeHelper.Get(entry.ModifiedOn),
|
||||
UpdatedBy = _employeeWraperHelper.Get(entry.ModifiedBy),
|
||||
UpdatedBy = await _employeeWraperHelper.Get(entry.ModifiedBy),
|
||||
RootFolderType = entry.RootFolderType,
|
||||
RootFolderId = entry.RootId,
|
||||
ProviderItem = entry.ProviderEntry.NullIfDefault(),
|
||||
|
@ -97,7 +97,7 @@ public class FilesSpaceUsageStatManager : SpaceUsageStatManager
|
||||
else
|
||||
{
|
||||
item.Name = user.DisplayUserName(false, _displayUserSettingsHelper);
|
||||
item.ImgUrl = user.GetSmallPhotoURL(_userPhotoManager);
|
||||
item.ImgUrl = await user.GetSmallPhotoURL(_userPhotoManager);
|
||||
item.Url = user.GetUserProfilePageURL(_commonLinkUtility);
|
||||
item.Disabled = user.Status == EmployeeStatus.Terminated;
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class ContactsController : PeopleControllerBase
|
||||
}
|
||||
|
||||
[HttpDelete("{userid}/contacts")]
|
||||
public EmployeeFullDto DeleteMemberContacts(string userid, UpdateMemberRequestDto inDto)
|
||||
public async Task<EmployeeFullDto> DeleteMemberContacts(string userid, UpdateMemberRequestDto inDto)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -56,11 +56,11 @@ public class ContactsController : PeopleControllerBase
|
||||
DeleteContacts(inDto.Contacts, user);
|
||||
_userManager.SaveUserInfo(user, syncCardDav: true);
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpPost("{userid}/contacts")]
|
||||
public EmployeeFullDto SetMemberContacts(string userid, UpdateMemberRequestDto inDto)
|
||||
public async Task<EmployeeFullDto> SetMemberContacts(string userid, UpdateMemberRequestDto inDto)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -73,11 +73,11 @@ public class ContactsController : PeopleControllerBase
|
||||
UpdateContacts(inDto.Contacts, user);
|
||||
_userManager.SaveUserInfo(user, syncCardDav: true);
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpPut("{userid}/contacts")]
|
||||
public EmployeeFullDto UpdateMemberContacts(string userid, UpdateMemberRequestDto inDto)
|
||||
public async Task<EmployeeFullDto> UpdateMemberContacts(string userid, UpdateMemberRequestDto inDto)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -89,7 +89,7 @@ public class ContactsController : PeopleControllerBase
|
||||
UpdateContacts(inDto.Contacts, user);
|
||||
_userManager.SaveUserInfo(user, syncCardDav: true);
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
private void DeleteContacts(IEnumerable<Contact> contacts, UserInfo user)
|
||||
|
@ -67,7 +67,7 @@ public class GroupController : ControllerBase
|
||||
}
|
||||
|
||||
[HttpGet("full")]
|
||||
public IEnumerable<GroupDto> GetAllWithMembers()
|
||||
public async IAsyncEnumerable<GroupDto> GetAllWithMembers()
|
||||
{
|
||||
var result = _userManager.GetDepartments().Select(r => r);
|
||||
if (!string.IsNullOrEmpty(_apiContext.FilterValue))
|
||||
@ -75,7 +75,10 @@ public class GroupController : ControllerBase
|
||||
result = result.Where(r => r.Name.Contains(_apiContext.FilterValue, StringComparison.InvariantCultureIgnoreCase));
|
||||
}
|
||||
|
||||
return result.Select(r => _groupFullDtoHelper.Get(r, true));
|
||||
foreach (var item in result)
|
||||
{
|
||||
yield return await _groupFullDtoHelper.Get(item, true);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("search")]
|
||||
@ -94,9 +97,9 @@ public class GroupController : ControllerBase
|
||||
}
|
||||
|
||||
[HttpGet("{groupid}")]
|
||||
public GroupDto GetById(Guid groupid)
|
||||
public async Task<GroupDto> GetById(Guid groupid)
|
||||
{
|
||||
return _groupFullDtoHelper.Get(GetGroupInfo(groupid), true);
|
||||
return await _groupFullDtoHelper.Get(GetGroupInfo(groupid), true);
|
||||
}
|
||||
|
||||
[HttpGet("user/{userid}")]
|
||||
@ -106,7 +109,7 @@ public class GroupController : ControllerBase
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public GroupDto AddGroup(GroupRequestDto inDto)
|
||||
public async Task<GroupDto> AddGroup(GroupRequestDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
|
||||
|
||||
@ -124,11 +127,11 @@ public class GroupController : ControllerBase
|
||||
|
||||
_messageService.Send(MessageAction.GroupCreated, _messageTarget.Create(group.ID), group.Name);
|
||||
|
||||
return _groupFullDtoHelper.Get(group, true);
|
||||
return await _groupFullDtoHelper.Get(group, true);
|
||||
}
|
||||
|
||||
[HttpPut("{groupid}")]
|
||||
public GroupDto UpdateGroup(Guid groupid, GroupRequestDto inDto)
|
||||
public async Task<GroupDto> UpdateGroup(Guid groupid, GroupRequestDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
|
||||
var group = _userManager.GetGroups().SingleOrDefault(x => x.ID == groupid).NotFoundIfNull("group not found");
|
||||
@ -140,7 +143,7 @@ public class GroupController : ControllerBase
|
||||
group.Name = inDto.GroupName ?? group.Name;
|
||||
_userManager.SaveGroupInfo(group);
|
||||
|
||||
RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid, EmployeeStatus.All).Select(u => u.Id).Where(id => !inDto.Members.Contains(id)) });
|
||||
await RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid, EmployeeStatus.All).Select(u => u.Id).Where(id => !inDto.Members.Contains(id)) });
|
||||
|
||||
TransferUserToDepartment(inDto.GroupManager, @group, true);
|
||||
|
||||
@ -154,26 +157,25 @@ public class GroupController : ControllerBase
|
||||
|
||||
_messageService.Send(MessageAction.GroupUpdated, _messageTarget.Create(groupid), group.Name);
|
||||
|
||||
return GetById(groupid);
|
||||
return await GetById(groupid);
|
||||
}
|
||||
|
||||
[HttpDelete("{groupid}")]
|
||||
public GroupDto DeleteGroup(Guid groupid)
|
||||
public async Task<GroupDto> DeleteGroup(Guid groupid)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
|
||||
|
||||
var @group = GetGroupInfo(groupid);
|
||||
var groupWrapperFull = _groupFullDtoHelper.Get(group, false);
|
||||
|
||||
_userManager.DeleteGroup(groupid);
|
||||
|
||||
_messageService.Send(MessageAction.GroupDeleted, _messageTarget.Create(group.ID), group.Name);
|
||||
|
||||
return groupWrapperFull;
|
||||
return await _groupFullDtoHelper.Get(group, false);
|
||||
}
|
||||
|
||||
[HttpPut("{groupid}/members/{newgroupid}")]
|
||||
public GroupDto TransferMembersTo(Guid groupid, Guid newgroupid)
|
||||
public async Task<GroupDto> TransferMembersTo(Guid groupid, Guid newgroupid)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
|
||||
|
||||
@ -187,20 +189,20 @@ public class GroupController : ControllerBase
|
||||
TransferUserToDepartment(userInfo.Id, newgroup, false);
|
||||
}
|
||||
|
||||
return GetById(newgroupid);
|
||||
return await GetById(newgroupid);
|
||||
}
|
||||
|
||||
[HttpPost("{groupid}/members")]
|
||||
public GroupDto SetMembersTo(Guid groupid, GroupRequestDto inDto)
|
||||
public async Task<GroupDto> SetMembersTo(Guid groupid, GroupRequestDto inDto)
|
||||
{
|
||||
RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid).Select(x => x.Id) });
|
||||
AddMembersTo(groupid, inDto);
|
||||
await RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid).Select(x => x.Id) });
|
||||
await AddMembersTo(groupid, inDto);
|
||||
|
||||
return GetById(groupid);
|
||||
return await GetById(groupid);
|
||||
}
|
||||
|
||||
[HttpPut("{groupid}/members")]
|
||||
public GroupDto AddMembersTo(Guid groupid, GroupRequestDto inDto)
|
||||
public async Task<GroupDto> AddMembersTo(Guid groupid, GroupRequestDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
|
||||
|
||||
@ -211,11 +213,11 @@ public class GroupController : ControllerBase
|
||||
TransferUserToDepartment(userId, group, false);
|
||||
}
|
||||
|
||||
return GetById(group.ID);
|
||||
return await GetById(group.ID);
|
||||
}
|
||||
|
||||
[HttpPut("{groupid}/manager")]
|
||||
public GroupDto SetManager(Guid groupid, SetManagerRequestDto inDto)
|
||||
public async Task<GroupDto> SetManager(Guid groupid, SetManagerRequestDto inDto)
|
||||
{
|
||||
var group = GetGroupInfo(groupid);
|
||||
if (_userManager.UserExists(inDto.UserId))
|
||||
@ -227,11 +229,11 @@ public class GroupController : ControllerBase
|
||||
throw new ItemNotFoundException("user not found");
|
||||
}
|
||||
|
||||
return GetById(groupid);
|
||||
return await GetById(groupid);
|
||||
}
|
||||
|
||||
[HttpDelete("{groupid}/members")]
|
||||
public GroupDto RemoveMembersFrom(Guid groupid, GroupRequestDto inDto)
|
||||
public async Task<GroupDto> RemoveMembersFrom(Guid groupid, GroupRequestDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
|
||||
|
||||
@ -242,7 +244,7 @@ public class GroupController : ControllerBase
|
||||
RemoveUserFromDepartment(userId, group);
|
||||
}
|
||||
|
||||
return GetById(group.ID);
|
||||
return await GetById(group.ID);
|
||||
}
|
||||
|
||||
private GroupInfo GetGroupInfo(Guid groupid)
|
||||
|
@ -64,7 +64,7 @@ public class PhotoController : PeopleControllerBase
|
||||
}
|
||||
|
||||
[HttpPost("{userid}/photo/thumbnails")]
|
||||
public ThumbnailsDataDto CreateMemberPhotoThumbnails(string userid, ThumbnailsRequestDto inDto)
|
||||
public async Task<ThumbnailsDataDto> CreateMemberPhotoThumbnails(string userid, ThumbnailsRequestDto inDto)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -84,22 +84,21 @@ public class PhotoController : PeopleControllerBase
|
||||
|
||||
_settingsManager.SaveForUser(settings, user.Id);
|
||||
_userPhotoManager.RemovePhoto(user.Id);
|
||||
_userPhotoManager.SaveOrUpdatePhoto(user.Id, data);
|
||||
await _userPhotoManager.SaveOrUpdatePhoto(user.Id, data);
|
||||
_userPhotoManager.RemoveTempPhoto(fileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
UserPhotoThumbnailManager.SaveThumbnails(_userPhotoManager, _settingsManager, inDto.X, inDto.Y, inDto.Width, inDto.Height, user.Id);
|
||||
await UserPhotoThumbnailManager.SaveThumbnails(_userPhotoManager, _settingsManager, inDto.X, inDto.Y, inDto.Width, inDto.Height, user.Id);
|
||||
}
|
||||
|
||||
_userManager.SaveUserInfo(user, syncCardDav: true);
|
||||
_messageService.Send(MessageAction.UserUpdatedAvatarThumbnails, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
|
||||
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpDelete("{userid}/photo")]
|
||||
public ThumbnailsDataDto DeleteMemberPhoto(string userid)
|
||||
public async Task<ThumbnailsDataDto> DeleteMemberPhoto(string userid)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -114,11 +113,11 @@ public class PhotoController : PeopleControllerBase
|
||||
_userManager.SaveUserInfo(user, syncCardDav: true);
|
||||
_messageService.Send(MessageAction.UserDeletedAvatar, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
|
||||
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpGet("{userid}/photo")]
|
||||
public ThumbnailsDataDto GetMemberPhoto(string userid)
|
||||
public async Task<ThumbnailsDataDto> GetMemberPhoto(string userid)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -127,11 +126,11 @@ public class PhotoController : PeopleControllerBase
|
||||
throw new SecurityException();
|
||||
}
|
||||
|
||||
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpPut("{userid}/photo")]
|
||||
public ThumbnailsDataDto UpdateMemberPhoto(string userid, UpdateMemberRequestDto inDto)
|
||||
public async Task<ThumbnailsDataDto> UpdateMemberPhoto(string userid, UpdateMemberRequestDto inDto)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -140,7 +139,7 @@ public class PhotoController : PeopleControllerBase
|
||||
throw new SecurityException();
|
||||
}
|
||||
|
||||
if (inDto.Files != _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
|
||||
if (inDto.Files != await _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
|
||||
{
|
||||
UpdatePhotoUrl(inDto.Files, user);
|
||||
}
|
||||
@ -148,7 +147,7 @@ public class PhotoController : PeopleControllerBase
|
||||
_userManager.SaveUserInfo(user, syncCardDav: true);
|
||||
_messageService.Send(MessageAction.UserAddedAvatar, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
|
||||
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpPost("{userid}/photo")]
|
||||
|
@ -144,7 +144,7 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
|
||||
[HttpPost("active")]
|
||||
public EmployeeDto AddMemberAsActivated(MemberRequestDto inDto)
|
||||
public async Task<EmployeeDto> AddMemberAsActivated(MemberRequestDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_AddRemoveUser);
|
||||
|
||||
@ -197,7 +197,7 @@ public class UserController : PeopleControllerBase
|
||||
UpdatePhotoUrl(inDto.Files, user);
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
@ -313,7 +313,7 @@ public class UserController : PeopleControllerBase
|
||||
_messageService.Send(messageAction, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpPut("{userid}/password")]
|
||||
@ -367,11 +367,11 @@ public class UserController : PeopleControllerBase
|
||||
_messageService.Send(MessageAction.CookieSettingsUpdated);
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(GetUserInfo(userid.ToString()));
|
||||
return await _employeeFullDtoHelper.GetFull(GetUserInfo(userid.ToString()));
|
||||
}
|
||||
|
||||
[HttpDelete("{userid}")]
|
||||
public EmployeeDto DeleteMember(string userid)
|
||||
public async Task<EmployeeDto> DeleteMember(string userid)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_AddRemoveUser);
|
||||
|
||||
@ -396,7 +396,7 @@ public class UserController : PeopleControllerBase
|
||||
|
||||
_messageService.Send(MessageAction.UserDeleted, _messageTarget.Create(user.Id), userName);
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpDelete("@self")]
|
||||
@ -444,49 +444,44 @@ public class UserController : PeopleControllerBase
|
||||
//StudioNotifyService.SendMsgProfileDeletion(Tenant.TenantId, user);
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpGet("status/{status}/search")]
|
||||
public IEnumerable<EmployeeDto> GetAdvanced(EmployeeStatus status, [FromQuery] string query)
|
||||
public async IAsyncEnumerable<EmployeeDto> GetAdvanced(EmployeeStatus status, [FromQuery] string query)
|
||||
{
|
||||
if (_coreBaseSettings.Personal)
|
||||
{
|
||||
throw new MethodAccessException("Method not available");
|
||||
}
|
||||
try
|
||||
|
||||
var list = _userManager.GetUsers(status).AsEnumerable();
|
||||
|
||||
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
|
||||
{
|
||||
var list = _userManager.GetUsers(status).AsEnumerable();
|
||||
|
||||
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
|
||||
{
|
||||
var groupId = new Guid(_apiContext.FilterValue);
|
||||
//Filter by group
|
||||
list = list.Where(x => _userManager.IsUserInGroup(x.Id, groupId));
|
||||
_apiContext.SetDataFiltered();
|
||||
}
|
||||
|
||||
list = list.Where(x => x.FirstName != null && x.FirstName.IndexOf(query, StringComparison.OrdinalIgnoreCase) > -1 || (x.LastName != null && x.LastName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) ||
|
||||
(x.UserName != null && x.UserName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.Email != null && x.Email.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.ContactsList != null && x.ContactsList.Any(y => y.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1)));
|
||||
|
||||
return list.Select(u => _employeeFullDtoHelper.GetFull(u));
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
_logger.ErrorGetAdvanced(error);
|
||||
var groupId = new Guid(_apiContext.FilterValue);
|
||||
//Filter by group
|
||||
list = list.Where(x => _userManager.IsUserInGroup(x.Id, groupId));
|
||||
_apiContext.SetDataFiltered();
|
||||
}
|
||||
|
||||
return null;
|
||||
list = list.Where(x => x.FirstName != null && x.FirstName.IndexOf(query, StringComparison.OrdinalIgnoreCase) > -1 || (x.LastName != null && x.LastName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) ||
|
||||
(x.UserName != null && x.UserName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.Email != null && x.Email.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.ContactsList != null && x.ContactsList.Any(y => y.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1)));
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
yield return await _employeeFullDtoHelper.GetFull(item);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IEnumerable<EmployeeDto> GetAll()
|
||||
public IAsyncEnumerable<EmployeeDto> GetAll()
|
||||
{
|
||||
return GetByStatus(EmployeeStatus.Active);
|
||||
}
|
||||
|
||||
[HttpGet("email")]
|
||||
public EmployeeDto GetByEmail([FromQuery] string email)
|
||||
public async Task<EmployeeDto> GetByEmail([FromQuery] string email)
|
||||
{
|
||||
if (_coreBaseSettings.Personal && !_userManager.GetUsers(_securityContext.CurrentAccount.ID).IsOwner(Tenant))
|
||||
{
|
||||
@ -499,12 +494,12 @@ public class UserController : PeopleControllerBase
|
||||
throw new ItemNotFoundException("User not found");
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "LinkInvite,Everyone")]
|
||||
[HttpGet("{username}", Order = 1)]
|
||||
public EmployeeDto GetById(string username)
|
||||
public async Task<EmployeeDto> GetById(string username)
|
||||
{
|
||||
if (_coreBaseSettings.Personal)
|
||||
{
|
||||
@ -539,11 +534,11 @@ public class UserController : PeopleControllerBase
|
||||
return _employeeFullDtoHelper.GetSimple(user);
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpGet("status/{status}")]
|
||||
public IEnumerable<EmployeeDto> GetByStatus(EmployeeStatus status)
|
||||
public IAsyncEnumerable<EmployeeDto> GetByStatus(EmployeeStatus status)
|
||||
{
|
||||
if (_coreBaseSettings.Personal)
|
||||
{
|
||||
@ -561,11 +556,14 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
|
||||
[HttpGet("filter")]
|
||||
public IEnumerable<EmployeeDto> GetFullByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
|
||||
public async IAsyncEnumerable<EmployeeDto> GetFullByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
|
||||
{
|
||||
var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator);
|
||||
|
||||
return users.Select(r => _employeeFullDtoHelper.GetFull(r));
|
||||
var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator);
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
yield return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("info")]
|
||||
@ -578,45 +576,42 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
|
||||
[HttpGet("search")]
|
||||
public IEnumerable<EmployeeDto> GetPeopleSearch([FromQuery] string query)
|
||||
public IAsyncEnumerable<EmployeeDto> GetPeopleSearch([FromQuery] string query)
|
||||
{
|
||||
return GetSearch(query);
|
||||
}
|
||||
|
||||
[HttpGet("@search/{query}")]
|
||||
public IEnumerable<EmployeeDto> GetSearch(string query)
|
||||
public async IAsyncEnumerable<EmployeeDto> GetSearch(string query)
|
||||
{
|
||||
if (_coreBaseSettings.Personal)
|
||||
{
|
||||
throw new MethodAccessException("Method not available");
|
||||
}
|
||||
|
||||
var groupId = Guid.Empty;
|
||||
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
|
||||
{
|
||||
groupId = new Guid(_apiContext.FilterValue);
|
||||
}
|
||||
|
||||
var users = _userManager.Search(query, EmployeeStatus.Active, groupId);
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
yield return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var groupId = Guid.Empty;
|
||||
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
|
||||
{
|
||||
groupId = new Guid(_apiContext.FilterValue);
|
||||
}
|
||||
|
||||
var users = _userManager.Search(query, EmployeeStatus.Active, groupId);
|
||||
|
||||
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
_logger.ErrorGetSearch(error);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
[HttpGet("simple/filter")]
|
||||
public IEnumerable<EmployeeDto> GetSimpleByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
|
||||
public async IAsyncEnumerable<EmployeeDto> GetSimpleByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
|
||||
{
|
||||
var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator);
|
||||
|
||||
return users.Select(_employeeDtoHelper.Get);
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
yield return await _employeeDtoHelper.Get(user);
|
||||
}
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
@ -632,7 +627,7 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
|
||||
[HttpPut("delete", Order = -1)]
|
||||
public IEnumerable<EmployeeDto> RemoveUsers(UpdateMembersRequestDto inDto)
|
||||
public async IAsyncEnumerable<EmployeeDto> RemoveUsers(UpdateMembersRequestDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_AddRemoveUser);
|
||||
|
||||
@ -656,13 +651,16 @@ public class UserController : PeopleControllerBase
|
||||
_queueWorkerRemove.Start(Tenant.Id, user, _securityContext.CurrentAccount.ID, false);
|
||||
}
|
||||
|
||||
_messageService.Send(MessageAction.UsersDeleted, _messageTarget.Create(users.Select(x => x.Id)), userNames);
|
||||
|
||||
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
|
||||
_messageService.Send(MessageAction.UsersDeleted, _messageTarget.Create(users.Select(x => x.Id)), userNames);
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
yield return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPut("invite")]
|
||||
public IEnumerable<EmployeeDto> ResendUserInvites(UpdateMembersRequestDto inDto)
|
||||
public async IAsyncEnumerable<EmployeeDto> ResendUserInvites(UpdateMembersRequestDto inDto)
|
||||
{
|
||||
var users = inDto.UserIds
|
||||
.Where(userId => !_userManager.IsSystemUser(userId))
|
||||
@ -714,9 +712,12 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
}
|
||||
|
||||
_messageService.Send(MessageAction.UsersSentActivationInstructions, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
|
||||
|
||||
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
|
||||
_messageService.Send(MessageAction.UsersSentActivationInstructions, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
yield return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("theme")]
|
||||
@ -739,11 +740,11 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
|
||||
[HttpGet("@self")]
|
||||
public EmployeeDto Self()
|
||||
public async Task<EmployeeDto> Self()
|
||||
{
|
||||
var user = _userManager.GetUser(_securityContext.CurrentAccount.ID, EmployeeFullDtoHelper.GetExpression(_apiContext));
|
||||
|
||||
var result = _employeeFullDtoHelper.GetFull(user);
|
||||
var result = await _employeeFullDtoHelper.GetFull(user);
|
||||
|
||||
result.Theme = _settingsManager.LoadForCurrentUser<DarkThemeSettings>().Theme;
|
||||
|
||||
@ -831,11 +832,10 @@ public class UserController : PeopleControllerBase
|
||||
|
||||
[HttpPut("activationstatus/{activationstatus}")]
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "Activation,Everyone")]
|
||||
public IEnumerable<EmployeeDto> UpdateEmployeeActivationStatus(EmployeeActivationStatus activationstatus, UpdateMembersRequestDto inDto)
|
||||
public async IAsyncEnumerable<EmployeeDto> UpdateEmployeeActivationStatus(EmployeeActivationStatus activationstatus, UpdateMembersRequestDto inDto)
|
||||
{
|
||||
_apiContext.AuthByClaim();
|
||||
|
||||
var retuls = new List<EmployeeDto>();
|
||||
foreach (var id in inDto.UserIds.Where(userId => !_userManager.IsSystemUser(userId)))
|
||||
{
|
||||
_permissionContext.DemandPermissions(new UserSecurityProvider(id), Constants.Action_EditUser);
|
||||
@ -846,15 +846,13 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
|
||||
u.ActivationStatus = activationstatus;
|
||||
_userManager.SaveUserInfo(u);
|
||||
retuls.Add(_employeeFullDtoHelper.GetFull(u));
|
||||
_userManager.SaveUserInfo(u);
|
||||
yield return await _employeeFullDtoHelper.GetFull(u);
|
||||
}
|
||||
|
||||
return retuls;
|
||||
}
|
||||
|
||||
[HttpPut("{userid}/culture")]
|
||||
public EmployeeDto UpdateMemberCulture(string userid, UpdateMemberRequestDto inDto)
|
||||
public async Task<EmployeeDto> UpdateMemberCulture(string userid, UpdateMemberRequestDto inDto)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -888,7 +886,7 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpPut("{userid}", Order = 1)]
|
||||
@ -953,7 +951,7 @@ public class UserController : PeopleControllerBase
|
||||
UpdateContacts(inDto.Contacts, user);
|
||||
UpdateDepartments(inDto.Department, user);
|
||||
|
||||
if (inDto.Files != _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
|
||||
if (inDto.Files != await _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
|
||||
{
|
||||
UpdatePhotoUrl(inDto.Files, user);
|
||||
}
|
||||
@ -999,11 +997,11 @@ public class UserController : PeopleControllerBase
|
||||
_messageService.Send(MessageAction.CookieSettingsUpdated);
|
||||
}
|
||||
|
||||
return _employeeFullDtoHelper.GetFull(user);
|
||||
return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
|
||||
[HttpPut("status/{status}")]
|
||||
public async Task<IEnumerable<EmployeeDto>> UpdateUserStatus(EmployeeStatus status, UpdateMembersRequestDto inDto)
|
||||
public async IAsyncEnumerable<EmployeeDto> UpdateUserStatus(EmployeeStatus status, UpdateMembersRequestDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(Constants.Action_EditUser);
|
||||
|
||||
@ -1040,13 +1038,16 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
}
|
||||
|
||||
_messageService.Send(MessageAction.UsersUpdatedStatus, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
|
||||
|
||||
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
|
||||
_messageService.Send(MessageAction.UsersUpdatedStatus, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
yield return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPut("type/{type}")]
|
||||
public IEnumerable<EmployeeDto> UpdateUserType(EmployeeType type, UpdateMembersRequestDto inDto)
|
||||
public async IAsyncEnumerable<EmployeeDto> UpdateUserType(EmployeeType type, UpdateMembersRequestDto inDto)
|
||||
{
|
||||
var users = inDto.UserIds
|
||||
.Where(userId => !_userManager.IsSystemUser(userId))
|
||||
@ -1083,9 +1084,12 @@ public class UserController : PeopleControllerBase
|
||||
}
|
||||
}
|
||||
|
||||
_messageService.Send(MessageAction.UsersUpdatedType, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
|
||||
|
||||
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
|
||||
_messageService.Send(MessageAction.UsersUpdatedType, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
yield return await _employeeFullDtoHelper.GetFull(user);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateDepartments(IEnumerable<Guid> department, UserInfo user)
|
||||
|
@ -62,7 +62,7 @@ public class GroupFullDtoHelper
|
||||
_employeeWraperHelper = employeeWraperHelper;
|
||||
}
|
||||
|
||||
public GroupDto Get(GroupInfo group, bool includeMembers)
|
||||
public async Task<GroupDto> Get(GroupInfo group, bool includeMembers)
|
||||
{
|
||||
var result = new GroupDto
|
||||
{
|
||||
@ -70,12 +70,17 @@ public class GroupFullDtoHelper
|
||||
Category = group.CategoryID,
|
||||
Parent = group.Parent != null ? group.Parent.ID : Guid.Empty,
|
||||
Name = group.Name,
|
||||
Manager = _employeeWraperHelper.Get(_userManager.GetUsers(_userManager.GetDepartmentManager(group.ID)))
|
||||
Manager = await _employeeWraperHelper.Get(_userManager.GetUsers(_userManager.GetDepartmentManager(group.ID)))
|
||||
};
|
||||
|
||||
if (includeMembers)
|
||||
{
|
||||
result.Members = new List<EmployeeDto>(_userManager.GetUsersByGroup(group.ID).Select(_employeeWraperHelper.Get));
|
||||
result.Members = new List<EmployeeDto>();
|
||||
|
||||
foreach (var m in _userManager.GetUsersByGroup(group.ID))
|
||||
{
|
||||
result.Members.Add(await _employeeWraperHelper.Get(m));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -28,18 +28,21 @@ namespace ASC.People.ApiModels.ResponseDto;
|
||||
|
||||
public class ThumbnailsDataDto
|
||||
{
|
||||
public ThumbnailsDataDto(Guid userId, UserPhotoManager userPhotoManager)
|
||||
{
|
||||
Original = userPhotoManager.GetPhotoAbsoluteWebPath(userId);
|
||||
Retina = userPhotoManager.GetRetinaPhotoURL(userId);
|
||||
Max = userPhotoManager.GetMaxPhotoURL(userId);
|
||||
Big = userPhotoManager.GetBigPhotoURL(userId);
|
||||
Medium = userPhotoManager.GetMediumPhotoURL(userId);
|
||||
Small = userPhotoManager.GetSmallPhotoURL(userId);
|
||||
}
|
||||
|
||||
private ThumbnailsDataDto() { }
|
||||
|
||||
public static async Task<ThumbnailsDataDto> Create(Guid userId, UserPhotoManager userPhotoManager)
|
||||
{
|
||||
return new ThumbnailsDataDto
|
||||
{
|
||||
Original = await userPhotoManager.GetPhotoAbsoluteWebPath(userId),
|
||||
Retina = await userPhotoManager.GetRetinaPhotoURL(userId),
|
||||
Max = await userPhotoManager.GetMaxPhotoURL(userId),
|
||||
Big = await userPhotoManager.GetBigPhotoURL(userId),
|
||||
Medium = await userPhotoManager.GetMediumPhotoURL(userId),
|
||||
Small = await userPhotoManager.GetSmallPhotoURL(userId)
|
||||
};
|
||||
}
|
||||
|
||||
public string Original { get; set; }
|
||||
public string Retina { get; set; }
|
||||
public string Max { get; set; }
|
||||
|
@ -74,46 +74,59 @@ public class SecurityController : BaseSettingsController
|
||||
}
|
||||
|
||||
[HttpGet("security")]
|
||||
public IEnumerable<SecurityDto> GetWebItemSecurityInfo([FromQuery] IEnumerable<string> ids)
|
||||
public async IAsyncEnumerable<SecurityDto> GetWebItemSecurityInfo([FromQuery] IEnumerable<string> ids)
|
||||
{
|
||||
if (ids == null || !ids.Any())
|
||||
{
|
||||
ids = WebItemManager.GetItemsAll().Select(i => i.ID.ToString());
|
||||
}
|
||||
|
||||
var subItemList = WebItemManager.GetItemsAll().Where(item => item.IsSubItem()).Select(i => i.ID.ToString());
|
||||
|
||||
return ids.Select(r => _webItemSecurity.GetSecurityInfo(r))
|
||||
.Select(i => new SecurityDto
|
||||
{
|
||||
WebItemId = i.WebItemId,
|
||||
Enabled = i.Enabled,
|
||||
Users = i.Users.Select(_employeeHelperDto.Get),
|
||||
Groups = i.Groups.Select(g => new GroupSummaryDto(g, _userManager)),
|
||||
IsSubItem = subItemList.Contains(i.WebItemId),
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
[HttpGet("security/{id}")]
|
||||
public bool GetWebItemSecurityInfo(Guid id)
|
||||
{
|
||||
var module = WebItemManager[id];
|
||||
|
||||
return module != null && !module.IsDisabled(_webItemSecurity, _authContext);
|
||||
}
|
||||
|
||||
[HttpGet("security/modules")]
|
||||
public object GetEnabledModules()
|
||||
{
|
||||
var EnabledModules = _webItemManagerSecurity.GetItems(WebZoneType.All, ItemAvailableState.Normal)
|
||||
.Where(item => !item.IsSubItem() && item.Visible)
|
||||
.Select(item => new
|
||||
{
|
||||
id = item.ProductClassName.HtmlEncode(),
|
||||
title = item.Name.HtmlEncode()
|
||||
});
|
||||
|
||||
return EnabledModules;
|
||||
var subItemList = WebItemManager.GetItemsAll().Where(item => item.IsSubItem()).Select(i => i.ID.ToString());
|
||||
|
||||
foreach (var r in ids)
|
||||
{
|
||||
var i = _webItemSecurity.GetSecurityInfo(r);
|
||||
|
||||
var s = new SecurityDto
|
||||
{
|
||||
WebItemId = i.WebItemId,
|
||||
Enabled = i.Enabled,
|
||||
Groups = i.Groups.Select(g => new GroupSummaryDto(g, _userManager)),
|
||||
IsSubItem = subItemList.Contains(i.WebItemId),
|
||||
};
|
||||
|
||||
s.Users = new List<EmployeeDto>();
|
||||
|
||||
foreach (var e in i.Users)
|
||||
{
|
||||
s.Users.Add(await _employeeHelperDto.Get(e));
|
||||
}
|
||||
|
||||
yield return s;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("security/{id}")]
|
||||
public bool GetWebItemSecurityInfo(Guid id)
|
||||
{
|
||||
var module = WebItemManager[id];
|
||||
|
||||
return module != null && !module.IsDisabled(_webItemSecurity, _authContext);
|
||||
}
|
||||
|
||||
[HttpGet("security/modules")]
|
||||
public object GetEnabledModules()
|
||||
{
|
||||
var EnabledModules = _webItemManagerSecurity.GetItems(WebZoneType.All, ItemAvailableState.Normal)
|
||||
.Where(item => !item.IsSubItem() && item.Visible)
|
||||
.Select(item => new
|
||||
{
|
||||
id = item.ProductClassName.HtmlEncode(),
|
||||
title = item.Name.HtmlEncode()
|
||||
});
|
||||
|
||||
return EnabledModules;
|
||||
}
|
||||
|
||||
[HttpGet("security/password")]
|
||||
@ -142,112 +155,115 @@ public class SecurityController : BaseSettingsController
|
||||
|
||||
return userPasswordSettings;
|
||||
|
||||
}
|
||||
|
||||
[HttpPut("security")]
|
||||
public IEnumerable<SecurityDto> SetWebItemSecurity(WebItemSecurityRequestsDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
_webItemSecurity.SetSecurity(inDto.Id, inDto.Enabled, inDto.Subjects?.ToArray());
|
||||
var securityInfo = GetWebItemSecurityInfo(new List<string> { inDto.Id });
|
||||
|
||||
}
|
||||
|
||||
[HttpPut("security")]
|
||||
public async Task<IEnumerable<SecurityDto>> SetWebItemSecurity(WebItemSecurityRequestsDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
_webItemSecurity.SetSecurity(inDto.Id, inDto.Enabled, inDto.Subjects?.ToArray());
|
||||
var securityInfo = await GetWebItemSecurityInfo(new List<string> { inDto.Id }).ToListAsync();
|
||||
|
||||
if (inDto.Subjects == null)
|
||||
{
|
||||
return securityInfo;
|
||||
}
|
||||
|
||||
var productName = GetProductName(new Guid(inDto.Id));
|
||||
|
||||
if (!inDto.Subjects.Any())
|
||||
{
|
||||
_messageService.Send(MessageAction.ProductAccessOpened, productName);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var info in securityInfo)
|
||||
{
|
||||
if (info.Groups.Any())
|
||||
{
|
||||
_messageService.Send(MessageAction.GroupsOpenedProductAccess, productName, info.Groups.Select(x => x.Name));
|
||||
}
|
||||
if (info.Users.Any())
|
||||
{
|
||||
_messageService.Send(MessageAction.UsersOpenedProductAccess, productName, info.Users.Select(x => HttpUtility.HtmlDecode(x.DisplayName)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return securityInfo;
|
||||
}
|
||||
|
||||
[HttpPut("security/access")]
|
||||
public IEnumerable<SecurityDto> SetAccessToWebItems(WebItemSecurityRequestsDto inDto)
|
||||
var productName = GetProductName(new Guid(inDto.Id));
|
||||
|
||||
if (!inDto.Subjects.Any())
|
||||
{
|
||||
_messageService.Send(MessageAction.ProductAccessOpened, productName);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var info in securityInfo)
|
||||
{
|
||||
if (info.Groups.Any())
|
||||
{
|
||||
_messageService.Send(MessageAction.GroupsOpenedProductAccess, productName, info.Groups.Select(x => x.Name));
|
||||
}
|
||||
if (info.Users.Any())
|
||||
{
|
||||
_messageService.Send(MessageAction.UsersOpenedProductAccess, productName, info.Users.Select(x => HttpUtility.HtmlDecode(x.DisplayName)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return securityInfo;
|
||||
}
|
||||
|
||||
[HttpPut("security/access")]
|
||||
public async Task<IEnumerable<SecurityDto>> SetAccessToWebItems(WebItemSecurityRequestsDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
var itemList = new ItemDictionary<string, bool>();
|
||||
|
||||
foreach (var item in inDto.Items)
|
||||
{
|
||||
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
var itemList = new ItemDictionary<string, bool>();
|
||||
|
||||
foreach (var item in inDto.Items)
|
||||
{
|
||||
if (!itemList.ContainsKey(item.Key))
|
||||
{
|
||||
itemList.Add(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
|
||||
var defaultPageSettings = _settingsManager.Load<StudioDefaultPageSettings>();
|
||||
|
||||
foreach (var item in itemList)
|
||||
{
|
||||
Guid[] subjects = null;
|
||||
var productId = new Guid(item.Key);
|
||||
|
||||
if (item.Value)
|
||||
{
|
||||
if (WebItemManager[productId] is IProduct webItem || productId == WebItemManager.MailProductID)
|
||||
{
|
||||
var productInfo = _webItemSecurity.GetSecurityInfo(item.Key);
|
||||
var selectedGroups = productInfo.Groups.Select(group => group.ID).ToList();
|
||||
var selectedUsers = productInfo.Users.Select(user => user.Id).ToList();
|
||||
selectedUsers.AddRange(selectedGroups);
|
||||
if (selectedUsers.Count > 0)
|
||||
{
|
||||
subjects = selectedUsers.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (productId == defaultPageSettings.DefaultProductID)
|
||||
{
|
||||
_settingsManager.Save(_settingsManager.GetDefault<StudioDefaultPageSettings>());
|
||||
}
|
||||
|
||||
_webItemSecurity.SetSecurity(item.Key, item.Value, subjects);
|
||||
}
|
||||
|
||||
_messageService.Send(MessageAction.ProductsListUpdated);
|
||||
|
||||
return GetWebItemSecurityInfo(itemList.Keys.ToList());
|
||||
}
|
||||
|
||||
[HttpGet("security/administrator/{productid}")]
|
||||
public IEnumerable<EmployeeDto> GetProductAdministrators(Guid productid)
|
||||
{
|
||||
return _webItemSecurity.GetProductAdministrators(productid)
|
||||
.Select(_employeeHelperDto.Get)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
[HttpGet("security/administrator")]
|
||||
public object IsProductAdministrator(Guid productid, Guid userid)
|
||||
{
|
||||
var result = _webItemSecurity.IsProductAdministrator(productid, userid);
|
||||
return new { ProductId = productid, UserId = userid, Administrator = result };
|
||||
}
|
||||
|
||||
[HttpPut("security/administrator")]
|
||||
public object SetProductAdministrator(SecurityRequestsDto inDto)
|
||||
{
|
||||
}
|
||||
|
||||
var defaultPageSettings = _settingsManager.Load<StudioDefaultPageSettings>();
|
||||
|
||||
foreach (var item in itemList)
|
||||
{
|
||||
Guid[] subjects = null;
|
||||
var productId = new Guid(item.Key);
|
||||
|
||||
if (item.Value)
|
||||
{
|
||||
if (WebItemManager[productId] is IProduct webItem || productId == WebItemManager.MailProductID)
|
||||
{
|
||||
var productInfo = _webItemSecurity.GetSecurityInfo(item.Key);
|
||||
var selectedGroups = productInfo.Groups.Select(group => group.ID).ToList();
|
||||
var selectedUsers = productInfo.Users.Select(user => user.Id).ToList();
|
||||
selectedUsers.AddRange(selectedGroups);
|
||||
if (selectedUsers.Count > 0)
|
||||
{
|
||||
subjects = selectedUsers.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (productId == defaultPageSettings.DefaultProductID)
|
||||
{
|
||||
_settingsManager.Save(_settingsManager.GetDefault<StudioDefaultPageSettings>());
|
||||
}
|
||||
|
||||
_webItemSecurity.SetSecurity(item.Key, item.Value, subjects);
|
||||
}
|
||||
|
||||
_messageService.Send(MessageAction.ProductsListUpdated);
|
||||
|
||||
return await GetWebItemSecurityInfo(itemList.Keys.ToList()).ToListAsync();
|
||||
}
|
||||
|
||||
[HttpGet("security/administrator/{productid}")]
|
||||
public async IAsyncEnumerable<EmployeeDto> GetProductAdministrators(Guid productid)
|
||||
{
|
||||
var admins = _webItemSecurity.GetProductAdministrators(productid);
|
||||
|
||||
foreach (var a in admins)
|
||||
{
|
||||
yield return await _employeeHelperDto.Get(a);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("security/administrator")]
|
||||
public object IsProductAdministrator(Guid productid, Guid userid)
|
||||
{
|
||||
var result = _webItemSecurity.IsProductAdministrator(productid, userid);
|
||||
return new { ProductId = productid, UserId = userid, Administrator = result };
|
||||
}
|
||||
|
||||
[HttpPut("security/administrator")]
|
||||
public object SetProductAdministrator(SecurityRequestsDto inDto)
|
||||
{
|
||||
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
var isStartup = !_coreBaseSettings.CustomMode && _tenantExtra.Saas && _tenantExtra.GetTenantQuota().Free;
|
||||
@ -255,22 +271,22 @@ public class SecurityController : BaseSettingsController
|
||||
{
|
||||
throw new BillingException(Resource.ErrorNotAllowedOption, "Administrator");
|
||||
}
|
||||
|
||||
_webItemSecurity.SetProductAdministrator(inDto.ProductId, inDto.UserId, inDto.Administrator);
|
||||
|
||||
var admin = _userManager.GetUsers(inDto.UserId);
|
||||
|
||||
if (inDto.ProductId == Guid.Empty)
|
||||
{
|
||||
var messageAction = inDto.Administrator ? MessageAction.AdministratorOpenedFullAccess : MessageAction.AdministratorDeleted;
|
||||
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), admin.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
}
|
||||
else
|
||||
{
|
||||
var messageAction = inDto.Administrator ? MessageAction.ProductAddedAdministrator : MessageAction.ProductDeletedAdministrator;
|
||||
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), GetProductName(inDto.ProductId), admin.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
}
|
||||
|
||||
return new { inDto.ProductId, inDto.UserId, inDto.Administrator };
|
||||
}
|
||||
|
||||
_webItemSecurity.SetProductAdministrator(inDto.ProductId, inDto.UserId, inDto.Administrator);
|
||||
|
||||
var admin = _userManager.GetUsers(inDto.UserId);
|
||||
|
||||
if (inDto.ProductId == Guid.Empty)
|
||||
{
|
||||
var messageAction = inDto.Administrator ? MessageAction.AdministratorOpenedFullAccess : MessageAction.AdministratorDeleted;
|
||||
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), admin.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
}
|
||||
else
|
||||
{
|
||||
var messageAction = inDto.Administrator ? MessageAction.ProductAddedAdministrator : MessageAction.ProductDeletedAdministrator;
|
||||
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), GetProductName(inDto.ProductId), admin.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
}
|
||||
|
||||
return new { inDto.ProductId, inDto.UserId, inDto.Administrator };
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ namespace ASC.Web.Api.ApiModel.ResponseDto;
|
||||
public class SecurityDto
|
||||
{
|
||||
public string WebItemId { get; set; }
|
||||
public IEnumerable<EmployeeDto> Users { get; set; }
|
||||
public List<EmployeeDto> Users { get; set; }
|
||||
public IEnumerable<GroupSummaryDto> Groups { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public bool IsSubItem { get; set; }
|
||||
|
@ -38,86 +38,8 @@ public static class UserInfoExtension
|
||||
return displayUserSettingsHelper.GetFullUserName(userInfo, withHtmlEncode);
|
||||
}
|
||||
|
||||
public static List<UserInfo> SortByUserName(this IEnumerable<UserInfo> userInfoCollection)
|
||||
public static async Task<string> GetSmallPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
if (userInfoCollection == null)
|
||||
{
|
||||
return new List<UserInfo>();
|
||||
}
|
||||
|
||||
var users = new List<UserInfo>(userInfoCollection);
|
||||
users.Sort(UserInfoComparer.Default);
|
||||
return users;
|
||||
}
|
||||
|
||||
public static bool HasAvatar(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.UserHasAvatar(userInfo.Id);
|
||||
}
|
||||
|
||||
public static Size GetPhotoSize(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.GetPhotoSize(userInfo.Id);
|
||||
}
|
||||
|
||||
public static string GetPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.GetPhotoAbsoluteWebPath(userInfo.Id);
|
||||
}
|
||||
|
||||
public static string GetRetinaPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.GetRetinaPhotoURL(userInfo.Id);
|
||||
}
|
||||
|
||||
public static string GetMaxPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.GetMaxPhotoURL(userInfo.Id);
|
||||
}
|
||||
|
||||
public static string GetBigPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.GetBigPhotoURL(userInfo.Id);
|
||||
}
|
||||
|
||||
public static string GetMediumPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.GetMediumPhotoURL(userInfo.Id);
|
||||
}
|
||||
|
||||
public static string GetSmallPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
|
||||
{
|
||||
return UserPhotoManager.GetSmallPhotoURL(userInfo.Id);
|
||||
}
|
||||
|
||||
public static string RenderProfileLinkBase(this UserInfo userInfo, CommonLinkUtility commonLinkUtility, DisplayUserSettingsHelper displayUserSettingsHelper)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
||||
//check for removed users
|
||||
if (userInfo.Id == Constants.LostUser.Id)
|
||||
{
|
||||
sb.Append($"<span class='userLink text-medium-describe' style='white-space:nowrap;'>{userInfo.DisplayUserName(displayUserSettingsHelper)}</span>");
|
||||
}
|
||||
else
|
||||
{
|
||||
var popupID = Guid.NewGuid();
|
||||
sb.Append($"<span class=\"userLink\" style='white-space:nowrap;' id='{popupID}' data-uid='{userInfo.Id}'>");
|
||||
sb.Append($"<a class='linkDescribe' href=\"{userInfo.GetUserProfilePageURLGeneral(commonLinkUtility)}\">{userInfo.DisplayUserName(displayUserSettingsHelper)}</a>");
|
||||
sb.Append("</span>");
|
||||
|
||||
sb.AppendFormat("<script language='javascript'> StudioUserProfileInfo.RegistryElement('{0}','\"{1}\"); </script>", popupID, userInfo.Id);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// return absolute profile link
|
||||
/// </summary>
|
||||
/// <param name="userInfo"></param>
|
||||
/// <returns></returns>
|
||||
private static string GetUserProfilePageURLGeneral(this UserInfo userInfo, CommonLinkUtility commonLinkUtility)
|
||||
{
|
||||
return commonLinkUtility.GetUserProfile(userInfo);
|
||||
return await UserPhotoManager.GetSmallPhotoURL(userInfo.Id);
|
||||
}
|
||||
}
|
||||
|
@ -252,60 +252,35 @@ public class UserPhotoManager
|
||||
return _defaultAbsoluteWebPath ??= _webImageSupplier.GetAbsoluteWebPath(_defaultAvatar);
|
||||
}
|
||||
|
||||
public string GetRetinaPhotoURL(Guid userID)
|
||||
public async Task<string> GetRetinaPhotoURL(Guid userID)
|
||||
{
|
||||
return GetRetinaPhotoURL(userID, out _);
|
||||
return await GetSizedPhotoAbsoluteWebPath(userID, RetinaFotoSize);
|
||||
}
|
||||
|
||||
public string GetRetinaPhotoURL(Guid userID, out bool isdef)
|
||||
public async Task<string> GetMaxPhotoURL(Guid userID)
|
||||
{
|
||||
return GetSizedPhotoAbsoluteWebPath(userID, RetinaFotoSize, out isdef);
|
||||
return await GetSizedPhotoAbsoluteWebPath(userID, MaxFotoSize);
|
||||
}
|
||||
|
||||
public string GetMaxPhotoURL(Guid userID)
|
||||
public async Task<string> GetBigPhotoURL(Guid userID)
|
||||
{
|
||||
return GetMaxPhotoURL(userID, out _);
|
||||
return await GetSizedPhotoAbsoluteWebPath(userID, BigFotoSize);
|
||||
}
|
||||
|
||||
public string GetMaxPhotoURL(Guid userID, out bool isdef)
|
||||
public async Task<string> GetMediumPhotoURL(Guid userID)
|
||||
{
|
||||
return GetSizedPhotoAbsoluteWebPath(userID, MaxFotoSize, out isdef);
|
||||
return await GetSizedPhotoAbsoluteWebPath(userID, MediumFotoSize);
|
||||
}
|
||||
|
||||
public string GetBigPhotoURL(Guid userID)
|
||||
public async Task<string> GetSmallPhotoURL(Guid userID)
|
||||
{
|
||||
return GetBigPhotoURL(userID, out _);
|
||||
}
|
||||
|
||||
public string GetBigPhotoURL(Guid userID, out bool isdef)
|
||||
{
|
||||
return GetSizedPhotoAbsoluteWebPath(userID, BigFotoSize, out isdef);
|
||||
}
|
||||
|
||||
public string GetMediumPhotoURL(Guid userID)
|
||||
{
|
||||
return GetMediumPhotoURL(userID, out _);
|
||||
}
|
||||
|
||||
public string GetMediumPhotoURL(Guid userID, out bool isdef)
|
||||
{
|
||||
return GetSizedPhotoAbsoluteWebPath(userID, MediumFotoSize, out isdef);
|
||||
}
|
||||
|
||||
public string GetSmallPhotoURL(Guid userID)
|
||||
{
|
||||
return GetSmallPhotoURL(userID, out _);
|
||||
}
|
||||
|
||||
public string GetSmallPhotoURL(Guid userID, out bool isdef)
|
||||
{
|
||||
return GetSizedPhotoAbsoluteWebPath(userID, SmallFotoSize, out isdef);
|
||||
return await GetSizedPhotoAbsoluteWebPath(userID, SmallFotoSize);
|
||||
}
|
||||
|
||||
|
||||
public string GetSizedPhotoUrl(Guid userId, int width, int height)
|
||||
public async Task<string> GetSizedPhotoUrl(Guid userId, int width, int height)
|
||||
{
|
||||
return GetSizedPhotoAbsoluteWebPath(userId, new Size(width, height));
|
||||
return await GetSizedPhotoAbsoluteWebPath(userId, new Size(width, height));
|
||||
}
|
||||
|
||||
|
||||
@ -359,16 +334,16 @@ public class UserPhotoManager
|
||||
private static readonly string _tempDomainName = "temp";
|
||||
|
||||
|
||||
public bool UserHasAvatar(Guid userID)
|
||||
public async Task<bool> UserHasAvatar(Guid userID)
|
||||
{
|
||||
var path = GetPhotoAbsoluteWebPath(userID);
|
||||
var path = await GetPhotoAbsoluteWebPath(userID);
|
||||
var fileName = Path.GetFileName(path);
|
||||
return fileName != _defaultAvatar;
|
||||
}
|
||||
|
||||
public string GetPhotoAbsoluteWebPath(Guid userID)
|
||||
public async Task<string> GetPhotoAbsoluteWebPath(Guid userID)
|
||||
{
|
||||
var path = SearchInCache(userID, Size.Empty, out _);
|
||||
var path = SearchInCache(userID, Size.Empty);
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
return path;
|
||||
@ -386,7 +361,7 @@ public class UserPhotoManager
|
||||
}
|
||||
else
|
||||
{
|
||||
photoUrl = SaveOrUpdatePhoto(userID, data, -1, new Size(-1, -1), false, out fileName);
|
||||
(photoUrl, fileName) = await SaveOrUpdatePhoto(userID, data, -1, new Size(-1, -1), false);
|
||||
}
|
||||
|
||||
_userPhotoManagerCache.AddToCache(userID, Size.Empty, fileName, _tenant.Id);
|
||||
@ -399,9 +374,9 @@ public class UserPhotoManager
|
||||
return GetDefaultPhotoAbsoluteWebPath();
|
||||
}
|
||||
|
||||
internal Size GetPhotoSize(Guid userID)
|
||||
internal async Task<Size> GetPhotoSize(Guid userID)
|
||||
{
|
||||
var virtualPath = GetPhotoAbsoluteWebPath(userID);
|
||||
var virtualPath = await GetPhotoAbsoluteWebPath(userID);
|
||||
if (virtualPath == null)
|
||||
{
|
||||
return Size.Empty;
|
||||
@ -420,14 +395,9 @@ public class UserPhotoManager
|
||||
}
|
||||
}
|
||||
|
||||
private string GetSizedPhotoAbsoluteWebPath(Guid userID, Size size)
|
||||
private async Task<string> GetSizedPhotoAbsoluteWebPath(Guid userID, Size size)
|
||||
{
|
||||
return GetSizedPhotoAbsoluteWebPath(userID, size, out _);
|
||||
}
|
||||
|
||||
private string GetSizedPhotoAbsoluteWebPath(Guid userID, Size size, out bool isdef)
|
||||
{
|
||||
var res = SearchInCache(userID, size, out isdef);
|
||||
var res = SearchInCache(userID, size);
|
||||
if (!string.IsNullOrEmpty(res))
|
||||
{
|
||||
return res;
|
||||
@ -443,16 +413,14 @@ public class UserPhotoManager
|
||||
var photoUrl = GetDefaultPhotoAbsoluteWebPath(size);
|
||||
|
||||
_userPhotoManagerCache.AddToCache(userID, size, "default", _tenant.Id);
|
||||
isdef = true;
|
||||
return photoUrl;
|
||||
}
|
||||
|
||||
//Enqueue for sizing
|
||||
SizePhoto(userID, data, -1, size);
|
||||
await SizePhoto(userID, data, -1, size);
|
||||
}
|
||||
catch { }
|
||||
|
||||
isdef = false;
|
||||
return GetDefaultPhotoAbsoluteWebPath(size);
|
||||
}
|
||||
|
||||
@ -473,20 +441,17 @@ public class UserPhotoManager
|
||||
private static readonly object _diskCacheLoaderLock = new object();
|
||||
|
||||
|
||||
private string SearchInCache(Guid userId, Size size, out bool isDef)
|
||||
private string SearchInCache(Guid userId, Size size)
|
||||
{
|
||||
if (!_userPhotoManagerCache.IsCacheLoadedForTenant(Tenant.Id))
|
||||
{
|
||||
LoadDiskCache();
|
||||
}
|
||||
|
||||
isDef = false;
|
||||
|
||||
var fileName = _userPhotoManagerCache.SearchInCache(userId, size);
|
||||
|
||||
if (fileName != null && fileName.StartsWith("default"))
|
||||
{
|
||||
isDef = true;
|
||||
return GetDefaultPhotoAbsoluteWebPath(size);
|
||||
}
|
||||
|
||||
@ -542,9 +507,9 @@ public class UserPhotoManager
|
||||
_settingsManager.SaveForUser(thumbSettings, userId);
|
||||
}
|
||||
|
||||
public string SaveOrUpdatePhoto(Guid userID, byte[] data)
|
||||
public async Task<(string, string)> SaveOrUpdatePhoto(Guid userID, byte[] data)
|
||||
{
|
||||
return SaveOrUpdatePhoto(userID, data, -1, OriginalFotoSize, true, out _);
|
||||
return await SaveOrUpdatePhoto(userID, data, -1, OriginalFotoSize, true);
|
||||
}
|
||||
|
||||
public void RemovePhoto(Guid idUser)
|
||||
@ -573,12 +538,12 @@ public class UserPhotoManager
|
||||
}
|
||||
|
||||
|
||||
private string SaveOrUpdatePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool saveInCoreContext, out string fileName)
|
||||
private async Task<(string, string)> SaveOrUpdatePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool saveInCoreContext)
|
||||
{
|
||||
data = TryParseImage(data, maxFileSize, size, out var imgFormat, out var width, out var height);
|
||||
|
||||
var widening = CommonPhotoManager.GetImgFormatName(imgFormat);
|
||||
fileName = string.Format("{0}_orig_{1}-{2}.{3}", userID, width, height, widening);
|
||||
var fileName = string.Format("{0}_orig_{1}-{2}.{3}", userID, width, height, widening);
|
||||
|
||||
if (saveInCoreContext)
|
||||
{
|
||||
@ -598,13 +563,15 @@ public class UserPhotoManager
|
||||
photoUrl = store.SaveAsync(fileName, stream).Result.ToString();
|
||||
}
|
||||
//Queue resizing
|
||||
SizePhoto(userID, data, -1, SmallFotoSize, true);
|
||||
SizePhoto(userID, data, -1, MediumFotoSize, true);
|
||||
SizePhoto(userID, data, -1, BigFotoSize, true);
|
||||
SizePhoto(userID, data, -1, MaxFotoSize, true);
|
||||
SizePhoto(userID, data, -1, RetinaFotoSize, true);
|
||||
var t1 = SizePhoto(userID, data, -1, SmallFotoSize, true);
|
||||
var t2 = SizePhoto(userID, data, -1, MediumFotoSize, true);
|
||||
var t3 = SizePhoto(userID, data, -1, BigFotoSize, true);
|
||||
var t4 = SizePhoto(userID, data, -1, MaxFotoSize, true);
|
||||
var t5 = SizePhoto(userID, data, -1, RetinaFotoSize, true);
|
||||
|
||||
await Task.WhenAll(t1, t2, t3, t4, t5);
|
||||
}
|
||||
return photoUrl;
|
||||
return (photoUrl, fileName);
|
||||
}
|
||||
|
||||
private void SetUserPhotoThumbnailSettings(Guid userId, int width, int height)
|
||||
@ -705,12 +672,12 @@ public class UserPhotoManager
|
||||
}
|
||||
}
|
||||
|
||||
private string SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size)
|
||||
private async Task<string> SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size)
|
||||
{
|
||||
return SizePhoto(userID, data, maxFileSize, size, false);
|
||||
return await SizePhoto(userID, data, maxFileSize, size, false);
|
||||
}
|
||||
|
||||
private string SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool now)
|
||||
private async Task<string> SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool now)
|
||||
{
|
||||
if (data == null || data.Length <= 0)
|
||||
{
|
||||
@ -729,22 +696,22 @@ public class UserPhotoManager
|
||||
if (now)
|
||||
{
|
||||
//Resize synchronously
|
||||
ResizeImage(resizeTask);
|
||||
return GetSizedPhotoAbsoluteWebPath(userID, size);
|
||||
await ResizeImage(resizeTask);
|
||||
return await GetSizedPhotoAbsoluteWebPath(userID, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!_resizeQueue.GetAllTasks<ResizeWorkerItem>().Any(r => r["key"] == key))
|
||||
{
|
||||
//Add
|
||||
_resizeQueue.EnqueueTask((a, b) => ResizeImage(resizeTask), resizeTask);
|
||||
_resizeQueue.EnqueueTask(async (a, b) => await ResizeImage(resizeTask), resizeTask);
|
||||
}
|
||||
return GetDefaultPhotoAbsoluteWebPath(size);
|
||||
//NOTE: return default photo here. Since task will update cache
|
||||
}
|
||||
}
|
||||
|
||||
private void ResizeImage(ResizeWorkerItem item)
|
||||
private async Task ResizeImage(ResizeWorkerItem item)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -770,7 +737,7 @@ public class UserPhotoManager
|
||||
var fileName = string.Format("{0}_size_{1}-{2}.{3}", item.UserId, item.Size.Width, item.Size.Height, widening);
|
||||
|
||||
using var stream2 = new MemoryStream(data);
|
||||
item.DataStore.SaveAsync(fileName, stream2).Result.ToString();
|
||||
await item.DataStore.SaveAsync(fileName, stream2);
|
||||
|
||||
_userPhotoManagerCache.AddToCache(item.UserId, item.Size, fileName, _tenant.Id);
|
||||
}
|
||||
|
@ -28,17 +28,17 @@ namespace ASC.Web.Core.Users;
|
||||
|
||||
public static class UserPhotoThumbnailManager
|
||||
{
|
||||
public static List<ThumbnailItem> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, int x, int y, int width, int height, Guid userId)
|
||||
public static async Task<List<ThumbnailItem>> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, int x, int y, int width, int height, Guid userId)
|
||||
{
|
||||
return SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(x, y, width, height), userId);
|
||||
return await SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(x, y, width, height), userId);
|
||||
}
|
||||
|
||||
public static List<ThumbnailItem> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, Point point, Size size, Guid userId)
|
||||
public static async Task<List<ThumbnailItem>> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, Point point, Size size, Guid userId)
|
||||
{
|
||||
return SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(point, size), userId);
|
||||
return await SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(point, size), userId);
|
||||
}
|
||||
|
||||
public static List<ThumbnailItem> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, UserPhotoThumbnailSettings thumbnailSettings, Guid userId)
|
||||
public static async Task<List<ThumbnailItem>> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, UserPhotoThumbnailSettings thumbnailSettings, Guid userId)
|
||||
{
|
||||
if (thumbnailSettings.Size.IsEmpty)
|
||||
{
|
||||
@ -56,7 +56,7 @@ public static class UserPhotoThumbnailManager
|
||||
return null;
|
||||
}
|
||||
|
||||
foreach (var thumbnail in thumbnailsData.ThumbnailList())
|
||||
foreach (var thumbnail in await thumbnailsData.ThumbnailList())
|
||||
{
|
||||
thumbnail.Image = GetImage(img, thumbnail.Size, thumbnailSettings);
|
||||
|
||||
@ -67,7 +67,7 @@ public static class UserPhotoThumbnailManager
|
||||
|
||||
settingsManager.SaveForUser(thumbnailSettings, userId);
|
||||
|
||||
return thumbnailsData.ThumbnailList();
|
||||
return await thumbnailsData.ThumbnailList();
|
||||
}
|
||||
|
||||
public static Image GetImage(Image mainImg, Size size, UserPhotoThumbnailSettings thumbnailSettings)
|
||||
@ -82,12 +82,12 @@ public static class UserPhotoThumbnailManager
|
||||
width,
|
||||
height);
|
||||
|
||||
var result = mainImg.Clone(x => x.BackgroundColor(Color.White).Crop(rect).Resize(new ResizeOptions
|
||||
var result = mainImg.Clone(x => x.BackgroundColor(Color.White).Crop(rect).Resize(new ResizeOptions
|
||||
{
|
||||
Size = size
|
||||
}));
|
||||
|
||||
return result;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void CheckImgFormat(byte[] data)
|
||||
@ -216,39 +216,34 @@ public class ThumbnailsData
|
||||
return img;
|
||||
}
|
||||
|
||||
public string MainImgUrl()
|
||||
{
|
||||
return _userPhotoManager.GetPhotoAbsoluteWebPath(_userId);
|
||||
}
|
||||
|
||||
public List<ThumbnailItem> ThumbnailList()
|
||||
public async Task<List<ThumbnailItem>> ThumbnailList()
|
||||
{
|
||||
return new List<ThumbnailItem>
|
||||
{
|
||||
new ThumbnailItem
|
||||
{
|
||||
Size = UserPhotoManager.RetinaFotoSize,
|
||||
ImgUrl = _userPhotoManager.GetRetinaPhotoURL(_userId)
|
||||
ImgUrl = await _userPhotoManager.GetRetinaPhotoURL(_userId)
|
||||
},
|
||||
new ThumbnailItem
|
||||
{
|
||||
Size = UserPhotoManager.MaxFotoSize,
|
||||
ImgUrl = _userPhotoManager.GetMaxPhotoURL(_userId)
|
||||
ImgUrl = await _userPhotoManager.GetMaxPhotoURL(_userId)
|
||||
},
|
||||
new ThumbnailItem
|
||||
{
|
||||
Size = UserPhotoManager.BigFotoSize,
|
||||
ImgUrl = _userPhotoManager.GetBigPhotoURL(_userId)
|
||||
ImgUrl = await _userPhotoManager.GetBigPhotoURL(_userId)
|
||||
},
|
||||
new ThumbnailItem
|
||||
{
|
||||
Size = UserPhotoManager.MediumFotoSize,
|
||||
ImgUrl = _userPhotoManager.GetMediumPhotoURL(_userId)
|
||||
ImgUrl = await _userPhotoManager.GetMediumPhotoURL(_userId)
|
||||
},
|
||||
new ThumbnailItem
|
||||
{
|
||||
Size = UserPhotoManager.SmallFotoSize,
|
||||
ImgUrl = _userPhotoManager.GetSmallPhotoURL(_userId)
|
||||
ImgUrl = await _userPhotoManager.GetSmallPhotoURL(_userId)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user