updated namespaces, improved page management,

This commit is contained in:
Shaun Walker
2019-09-14 15:31:12 -04:00
parent 2a691dbceb
commit 7d5e35c637
73 changed files with 608 additions and 309 deletions

View File

@ -1,5 +1,4 @@
@using Oqtane.Shared
@using Oqtane.Client.Shared
@using Oqtane.Services
@inject IInstallationService InstallationService

View File

@ -3,7 +3,7 @@
@using Oqtane.Services
@using Oqtane.Models;
@using Oqtane.Security
@using Oqtane.Client.Modules.Controls
@namespace Oqtane.Modules.Admin.Dashboard
@inherits ModuleBase
@inject IPageService PageService
@inject IUserService UserService
@ -22,7 +22,8 @@
}
}
</ul>
<br /><br />
<br />
<br />
@code {
List<Page> pages;

View File

@ -5,6 +5,7 @@
@using Oqtane.Services
@using Oqtane.Providers
@using Oqtane.Shared
@namespace Oqtane.Modules.Admin.Login
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IJSRuntime jsRuntime

View File

@ -1,8 +1,9 @@
@using Microsoft.AspNetCore.Components.Routing
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@using Oqtane.Modules
@using Oqtane.Services
@using Oqtane.Shared
@namespace Oqtane.Modules.Admin.ModuleDefinitions
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IFileService FileService

View File

@ -1,9 +1,9 @@
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Modules
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@namespace Oqtane.Modules.Admin.ModuleDefinitions
@inherits ModuleBase
@inject IModuleDefinitionService ModuleDefinitionService
@if (moduledefinitions == null)

View File

@ -4,7 +4,8 @@
@using Oqtane.Modules
@using Oqtane.Shared
@using Oqtane.Security
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@namespace Oqtane.Modules.Admin.ModuleSettings
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IThemeService ThemeService

View File

@ -1,10 +1,11 @@
@using Microsoft.AspNetCore.Components.Routing
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@using Oqtane.Models
@using Oqtane.Services
@using Oqtane.Modules
@using Oqtane.Shared
@using Oqtane.Security
@namespace Oqtane.Modules.Admin.Pages
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IPageService PageService
@ -21,34 +22,44 @@
<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" @bind="@parentid">
<option value="">&lt;Select Parent&gt;</option>
@foreach (Page page in PageState.Pages)
<select class="form-control" @onchange="@(e => ParentChanged(e))">
<option value="">&lt;Site Root&gt;</option>
@foreach (Page page in pages)
{
<option value="@(page.PageId)">@(page.Name)</option>
<option value="@(page.PageId)">@(new string('-',page.Level * 2))@(page.Name)</option>
}
</select>
</td>
</tr>
<tr>
<td>
<label for="Name" class="control-label">Order: </label>
<label for="Name" class="control-label">Insert: </label>
</td>
<td>
<input class="form-control" @bind="@order" />
<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=">>" selected>At End</option>
</select>
@if (children != null && children.Count > 0 && (insert == "<" || insert == ">"))
{
<select class="form-control" @bind="@childid">
<option value="-1">&lt;Select Page&gt;</option>
@foreach (Page page in children)
{
<option value="@(page.PageId)">@(page.Name)</option>
}
</select>
}
</td>
</tr>
<tr>
@ -129,10 +140,12 @@
Dictionary<string, string> themes = new Dictionary<string, string>();
Dictionary<string, string> panelayouts = new Dictionary<string, string>();
List<Page> pages;
string name;
string path;
string parentid;
string order = "";
string insert;
List<Page> children;
int childid = -1;
string isnavigation = "True";
string editmode = "False";
string themetype;
@ -146,6 +159,9 @@
{
try
{
pages = PageState.Pages.Where(item => item.IsNavigation).ToList();
children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList();
themes = ThemeService.GetThemeTypes(PageState.Themes);
panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes);
@ -160,23 +176,63 @@
}
}
private void ParentChanged(UIChangeEventArgs e)
{
try
{
parentid = (string)e.Value;
if (string.IsNullOrEmpty(parentid))
{
children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList();
}
else
{
children = PageState.Pages.Where(item => item.ParentId == int.Parse(parentid) && item.IsNavigation).OrderBy(item => item.Order).ToList();
}
StateHasChanged();
}
catch (Exception ex)
{
message = ex.Message;
}
}
private async Task SavePage()
{
try
{
Page page = new Page();
page.SiteId = PageState.Page.SiteId;
page.Name = name;
if (string.IsNullOrEmpty(parentid))
{
page.ParentId = null;
page.Path = page.Name.ToLower();
}
else
{
page.ParentId = Int32.Parse(parentid);
Page parent = PageState.Pages.Where(item => item.ParentId == page.ParentId).FirstOrDefault();
page.Path = parent.Path + "/" + page.Name.ToLower();
}
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.Name = name;
page.Path = path;
page.Order = (order == null ? 1 : Int32.Parse(order));
page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation));
page.EditMode = (editmode == null ? true : Boolean.Parse(editmode));
page.ThemeType = themetype;
@ -195,20 +251,15 @@
page.Panes = (string)property.GetValue(Activator.CreateInstance(type), null);
page.Permissions = permissiongrid.GetPermissions();
await PageService.AddPageAsync(page);
await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId);
PageState.Reload = Constants.ReloadSite;
if (PageState.Page.Name == "Page Management")
{
UriHelper.NavigateTo(NavigateUrl());
}
else
{
UriHelper.NavigateTo(NavigateUrl(path));
}
UriHelper.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{
message = ex.Message;
}
}
}

