334 lines
12 KiB
Plaintext
334 lines
12 KiB
Plaintext
@namespace Oqtane.Modules.Admin.Pages
|
|
@inherits ModuleBase
|
|
@inject NavigationManager NavigationManager
|
|
@inject IPageService PageService
|
|
@inject IThemeService ThemeService
|
|
|
|
@if (_themeList != null)
|
|
{
|
|
<table class="table table-borderless">
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Name: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" @bind="@_name" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Path: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" @bind="@_path" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Parent: </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" @onchange="(e => ParentChanged(e))">
|
|
<option value="-1"><Site Root></option>
|
|
@foreach (Page page in _pageList)
|
|
{
|
|
<option value="@(page.PageId)">@(new string('-', page.Level * 2))@(page.Name)</option>
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Insert: </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" @bind="@_insert">
|
|
<option value="<<">At Beginning</option>
|
|
@if (_children != null && _children.Count > 0)
|
|
{
|
|
<option value="<">Before</option>
|
|
<option value=">">After</option>
|
|
}
|
|
<option value=">>">At End</option>
|
|
</select>
|
|
@if (_children != null && _children.Count > 0 && (_insert == "<" || _insert == ">"))
|
|
{
|
|
<select class="form-control" @bind="@_childid">
|
|
<option value="-1"><Select Page></option>
|
|
@foreach (Page page in _children)
|
|
{
|
|
<option value="@(page.PageId)">@(page.Name)</option>
|
|
}
|
|
</select>
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Navigation? </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" @bind="@_isnavigation">
|
|
<option value="True">Yes</option>
|
|
<option value="False">No</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Personalizable? </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" @bind="@_ispersonalizable">
|
|
<option value="True">Yes</option>
|
|
<option value="False">No</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Default Mode? </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" @bind="@_mode">
|
|
<option value="view">View Mode</option>
|
|
<option value="edit">Edit Mode</option>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Theme: </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" @onchange="(e => ThemeChanged(e))">
|
|
<option value=""><Select Theme></option>
|
|
@foreach (KeyValuePair<string, string> item in _themes)
|
|
{
|
|
<option value="@item.Key">@item.Value</option>
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Layout: </label>
|
|
</td>
|
|
<td>
|
|
<select class="form-control" @bind="@_layouttype">
|
|
<option value=""><Select Layout></option>
|
|
@foreach (KeyValuePair<string, string> panelayout in _panelayouts)
|
|
{
|
|
<option value="@panelayout.Key">@panelayout.Value</option>
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Icon: </label>
|
|
</td>
|
|
<td>
|
|
<input class="form-control" @bind="@_icon" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="Name" class="control-label">Permissions: </label>
|
|
</td>
|
|
<td>
|
|
<PermissionGrid EntityName="Page" Permissions="@_permissions" @ref="_permissionGrid" />
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<button type="button" class="btn btn-success" @onclick="SavePage">Save</button>
|
|
<NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink>
|
|
}
|
|
|
|
@code {
|
|
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
|
|
|
|
Dictionary<string, string> _themes = new Dictionary<string, string>();
|
|
Dictionary<string, string> _panelayouts = new Dictionary<string, string>();
|
|
|
|
List<Theme> _themeList;
|
|
List<Page> _pageList;
|
|
string _name;
|
|
string _path = "";
|
|
string _parentid;
|
|
string _insert = ">>";
|
|
List<Page> _children;
|
|
int _childid = -1;
|
|
string _isnavigation = "True";
|
|
string _ispersonalizable = "False";
|
|
string _mode = "view";
|
|
string _themetype = "";
|
|
string _layouttype = "";
|
|
string _icon = "";
|
|
string _permissions = "";
|
|
|
|
PermissionGrid _permissionGrid;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
try
|
|
{
|
|
_themeList = await ThemeService.GetThemesAsync();
|
|
_pageList = PageState.Pages;
|
|
_children = PageState.Pages.Where(item => item.ParentId == null).ToList();
|
|
|
|
_themes = ThemeService.GetThemeTypes(_themeList);
|
|
_themetype = PageState.Site.DefaultThemeType;
|
|
|
|
_panelayouts = ThemeService.GetPaneLayoutTypes(_themeList, _themetype);
|
|
_layouttype = PageState.Site.DefaultLayoutType;
|
|
|
|
List<PermissionString> permissionstrings = new List<PermissionString>();
|
|
permissionstrings.Add(new PermissionString { PermissionName = PermissionNames.View, Permissions = Constants.AdminRole });
|
|
permissionstrings.Add(new PermissionString { PermissionName = PermissionNames.Edit, Permissions = Constants.AdminRole });
|
|
_permissions = UserSecurity.SetPermissionStrings(permissionstrings);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Initializing Page {Error}", ex.Message);
|
|
AddModuleMessage("Error Initializing Page", MessageType.Error);
|
|
}
|
|
}
|
|
|
|
private async void ParentChanged(ChangeEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
_parentid = (string)e.Value;
|
|
if (_parentid == "-1")
|
|
{
|
|
_children = PageState.Pages.Where(item => item.ParentId == null).ToList();
|
|
}
|
|
else
|
|
{
|
|
_children = PageState.Pages.Where(item => item.ParentId == int.Parse(_parentid)).ToList();
|
|
}
|
|
StateHasChanged();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Loading Child Pages For Parent {PageId} {Error}", _parentid, ex.Message);
|
|
AddModuleMessage("Error Loading Child Pages For Parent", MessageType.Error);
|
|
}
|
|
}
|
|
|
|
private async void ThemeChanged(ChangeEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
_themetype = (string)e.Value;
|
|
if (_themetype != "")
|
|
{
|
|
_panelayouts = ThemeService.GetPaneLayoutTypes(_themeList, _themetype);
|
|
}
|
|
else
|
|
{
|
|
_panelayouts = new Dictionary<string, string>();
|
|
}
|
|
StateHasChanged();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message);
|
|
AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error);
|
|
}
|
|
}
|
|
|
|
private async Task SavePage()
|
|
{
|
|
Page page = null;
|
|
try
|
|
{
|
|
if (_name != "" && !string.IsNullOrEmpty(_themetype) && (_panelayouts.Count == 0 || !string.IsNullOrEmpty(_layouttype)))
|
|
{
|
|
page = new Page();
|
|
page.SiteId = PageState.Page.SiteId;
|
|
page.Name = _name;
|
|
if (_path == "")
|
|
{
|
|
_path = _name;
|
|
}
|
|
if (_path.Contains("/"))
|
|
{
|
|
_path = _path.Substring(_path.LastIndexOf("/") + 1);
|
|
}
|
|
if (string.IsNullOrEmpty(_parentid))
|
|
{
|
|
page.ParentId = null;
|
|
page.Path = Utilities.GetFriendlyUrl(_path);
|
|
}
|
|
else
|
|
{
|
|
page.ParentId = Int32.Parse(_parentid);
|
|
Page parent = PageState.Pages.Where(item => item.PageId == page.ParentId).FirstOrDefault();
|
|
if (parent.Path == "")
|
|
{
|
|
page.Path = Utilities.GetFriendlyUrl(parent.Name) + "/" + Utilities.GetFriendlyUrl(_path);
|
|
}
|
|
else
|
|
{
|
|
page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(_path);
|
|
}
|
|
}
|
|
Page child;
|
|
switch (_insert)
|
|
{
|
|
case "<<":
|
|
page.Order = 0;
|
|
break;
|
|
case "<":
|
|
child = PageState.Pages.Where(item => item.PageId == _childid).FirstOrDefault();
|
|
page.Order = child.Order - 1;
|
|
break;
|
|
case ">":
|
|
child = PageState.Pages.Where(item => item.PageId == _childid).FirstOrDefault();
|
|
page.Order = child.Order + 1;
|
|
break;
|
|
case ">>":
|
|
page.Order = int.MaxValue;
|
|
break;
|
|
}
|
|
page.IsNavigation = (_isnavigation == null ? true : Boolean.Parse(_isnavigation));
|
|
page.EditMode = (_mode == "edit" ? true : false);
|
|
page.ThemeType = _themetype;
|
|
page.LayoutType = (_layouttype == null ? "" : _layouttype);
|
|
page.Icon = (_icon == null ? "" : _icon);
|
|
page.Permissions = _permissionGrid.GetPermissions();
|
|
|
|
if (page.ThemeType == PageState.Site.DefaultThemeType)
|
|
{
|
|
page.ThemeType = "";
|
|
}
|
|
if (page.LayoutType == PageState.Site.DefaultLayoutType)
|
|
{
|
|
page.LayoutType = "";
|
|
}
|
|
page.IsPersonalizable = (_ispersonalizable == null ? false : Boolean.Parse(_ispersonalizable));
|
|
page.UserId = null;
|
|
|
|
page = await PageService.AddPageAsync(page);
|
|
await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, page.ParentId);
|
|
|
|
await logger.LogInformation("Page Added {Page}", page);
|
|
NavigationManager.NavigateTo(NavigateUrl(page.Path));
|
|
}
|
|
else
|
|
{
|
|
AddModuleMessage("You Must Provide Page Name And Theme", MessageType.Warning);
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Saving Page {Page} {Error}", page, ex.Message);
|
|
AddModuleMessage("Error Saving Page", MessageType.Error);
|
|
}
|
|
}
|
|
|
|
}
|