Merge pull request #6048 from sbwalker/dev

performance optimization to limit the number of HtmlText content versions
This commit is contained in:
Shaun Walker
2026-02-17 12:17:20 -05:00
committed by GitHub
4 changed files with 38 additions and 5 deletions

View File

@@ -31,8 +31,8 @@
<th style="width: 1px;">&nbsp;</th> <th style="width: 1px;">&nbsp;</th>
<th style="width: 1px;">&nbsp;</th> <th style="width: 1px;">&nbsp;</th>
<th style="width: 1px;">&nbsp;</th> <th style="width: 1px;">&nbsp;</th>
<th>@SharedLocalizer["CreatedOn"]</th> <th>@Localizer["CreatedOn"]</th>
<th>@SharedLocalizer["CreatedBy"]</th> <th>@Localizer["CreatedBy"]</th>
</Header> </Header>
<Row> <Row>
<td><ActionLink Action="View" Security="SecurityAccessLevel.Edit" OnClick="@(async () => await View(context))" ResourceKey="View" /></td> <td><ActionLink Action="View" Security="SecurityAccessLevel.Edit" OnClick="@(async () => await View(context))" ResourceKey="View" /></td>

View File

@@ -16,6 +16,12 @@
</select> </select>
</div> </div>
</div> </div>
<div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="versions" ResourceKey="Versions" ResourceType="@resourceType" HelpText="The number of content versions to preserve (note that zero means unlimited)">Versions: </Label>
<div class="col-sm-9">
<input id="versions" type="number" min="0" max="9" step="1" class="form-control" @bind="@_versions" />
</div>
</div>
</div> </div>
</form> </form>
@@ -26,12 +32,14 @@
private bool validated = false; private bool validated = false;
private string _dynamictokens; private string _dynamictokens;
private string _versions = "5";
protected override void OnInitialized() protected override void OnInitialized()
{ {
try try
{ {
_dynamictokens = SettingService.GetSetting(ModuleState.Settings, "DynamicTokens", "false"); _dynamictokens = SettingService.GetSetting(ModuleState.Settings, "DynamicTokens", "false");
_versions = SettingService.GetSetting(ModuleState.Settings, "Versions", "3");
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -45,6 +53,10 @@
{ {
var settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); var settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId);
settings = SettingService.SetSetting(settings, "DynamicTokens", _dynamictokens); settings = SettingService.SetSetting(settings, "DynamicTokens", _dynamictokens);
if (int.TryParse(_versions, out int versions) && versions >= 0 && versions <= 9)
{
settings = SettingService.SetSetting(settings, "Versions", versions.ToString());
}
await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId);
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -123,4 +123,10 @@
<data name="DynamicTokens.Text" xml:space="preserve"> <data name="DynamicTokens.Text" xml:space="preserve">
<value>Dynamic Tokens?</value> <value>Dynamic Tokens?</value>
</data> </data>
<data name="Versions.HelpText" xml:space="preserve">
<value>The number of content versions to preserve (note that zero means unlimited)</value>
</data>
<data name="Versions.Text" xml:space="preserve">
<value>Versions:</value>
</data>
</root> </root>

View File

@@ -1,7 +1,9 @@
using System.Linq;
using Oqtane.Documentation;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Oqtane.Documentation;
using Oqtane.Repository;
using Oqtane.Shared;
namespace Oqtane.Modules.HtmlText.Repository namespace Oqtane.Modules.HtmlText.Repository
{ {
@@ -18,10 +20,12 @@ namespace Oqtane.Modules.HtmlText.Repository
public class HtmlTextRepository : IHtmlTextRepository, ITransientService public class HtmlTextRepository : IHtmlTextRepository, ITransientService
{ {
private readonly IDbContextFactory<HtmlTextContext> _factory; private readonly IDbContextFactory<HtmlTextContext> _factory;
private readonly ISettingRepository _settingRepository;
public HtmlTextRepository(IDbContextFactory<HtmlTextContext> factory) public HtmlTextRepository(IDbContextFactory<HtmlTextContext> factory, ISettingRepository settingRepository)
{ {
_factory = factory; _factory = factory;
_settingRepository = settingRepository;
} }
public IEnumerable<Models.HtmlText> GetHtmlTexts(int moduleId) public IEnumerable<Models.HtmlText> GetHtmlTexts(int moduleId)
@@ -39,6 +43,17 @@ namespace Oqtane.Modules.HtmlText.Repository
public Models.HtmlText AddHtmlText(Models.HtmlText htmlText) public Models.HtmlText AddHtmlText(Models.HtmlText htmlText)
{ {
using var db = _factory.CreateDbContext(); using var db = _factory.CreateDbContext();
var versions = int.Parse(_settingRepository.GetSettingValue(EntityNames.Module, htmlText.ModuleId, "Versions", "3"));
if (versions > 0)
{
var htmlTexts = db.HtmlText.Where(item => item.ModuleId == htmlText.ModuleId).OrderByDescending(item => item.CreatedOn).ToList();
for (int i = versions - 1; i < htmlTexts.Count; i++)
{
db.HtmlText.Remove(htmlTexts[i]);
}
}
db.HtmlText.Add(htmlText); db.HtmlText.Add(htmlText);
db.SaveChanges(); db.SaveChanges();
return htmlText; return htmlText;