View File

@ -1,10 +1,11 @@
@using Microsoft.AspNetCore.Components.Routing
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@using Oqtane.Models
@using Oqtane.Services
@using Oqtane.Modules
@using Oqtane.Shared
@using Oqtane.Security
@namespace Oqtane.Modules.Admin.Pages
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IPageService PageService
@ -43,14 +44,6 @@
</select>
</td>
</tr>
<tr>
<td>
<label for="Name" class="control-label">Order: </label>
</td>
<td>
<input class="form-control" @bind="@order" readonly />
</td>
</tr>
<tr>
<td>
<label for="Name" class="control-label">Navigation? </label>
@ -136,7 +129,6 @@
string name;
string path;
string parentid;
string order;
string isnavigation;
string editmode;
string themetype;
@ -163,8 +155,6 @@
{
name = page.Name;
path = page.Path;
order = page.Order.ToString();
isnavigation = page.IsNavigation.ToString();
editmode = page.EditMode.ToString();
themetype = page.ThemeType;

View File

@ -1,10 +1,11 @@
@using Microsoft.AspNetCore.Components.Routing
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@using Oqtane.Models
@using Oqtane.Services
@using Oqtane.Modules
@using Oqtane.Shared
@using Oqtane.Security
@namespace Oqtane.Modules.Admin.Pages
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IPageService PageService
@ -26,7 +27,7 @@
<label for="Name" class="control-label">Path: </label>
</td>
<td>
<input class="form-control" @bind="@path" />
<input class="form-control" @bind="@path" readonly />
</td>
</tr>
<tr>
@ -34,21 +35,40 @@
<label for="Name" class="control-label">Parent: </label>
</td>
<td>
<select class="form-control" @bind="@parentid">
<option value="">&lt;Select Parent&gt;</option>
@foreach (Page page in PageState.Pages)
<select class="form-control" @onchange="@(e => ParentChanged(e))">
<option value="">&lt;Site Root&gt;</option>
@foreach (Page page in pages)
{
<option value="@(page.PageId)">@(page.Name)</option>
<option value="@(page.PageId)">@(new string('-', page.Level * 2))@(page.Name)</option>
}
</select>
</td>
</tr>
<tr>
<td>
<label for="Name" class="control-label">Order: </label>
<label for="Name" class="control-label">Move : </label>
</td>
<td>
<input class="form-control" @bind="@order" />
<select class="form-control" @bind="@insert">
<option value="">&lt;Maintain Current Location&gt;</option>
<option value="<<">To Beginning</option>
@if (children != null && children.Count > 0)
{
<option value="<">Before</option>
<option value=">">After</option>
}
<option value=">>" selected>To End</option>
</select>
@if (children != null && children.Count > 0 && (insert == "<" || insert == ">"))
{
<select class="form-control" @bind="@childid">
<option value="-1">&lt;Select Page&gt;</option>
@foreach (Page page in children)
{
<option value="@(page.PageId)">@(page.Name)</option>
}
</select>
}
</td>
</tr>
<tr>
@ -132,11 +152,14 @@
Dictionary<string, string> themes = new Dictionary<string, string>();
Dictionary<string, string> panelayouts = new Dictionary<string, string>();
List<Page> pages;
int PageId;
string name;
string path;
string parentid;
string order;
string insert = "";
List<Page> children;
int childid = -1;
string isnavigation;
string editmode;
string themetype;
@ -154,6 +177,9 @@
{
try
{
pages = PageState.Pages.Where(item => item.IsNavigation).ToList();
children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList();
themes = ThemeService.GetThemeTypes(PageState.Themes);
panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes);
@ -171,7 +197,6 @@
{
parentid = page.ParentId.ToString();
}
order = page.Order.ToString();
isnavigation = page.IsNavigation.ToString();
editmode = page.EditMode.ToString();
themetype = page.ThemeType;
@ -190,23 +215,67 @@
}
}
private void ParentChanged(UIChangeEventArgs e)
{
try
{
parentid = (string)e.Value;
if (string.IsNullOrEmpty(parentid))
{
children = PageState.Pages.Where(item => item.ParentId == null && item.IsNavigation).OrderBy(item => item.Order).ToList();
}
else
{
children = PageState.Pages.Where(item => item.ParentId == int.Parse(parentid) && item.IsNavigation).OrderBy(item => item.Order).ToList();
}
StateHasChanged();
}
catch (Exception ex)
{
message = ex.Message;
}
}
private async Task SavePage()
{
try
{
Page page = PageState.Page;
int? currentparentid = page.ParentId;
page.PageId = Int32.Parse(PageState.QueryString["id"]);
page.Name = name;
if (string.IsNullOrEmpty(parentid))
{
page.ParentId = null;
page.Path = page.Name.ToLower();
}
else
{
page.ParentId = Int32.Parse(parentid);
Page parent = PageState.Pages.Where(item => item.ParentId == page.ParentId).FirstOrDefault();
page.Path = parent.Path + "/" + page.Name.ToLower();
}
if (insert != "")
{
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.Name = name;
page.Path = path;
page.Order = (order == null ? 1 : Int32.Parse(order));
page.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation));
page.EditMode = (editmode == null ? true : Boolean.Parse(editmode));
page.ThemeType = themetype;
@ -225,16 +294,11 @@
page.Panes = (string)property.GetValue(Activator.CreateInstance(type), null);
page.Permissions = permissiongrid.GetPermissions();
await PageService.UpdatePageAsync(page);
await PageService.UpdatePageOrderAsync(page.SiteId, page.ParentId);
await PageService.UpdatePageOrderAsync(page.SiteId, currentparentid);
PageState.Reload = Constants.ReloadSite;
if (PageState.Page.Name == "Page Management")
{
UriHelper.NavigateTo(NavigateUrl());
}
else
{
UriHelper.NavigateTo(NavigateUrl(path));
}
UriHelper.NavigateTo(NavigateUrl());
}
catch (Exception ex)
{

View File

@ -1,15 +1,12 @@
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Modules
@using Oqtane.Shared
@namespace Oqtane.Modules.Admin.Pages
@inherits ModuleBase
@inject IPageService PageService
@if (PageState.Pages == null)
{
<p><em>Loading...</em></p>
}
else
@if (PageState.Pages != null)
{
<ActionLink Action="Add" Text="Add Page" />
<table class="table table-borderless">
@ -17,7 +14,6 @@ else
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>Path</th>
<th>Name</th>
</tr>
</thead>
@ -27,14 +23,14 @@ else
<tr>
<td><ActionLink Action="Edit" Parameters="@($"id=" + page.PageId.ToString())" /></td>
<td><ActionLink Action="Delete" Parameters="@($"id=" + page.PageId.ToString())" Class="btn btn-danger" /></td>
<td>@(page.Path)</td>
<td>@(page.Name)</td>
<td>@(new string('-', page.Level * 2))@(page.Name)</td>
</tr>
}
</tbody>
</table>
</table>
}
@code {
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
}
}

