extensibility enhancements for site templates
This commit is contained in:
@ -23,8 +23,8 @@
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
var response = await InstallationService.IsInstalled();
|
||||
_installed = response.Success;
|
||||
var installation = await InstallationService.IsInstalled();
|
||||
_installed = installation.Success;
|
||||
_initialized = true;
|
||||
}
|
||||
|
||||
|
@ -101,11 +101,7 @@
|
||||
else
|
||||
{
|
||||
_parentId = _folders[0].FolderId;
|
||||
List<PermissionString> permissionstrings = new List<PermissionString>();
|
||||
permissionstrings.Add(new PermissionString { PermissionName = PermissionNames.Browse, Permissions = Constants.AdminRole });
|
||||
permissionstrings.Add(new PermissionString { PermissionName = PermissionNames.View, Permissions = Constants.AdminRole });
|
||||
permissionstrings.Add(new PermissionString { PermissionName = PermissionNames.Edit, Permissions = Constants.AdminRole });
|
||||
_permissions = UserSecurity.SetPermissionStrings(permissionstrings);
|
||||
_permissions = "";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -165,7 +165,7 @@
|
||||
string _themetype = "";
|
||||
string _layouttype = "";
|
||||
string _icon = "";
|
||||
string _permissions = "";
|
||||
string _permissions = "";
|
||||
|
||||
PermissionGrid _permissionGrid;
|
||||
|
||||
@ -183,10 +183,7 @@
|
||||
_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);
|
||||
_permissions = "";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -5,6 +5,7 @@
|
||||
@inject IAliasService AliasService
|
||||
@inject ISiteService SiteService
|
||||
@inject IThemeService ThemeService
|
||||
@inject ISiteTemplateService SiteTemplateService
|
||||
@inject IUserService UserService
|
||||
|
||||
@if (_tenants == null)
|
||||
@ -16,7 +17,7 @@ else
|
||||
<table class="table table-borderless">
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Tenant: </label>
|
||||
<label class="control-label">Tenant: </label>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-control" @onchange="(e => TenantChanged(e))">
|
||||
@ -30,7 +31,7 @@ else
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Name: </label>
|
||||
<label class="control-label">Name: </label>
|
||||
</td>
|
||||
<td>
|
||||
<input class="form-control" @bind="@_name" />
|
||||
@ -38,7 +39,7 @@ else
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Aliases: </label>
|
||||
<label class="control-label">Aliases: </label>
|
||||
</td>
|
||||
<td>
|
||||
<textarea class="form-control" @bind="@_urls" rows="3"></textarea>
|
||||
@ -46,7 +47,7 @@ else
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Default Theme: </label>
|
||||
<label class="control-label">Default Theme: </label>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-control" @onchange="(e => ThemeChanged(e))">
|
||||
@ -60,7 +61,7 @@ else
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Default Layout: </label>
|
||||
<label class="control-label">Default Layout: </label>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-control" @bind="@_layouttype">
|
||||
@ -74,23 +75,37 @@ else
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Default Container: </label>
|
||||
<label class="control-label">Default Container: </label>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-control" @bind="@_containertype">
|
||||
<option value=""><Select Container></option>
|
||||
@foreach (KeyValuePair<string, string>container in _containers)
|
||||
@foreach (KeyValuePair<string, string> container in _containers)
|
||||
{
|
||||
<option value="@container.Key">@container.Value</option>
|
||||
}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Site Template: </label>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-control" @bind="@_sitetemplatetype">
|
||||
<option value=""><Select Site Template></option>
|
||||
@foreach (SiteTemplate siteTemplate in _siteTemplates)
|
||||
{
|
||||
<option value="@siteTemplate.TypeName">@siteTemplate.Name</option>
|
||||
}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
@if (!_isinitialized)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Host Username:</label>
|
||||
<label class="control-label">Host Username:</label>
|
||||
</td>
|
||||
<td>
|
||||
<input class="form-control" @bind="@_username" readonly />
|
||||
@ -98,7 +113,7 @@ else
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label class="control-label">Host Password:</label>
|
||||
<label class="control-label">Host Password:</label>
|
||||
</td>
|
||||
<td>
|
||||
<input type="password" class="form-control" @bind="@_password" />
|
||||
@ -116,6 +131,7 @@ else
|
||||
Dictionary<string, string> _themes = new Dictionary<string, string>();
|
||||
Dictionary<string, string> _panelayouts = new Dictionary<string, string>();
|
||||
Dictionary<string, string> _containers = new Dictionary<string, string>();
|
||||
List<SiteTemplate> _siteTemplates;
|
||||
|
||||
List<Theme> _themeList;
|
||||
List<Tenant> _tenants;
|
||||
@ -125,6 +141,7 @@ else
|
||||
string _themetype = "";
|
||||
string _layouttype = "";
|
||||
string _containertype = "";
|
||||
string _sitetemplatetype = "";
|
||||
bool _isinitialized = true;
|
||||
string _username = "";
|
||||
string _password = "";
|
||||
@ -136,6 +153,7 @@ else
|
||||
_urls = PageState.Alias.Name;
|
||||
_themes = ThemeService.GetThemeTypes(_themeList);
|
||||
_containers = ThemeService.GetContainerTypes(_themeList);
|
||||
_siteTemplates = await SiteTemplateService.GetSiteTemplatesAsync();
|
||||
_username = Constants.HostUser;
|
||||
}
|
||||
|
||||
@ -185,7 +203,7 @@ else
|
||||
|
||||
private async Task SaveSite()
|
||||
{
|
||||
if (_tenantid != "-1" && _name != "" && _urls != "" && !string.IsNullOrEmpty(_themetype) && (_panelayouts.Count == 0 || !string.IsNullOrEmpty(_layouttype)) && !string.IsNullOrEmpty(_containertype))
|
||||
if (_tenantid != "-1" && _name != "" && _urls != "" && !string.IsNullOrEmpty(_themetype) && (_panelayouts.Count == 0 || !string.IsNullOrEmpty(_layouttype)) && !string.IsNullOrEmpty(_containertype) && !string.IsNullOrEmpty(_sitetemplatetype))
|
||||
{
|
||||
bool unique = true;
|
||||
List<Alias> aliases = await AliasService.GetAliasesAsync();
|
||||
@ -233,6 +251,7 @@ else
|
||||
site.DefaultThemeType = _themetype;
|
||||
site.DefaultLayoutType = (_layouttype == null ? "" : _layouttype);
|
||||
site.DefaultContainerType = _containertype;
|
||||
site.SiteTemplateType = _sitetemplatetype;
|
||||
site = await SiteService.AddSiteAsync(site, aliases[0]);
|
||||
|
||||
foreach (Alias alias in aliases)
|
||||
@ -276,7 +295,7 @@ else
|
||||
}
|
||||
else
|
||||
{
|
||||
AddModuleMessage("You Must Provide A Tenant, Site Name, Alias, And Default Theme/Container", MessageType.Warning);
|
||||
AddModuleMessage("You Must Provide A Tenant, Site Name, Alias, Default Theme/Container, And Site Template", MessageType.Warning);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -127,8 +127,8 @@
|
||||
|
||||
}
|
||||
}
|
||||
GenericResponse response = await InstallationService.Install(connectionstring);
|
||||
if (response.Success)
|
||||
Installation installation = await InstallationService.Install(connectionstring);
|
||||
if (installation.Success)
|
||||
{
|
||||
Tenant tenant = new Tenant();
|
||||
tenant.Name = name;
|
||||
@ -142,8 +142,8 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
await logger.LogError("Error Creating Tenant {Error}", response.Message);
|
||||
AddModuleMessage(response.Message, MessageType.Error);
|
||||
await logger.LogError("Error Creating Tenant {Error}", installation.Message);
|
||||
AddModuleMessage(installation.Message, MessageType.Error);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -94,22 +94,26 @@
|
||||
{
|
||||
if (string.IsNullOrEmpty(PermissionNames))
|
||||
{
|
||||
_permissionnames = "View,Edit";
|
||||
_permissionnames = Shared.PermissionNames.View + "," + Shared.PermissionNames.Edit;
|
||||
}
|
||||
else
|
||||
{
|
||||
_permissionnames = PermissionNames;
|
||||
}
|
||||
|
||||
_roles = await RoleService.GetRolesAsync(ModuleState.SiteId);
|
||||
_roles.Insert(0, new Role { Name = Constants.AllUsersRole });
|
||||
|
||||
_permissions = new List<PermissionString>();
|
||||
foreach (string permissionname in _permissionnames.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
|
||||
{
|
||||
// initialize with admin role
|
||||
_permissions.Add(new PermissionString { PermissionName = permissionname, Permissions = Constants.AdminRole });
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(Permissions))
|
||||
{
|
||||
_permissions = new List<PermissionString>();
|
||||
foreach (string permissionname in _permissionnames.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
|
||||
{
|
||||
_permissions.Add(new PermissionString { PermissionName = permissionname, Permissions = "" });
|
||||
}
|
||||
// populate permissions
|
||||
foreach (PermissionString permissionstring in UserSecurity.GetPermissionStrings(Permissions))
|
||||
{
|
||||
if (_permissions.Find(item => item.PermissionName == permissionstring.PermissionName) != null)
|
||||
|
@ -24,19 +24,19 @@ namespace Oqtane.Services
|
||||
get { return CreateApiUrl(_siteState.Alias, _navigationManager.Uri, "Installation"); }
|
||||
}
|
||||
|
||||
public async Task<GenericResponse> IsInstalled()
|
||||
public async Task<Installation> IsInstalled()
|
||||
{
|
||||
return await _http.GetJsonAsync<GenericResponse>(Apiurl + "/installed");
|
||||
return await _http.GetJsonAsync<Installation>(Apiurl + "/installed");
|
||||
}
|
||||
|
||||
public async Task<GenericResponse> Install(string connectionstring)
|
||||
public async Task<Installation> Install(string connectionstring)
|
||||
{
|
||||
return await _http.PostJsonAsync<GenericResponse>(Apiurl, connectionstring);
|
||||
return await _http.PostJsonAsync<Installation>(Apiurl, connectionstring);
|
||||
}
|
||||
|
||||
public async Task<GenericResponse> Upgrade()
|
||||
public async Task<Installation> Upgrade()
|
||||
{
|
||||
return await _http.GetJsonAsync<GenericResponse>(Apiurl + "/upgrade");
|
||||
return await _http.GetJsonAsync<Installation>(Apiurl + "/upgrade");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,8 +5,8 @@ namespace Oqtane.Services
|
||||
{
|
||||
public interface IInstallationService
|
||||
{
|
||||
Task<GenericResponse> IsInstalled();
|
||||
Task<GenericResponse> Install(string connectionstring);
|
||||
Task<GenericResponse> Upgrade();
|
||||
Task<Installation> IsInstalled();
|
||||
Task<Installation> Install(string connectionstring);
|
||||
Task<Installation> Upgrade();
|
||||
}
|
||||
}
|
||||
|
11
Oqtane.Client/Services/Interfaces/ISiteTemplateService.cs
Normal file
11
Oqtane.Client/Services/Interfaces/ISiteTemplateService.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using Oqtane.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Oqtane.Services
|
||||
{
|
||||
public interface ISiteTemplateService
|
||||
{
|
||||
Task<List<SiteTemplate>> GetSiteTemplatesAsync();
|
||||
}
|
||||
}
|
35
Oqtane.Client/Services/SiteTemplateService.cs
Normal file
35
Oqtane.Client/Services/SiteTemplateService.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using Oqtane.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Oqtane.Shared;
|
||||
|
||||
namespace Oqtane.Services
|
||||
{
|
||||
public class SiteTemplateService : ServiceBase, ISiteTemplateService
|
||||
{
|
||||
private readonly HttpClient _http;
|
||||
private readonly SiteState _siteState;
|
||||
private readonly NavigationManager _navigationManager;
|
||||
|
||||
public SiteTemplateService(HttpClient http, SiteState siteState, NavigationManager navigationManager)
|
||||
{
|
||||
_http = http;
|
||||
_siteState = siteState;
|
||||
_navigationManager = navigationManager;
|
||||
}
|
||||
|
||||
private string Apiurl
|
||||
{
|
||||
get { return CreateApiUrl(_siteState.Alias, _navigationManager.Uri, "SiteTemplate"); }
|
||||
}
|
||||
|
||||
public async Task<List<SiteTemplate>> GetSiteTemplatesAsync()
|
||||
{
|
||||
List<SiteTemplate> siteTemplates = await _http.GetJsonAsync<List<SiteTemplate>>(Apiurl);
|
||||
return siteTemplates.OrderBy(item => item.Name).ToList();
|
||||
}
|
||||
}
|
||||
}
|
@ -58,6 +58,7 @@ namespace Oqtane.Client
|
||||
services.AddScoped<INotificationService, NotificationService>();
|
||||
services.AddScoped<IFolderService, FolderService>();
|
||||
services.AddScoped<IFileService, FileService>();
|
||||
services.AddScoped<ISiteTemplateService, SiteTemplateService>();
|
||||
|
||||
// dynamically register module contexts and repository services
|
||||
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
|
||||
|
@ -175,8 +175,8 @@
|
||||
|
||||
}
|
||||
}
|
||||
GenericResponse response = await InstallationService.Install(connectionstring);
|
||||
if (response.Success)
|
||||
Installation installation = await InstallationService.Install(connectionstring);
|
||||
if (installation.Success)
|
||||
{
|
||||
Site site = new Site();
|
||||
site.TenantId = -1; // will be populated on server
|
||||
@ -199,7 +199,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
_message = "<div class=\"alert alert-danger\" role=\"alert\">" + response.Message + "</div>";
|
||||
_message = "<div class=\"alert alert-danger\" role=\"alert\">" + installation.Message + "</div>";
|
||||
_loadingDisplay = "display: none;";
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user