diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Drivers/AuditTrailTrimmingSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Drivers/AuditTrailTrimmingSettingsPartDriver.cs index 1742915a0..8cd40d36c 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Drivers/AuditTrailTrimmingSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Drivers/AuditTrailTrimmingSettingsPartDriver.cs @@ -3,6 +3,7 @@ using Orchard.AuditTrail.ViewModels; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.Environment.Extensions; +using Orchard.Localization; using Orchard.Localization.Services; using Orchard.Security; @@ -11,12 +12,17 @@ namespace Orchard.AuditTrail.Drivers { public class AuditTrailTrimmingSettingsPartDriver : ContentPartDriver { private readonly IAuthorizer _authorizer; private readonly IDateServices _dateServices; + private readonly IDateTimeFormatProvider _dateTimeLocalization; - public AuditTrailTrimmingSettingsPartDriver(IAuthorizer authorizer, IDateServices dateServices) { + public AuditTrailTrimmingSettingsPartDriver(IAuthorizer authorizer, IDateServices dateServices, IDateTimeFormatProvider dateTimeLocalization) { _authorizer = authorizer; _dateServices = dateServices; + _dateTimeLocalization = dateTimeLocalization; + T = NullLocalizer.Instance; } + public Localizer T { get; set; } + protected override DriverResult Editor(AuditTrailTrimmingSettingsPart part, dynamic shapeHelper) { return Editor(part, null, shapeHelper); } @@ -28,7 +34,8 @@ namespace Orchard.AuditTrail.Drivers { return ContentShape("Parts_AuditTrailTrimmingSettings_Edit", () => { var viewModel = new AuditTrailTrimmingSettingsViewModel { RetentionPeriod = part.RetentionPeriod, - LastRun = _dateServices.ConvertToLocal(part.LastRunUtc) + MinimumRunInterval = part.MinimumRunInterval, + LastRunDateString = _dateServices.ConvertToLocalString(part.LastRunUtc, _dateTimeLocalization.ShortDateTimeFormat, T("Never").Text) }; if (updater != null) { diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Models/AuditTrailTrimmingSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Models/AuditTrailTrimmingSettingsPart.cs index 8bec9677c..e0ad80d5a 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Models/AuditTrailTrimmingSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Models/AuditTrailTrimmingSettingsPart.cs @@ -11,6 +11,14 @@ namespace Orchard.AuditTrail.Models { set { this.Store(x => x.RetentionPeriod, value); } } + /// + /// Gets or sets the miminum wait time in hours between audit trail trimming runs. + /// + public int MinimumRunInterval { + get { return this.Retrieve(x => x.MinimumRunInterval, defaultValue: 12); } + set { this.Store(x => x.MinimumRunInterval, value); } + } + /// /// Gets or sets the time in UTC at which the audit trail was last trimmed. /// diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Services/AuditTrailTrimmingBackgroundTask.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Services/AuditTrailTrimmingBackgroundTask.cs index cf719cdfa..83da1ae69 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Services/AuditTrailTrimmingBackgroundTask.cs +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Services/AuditTrailTrimmingBackgroundTask.cs @@ -66,8 +66,8 @@ namespace Orchard.AuditTrail.Services { private bool GetIsTimeToTrim() { var lastRun = Settings.LastRunUtc ?? DateTime.MinValue; var now = _clock.UtcNow; - var interval = TimeSpan.FromHours(12); - return now - lastRun > interval; + var interval = TimeSpan.FromHours(Settings.MinimumRunInterval); + return now - lastRun >= interval; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/ViewModels/AuditTrailTrimmingSettingsViewModel.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/ViewModels/AuditTrailTrimmingSettingsViewModel.cs index c0a426ea5..ec47152c5 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/ViewModels/AuditTrailTrimmingSettingsViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/ViewModels/AuditTrailTrimmingSettingsViewModel.cs @@ -1,8 +1,10 @@ using System; +using System.ComponentModel.DataAnnotations; namespace Orchard.AuditTrail.ViewModels { public class AuditTrailTrimmingSettingsViewModel { - public int RetentionPeriod { get; set; } - public DateTime? LastRun { get; set; } + [Range(0, Int32.MaxValue)] public int RetentionPeriod { get; set; } + [Range(0, Int32.MaxValue)] public int MinimumRunInterval { get; set; } + public string LastRunDateString { get; set; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/EditorTemplates/Parts.AuditTrailTrimmingSettings.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/EditorTemplates/Parts.AuditTrailTrimmingSettings.cshtml index 1330a4853..ffd6f984a 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/EditorTemplates/Parts.AuditTrailTrimmingSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/EditorTemplates/Parts.AuditTrailTrimmingSettings.cshtml @@ -7,8 +7,13 @@ @T("The number of days of audit log data to retain.")
- @Html.LabelFor(m => m.LastRun, T("Last run")) - @Html.TextBoxFor(m => m.LastRun, new { @class = "text", disabled = "disabled" }) - @T("Indicates the last time the audit trail trimming process was run. The trimming process runs every 12 hours.") + @Html.LabelFor(m => m.MinimumRunInterval, T("Minimum run interval")) + @Html.TextBoxFor(m => m.MinimumRunInterval, new { @class = "text small" }) + @T("The minimum number of hours to wait between trimming process runs. Enter 0 for continuous trimming.") +
+
+ @Html.LabelFor(m => m.LastRunDateString, T("Last run")) + @Html.TextBoxFor(m => m.LastRunDateString, new { @class = "text", disabled = "disabled" }) + @T("Indicates the last time the audit trail trimming process was run.")