View File

@ -1,8 +1,9 @@
@using Microsoft.AspNetCore.Components.Routing
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@using Oqtane.Modules
@using Oqtane.Models
@using Oqtane.Services
@namespace Oqtane.Modules.Admin.Profile
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IUserService UserService

View File

@ -2,6 +2,7 @@
@using Oqtane.Modules
@using Oqtane.Models
@using Oqtane.Services
@namespace Oqtane.Modules.Admin.Register
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IUserService UserService

View File

@ -1,7 +1,8 @@
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Modules
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@namespace Oqtane.Modules.Admin.Roles
@inherits ModuleBase
@inject IRoleService RoleService

View File

@ -4,6 +4,7 @@
@using Oqtane.Modules
@using Oqtane.Shared
@using Oqtane.Security
@namespace Oqtane.Modules.Admin.Sites
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject ITenantService TenantService
@ -13,52 +14,52 @@
@if (tenants == null)
{
<p><em>Loading...</em></p>
<p><em>Loading...</em></p>
}
else
{
<table class="table table-borderless">
<tr>
<td>
<label for="Name" class="control-label">Tenant: </label>
</td>
<td>
<select class="form-control" @bind="@tenantid">
<option value="">&lt;Select Tenant&gt;</option>
@foreach (Tenant tenant in tenants)
{
<option value="@tenant.TenantId">@tenant.Name</option>
}
</select>
</td>
</tr>
<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">Alias: </label>
</td>
<td>
<input class="form-control" @bind="@url" />
</td>
</tr>
<tr>
<td>
<label for="Name" class="control-label">Logo: </label>
</td>
<td>
<input class="form-control" @bind="@logo" />
</td>
</tr>
</table>
<button type="button" class="btn btn-success" @onclick="@SaveSite">Save</button>
<NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink>
<table class="table table-borderless">
<tr>
<td>
<label for="Name" class="control-label">Tenant: </label>
</td>
<td>
<select class="form-control" @bind="@tenantid">
<option value="">&lt;Select Tenant&gt;</option>
@foreach (Tenant tenant in tenants)
{
<option value="@tenant.TenantId">@tenant.Name</option>
}
</select>
</td>
</tr>
<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">Alias: </label>
</td>
<td>
<input class="form-control" @bind="@url" />
</td>
</tr>
<tr>
<td>
<label for="Name" class="control-label">Logo: </label>
</td>
<td>
<input class="form-control" @bind="@logo" />
</td>
</tr>
</table>
<button type="button" class="btn btn-success" @onclick="@SaveSite">Save</button>
<NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink>
}
@code {
@ -98,7 +99,7 @@ else
p.Path = "";
p.Order = 1;
p.IsNavigation = true;
p.ThemeType = "Oqtane.Client.Themes.Theme1.Theme1, Oqtane.Client"; // TODO: should not hardcode
p.ThemeType = PageState.Site.DefaultThemeType;
p.LayoutType = "";
p.Icon = "";
Type type = Type.GetType(p.ThemeType);

View File

@ -1,7 +1,8 @@
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Modules
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@namespace Oqtane.Modules.Admin.Sites
@inherits ModuleBase
@inject ISiteService SiteService

View File

@ -1,6 +1,7 @@
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Modules
@namespace Oqtane.Modules.Admin.Themes
@inherits ModuleBase
@inject IThemeService ThemeService

View File

@ -1,7 +1,8 @@
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Modules
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@namespace Oqtane.Modules.Admin.Users
@inherits ModuleBase
@inject IUserService UserService

View File

@ -3,6 +3,7 @@
@using Oqtane.Services
@using Oqtane.Shared
@using Oqtane.Security
@namespace Oqtane.Modules.Controls
@inherits ModuleBase
@inject IUserService UserService

View File

@ -1,7 +1,11 @@
@using Oqtane.Modules
@namespace Oqtane.Modules.Controls
@inherits ModuleBase
@((MarkupString)@text)
@if (text != "")
{
@((MarkupString)@text)
}
@code {
[Parameter]
@ -21,8 +25,9 @@
string text = "";
protected override void OnInitialized()
protected override void OnParametersSet()
{
text = "";
if (!String.IsNullOrEmpty(CreatedBy) || CreatedOn != null)
{
text += "<p style=\"" + Style + "\">Created ";

View File

@ -1,4 +1,6 @@
@if (multiple)
@namespace Oqtane.Modules.Controls
@if (multiple)
{
<input type="file" id="@fileid" name="file" accept="@filter" multiple />
}

View File

@ -1,9 +1,12 @@
@using Oqtane.Modules
@namespace Oqtane.Modules.Controls
@inherits ModuleBase
@if (Message != "")
{
<div class="@type">@Message</div><br /><br />
<div class="@type">@Message</div>
<br />
<br />
}
@code {
@ -13,7 +16,7 @@
[Parameter]
public MessageType Type { get; set; }
string type = "alert alert-danger";
string type = "alert alert-danger";
protected override void OnInitialized()
{

View File

@ -3,6 +3,7 @@
@using Oqtane.Models
@using Oqtane.Security
@using Oqtane.Shared
@namespace Oqtane.Modules.Controls
@inherits ModuleBase
@inject IRoleService RoleService
@inject IUserService UserService

View File

@ -1,4 +1,6 @@
<img src="@src" title="@title" disabled=@Disabled @onclick="SetValue" />
@namespace Oqtane.Modules.Controls
<img src="@src" title="@title" disabled=@Disabled @onclick="SetValue" />
@code {
[Parameter]

View File

@ -1,9 +1,11 @@
@using Oqtane.Modules
@namespace Oqtane.Modules.Counter
@inherits ModuleBase
Current count: @currentCount
<br />
<button type="button" class="btn btn-primary" @onclick="@IncrementCount">Click me</button>
<br /><br />
<br />
<br />
@code {
int currentCount = 0;

View File

@ -1,7 +1,7 @@
using Oqtane.Modules;
using System.Collections.Generic;
namespace Oqtane.Client.Modules.Counter
namespace Oqtane.Modules.Counter
{
public class Module : IModule
{

View File

@ -1,10 +1,11 @@
@using Microsoft.AspNetCore.Components.Routing
@using Oqtane.Modules
@using Oqtane.Client.Modules.Controls
@using Oqtane.Client.Modules.HtmlText.Services
@using Oqtane.Shared.Modules.HtmlText.Models
@using Oqtane.Modules.Controls
@using Oqtane.Modules.HtmlText.Services
@using Oqtane.Modules.HtmlText.Models
@using System.Net.Http;
@using Oqtane.Shared;
@namespace Oqtane.Modules.HtmlText
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject HttpClient http
@ -24,7 +25,8 @@
</table>
<button type="button" class="btn btn-success" @onclick="@SaveContent">Save</button>
<NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink>
<br /><br />
<br />
<br />
<AuditInfo CreatedBy="@createdby" CreatedOn="@createdon" ModifiedBy="@modifiedby" ModifiedOn="@modifiedon"></AuditInfo>
@code {

View File

@ -1,9 +1,10 @@
@using Oqtane.Client.Modules.HtmlText.Services
@using Oqtane.Modules.HtmlText.Services
@using Oqtane.Modules
@using Oqtane.Shared.Modules.HtmlText.Models
@using Oqtane.Modules.HtmlText.Models
@using System.Net.Http;
@using Oqtane.Client.Modules.Controls
@using Oqtane.Modules.Controls
@using Oqtane.Shared;
@namespace Oqtane.Modules.HtmlText
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject HttpClient http
@ -13,7 +14,10 @@
@((MarkupString)content)
<br /><ActionLink Action="Edit" /><br /><br />
<br />
<ActionLink Action="Edit" />
<br />
<br />
@code {
string message = "";

View File

@ -1,7 +1,7 @@
using Oqtane.Modules;
using System.Collections.Generic;
namespace Oqtane.Client.Modules.HtmlText
namespace Oqtane.Modules.HtmlText
{
public class Module : IModule
{

View File

@ -4,10 +4,10 @@ using System.Threading.Tasks;
using System.Net.Http;
using Microsoft.AspNetCore.Components;
using Oqtane.Services;
using Oqtane.Shared.Modules.HtmlText.Models;
using Oqtane.Modules.HtmlText.Models;
using Oqtane.Shared;
namespace Oqtane.Client.Modules.HtmlText.Services
namespace Oqtane.Modules.HtmlText.Services
{
public class HtmlTextService : ServiceBase, IHtmlTextService
{

View File

@ -1,8 +1,8 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Oqtane.Shared.Modules.HtmlText.Models;
using Oqtane.Modules.HtmlText.Models;
namespace Oqtane.Client.Modules.HtmlText.Services
namespace Oqtane.Modules.HtmlText.Services
{
public interface IHtmlTextService
{

View File

@ -1,5 +1,6 @@
@using Oqtane.Modules
@using Oqtane.Client.Modules.Weather.Services
@using Oqtane.Modules.Weather.Services
@namespace Oqtane.Modules.Weather
@inherits ModuleBase
@if (forecasts == null)

View File

@ -1,6 +1,6 @@
using System;
namespace Oqtane.Client.Modules.Weather
namespace Oqtane.Modules.Weather
{
public class WeatherForecast
{

View File

@ -1,7 +1,7 @@
using Oqtane.Modules;
using System.Collections.Generic;
namespace Oqtane.Client.Modules.Weather
namespace Oqtane.Modules.Weather
{
public class Module : IModule
{

View File

@ -1,7 +1,7 @@
using System;
using System.Threading.Tasks;
namespace Oqtane.Client.Modules.Weather.Services
namespace Oqtane.Modules.Weather.Services
{
public interface IWeatherForecastService
{

View File

@ -3,7 +3,7 @@ using System;
using System.Linq;
using System.Threading.Tasks;
namespace Oqtane.Client.Modules.Weather.Services
namespace Oqtane.Modules.Weather.Services
{
public class WeatherForecastService : IWeatherForecastService
{

View File

@ -10,6 +10,7 @@ namespace Oqtane.Services
Task<Page> GetPageAsync(int PageId);
Task<Page> AddPageAsync(Page Page);
Task<Page> UpdatePageAsync(Page Page);
Task UpdatePageOrderAsync(int SiteId, int? ParentId);
Task DeletePageAsync(int PageId);
}
}

View File

@ -5,6 +5,7 @@ using System.Net.Http;
using Microsoft.AspNetCore.Components;
using System.Collections.Generic;
using Oqtane.Shared;
using System;
namespace Oqtane.Services
{
@ -29,7 +30,8 @@ namespace Oqtane.Services
public async Task<List<Page>> GetPagesAsync(int SiteId)
{
List<Page> pages = await http.GetJsonAsync<List<Page>>(apiurl + "?siteid=" + SiteId.ToString());
return pages.OrderBy(item => item.Order).ToList();
pages = GetPagesHierarchy(pages);
return pages;
}
public async Task<Page> GetPageAsync(int PageId)
@ -46,9 +48,46 @@ namespace Oqtane.Services
{
return await http.PutJsonAsync<Page>(apiurl + "/" + Page.PageId.ToString(), Page);
}
public async Task UpdatePageOrderAsync(int SiteId, int? ParentId)
{
await http.PutJsonAsync(apiurl + "/?siteid=" + SiteId.ToString() + "&parentid=" + ((ParentId == null) ? "" : ParentId.ToString()), null);
}
public async Task DeletePageAsync(int PageId)
{
await http.DeleteAsync(apiurl + "/" + PageId.ToString());
}
private static List<Page> GetPagesHierarchy(List<Page> Pages)
{
List<Page> hierarchy = new List<Page>();
Action<List<Page>, Page> GetPath = null;
GetPath = (List<Page> pages, Page page) =>
{
IEnumerable<Page> children;
int level;
if (page == null)
{
level = -1;
children = Pages.Where(item => item.ParentId == null);
}
else
{
level = page.Level;
children = Pages.Where(item => item.ParentId == page.PageId);
}
foreach (Page child in children)
{
child.Level = level + 1;
child.HasChildren = Pages.Where(item => item.ParentId == child.PageId).Any();
hierarchy.Add(child);
GetPath(pages, child);
}
};
Pages = Pages.OrderBy(item => item.Order).ToList();
GetPath(Pages, null);
return hierarchy;
}
}
}

View File

@ -1,6 +1,7 @@
@using Oqtane.Models
@using Oqtane.Shared
@using Oqtane.Modules
@namespace Oqtane.Shared
<CascadingValue Value="@ModuleState">
@DynamicComponent
@ -36,8 +37,8 @@
}
else
{
// container does not exist with type specified
builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl));
// container does not exist with type specified
builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl));
builder.AddAttribute(1, "Message", "Error Loading Module Container " + container);
builder.CloseComponent();
}

View File

@ -1,6 +1,7 @@
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Shared
@namespace Oqtane.Shared
@inject IUriHelper UriHelper
@inject IInstallationService InstallationService
@inject IUserService UserService

View File

@ -1,6 +1,7 @@
@using Oqtane.Models
@using Oqtane.Shared
@using Oqtane.Modules
@namespace Oqtane.Shared
@DynamicComponent
@ -34,8 +35,8 @@
}
else
{
// module does not exist with typename specified
builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl));
// module does not exist with typename specified
builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl));
builder.AddAttribute(1, "Message", "Error Loading Component For Module " + ModuleState.ModuleDefinitionName);
builder.CloseComponent();
}

View File

@ -5,6 +5,7 @@
@using Oqtane.Shared
@using Oqtane.Security
@using System.Linq
@namespace Oqtane.Shared
@inject IUserService UserService
@inject IModuleService ModuleService
@inject IModuleDefinitionService ModuleDefinitionService
@ -66,8 +67,8 @@
}
else
{
// verify security access level for this module control
switch (module.SecurityAccessLevel)
// verify security access level for this module control
switch (module.SecurityAccessLevel)
{
case SecurityAccessLevel.Anonymous:
authorized = true;
@ -99,8 +100,8 @@
}
else
{
// module control does not exist with name specified
}
// module control does not exist with name specified
}
}
}
}
@ -111,8 +112,8 @@
Module module = PageState.Modules.Where(item => item.ModuleId == PageState.ModuleId).FirstOrDefault();
if (module != null && module.Pane == Name)
{
// check if user is authorized to view module
if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions))
// check if user is authorized to view module
if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions))
{
builder.OpenComponent(0, Type.GetType(Constants.DefaultContainer));
builder.AddAttribute(1, "Module", module);
@ -124,8 +125,8 @@
{
foreach (Module module in PageState.Modules.Where(item => item.Pane == Name).OrderBy(x => x.Order).ToArray())
{
// check if user is authorized to view module
if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions))
// check if user is authorized to view module
if (UserSecurity.IsAuthorized(PageState.User, "View", module.Permissions))
{
builder.OpenComponent(0, Type.GetType(Constants.DefaultContainer));
builder.AddAttribute(1, "Module", module);

View File

@ -1,5 +1,6 @@
@using System
@using Oqtane.Shared
@namespace Oqtane.Shared
@DynamicComponent
@ -21,8 +22,8 @@
}
else
{
// layout does not exist with type specified
}
// layout does not exist with type specified
}
};
}
}

View File

@ -7,6 +7,7 @@
@using Oqtane.Shared
@using Oqtane.Security
@using Microsoft.AspNetCore.Components.Routing
@namespace Oqtane.Shared
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject SiteState SiteState
@inject IUriHelper UriHelper

View File

@ -1,5 +1,6 @@
@using Oqtane.Shared
@using Oqtane.Modules
@namespace Oqtane.Shared
@DynamicComponent
@ -20,8 +21,8 @@
}
else
{
// theme does not exist with type specified
builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl));
// theme does not exist with type specified
builder.OpenComponent(0, Type.GetType(Constants.ModuleMessageControl));
builder.AddAttribute(1, "Message", "Error Loading Page Theme " + PageState.Page.ThemeType);
builder.CloseComponent();
}

