Merge pull request #5306 from sbwalker/dev
fix #5200 - sort folders alphabetically, display folders hierarchically
This commit is contained in:
commit
9234b91089
@ -15,22 +15,34 @@
|
|||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="parent" HelpText="Select the parent folder" ResourceKey="Parent">Parent: </Label>
|
<Label Class="col-sm-3" For="parent" HelpText="Select the parent folder" ResourceKey="Parent">Parent: </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<select id="parent" class="form-select" @bind="@_parentId" required>
|
@if (_parentId == -1)
|
||||||
@if (PageState.QueryString.ContainsKey("id"))
|
|
||||||
{
|
{
|
||||||
|
<select id="parent" class="form-select" @bind="@_parentId" required>
|
||||||
<option value="-1"><@Localizer["NoParent"]></option>
|
<option value="-1"><@Localizer["NoParent"]></option>
|
||||||
|
</select>
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<select id="parent" class="form-select" @bind="@_parentId" required>
|
||||||
@foreach (Folder folder in _folders)
|
@foreach (Folder folder in _folders)
|
||||||
{
|
{
|
||||||
<option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option>
|
<option value="@(folder.FolderId)">@(new string('-', folder.Level * 2))@(folder.Name)</option>
|
||||||
}
|
}
|
||||||
</select>
|
</select>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="name" HelpText="Enter the folder name" ResourceKey="Name">Name: </Label>
|
<Label Class="col-sm-3" For="name" HelpText="Enter the folder name" ResourceKey="Name">Name: </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
|
@if (_isSystem)
|
||||||
|
{
|
||||||
|
<input id="name" class="form-control" @bind="@_name" readonly />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
<input id="name" class="form-control" @bind="@_name" maxlength="256" required />
|
<input id="name" class="form-control" @bind="@_name" maxlength="256" required />
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
@ -229,7 +241,6 @@
|
|||||||
|
|
||||||
if (folder != null)
|
if (folder != null)
|
||||||
{
|
{
|
||||||
await FolderService.UpdateFolderOrderAsync(folder.SiteId, folder.FolderId, folder.ParentId);
|
|
||||||
await logger.LogInformation("Folder Saved {Folder}", folder);
|
await logger.LogInformation("Folder Saved {Folder}", folder);
|
||||||
NavigationManager.NavigateTo(NavigateUrl());
|
NavigationManager.NavigateTo(NavigateUrl());
|
||||||
}
|
}
|
||||||
|
@ -42,14 +42,6 @@ namespace Oqtane.Services
|
|||||||
return await PutJsonAsync<Folder>($"{ApiUrl}/{folder.FolderId}", folder);
|
return await PutJsonAsync<Folder>($"{ApiUrl}/{folder.FolderId}", folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UpdateFolderOrderAsync(int siteId, int folderId, int? parentId)
|
|
||||||
{
|
|
||||||
var parent = parentId == null
|
|
||||||
? string.Empty
|
|
||||||
: parentId.ToString();
|
|
||||||
await PutAsync($"{ApiUrl}/?siteid={siteId}&folderid={folderId}&parentid={parent}");
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task DeleteFolderAsync(int folderId)
|
public async Task DeleteFolderAsync(int folderId)
|
||||||
{
|
{
|
||||||
await DeleteAsync($"{ApiUrl}/{folderId}");
|
await DeleteAsync($"{ApiUrl}/{folderId}");
|
||||||
|
@ -39,15 +39,6 @@ namespace Oqtane.Services
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<Folder> UpdateFolderAsync(Folder folder);
|
Task<Folder> UpdateFolderAsync(Folder folder);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Update the internal Folder-Order within the list of Folders.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="siteId">Reference to the <see cref="Site"/></param>
|
|
||||||
/// <param name="folderId">Reference to a <see cref="Folder"/> for the security check</param>
|
|
||||||
/// <param name="parentId">Reference to the Parent <see cref="Folder"/> or null - this Folders children will be re-sorted.</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task UpdateFolderOrderAsync(int siteId, int folderId, int? parentId);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete a <see cref="Folder"/>
|
/// Delete a <see cref="Folder"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -43,7 +43,8 @@ namespace Oqtane.Controllers
|
|||||||
int SiteId;
|
int SiteId;
|
||||||
if (int.TryParse(siteid, out SiteId) && SiteId == _alias.SiteId)
|
if (int.TryParse(siteid, out SiteId) && SiteId == _alias.SiteId)
|
||||||
{
|
{
|
||||||
foreach (Folder folder in _folders.GetFolders(SiteId))
|
var hierarchy = GetFoldersHierarchy(_folders.GetFolders(SiteId).ToList());
|
||||||
|
foreach (Folder folder in hierarchy)
|
||||||
{
|
{
|
||||||
// note that Browse permission is used for this method
|
// note that Browse permission is used for this method
|
||||||
if (_userPermissions.IsAuthorized(User, PermissionNames.Browse, folder.PermissionList))
|
if (_userPermissions.IsAuthorized(User, PermissionNames.Browse, folder.PermissionList))
|
||||||
@ -51,7 +52,6 @@ namespace Oqtane.Controllers
|
|||||||
folders.Add(folder);
|
folders.Add(folder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
folders = GetFoldersHierarchy(folders);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -246,34 +246,6 @@ namespace Oqtane.Controllers
|
|||||||
return folder;
|
return folder;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PUT api/<controller>/?siteid=x&folderid=y&parentid=z
|
|
||||||
[HttpPut]
|
|
||||||
[Authorize(Roles = RoleNames.Registered)]
|
|
||||||
public void Put(int siteid, int folderid, int? parentid)
|
|
||||||
{
|
|
||||||
if (siteid == _alias.SiteId && _folders.GetFolder(folderid, false) != null && _userPermissions.IsAuthorized(User, siteid, EntityNames.Folder, folderid, PermissionNames.Edit))
|
|
||||||
{
|
|
||||||
int order = 1;
|
|
||||||
List<Folder> folders = _folders.GetFolders(siteid).ToList();
|
|
||||||
foreach (Folder folder in folders.Where(item => item.ParentId == parentid).OrderBy(item => item.Order))
|
|
||||||
{
|
|
||||||
if (folder.Order != order)
|
|
||||||
{
|
|
||||||
folder.Order = order;
|
|
||||||
_folders.UpdateFolder(folder);
|
|
||||||
_syncManager.AddSyncEvent(_alias, EntityNames.Folder, folder.FolderId, SyncEventActions.Update);
|
|
||||||
}
|
|
||||||
order += 2;
|
|
||||||
}
|
|
||||||
_logger.Log(LogLevel.Information, this, LogFunction.Update, "Folder Order Updated {SiteId} {FolderId} {ParentId}", siteid, folderid, parentid);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.Log(LogLevel.Error, this, LogFunction.Update, "Unauthorized Folder Put Attempt {SiteId} {FolderId} {ParentId}", siteid, folderid, parentid);
|
|
||||||
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DELETE api/<controller>/5
|
// DELETE api/<controller>/5
|
||||||
[HttpDelete("{id}")]
|
[HttpDelete("{id}")]
|
||||||
[Authorize(Roles = RoleNames.Registered)]
|
[Authorize(Roles = RoleNames.Registered)]
|
||||||
@ -314,7 +286,6 @@ namespace Oqtane.Controllers
|
|||||||
{
|
{
|
||||||
List<Folder> hierarchy = new List<Folder>();
|
List<Folder> hierarchy = new List<Folder>();
|
||||||
Action<List<Folder>, Folder> getPath = null;
|
Action<List<Folder>, Folder> getPath = null;
|
||||||
var folders1 = folders;
|
|
||||||
getPath = (folderList, folder) =>
|
getPath = (folderList, folder) =>
|
||||||
{
|
{
|
||||||
IEnumerable<Folder> children;
|
IEnumerable<Folder> children;
|
||||||
@ -322,23 +293,23 @@ namespace Oqtane.Controllers
|
|||||||
if (folder == null)
|
if (folder == null)
|
||||||
{
|
{
|
||||||
level = -1;
|
level = -1;
|
||||||
children = folders1.Where(item => item.ParentId == null);
|
children = folders.Where(item => item.ParentId == null);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
level = folder.Level;
|
level = folder.Level;
|
||||||
children = folders1.Where(item => item.ParentId == folder.FolderId);
|
children = folders.Where(item => item.ParentId == folder.FolderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Folder child in children)
|
foreach (Folder child in children)
|
||||||
{
|
{
|
||||||
child.Level = level + 1;
|
child.Level = level + 1;
|
||||||
child.HasChildren = folders1.Any(item => item.ParentId == child.FolderId);
|
child.HasChildren = folders.Any(item => item.ParentId == child.FolderId);
|
||||||
hierarchy.Add(child);
|
hierarchy.Add(child);
|
||||||
if (getPath != null) getPath(folderList, child);
|
getPath(folderList, child);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
folders = folders.OrderBy(item => item.Order).ToList();
|
folders = folders.OrderBy(item => item.Name).ToList();
|
||||||
getPath(folders, null);
|
getPath(folders, null);
|
||||||
|
|
||||||
// add any non-hierarchical items to the end of the list
|
// add any non-hierarchical items to the end of the list
|
||||||
|
Loading…
x
Reference in New Issue
Block a user