Merge remote-tracking branch 'oqtane/dev' into dev
This commit is contained in:
commit
7bc80f0814
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Oqtane.Server/wwwroot/Modules/Templates/External/Package/*.sh eol=lf
|
||||||
|
Oqtane.Server/wwwroot/Themes/Templates/External/Package/*.sh eol=lf
|
|
@ -37,7 +37,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="category" HelpText="The categories that were affected" ResourceKey="Category">Category: </Label>
|
<Label Class="col-sm-3" For="category" HelpText="The fully qualified type type that was affected" ResourceKey="Category">Type Name: </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<input id="category" class="form-control" @bind="@_category" readonly />
|
<input id="category" class="form-control" @bind="@_category" readonly />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -137,7 +137,7 @@
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="theme" HelpText="Select the theme for this page" ResourceKey="Theme">Theme: </Label>
|
<Label Class="col-sm-3" For="theme" HelpText="Select the theme for this page" ResourceKey="Theme">Theme: </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<select id="theme" class="form-select" @bind="@_themetype" required>
|
<select id="theme" class="form-select" value="@_themetype" @onchange="(e => ThemeChanged(e))" required>
|
||||||
@foreach (var theme in _themes)
|
@foreach (var theme in _themes)
|
||||||
{
|
{
|
||||||
<option value="@theme.TypeName">@theme.Name</option>
|
<option value="@theme.TypeName">@theme.Name</option>
|
||||||
|
@ -246,7 +246,7 @@
|
||||||
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin) || (_parent != null && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, _parent.PermissionList)))
|
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin) || (_parent != null && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, _parent.PermissionList)))
|
||||||
{
|
{
|
||||||
_themetype = PageState.Site.DefaultThemeType;
|
_themetype = PageState.Site.DefaultThemeType;
|
||||||
_themes = ThemeService.GetThemeControls(PageState.Site.Themes, _themetype);
|
_themes = ThemeService.GetThemeControls(PageState.Site.Themes);
|
||||||
_containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype);
|
_containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype);
|
||||||
_containertype = PageState.Site.DefaultContainerType;
|
_containertype = PageState.Site.DefaultContainerType;
|
||||||
_children = PageState.Pages.Where(item => item.ParentId == null).ToList();
|
_children = PageState.Pages.Where(item => item.ParentId == null).ToList();
|
||||||
|
@ -301,6 +301,19 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ThemeChanged(ChangeEventArgs e)
|
||||||
|
{
|
||||||
|
_themetype = (string)e.Value;
|
||||||
|
if (ThemeService.GetTheme(PageState.Site.Themes, _themetype)?.ThemeName != ThemeService.GetTheme(PageState.Site.Themes, PageState.Site.DefaultThemeType)?.ThemeName)
|
||||||
|
{
|
||||||
|
AddModuleMessage(Localizer["ThemeChanged.Message"], MessageType.Warning);
|
||||||
|
_containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype);
|
||||||
|
_containertype = _containers.First().TypeName;
|
||||||
|
ThemeSettings();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ThemeSettings()
|
private void ThemeSettings()
|
||||||
{
|
{
|
||||||
_themeSettingsType = null;
|
_themeSettingsType = null;
|
||||||
|
|
|
@ -148,7 +148,7 @@
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="theme" HelpText="Select the theme for this page" ResourceKey="Theme">Theme: </Label>
|
<Label Class="col-sm-3" For="theme" HelpText="Select the theme for this page" ResourceKey="Theme">Theme: </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<select id="theme" class="form-select" @bind="@_themetype" required>
|
<select id="theme" class="form-select" value="@_themetype" @onchange="(e => ThemeChanged(e))" required>
|
||||||
@foreach (var theme in _themes)
|
@foreach (var theme in _themes)
|
||||||
{
|
{
|
||||||
<option value="@theme.TypeName">@theme.Name</option>
|
<option value="@theme.TypeName">@theme.Name</option>
|
||||||
|
@ -359,7 +359,7 @@
|
||||||
{
|
{
|
||||||
_themetype = PageState.Site.DefaultThemeType;
|
_themetype = PageState.Site.DefaultThemeType;
|
||||||
}
|
}
|
||||||
_themes = ThemeService.GetThemeControls(PageState.Site.Themes, _themetype);
|
_themes = ThemeService.GetThemeControls(PageState.Site.Themes);
|
||||||
_containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype);
|
_containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype);
|
||||||
_containertype = _page.DefaultContainerType;
|
_containertype = _page.DefaultContainerType;
|
||||||
if (string.IsNullOrEmpty(_containertype))
|
if (string.IsNullOrEmpty(_containertype))
|
||||||
|
@ -401,25 +401,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task DeleteModule(Module module)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
PageModule pagemodule = await PageModuleService.GetPageModuleAsync(_page.PageId, module.ModuleId);
|
|
||||||
pagemodule.IsDeleted = true;
|
|
||||||
await PageModuleService.UpdatePageModuleAsync(pagemodule);
|
|
||||||
await logger.LogInformation(LogFunction.Update,"Module Deleted {Title}", module.Title);
|
|
||||||
_pageModules.RemoveAll(item => item.PageModuleId == pagemodule.PageModuleId);
|
|
||||||
StateHasChanged();
|
|
||||||
NavigationManager.NavigateTo(NavigationManager.Uri + "&tab=PageModules");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
await logger.LogError(ex, "Error Deleting Module {Title} {Error}", module.Title, ex.Message);
|
|
||||||
AddModuleMessage(Localizer["Error.Module.Delete"], MessageType.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void ParentChanged(ChangeEventArgs e)
|
private async void ParentChanged(ChangeEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -463,6 +444,19 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ThemeChanged(ChangeEventArgs e)
|
||||||
|
{
|
||||||
|
_themetype = (string)e.Value;
|
||||||
|
if (ThemeService.GetTheme(PageState.Site.Themes, _themetype)?.ThemeName != ThemeService.GetTheme(PageState.Site.Themes, PageState.Site.DefaultThemeType)?.ThemeName)
|
||||||
|
{
|
||||||
|
AddModuleMessage(Localizer["ThemeChanged.Message"], MessageType.Warning);
|
||||||
|
_containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype);
|
||||||
|
_containertype = _containers.First().TypeName;
|
||||||
|
ThemeSettings();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ThemeSettings()
|
private void ThemeSettings()
|
||||||
{
|
{
|
||||||
_themeSettingsType = null;
|
_themeSettingsType = null;
|
||||||
|
@ -646,4 +640,24 @@
|
||||||
NavigationManager.NavigateTo(NavigateUrl());
|
NavigationManager.NavigateTo(NavigateUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task DeleteModule(Module module)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PageModule pagemodule = await PageModuleService.GetPageModuleAsync(_page.PageId, module.ModuleId);
|
||||||
|
pagemodule.IsDeleted = true;
|
||||||
|
await PageModuleService.UpdatePageModuleAsync(pagemodule);
|
||||||
|
await logger.LogInformation(LogFunction.Update, "Module Deleted {Title}", module.Title);
|
||||||
|
_pageModules.RemoveAll(item => item.PageModuleId == pagemodule.PageModuleId);
|
||||||
|
StateHasChanged();
|
||||||
|
NavigationManager.NavigateTo(NavigationManager.Uri + "&tab=PageModules");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await logger.LogError(ex, "Error Deleting Module {Title} {Error}", module.Title, ex.Message);
|
||||||
|
AddModuleMessage(Localizer["Error.Module.Delete"], MessageType.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,12 +288,13 @@ else
|
||||||
if (_themetype != "-")
|
if (_themetype != "-")
|
||||||
{
|
{
|
||||||
_containers = ThemeService.GetContainerControls(_themeList, _themetype);
|
_containers = ThemeService.GetContainerControls(_themeList, _themetype);
|
||||||
}
|
_containertype = _containers.First().TypeName;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_containers = new List<ThemeControl>();
|
_containers = new List<ThemeControl>();
|
||||||
}
|
_containertype = "-";
|
||||||
_containertype = "-";
|
}
|
||||||
_admincontainertype = "";
|
_admincontainertype = "";
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,9 @@ else
|
||||||
<th style="width: 1px;"> </th>
|
<th style="width: 1px;"> </th>
|
||||||
<th style="width: 1px;"> </th>
|
<th style="width: 1px;"> </th>
|
||||||
<th style="width: 1px;"> </th>
|
<th style="width: 1px;"> </th>
|
||||||
<th>@SharedLocalizer["Username"]</th>
|
<th class="app-sort-th" @onclick="@(() => SortTable("Username"))">@Localizer["Username"]<i class="@(SetSortIcon("Username"))"></i></th>
|
||||||
<th>@SharedLocalizer["Name"]</th>
|
<th class="app-sort-th" @onclick="@(() => SortTable("DisplayName"))">@Localizer["Name"]<i class="@(SetSortIcon("DisplayName"))"></i></th>
|
||||||
<th>@Localizer["LastLoginOn"]</th>
|
<th class="app-sort-th" @onclick="@(() => SortTable("LastLoginOn"))">@Localizer["LastLoginOn"]<i class="@(SetSortIcon("LastLoginOn"))"></i></th>
|
||||||
</Header>
|
</Header>
|
||||||
<Row>
|
<Row>
|
||||||
<td>
|
<td>
|
||||||
|
@ -413,6 +413,9 @@ else
|
||||||
private string _lifetime;
|
private string _lifetime;
|
||||||
private string _token;
|
private string _token;
|
||||||
|
|
||||||
|
private bool isSortedAscending;
|
||||||
|
private string activeSortColumn;
|
||||||
|
|
||||||
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.View;
|
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.View;
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
|
@ -654,4 +657,43 @@ else
|
||||||
_togglesecret = SharedLocalizer["ShowPassword"];
|
_togglesecret = SharedLocalizer["ShowPassword"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SortTable(string columnName)
|
||||||
|
{
|
||||||
|
if (columnName != activeSortColumn)
|
||||||
|
{
|
||||||
|
users = users.OrderBy(x => x.User.GetType().GetProperty(columnName)?.GetValue(x.User)).ToList();
|
||||||
|
isSortedAscending = true;
|
||||||
|
activeSortColumn = columnName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isSortedAscending)
|
||||||
|
{
|
||||||
|
users = users.OrderByDescending(x => x.User.GetType().GetProperty(columnName)?.GetValue(x.User)).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
users = users.OrderBy(x => x.User.GetType().GetProperty(columnName)?.GetValue(x.User)).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
isSortedAscending = !isSortedAscending;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string SetSortIcon(string columnName)
|
||||||
|
{
|
||||||
|
if (activeSortColumn != columnName)
|
||||||
|
{
|
||||||
|
return "app-fas pe-3 ";
|
||||||
|
}
|
||||||
|
if (isSortedAscending)
|
||||||
|
{
|
||||||
|
return "app-fas oi oi-sort-ascending";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "app-fas oi oi-sort-descending";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<root>
|
<root>
|
||||||
<!--
|
<!--
|
||||||
Microsoft ResX Schema
|
Microsoft ResX Schema
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
<value>The function that was performed</value>
|
<value>The function that was performed</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Category.HelpText" xml:space="preserve">
|
<data name="Category.HelpText" xml:space="preserve">
|
||||||
<value>The categories that were affected</value>
|
<value>The fully qualified type type that was affected</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Page.HelpText" xml:space="preserve">
|
<data name="Page.HelpText" xml:space="preserve">
|
||||||
<value>The page that was affected</value>
|
<value>The page that was affected</value>
|
||||||
|
@ -178,7 +178,7 @@
|
||||||
<value>Function: </value>
|
<value>Function: </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Category.Text" xml:space="preserve">
|
<data name="Category.Text" xml:space="preserve">
|
||||||
<value>Category: </value>
|
<value>Type Name: </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Page.Text" xml:space="preserve">
|
<data name="Page.Text" xml:space="preserve">
|
||||||
<value>Page: </value>
|
<value>Page: </value>
|
||||||
|
|
|
@ -246,4 +246,7 @@
|
||||||
<data name="PageContent.Heading" xml:space="preserve">
|
<data name="PageContent.Heading" xml:space="preserve">
|
||||||
<value>Page Content</value>
|
<value>Page Content</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ThemeChanged.Message" xml:space="preserve">
|
||||||
|
<value>Please Note That Overriding The Default Site Theme With An Unrelated Page Theme May Result In Compatibility Issues For Your Site</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -282,4 +282,7 @@
|
||||||
<data name="PageContent.Heading" xml:space="preserve">
|
<data name="PageContent.Heading" xml:space="preserve">
|
||||||
<value>Page Content</value>
|
<value>Page Content</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ThemeChanged.Message" xml:space="preserve">
|
||||||
|
<value>Please Note That Overriding The Default Site Theme With An Unrelated Page Theme May Result In Compatibility Issues For Your Site</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -3,9 +3,10 @@ using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
using System.Reflection.Metadata.Ecma335;
|
using System.Text.Json;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Oqtane.Enums;
|
||||||
using Oqtane.Models;
|
using Oqtane.Models;
|
||||||
using Oqtane.Shared;
|
using Oqtane.Shared;
|
||||||
|
|
||||||
|
@ -106,7 +107,7 @@ namespace Oqtane.Services
|
||||||
protected async Task GetAsync(string uri)
|
protected async Task GetAsync(string uri)
|
||||||
{
|
{
|
||||||
var response = await GetHttpClient().GetAsync(uri);
|
var response = await GetHttpClient().GetAsync(uri);
|
||||||
CheckResponse(response, uri);
|
await CheckResponse(response, uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task<string> GetStringAsync(string uri)
|
protected async Task<string> GetStringAsync(string uri)
|
||||||
|
@ -140,7 +141,7 @@ namespace Oqtane.Services
|
||||||
protected async Task<T> GetJsonAsync<T>(string uri)
|
protected async Task<T> GetJsonAsync<T>(string uri)
|
||||||
{
|
{
|
||||||
var response = await GetHttpClient().GetAsync(uri, HttpCompletionOption.ResponseHeadersRead, CancellationToken.None);
|
var response = await GetHttpClient().GetAsync(uri, HttpCompletionOption.ResponseHeadersRead, CancellationToken.None);
|
||||||
if (CheckResponse(response, uri) && ValidateJsonContent(response.Content))
|
if (await CheckResponse(response, uri) && ValidateJsonContent(response.Content))
|
||||||
{
|
{
|
||||||
return await response.Content.ReadFromJsonAsync<T>();
|
return await response.Content.ReadFromJsonAsync<T>();
|
||||||
}
|
}
|
||||||
|
@ -151,7 +152,7 @@ namespace Oqtane.Services
|
||||||
protected async Task PutAsync(string uri)
|
protected async Task PutAsync(string uri)
|
||||||
{
|
{
|
||||||
var response = await GetHttpClient().PutAsync(uri, null);
|
var response = await GetHttpClient().PutAsync(uri, null);
|
||||||
CheckResponse(response, uri);
|
await CheckResponse(response, uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task<T> PutJsonAsync<T>(string uri, T value)
|
protected async Task<T> PutJsonAsync<T>(string uri, T value)
|
||||||
|
@ -162,7 +163,7 @@ namespace Oqtane.Services
|
||||||
protected async Task<TResult> PutJsonAsync<TValue, TResult>(string uri, TValue value)
|
protected async Task<TResult> PutJsonAsync<TValue, TResult>(string uri, TValue value)
|
||||||
{
|
{
|
||||||
var response = await GetHttpClient().PutAsJsonAsync(uri, value);
|
var response = await GetHttpClient().PutAsJsonAsync(uri, value);
|
||||||
if (CheckResponse(response, uri) && ValidateJsonContent(response.Content))
|
if (await CheckResponse(response, uri) && ValidateJsonContent(response.Content))
|
||||||
{
|
{
|
||||||
var result = await response.Content.ReadFromJsonAsync<TResult>();
|
var result = await response.Content.ReadFromJsonAsync<TResult>();
|
||||||
return result;
|
return result;
|
||||||
|
@ -173,7 +174,7 @@ namespace Oqtane.Services
|
||||||
protected async Task PostAsync(string uri)
|
protected async Task PostAsync(string uri)
|
||||||
{
|
{
|
||||||
var response = await GetHttpClient().PostAsync(uri, null);
|
var response = await GetHttpClient().PostAsync(uri, null);
|
||||||
CheckResponse(response, uri);
|
await CheckResponse(response, uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task<T> PostJsonAsync<T>(string uri, T value)
|
protected async Task<T> PostJsonAsync<T>(string uri, T value)
|
||||||
|
@ -184,7 +185,7 @@ namespace Oqtane.Services
|
||||||
protected async Task<TResult> PostJsonAsync<TValue, TResult>(string uri, TValue value)
|
protected async Task<TResult> PostJsonAsync<TValue, TResult>(string uri, TValue value)
|
||||||
{
|
{
|
||||||
var response = await GetHttpClient().PostAsJsonAsync(uri, value);
|
var response = await GetHttpClient().PostAsJsonAsync(uri, value);
|
||||||
if (CheckResponse(response, uri) && ValidateJsonContent(response.Content))
|
if (await CheckResponse(response, uri) && ValidateJsonContent(response.Content))
|
||||||
{
|
{
|
||||||
var result = await response.Content.ReadFromJsonAsync<TResult>();
|
var result = await response.Content.ReadFromJsonAsync<TResult>();
|
||||||
return result;
|
return result;
|
||||||
|
@ -196,21 +197,20 @@ namespace Oqtane.Services
|
||||||
protected async Task DeleteAsync(string uri)
|
protected async Task DeleteAsync(string uri)
|
||||||
{
|
{
|
||||||
var response = await GetHttpClient().DeleteAsync(uri);
|
var response = await GetHttpClient().DeleteAsync(uri);
|
||||||
CheckResponse(response, uri);
|
await CheckResponse(response, uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CheckResponse(HttpResponseMessage response, string uri)
|
private async Task<bool> CheckResponse(HttpResponseMessage response, string uri)
|
||||||
{
|
{
|
||||||
if (!response.RequestMessage.RequestUri.AbsolutePath.Contains("/api/"))
|
if (uri.Contains("/api/") && !response.RequestMessage.RequestUri.AbsolutePath.Contains("/api/"))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Request: {uri} Not Mapped To A Controller Method");
|
await Log(uri, response.RequestMessage.Method.ToString(), "Request {Uri} Not Mapped To A Controller Method", uri);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (response.IsSuccessStatusCode) return true;
|
if (response.IsSuccessStatusCode) return true;
|
||||||
if (response.StatusCode != HttpStatusCode.NoContent && response.StatusCode != HttpStatusCode.NotFound)
|
if (response.StatusCode != HttpStatusCode.NoContent && response.StatusCode != HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Request: {response.RequestMessage.RequestUri}");
|
await Log(uri, response.RequestMessage.Method.ToString(), "Request {Uri} Failed With Status {StatusCode} - {ReasonPhrase}", uri, response.StatusCode, response.ReasonPhrase);
|
||||||
Console.WriteLine($"Response status: {response.StatusCode} {response.ReasonPhrase}");
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -221,6 +221,44 @@ namespace Oqtane.Services
|
||||||
return mediaType != null && mediaType.Equals("application/json", StringComparison.OrdinalIgnoreCase);
|
return mediaType != null && mediaType.Equals("application/json", StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task Log(string uri, string method, string message, params object[] args)
|
||||||
|
{
|
||||||
|
if (_siteState.Alias != null)
|
||||||
|
{
|
||||||
|
var log = new Log();
|
||||||
|
log.SiteId = _siteState.Alias.SiteId;
|
||||||
|
log.PageId = null;
|
||||||
|
log.ModuleId = null;
|
||||||
|
log.UserId = null;
|
||||||
|
log.Url = uri;
|
||||||
|
log.Category = GetType().AssemblyQualifiedName;
|
||||||
|
log.Feature = Utilities.GetTypeNameLastSegment(log.Category, 0);
|
||||||
|
switch (method)
|
||||||
|
{
|
||||||
|
case "GET":
|
||||||
|
log.Function = LogFunction.Read.ToString();
|
||||||
|
break;
|
||||||
|
case "POST":
|
||||||
|
log.Function = LogFunction.Create.ToString();
|
||||||
|
break;
|
||||||
|
case "PUT":
|
||||||
|
log.Function = LogFunction.Update.ToString();
|
||||||
|
break;
|
||||||
|
case "DELETE":
|
||||||
|
log.Function = LogFunction.Delete.ToString();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
log.Function = LogFunction.Other.ToString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
log.Level = LogLevel.Error.ToString();
|
||||||
|
log.Message = message;
|
||||||
|
log.MessageTemplate = "";
|
||||||
|
log.Properties = JsonSerializer.Serialize(args);
|
||||||
|
await PostJsonAsync(CreateApiUrl("Log"), log);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//[Obsolete("This constructor is obsolete. Use ServiceBase(HttpClient client, SiteState siteState) : base(http, siteState) {} instead.", false)]
|
//[Obsolete("This constructor is obsolete. Use ServiceBase(HttpClient client, SiteState siteState) : base(http, siteState) {} instead.", false)]
|
||||||
// This constructor is obsolete. Use ServiceBase(HttpClient client, SiteState siteState) : base(http, siteState) {} instead.
|
// This constructor is obsolete. Use ServiceBase(HttpClient client, SiteState siteState) : base(http, siteState) {} instead.
|
||||||
protected ServiceBase(HttpClient client)
|
protected ServiceBase(HttpClient client)
|
||||||
|
|
|
@ -116,6 +116,7 @@ namespace Oqtane.Infrastructure
|
||||||
|
|
||||||
if (succeeded)
|
if (succeeded)
|
||||||
{
|
{
|
||||||
|
user.DisplayName = (user.DisplayName == null) ? user.Username : user.DisplayName;
|
||||||
user.LastLoginOn = null;
|
user.LastLoginOn = null;
|
||||||
user.LastIPAddress = "";
|
user.LastIPAddress = "";
|
||||||
User = _users.AddUser(user);
|
User = _users.AddUser(user);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
cp -f "../Client/bin/Debug/net7.0/[Owner].Module.[Module].Client.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Client/bin/Debug/net7.0/[Owner].Module.[Module].Client.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -f "../Client/bin/Debug/net7.0/[Owner].Module.[Module].Client.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Client/bin/Debug/net7.0/[Owner].Module.[Module].Client.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -f "../Server/bin/Debug/net7.0/[Owner].Module.[Module].Server.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Server/bin/Debug/net7.0/[Owner].Module.[Module].Server.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -f "../Server/bin/Debug/net7.0/[Owner].Module.[Module].Server.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Server/bin/Debug/net7.0/[Owner].Module.[Module].Server.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -f "../Shared/bin/Debug/net7.0/[Owner].Module.[Module].Shared.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Shared/bin/Debug/net7.0/[Owner].Module.[Module].Shared.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -f "../Shared/bin/Debug/net7.0/[Owner].Module.[Module].Shared.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Shared/bin/Debug/net7.0/[Owner].Module.[Module].Shared.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -rf "../Server/wwwroot/"* "../../oqtane.framework/Oqtane.Server/wwwroot/"
|
cp -rf "../Server/wwwroot/"* "../../oqtane.framework/Oqtane.Server/wwwroot/"
|
|
@ -1,2 +1,2 @@
|
||||||
"..\..\oqtane.framework\oqtane.package\nuget.exe" pack [Owner].Module.[Module].nuspec
|
"..\..\oqtane.framework\oqtane.package\nuget.exe" pack [Owner].Module.[Module].nuspec
|
||||||
cp -f "*.nupkg" "..\..\oqtane.framework\Oqtane.Server\Packages\"
|
cp -f "*.nupkg" "..\..\oqtane.framework\Oqtane.Server\Packages\"
|
|
@ -1,3 +1,3 @@
|
||||||
cp -f "../Client/bin/Debug/net7.0/[Owner].Theme.[Theme].Client.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Client/bin/Debug/net7.0/[Owner].Theme.[Theme].Client.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -f "../Client/bin/Debug/net7.0/[Owner].Theme.[Theme].Client.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
cp -f "../Client/bin/Debug/net7.0/[Owner].Theme.[Theme].Client.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/net7.0/"
|
||||||
cp -rf "../Server/wwwroot/"* "../../oqtane.framework/Oqtane.Server/wwwroot/"
|
cp -rf "../Server/wwwroot/"* "../../oqtane.framework/Oqtane.Server/wwwroot/"
|
|
@ -1,2 +1,2 @@
|
||||||
"..\..\oqtane.framework\oqtane.package\nuget.exe" pack [Owner].Theme.[Theme].nuspec
|
"..\..\oqtane.framework\oqtane.package\nuget.exe" pack [Owner].Theme.[Theme].nuspec
|
||||||
cp -f "*.nupkg" "..\..\oqtane.framework\Oqtane.Server\Packages\"
|
cp -f "*.nupkg" "..\..\oqtane.framework\Oqtane.Server\Packages\"
|
|
@ -219,4 +219,12 @@ app {
|
||||||
/* Pager */
|
/* Pager */
|
||||||
.app-pager-pointer {
|
.app-pager-pointer {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-sort-th {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-fas {
|
||||||
|
margin-left: 5px;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user