View File

@ -1,5 +1,7 @@
using System;
using Oqtane.Models;
using Oqtane.Models;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Oqtane.Shared
{

View File

@ -1,7 +1,6 @@
@using Oqtane.Shared
@using Oqtane.Themes
@using Oqtane.Client.Themes.Controls
@using Oqtane.Client.Shared
@using Oqtane.Themes.Controls
@namespace Oqtane.Themes
@inherits ContainerBase
<div id="modal" class="modal" style="display: block">
<div class="modal-content">

View File

@ -4,6 +4,7 @@
@using Oqtane.Themes
@using Oqtane.Shared
@using Oqtane.Security
@namespace Oqtane.Themes.Controls
@inherits ThemeObjectBase
@inject IUriHelper UriHelper
@inject IUserService UserService
@ -133,9 +134,10 @@
}
pagemodule.Title = title;
pagemodule.Pane = pane;
pagemodule.Order = 0;
pagemodule.Order = int.MaxValue;
pagemodule.ContainerType = containertype;
await PageModuleService.AddPageModuleAsync(pagemodule);
await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane);
PageState.Reload = Constants.ReloadPage;
UriHelper.NavigateTo(NavigateUrl());

View File

@ -3,6 +3,7 @@
@using Oqtane.Providers
@using Oqtane.Shared
@using Microsoft.JSInterop
@namespace Oqtane.Themes.Controls
@inherits ThemeObjectBase
@inject IUriHelper UriHelper
@inject IUserService UserService

