diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor
index db5b8c54..26e480f2 100644
--- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor
+++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor
@@ -8,26 +8,22 @@
}
else
{
-
-
-
-
- |
- Name |
- Version |
-
-
-
- @foreach (var moduledefinition in moduledefinitions)
- {
-
- |
- @moduledefinition.Name |
- @moduledefinition.Version |
-
- }
-
-
+
+
+
+
+
+ @context.Name |
+ @context.Version |
+ |
+ |
+
+
}
@code {
diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor
index fcb98b6a..376b4795 100644
--- a/Oqtane.Client/Modules/Admin/Pages/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor
@@ -14,7 +14,7 @@
@(new string('-', context.Level * 2))@(context.Name) |
|
- |
+ |
}
diff --git a/Oqtane.Client/Modules/Admin/Profile/Index.razor b/Oqtane.Client/Modules/Admin/Profile/Index.razor
index 32558069..fbee5093 100644
--- a/Oqtane.Client/Modules/Admin/Profile/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Profile/Index.razor
@@ -24,6 +24,14 @@
+
+
+
+ |
+
+
+ |
+
@foreach (Profile profile in profiles)
{
@@ -58,6 +66,7 @@
string displayname = "";
string email = "";
+ string password = "";
List profiles;
Dictionary settings;
string category = "";
@@ -96,6 +105,7 @@
User user = PageState.User;
user.DisplayName = displayname;
user.Email = email;
+ user.Password = password;
await UserService.UpdateUserAsync(user);
await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId);
diff --git a/Oqtane.Client/Modules/Admin/Roles/Add.razor b/Oqtane.Client/Modules/Admin/Roles/Add.razor
new file mode 100644
index 00000000..aa8ff585
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Roles/Add.razor
@@ -0,0 +1,77 @@
+@namespace Oqtane.Modules.Admin.Roles
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject IRoleService RoleService
+
+
+
+Cancel
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
+
+ string name = "";
+ string description = "";
+ string isautoassigned = "False";
+ string issystem = "False";
+
+ private async Task SaveRole()
+ {
+ try
+ {
+ Role role = new Role();
+ role.SiteId = PageState.Page.SiteId;
+ role.Name = name;
+ role.Description = description;
+ role.IsAutoAssigned = (isautoassigned == null ? false : Boolean.Parse(isautoassigned));
+ role.IsSystem = (issystem == null ? false : Boolean.Parse(issystem));
+ await RoleService.AddRoleAsync(role);
+
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+}
diff --git a/Oqtane.Client/Modules/Admin/Roles/Delete.razor b/Oqtane.Client/Modules/Admin/Roles/Delete.razor
new file mode 100644
index 00000000..ccfd66c4
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Roles/Delete.razor
@@ -0,0 +1,91 @@
+@namespace Oqtane.Modules.Admin.Roles
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject IRoleService RoleService
+
+
+
+Cancel
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
+
+ int roleid;
+ string name = "";
+ string description = "";
+ string isautoassigned = "False";
+ string issystem = "False";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ roleid = Int32.Parse(PageState.QueryString["id"]);
+ Role role = await RoleService.GetRoleAsync(roleid);
+ if (role != null)
+ {
+ name = role.Name;
+ description = role.Description;
+ isautoassigned = role.IsAutoAssigned.ToString();
+ issystem = role.IsSystem.ToString();
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private async Task DeleteRole()
+ {
+ try
+ {
+ await RoleService.DeleteRoleAsync(roleid);
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+}
diff --git a/Oqtane.Client/Modules/Admin/Roles/Edit.razor b/Oqtane.Client/Modules/Admin/Roles/Edit.razor
new file mode 100644
index 00000000..74ec0899
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Roles/Edit.razor
@@ -0,0 +1,99 @@
+@namespace Oqtane.Modules.Admin.Roles
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject IRoleService RoleService
+
+
+
+Cancel
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
+
+ int roleid;
+ string name = "";
+ string description = "";
+ string isautoassigned = "False";
+ string issystem = "False";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ roleid = Int32.Parse(PageState.QueryString["id"]);
+ Role role = await RoleService.GetRoleAsync(roleid);
+ if (role != null)
+ {
+ name = role.Name;
+ description = role.Description;
+ isautoassigned = role.IsAutoAssigned.ToString();
+ issystem = role.IsSystem.ToString();
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private async Task SaveRole()
+ {
+ try
+ {
+ Role role = await RoleService.GetRoleAsync(roleid);
+ if (role != null)
+ {
+ role.Name = name;
+ role.Description = description;
+ role.IsAutoAssigned = (isautoassigned == null ? false : Boolean.Parse(isautoassigned));
+ role.IsSystem = (issystem == null ? false : Boolean.Parse(issystem));
+ await RoleService.UpdateRoleAsync(role);
+ }
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+}
diff --git a/Oqtane.Client/Modules/Admin/Roles/Index.razor b/Oqtane.Client/Modules/Admin/Roles/Index.razor
index e3b65f3e..e5ef72cb 100644
--- a/Oqtane.Client/Modules/Admin/Roles/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Roles/Index.razor
@@ -8,21 +8,20 @@
}
else
{
-
-
-
- Name |
-
-
-
- @foreach (var Role in Roles)
- {
-
- @Role.Name |
-
- }
-
-
+
+
+
+
+
+ @context.Name |
+ |
+ |
+
+
}
@code {
diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor
index 214497c4..262d9d3d 100644
--- a/Oqtane.Client/Modules/Admin/Sites/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor
@@ -9,22 +9,20 @@
}
else
{
-
-
-
- Name |
-
-
-
- @foreach (var site in sites)
- {
-
- @site.Name |
-
- }
-
-
-
+
+
+
+
+
+ @context.Name |
+ |
+ |
+
+
}
@code {
diff --git a/Oqtane.Client/Modules/Admin/Tenants/Add.razor b/Oqtane.Client/Modules/Admin/Tenants/Add.razor
index 9178d2b5..50c02f62 100644
--- a/Oqtane.Client/Modules/Admin/Tenants/Add.razor
+++ b/Oqtane.Client/Modules/Admin/Tenants/Add.razor
@@ -2,9 +2,6 @@
@inherits ModuleBase
@inject NavigationManager NavigationManager
@inject ITenantService TenantService
-@inject IAliasService AliasService
-@inject ISiteService SiteService
-@inject IPageService PageService
diff --git a/Oqtane.Client/Modules/Admin/Tenants/Delete.razor b/Oqtane.Client/Modules/Admin/Tenants/Delete.razor
new file mode 100644
index 00000000..b22350c2
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Tenants/Delete.razor
@@ -0,0 +1,70 @@
+@namespace Oqtane.Modules.Admin.Tenants
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject ITenantService TenantService
+
+
+
+Cancel
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
+
+ int tenantid;
+ string name = "";
+ string connectionstring = "";
+ string schema = "";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ tenantid = Int32.Parse(PageState.QueryString["id"]);
+ Tenant tenant = await TenantService.GetTenantAsync(tenantid);
+ if (tenant != null)
+ {
+ name = tenant.Name;
+ connectionstring = tenant.DBConnectionString;
+ schema = tenant.DBSchema;
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+ private async Task DeleteTenant()
+ {
+ Tenant tenant = await TenantService.GetTenantAsync(tenantid);
+ if (tenant != null)
+ {
+ await TenantService.DeleteTenantAsync(tenantid);
+ }
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+}
diff --git a/Oqtane.Client/Modules/Admin/Tenants/Edit.razor b/Oqtane.Client/Modules/Admin/Tenants/Edit.razor
new file mode 100644
index 00000000..17c90cac
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Tenants/Edit.razor
@@ -0,0 +1,73 @@
+@namespace Oqtane.Modules.Admin.Tenants
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject ITenantService TenantService
+
+
+
+Cancel
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
+
+ int tenantid;
+ string name = "";
+ string connectionstring = "";
+ string schema = "";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ tenantid = Int32.Parse(PageState.QueryString["id"]);
+ Tenant tenant = await TenantService.GetTenantAsync(tenantid);
+ if (tenant != null)
+ {
+ name = tenant.Name;
+ connectionstring = tenant.DBConnectionString;
+ schema = tenant.DBSchema;
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+ private async Task SaveTenant()
+ {
+ Tenant tenant = await TenantService.GetTenantAsync(tenantid);
+ if (tenant != null)
+ {
+ tenant.Name = name;
+ tenant.DBConnectionString = connectionstring;
+ tenant.DBSchema = schema;
+ await TenantService.UpdateTenantAsync(tenant);
+ }
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+}
diff --git a/Oqtane.Client/Modules/Admin/Tenants/Index.razor b/Oqtane.Client/Modules/Admin/Tenants/Index.razor
index e173788c..116f6f0e 100644
--- a/Oqtane.Client/Modules/Admin/Tenants/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Tenants/Index.razor
@@ -2,37 +2,36 @@
@inherits ModuleBase
@inject ITenantService TenantService
-@if (Tenants == null)
+@if (tenants == null)
{
Loading...
}
else
{
-
-
-
-
- Name |
-
-
-
- @foreach (var Tenant in Tenants)
- {
-
- @Tenant.Name |
-
- }
-
-
+
+
+
+
+
+ @context.Name |
+ |
+ |
+
+
+
}
@code {
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
- List Tenants;
+ List tenants;
protected override async Task OnInitializedAsync()
{
- Tenants = await TenantService.GetTenantsAsync();
+ tenants = await TenantService.GetTenantsAsync();
}
}
\ No newline at end of file
diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor
index 47849695..c7f3137e 100644
--- a/Oqtane.Client/Modules/Admin/Themes/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor
@@ -2,37 +2,33 @@
@inherits ModuleBase
@inject IThemeService ThemeService
-@if (Themes == null)
+@if (themes == null)
{
Loading...
}
else
{
-
-
-
-
- Name |
-
-
-
- @foreach (var theme in Themes)
- {
-
- @theme.Name |
-
- }
-
-
+
+
+
+
+
+ @context.Name |
+ @context.Version |
+
+
}
@code {
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
- List Themes;
+ List themes;
protected override async Task OnInitializedAsync()
{
- Themes = await ThemeService.GetThemesAsync();
+ themes = await ThemeService.GetThemesAsync();
}
}
\ No newline at end of file
diff --git a/Oqtane.Client/Modules/Admin/Users/Add.razor b/Oqtane.Client/Modules/Admin/Users/Add.razor
new file mode 100644
index 00000000..140780bc
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Users/Add.razor
@@ -0,0 +1,110 @@
+@namespace Oqtane.Modules.Admin.Users
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject IUserService UserService
+@inject IProfileService ProfileService
+@inject ISettingService SettingService
+
+@if (profiles != null)
+{
+
+
+ Cancel
+}
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
+
+ string displayname = "";
+ string email = "";
+ string password = "";
+ List profiles;
+ Dictionary settings;
+ string category = "";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ profiles = await ProfileService.GetProfilesAsync(ModuleState.SiteId);
+ settings = new Dictionary();
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private async Task SaveUser()
+ {
+ try
+ {
+ User user = new User();
+ user.DisplayName = displayname;
+ user.Email = email;
+ user.Password = password;
+ user = await UserService.AddUserAsync(user);
+ await SettingService.UpdateUserSettingsAsync(settings, user.UserId);
+
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private void ProfileChanged(ChangeEventArgs e, string SettingName)
+ {
+ string value = (string)e.Value;
+ settings = SettingService.SetSetting(settings, SettingName, value);
+ }
+
+ }
diff --git a/Oqtane.Client/Modules/Admin/Users/Delete.razor b/Oqtane.Client/Modules/Admin/Users/Delete.razor
new file mode 100644
index 00000000..bbd65a9b
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Users/Delete.razor
@@ -0,0 +1,108 @@
+@namespace Oqtane.Modules.Admin.Users
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject IUserService UserService
+@inject IProfileService ProfileService
+@inject ISettingService SettingService
+
+@if (profiles != null)
+{
+
+
+ Cancel
+}
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
+
+ int userid;
+ string displayname = "";
+ string email = "";
+ List profiles;
+ Dictionary settings;
+ string category = "";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ profiles = await ProfileService.GetProfilesAsync(PageState.Site.SiteId);
+
+ userid = Int32.Parse(PageState.QueryString["id"]);
+ User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId);
+ if (user != null)
+ {
+ displayname = user.DisplayName;
+ email = user.Email;
+ settings = await SettingService.GetUserSettingsAsync(user.UserId);
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private string GetProfileValue(string SettingName, string DefaultValue)
+ {
+ return SettingService.GetSetting(settings, SettingName, DefaultValue);
+ }
+
+ private async Task DeleteUser()
+ {
+ try
+ {
+ User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId);
+ if (user != null)
+ {
+ await UserService.DeleteUserAsync(userid);
+ }
+
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+}
diff --git a/Oqtane.Client/Modules/Admin/Users/Edit.razor b/Oqtane.Client/Modules/Admin/Users/Edit.razor
new file mode 100644
index 00000000..a7b35a38
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Users/Edit.razor
@@ -0,0 +1,124 @@
+@namespace Oqtane.Modules.Admin.Users
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject IUserService UserService
+@inject IProfileService ProfileService
+@inject ISettingService SettingService
+
+@if (profiles != null)
+{
+
+
+ Cancel
+}
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
+
+ int userid;
+ string displayname = "";
+ string email = "";
+ string password = "";
+ List profiles;
+ Dictionary settings;
+ string category = "";
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ profiles = await ProfileService.GetProfilesAsync(PageState.Site.SiteId);
+
+ userid = Int32.Parse(PageState.QueryString["id"]);
+ User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId);
+ if (user != null)
+ {
+ displayname = user.DisplayName;
+ email = user.Email;
+ settings = await SettingService.GetUserSettingsAsync(user.UserId);
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private string GetProfileValue(string SettingName, string DefaultValue)
+ {
+ return SettingService.GetSetting(settings, SettingName, DefaultValue);
+ }
+
+ private async Task SaveUser()
+ {
+ try
+ {
+ User user = new User();
+ user.DisplayName = displayname;
+ user.Email = email;
+ user.Password = password;
+ user = await UserService.UpdateUserAsync(user);
+ await SettingService.UpdateUserSettingsAsync(settings, user.UserId);
+
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private void ProfileChanged(ChangeEventArgs e, string SettingName)
+ {
+ string value = (string)e.Value;
+ settings = SettingService.SetSetting(settings, SettingName, value);
+ }
+
+}
diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor
index 77b2d7bc..a2a6b822 100644
--- a/Oqtane.Client/Modules/Admin/Users/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Index.razor
@@ -8,21 +8,20 @@
}
else
{
-
-
-
- Name |
-
-
-
- @foreach (UserRole userrole in userroles)
- {
-
- @userrole.User.Username |
-
- }
-
-
+
+
+
+
+
+ @context.User.DisplayName |
+ |
+ |
+
+
}
@code {
diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor
index 1d5b6edd..3e3c30b0 100644
--- a/Oqtane.Client/Modules/Controls/ActionLink.razor
+++ b/Oqtane.Client/Modules/Controls/ActionLink.razor
@@ -82,6 +82,11 @@
break;
}
}
+ else
+ {
+ authorized = true; // occurs when an action does not have a corresponding module control
+ classname = "btn btn-warning"; // alert developer of missing module comtrol
+ }
}
}
}
diff --git a/Oqtane.Client/Modules/Controls/Pager.razor b/Oqtane.Client/Modules/Controls/Pager.razor
index 82396626..e1dc6b11 100644
--- a/Oqtane.Client/Modules/Controls/Pager.razor
+++ b/Oqtane.Client/Modules/Controls/Pager.razor
@@ -14,28 +14,31 @@
}
-