add support for public content folders

This commit is contained in:
Shaun Walker
2021-05-26 12:01:35 -04:00
parent 1d171d2e56
commit c07e766e57
23 changed files with 281 additions and 123 deletions

View File

@ -1,8 +1,9 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Oqtane.Extensions;
using Oqtane.Infrastructure;
using Oqtane.Models;
using Oqtane.Shared;
using File = Oqtane.Models.File;
@ -14,21 +15,25 @@ namespace Oqtane.Repository
private TenantDBContext _db;
private readonly IPermissionRepository _permissions;
private readonly IFolderRepository _folderRepository;
private readonly ITenantManager _tenants;
public FileRepository(TenantDBContext context, IPermissionRepository permissions, IFolderRepository folderRepository)
public FileRepository(TenantDBContext context, IPermissionRepository permissions, IFolderRepository folderRepository, ITenantManager tenants)
{
_db = context;
_permissions = permissions;
_folderRepository = folderRepository;
_tenants = tenants;
}
public IEnumerable<File> GetFiles(int folderId)
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Folder, folderId).ToList();
IEnumerable<File> files = _db.File.Where(item => item.FolderId == folderId).Include(item => item.Folder);
var alias = _tenants.GetAlias();
foreach (File file in files)
{
file.Folder.Permissions = permissions.EncodePermissions();
file.Url = GetFileUrl(file, alias);
}
return files;
}
@ -49,7 +54,9 @@ namespace Oqtane.Repository
public File GetFile(int fileId)
{
return GetFile(fileId, true);
File file = GetFile(fileId, true);
file.Url = GetFileUrl(file, _tenants.GetAlias());
return file;
}
public File GetFile(int fileId, bool tracking)
@ -68,6 +75,7 @@ namespace Oqtane.Repository
{
IEnumerable<Permission> permissions = _permissions.GetPermissions(EntityNames.Folder, file.FolderId).ToList();
file.Folder.Permissions = permissions.EncodePermissions();
file.Url = GetFileUrl(file, _tenants.GetAlias());
}
return file;
}
@ -92,5 +100,20 @@ namespace Oqtane.Repository
var filepath = Path.Combine(_folderRepository.GetFolderPath(folder), file.Name);
return filepath;
}
private string GetFileUrl(File file, Alias alias)
{
string url = "";
switch (file.Folder.Type)
{
case FolderTypes.Private:
url = Utilities.ContentUrl(alias, file.FileId);
break;
case FolderTypes.Public:
url = "/" + Utilities.UrlCombine("Content", "Tenants", alias.TenantId.ToString(), "Sites", file.Folder.SiteId.ToString(), file.Folder.Path) + file.Name;
break;
}
return url;
}
}
}