View File

@ -1,4 +1,5 @@
@using Oqtane.Themes
@namespace Oqtane.Themes.Controls
@inherits ThemeObjectBase
@((MarkupString)logo)

View File

@ -3,6 +3,7 @@
@using Oqtane.Services
@using Oqtane.Models;
@using Oqtane.Security
@namespace Oqtane.Themes.Controls
@inherits ThemeObjectBase
@inject IPageService PageService
@inject IUserService UserService
@ -23,7 +24,7 @@
{
string url = NavigateUrl(p.Path);
<li class="nav-item px-3">
<NavLink class="nav-link" href="@url" Match="NavLinkMatch.All">
<NavLink @key="@p.PageId" class="nav-link" href="@url" Match="NavLinkMatch.All">
<span class="oi @p.Icon" aria-hidden="true"></span> @p.Name
</NavLink>
</li>
@ -41,7 +42,7 @@
if (PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).FirstOrDefault() == null)
{
// display list of pages which have same parent as current page
pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.ParentId).ToList();
pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.ParentId).OrderBy(item => item.Order).ToList();
// if current page has parent
if (PageState.Page.ParentId != null)
{
@ -51,7 +52,7 @@
else
{
// display list of pages which are children of current page
pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).ToList();
pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).OrderBy(item => item.Order).ToList();
// current page is parent
parent = PageState.Pages.Where(item => item.ParentId == PageState.Page.ParentId).FirstOrDefault();
}

