last ...
This commit is contained in:
+201
-31
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using IdentityModel.Client;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
@@ -309,7 +308,7 @@ namespace xWebinarService.Providers
|
||||
|
||||
//
|
||||
// Check For Files ...
|
||||
isValid = !files.IsNull();
|
||||
isValid = !files.IsNull() && files.Count() > 0;
|
||||
if (isValid)
|
||||
{
|
||||
//
|
||||
@@ -875,16 +874,36 @@ namespace xWebinarService.Providers
|
||||
//
|
||||
// Handle Remove ...
|
||||
var subscribers = await GetSubscribers(
|
||||
webinarId: webinarId
|
||||
webinarId: webinarId,
|
||||
userInfo: userInfo
|
||||
);
|
||||
try
|
||||
{
|
||||
//
|
||||
// Unsubscribe all Subscribers ...
|
||||
await subscribers.SelectAsync(async s => await Unsubscribe(
|
||||
webinarId: webinarId,
|
||||
subscriberId: s.SubscriberId
|
||||
));
|
||||
|
||||
//
|
||||
// Detach Tags ...
|
||||
await DetachTags(
|
||||
id: entity.Id,
|
||||
userInfo: userInfo,
|
||||
connectionId: connectionId
|
||||
);
|
||||
|
||||
//
|
||||
// Detach Files ...
|
||||
//
|
||||
await DetachFiles(
|
||||
ids: null, // Pass Null To Detach All Referenced Files ...
|
||||
id: webinarId,
|
||||
userInfo: userInfo,
|
||||
connectionId: connectionId
|
||||
);
|
||||
|
||||
//
|
||||
string resourceID = webinarId.ToString();
|
||||
await TitleResourceProvider.Remove(resourceID);
|
||||
@@ -895,33 +914,6 @@ namespace xWebinarService.Providers
|
||||
}
|
||||
catch { }
|
||||
|
||||
//
|
||||
// Detach Tags ...
|
||||
try
|
||||
{
|
||||
await DetachTags(entity.Id, userInfo);
|
||||
}
|
||||
catch { }
|
||||
|
||||
//
|
||||
// Remove Files ...
|
||||
try
|
||||
{
|
||||
//
|
||||
var medias = await WebinarFileProvider.GetAllReferences(entity.Id);
|
||||
if (!medias.IsNull() && medias.HasChild())
|
||||
{
|
||||
//
|
||||
await RemoveFiles(
|
||||
id: entity.Id,
|
||||
ids: string.Empty,
|
||||
userInfo: userInfo,
|
||||
connectionId: connectionId
|
||||
);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
//
|
||||
// Check Entity Removed ...
|
||||
result = !await WebinarRepository.IsExistsAsync(webinarId);
|
||||
@@ -1629,7 +1621,185 @@ namespace xWebinarService.Providers
|
||||
//
|
||||
var result = await WebinarFileProvider.Download(fileId);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attach Provided Files to Specified Webinar ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ids"></param>
|
||||
/// <param name="connectionId"></param>
|
||||
/// <param name="userInfo"></param>
|
||||
/// <returns></returns>
|
||||
public async Task AttachFiles(
|
||||
Guid id,
|
||||
string ids,
|
||||
string connectionId = null,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
)
|
||||
{
|
||||
//
|
||||
// Validate ...
|
||||
var isValid = !id.IsNull() &&
|
||||
!id.IsDefaultGuid() &&
|
||||
!ids.IsNullOrEmpty() &&
|
||||
!userInfo.IsNullOrDefault();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.InvalidArgs.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Parse Files ...
|
||||
var idsList = ids.ParseListGuid();
|
||||
isValid = !idsList.IsNull() && idsList.HasChild();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.NotFound.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Retrieve Webinar ...
|
||||
var webinar = await WebinarRepository.GetAsync(id);
|
||||
isValid = !webinar.IsNullOrDefault();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.NotFound.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Check Permissions ...
|
||||
isValid =
|
||||
userInfo.UserId == webinar.OwnerId ||
|
||||
userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
||||
if (!isValid)
|
||||
{
|
||||
XException.NotAllowed.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Refrieve all Webinar Refrenced File ...
|
||||
var references = await WebinarFileProvider.GetAllReferences(id);
|
||||
if (!references.IsNull() && references.HasChild())
|
||||
{
|
||||
//
|
||||
// Filter ids which Exists in References ...
|
||||
idsList =
|
||||
idsList.Where(i => !references.Any(r => r.Id == i));
|
||||
}
|
||||
|
||||
//
|
||||
isValid = idsList.HasChild();
|
||||
if (!isValid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
foreach (var fileId in idsList)
|
||||
{
|
||||
//
|
||||
// Check File Exists ...
|
||||
var file = await WebinarFileProvider.FileProvider.Get(fileId);
|
||||
isValid = !file.IsNullOrDefault();
|
||||
if (isValid)
|
||||
{
|
||||
//
|
||||
await WebinarFileProvider.AddReference(
|
||||
model: file,
|
||||
providedForId: id,
|
||||
forIndex: 0,
|
||||
userInfo: userInfo,
|
||||
connectionId: connectionId
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Detach Provided Files to Specified Webinar ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ids">if null, detach all files ...</param>
|
||||
/// <param name="connectionId"></param>
|
||||
/// <param name="userInfo"></param>
|
||||
/// <returns></returns>
|
||||
public async Task DetachFiles(
|
||||
Guid id,
|
||||
string ids,
|
||||
string connectionId = null,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
)
|
||||
{
|
||||
//
|
||||
// Validate ...
|
||||
var isValid =
|
||||
!id.IsNull() &&
|
||||
!id.IsDefaultGuid() &&
|
||||
!userInfo.IsNullOrDefault();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.InvalidArgs.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Check Webinar Exists ...
|
||||
var webinar = await WebinarRepository.GetAsync(id);
|
||||
isValid = !webinar.IsNullOrDefault();
|
||||
if (!isValid)
|
||||
{
|
||||
XException.NotFound.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
// Check Permissions ...
|
||||
isValid =
|
||||
userInfo.UserId == webinar.OwnerId ||
|
||||
userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
||||
if (!isValid)
|
||||
{
|
||||
XException.NotAllowed.Throw();
|
||||
}
|
||||
|
||||
//
|
||||
var references = await WebinarFileProvider.GetAllReferences(id);
|
||||
isValid = !references.IsNull() && references.HasChild();
|
||||
if (!isValid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Parse IDS ...
|
||||
if (!ids.IsNullOrEmpty())
|
||||
{
|
||||
//
|
||||
var idsList = ids.ParseListGuid();
|
||||
if (!idsList.IsNull() && idsList.HasChild())
|
||||
{
|
||||
//
|
||||
// Filtere References based on IDS ...
|
||||
references =
|
||||
references.Where(r => idsList.Contains(r.Id));
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (references.HasChild())
|
||||
{
|
||||
//
|
||||
foreach (var file in references)
|
||||
{
|
||||
//
|
||||
await WebinarFileProvider.RemoveReference(
|
||||
model: file,
|
||||
providedForId: id,
|
||||
userInfo: userInfo,
|
||||
connectionId: connectionId
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user