extensibility enhancements for site templates

This commit is contained in:
Shaun Walker
2020-03-19 12:07:33 -04:00
parent 50bbc7f5b8
commit 18a843e74f
39 changed files with 758 additions and 194 deletions

View File

@ -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;
}

View File

@ -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)

View File

@ -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)
{

View File

@ -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="">&lt;Select Container&gt;</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="">&lt;Select Site Template&gt;</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);
}
}

View File

@ -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

View File

@ -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)

View File

@ -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");
}
}
}

View File

@ -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();
}
}

View 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();
}
}

View 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();
}
}
}

View File

@ -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();

View File

@ -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;";
}
}