View File

@ -0,0 +1,68 @@
@using Microsoft.AspNetCore.Components.Routing
@using Oqtane.Themes
@using Oqtane.Services
@using Oqtane.Models;
@using Oqtane.Security
@namespace Oqtane.Themes.Controls
@inherits ThemeObjectBase
@inject IUserService UserService
@if (menu != "")
{
@((MarkupString)menu)
}
@code {
string menu = "";
protected override void OnInitialized()
{
int level = -1;
int securitylevel = int.MaxValue;
menu = "<ul class=\"nav flex-column\">\n";
foreach (Page p in PageState.Pages.Where(item => item.IsNavigation))
{
for (int l = p.Level; l < level; l++)
{
menu += "</ul>\n";
menu += "</div>\n";
}
if (UserSecurity.IsAuthorized(PageState.User, "View", p.Permissions) && p.Level <= securitylevel)
{
securitylevel = int.MaxValue;
if (p.HasChildren)
{
menu += "<li class=\"nav-item px-3\">\n";
menu += "<a class=\"nav-link collapsed\" href=\"#submenu" + p.PageId.ToString() + "\" data-toggle=\"collapse\" data-target=\"#submenu" + p.PageId.ToString() + "\">";
menu += "<span class=\"oi " + p.Icon + "\" aria-hidden=\"true\"></span>" + p.Name;
menu += "</a>\n";
menu += "<div class=\"collapse\" id=\"submenu" + p.PageId.ToString() + "\" aria-expanded=\"false\">\n";
menu += "<ul class=\"nav flex-column\">\n";
}
else
{
menu += "<li class=\"nav-item px-3\">\n";
menu += "<a class=\"nav-link\" href=\"" + NavigateUrl(p.Path) + "\">";
menu += "<span class=\"oi " + p.Icon + "\" aria-hidden=\"true\"></span>" + p.Name;
menu += "</a>\n";
menu += "</li>\n";
}
level = p.Level;
}
else
{
if (securitylevel == int.MaxValue)
{
securitylevel = p.Level;
}
}
}
for (int l = 0; l < level; l++)
{
menu += "</ul>\n";
menu += "</div>\n";
}
menu += "</ul>";
}
}

View File

@ -3,6 +3,7 @@
@using Oqtane.Models
@using Oqtane.Shared
@using Oqtane.Security
@namespace Oqtane.Themes.Controls
@inherits ContainerBase
@inject IUriHelper UriHelper
@inject IUserService UserService
@ -82,7 +83,7 @@
await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane);
break;
case ">>":
pagemodule.Order = ModuleState.PaneModuleCount * 2;
pagemodule.Order = int.MaxValue;
await PageModuleService.UpdatePageModuleAsync(pagemodule);
await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane);
break;

View File

@ -1,4 +1,5 @@
@using Oqtane.Themes
@namespace Oqtane.Themes.Controls
@inherits ContainerBase
@title

View File

@ -1,4 +1,5 @@
@using Oqtane.Themes
@namespace Oqtane.Themes.Controls
@inherits ThemeObjectBase
@inject IUriHelper UriHelper

View File

@ -1,6 +1,6 @@
@using Oqtane.Themes
@using Oqtane.Client.Themes.Controls
@using Oqtane.Client.Shared
@using Oqtane.Themes.Controls
@using Oqtane.Shared
@namespace Oqtane.Themes
@inherits ContainerBase
<div class="container">
<div class="row px-4">

View File

@ -1,6 +1,7 @@
@using Oqtane.Themes
@using Oqtane.Client.Themes.Controls
@using Oqtane.Client.Shared
@using Oqtane.Themes.Controls
@using Oqtane.Shared
@namespace Oqtane.Themes.Theme1
@inherits ContainerBase
<div class="container">
<div class="row px-4">

View File

@ -1,6 +1,7 @@
@using Oqtane.Themes
@using Oqtane.Client.Themes.Controls
@using Oqtane.Client.Shared
@using Oqtane.Themes.Controls
@using Oqtane.Shared
@namespace Oqtane.Themes.Theme1
@inherits ThemeBase
<div class="sidebar">

View File

@ -1,6 +1,7 @@
@using Oqtane.Themes
@using Oqtane.Client.Themes.Controls
@using Oqtane.Client.Shared
@using Oqtane.Themes.Controls
@using Oqtane.Shared
@namespace Oqtane.Themes.Theme2
@inherits ContainerBase
<div class="container">
<div class="row px-4">

View File

@ -1,6 +1,7 @@
@using Oqtane.Themes
@using Oqtane.Client.Themes.Controls
@using Oqtane.Client.Shared
@using Oqtane.Themes.Controls
@using Oqtane.Shared
@namespace Oqtane.Themes.Theme2
@inherits ThemeBase
<div class="sidebar">

View File

@ -1,5 +1,6 @@
@using Oqtane.Themes
@using Oqtane.Client.Shared
@using Oqtane.Shared
@namespace Oqtane.Themes.Theme3
@inherits ThemeBase
<div class="row px-4">

View File

@ -1,6 +1,7 @@
@using Oqtane.Themes
@using Oqtane.Client.Themes.Controls
@using Oqtane.Client.Shared
@using Oqtane.Themes.Controls
@using Oqtane.Shared
@namespace Oqtane.Themes.Theme3
@inherits ThemeBase
<div class="sidebar">

View File

@ -1,5 +1,6 @@
@using Oqtane.Themes
@using Oqtane.Client.Shared
@using Oqtane.Shared
@namespace Oqtane.Themes.Theme3
@inherits ThemeBase
<div class="row px-4">