From ca407d78cca0356e22603b510b6aefc585da3bd6 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 23 Dec 2015 15:22:45 +0100 Subject: [PATCH] Removes the old Log/ILog along with the concept of an ExternalLogger, updates the IAuditService to handle what the Log used to do --- .../UmbracoSettings/ILoggingSection.cs | 12 +- .../UmbracoSettings/LoggingElement.cs | 24 +- .../RepositoryCompositionRoot.cs | 3 +- .../Persistence/Mappers/AuditItemMapper.cs | 32 ++ .../Repositories/AuditRepository.cs | 37 +- .../Interfaces/IAuditRepository.cs | 4 +- src/Umbraco.Core/Services/AuditService.cs | 44 ++ src/Umbraco.Core/Services/IAuditService.cs | 6 + src/Umbraco.Core/Umbraco.Core.csproj | 1 + .../LoggingElementDefaultTests.cs | 22 +- .../UmbracoSettings/LoggingElementTests.cs | 28 +- src/Umbraco.Web/Editors/LogController.cs | 14 +- .../Models/ContentEditing/AuditLog.cs | 2 +- .../Models/ContentEditing/AuditLogType.cs | 84 ---- .../Models/Mapping/LogModelMapper.cs | 5 +- src/Umbraco.Web/Scheduling/LogScrubber.cs | 2 +- src/Umbraco.Web/Umbraco.Web.csproj | 11 - .../umbraco/dashboard/LatestEdits.ascx | 14 - .../umbraco/dashboard/LatestEdits.ascx.cs | 68 --- .../dashboard/LatestEdits.ascx.designer.cs | 24 - .../MediaDashboardFolderBrowser.ascx | 4 - .../umbraco/dialogs/sendToTranslation.aspx.cs | 106 ++++- .../sendToTranslation.aspx.designer.cs | 36 +- .../umbraco/dialogs/viewAuditTrail.aspx.cs | 2 +- src/umbraco.businesslogic/Interfaces/ILog.cs | 20 - src/umbraco.businesslogic/Log.cs | 436 ------------------ src/umbraco.businesslogic/LogTypes.cs | 159 ------- .../umbraco.businesslogic.csproj | 5 - .../businesslogic/translation/Translation.cs | 95 ---- src/umbraco.cms/umbraco.cms.csproj | 1 - 30 files changed, 244 insertions(+), 1057 deletions(-) create mode 100644 src/Umbraco.Core/Persistence/Mappers/AuditItemMapper.cs delete mode 100644 src/Umbraco.Web/Models/ContentEditing/AuditLogType.cs delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.cs delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.designer.cs delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/MediaDashboardFolderBrowser.ascx delete mode 100644 src/umbraco.businesslogic/Interfaces/ILog.cs delete mode 100644 src/umbraco.businesslogic/Log.cs delete mode 100644 src/umbraco.businesslogic/LogTypes.cs delete mode 100644 src/umbraco.cms/businesslogic/translation/Translation.cs diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/ILoggingSection.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/ILoggingSection.cs index 8a9a6ad29a..9d8c78a37b 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/ILoggingSection.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/ILoggingSection.cs @@ -8,20 +8,10 @@ namespace Umbraco.Core.Configuration.UmbracoSettings bool EnableLogging { get; } - bool EnableAsyncLogging { get; } - int CleaningMiliseconds { get; } int MaxLogAge { get; } - IEnumerable DisabledLogTypes { get; } - - string ExternalLoggerAssembly { get; } - - string ExternalLoggerType { get; } - - bool ExternalLoggerEnableAuditTrail { get; } - - bool ExternalLoggerIsConfigured { get; } + IEnumerable DisabledLogTypes { get; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/LoggingElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/LoggingElement.cs index f95a9c7e76..8693405e1a 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/LoggingElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/LoggingElement.cs @@ -92,22 +92,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings return false; } } - - string ILoggingSection.ExternalLoggerAssembly - { - get { return ExternalLogger.Assembly; } - } - - string ILoggingSection.ExternalLoggerType - { - get { return ExternalLogger.Type; } - } - - bool ILoggingSection.ExternalLoggerEnableAuditTrail - { - get { return ExternalLogger.LogAuditTrail; } - } - + bool ILoggingSection.AutoCleanLogs { get { return AutoCleanLogs; } @@ -117,12 +102,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings { get { return EnableLogging; } } - - bool ILoggingSection.EnableAsyncLogging - { - get { return EnableAsyncLogging; } - } - + int ILoggingSection.CleaningMiliseconds { get { return CleaningMiliseconds; } diff --git a/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs b/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs index 25487cffd9..1ff50f8392 100644 --- a/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs +++ b/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs @@ -73,7 +73,8 @@ namespace Umbraco.Core.DependencyInjection typeof (ITaskTypeRepository), typeof (IAuditRepository), typeof (IRelationRepository), - typeof(IRelationTypeRepository), + typeof (IRelationTypeRepository), + typeof (IAuditRepository), typeof (IMigrationEntryRepository) }; return disabledCacheRepos.Any(x => TypeHelper.IsTypeAssignableFrom(x, declaringType)) diff --git a/src/Umbraco.Core/Persistence/Mappers/AuditItemMapper.cs b/src/Umbraco.Core/Persistence/Mappers/AuditItemMapper.cs new file mode 100644 index 0000000000..bed319eacf --- /dev/null +++ b/src/Umbraco.Core/Persistence/Mappers/AuditItemMapper.cs @@ -0,0 +1,32 @@ +using System.Collections.Concurrent; +using Umbraco.Core.Models; +using Umbraco.Core.Models.Rdbms; +using Umbraco.Core.Persistence.SqlSyntax; + +namespace Umbraco.Core.Persistence.Mappers +{ + [MapperFor(typeof(AuditItem))] + public sealed class AuditItemMapper : BaseMapper + { + private static readonly ConcurrentDictionary PropertyInfoCacheInstance = new ConcurrentDictionary(); + + public AuditItemMapper(ISqlSyntaxProvider sqlSyntax) : base(sqlSyntax) + { + } + + internal override ConcurrentDictionary PropertyInfoCache + { + get { return PropertyInfoCacheInstance; } + } + + protected override void BuildMap() + { + CacheMap(src => src.Id, dto => dto.Id); + CacheMap(src => src.Comment, dto => dto.Comment); + CacheMap(src => src.AuditType, dto => dto.Header); + CacheMap(src => src.UserId, dto => dto.UserId); + CacheMap(src => src.CreateDate, dto => dto.Datestamp); + } + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs b/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs index 5f47b0c14e..710dbf1d30 100644 --- a/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Rdbms; @@ -21,9 +22,7 @@ namespace Umbraco.Core.Persistence.Repositories { throw new NotImplementedException(); } - - #region Not Implemented - not needed - + protected override void PersistUpdatedItem(AuditItem entity) { Database.Insert(new LogDto @@ -38,7 +37,14 @@ namespace Umbraco.Core.Persistence.Repositories protected override AuditItem PerformGet(int id) { - throw new NotImplementedException(); + var sql = GetBaseQuery(false); + sql.Where(GetBaseWhereClause(), new { Id = id }); + + var dto = Database.First(sql); + if (dto == null) + return null; + + return new AuditItem(dto.NodeId, dto.Comment, Enum.Parse(dto.Header), dto.UserId); } protected override IEnumerable PerformGetAll(params int[] ids) @@ -48,17 +54,26 @@ namespace Umbraco.Core.Persistence.Repositories protected override IEnumerable PerformGetByQuery(IQuery query) { - throw new NotImplementedException(); + var sqlClause = GetBaseQuery(false); + var translator = new SqlTranslator(sqlClause, query); + var sql = translator.Translate(); + + var dtos = Database.Fetch(sql); + + return dtos.Select(x => new AuditItem(x.NodeId, x.Comment, Enum.Parse(x.Header), x.UserId)).ToArray(); } protected override Sql GetBaseQuery(bool isCount) { - throw new NotImplementedException(); + var sql = new Sql(); + sql.Select(isCount ? "COUNT(*)" : "*") + .From(SqlSyntax); + return sql; } protected override string GetBaseWhereClause() { - throw new NotImplementedException(); + return "id = @Id"; } protected override IEnumerable GetDeleteClauses() @@ -70,8 +85,14 @@ namespace Umbraco.Core.Persistence.Repositories { get { throw new NotImplementedException(); } } - #endregion + public void CleanLogs(int maximumAgeOfLogsInMinutes) + { + var oldestPermittedLogEntry = DateTime.Now.Subtract(new TimeSpan(0, maximumAgeOfLogsInMinutes, 0)); + Database.Execute( + "delete from umbracoLog where datestamp < @oldestPermittedLogEntry and logHeader in ('open','system')", + new {oldestPermittedLogEntry = oldestPermittedLogEntry}); + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IAuditRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IAuditRepository.cs index fe571a49da..1e8e7e9790 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IAuditRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IAuditRepository.cs @@ -4,8 +4,8 @@ using Umbraco.Core.Models; namespace Umbraco.Core.Persistence.Repositories { - public interface IAuditRepository : IRepository + public interface IAuditRepository : IRepositoryQueryable { - + void CleanLogs(int maximumAgeOfLogsInMinutes); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/AuditService.cs b/src/Umbraco.Core/Services/AuditService.cs index 3e076084f2..b1393775e3 100644 --- a/src/Umbraco.Core/Services/AuditService.cs +++ b/src/Umbraco.Core/Services/AuditService.cs @@ -1,8 +1,10 @@ using System; +using System.Collections.Generic; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services @@ -23,5 +25,47 @@ namespace Umbraco.Core.Services uow.Commit(); } } + + public IEnumerable GetLogs(int objectId) + { + var uow = UowProvider.GetUnitOfWork(); + using (var repo = RepositoryFactory.CreateAuditRepository(uow)) + { + var result = repo.GetByQuery(repo.Query.Where(x => x.Id == objectId)); + return result; + } + } + + public IEnumerable GetUserLogs(int userId, AuditType type, DateTime? sinceDate = null) + { + var uow = UowProvider.GetUnitOfWork(); + using (var repo = RepositoryFactory.CreateAuditRepository(uow)) + { + var result = sinceDate.HasValue == false + ? repo.GetByQuery(repo.Query.Where(x => x.UserId == userId && x.AuditType == type)) + : repo.GetByQuery(repo.Query.Where(x => x.UserId == userId && x.AuditType == type && x.CreateDate >= sinceDate.Value)); + return result; + } + } + + public IEnumerable GetLogs(AuditType type, DateTime? sinceDate = null) + { + var uow = UowProvider.GetUnitOfWork(); + using (var repo = RepositoryFactory.CreateAuditRepository(uow)) + { + var result = sinceDate.HasValue == false + ? repo.GetByQuery(repo.Query.Where(x => x.AuditType == type)) + : repo.GetByQuery(repo.Query.Where(x => x.AuditType == type && x.CreateDate >= sinceDate.Value)); + return result; + } + } + + public void CleanLogs(int maximumAgeOfLogsInMinutes) + { + using (var repo = RepositoryFactory.CreateAuditRepository(UowProvider.GetUnitOfWork())) + { + repo.CleanLogs(maximumAgeOfLogsInMinutes); + } + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/IAuditService.cs b/src/Umbraco.Core/Services/IAuditService.cs index ce02a2ff90..0a2488f00e 100644 --- a/src/Umbraco.Core/Services/IAuditService.cs +++ b/src/Umbraco.Core/Services/IAuditService.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using Umbraco.Core.Models; namespace Umbraco.Core.Services @@ -5,5 +7,9 @@ namespace Umbraco.Core.Services public interface IAuditService : IService { void Add(AuditType type, string comment, int userId, int objectId); + IEnumerable GetLogs(int objectId); + IEnumerable GetUserLogs(int userId, AuditType type, DateTime? sinceDate = null); + IEnumerable GetLogs(AuditType type, DateTime? sinceDate = null); + void CleanLogs(int maximumAgeOfLogsInMinutes); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 7f51f4324a..88a2d21345 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -368,6 +368,7 @@ + diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementDefaultTests.cs b/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementDefaultTests.cs index 8f050c578d..1df309bb06 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementDefaultTests.cs +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementDefaultTests.cs @@ -10,27 +10,7 @@ namespace Umbraco.Tests.Configurations.UmbracoSettings { get { return true; } } - - [Test] - public override void ExternalLoggerConfigured() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerIsConfigured == false); - } - [Test] - public override void ExternalLogger_Assembly() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerIsConfigured == false); - } - [Test] - public override void ExternalLogger_LogAuditTrail() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerIsConfigured == false); - } - [Test] - public override void ExternalLogger_Type() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerIsConfigured == false); - } + [Test] public override void DisabledLogTypes() { diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementTests.cs b/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementTests.cs index e48436aeec..f9cf97a911 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementTests.cs +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/LoggingElementTests.cs @@ -6,22 +6,12 @@ namespace Umbraco.Tests.Configurations.UmbracoSettings [TestFixture] public class LoggingElementTests : UmbracoSettingsTests { - [Test] - public virtual void ExternalLoggerConfigured() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerIsConfigured == true); - } - [Test] public void EnableLogging() { Assert.IsTrue(SettingsSection.Logging.EnableLogging == true); } - [Test] - public void EnableAsyncLogging() - { - Assert.IsTrue(SettingsSection.Logging.EnableAsyncLogging == true); - } + [Test] public virtual void DisabledLogTypes() { @@ -29,21 +19,7 @@ namespace Umbraco.Tests.Configurations.UmbracoSettings Assert.IsTrue(SettingsSection.Logging.DisabledLogTypes.ElementAt(0).LogTypeAlias == "[alias-of-log-type-in-lowercase]"); Assert.IsTrue(SettingsSection.Logging.DisabledLogTypes.ElementAt(1).LogTypeAlias == "anotherlogalias"); } - [Test] - public virtual void ExternalLogger_Assembly() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerAssembly == "~/bin/assemblyFileName.dll"); - } - [Test] - public virtual void ExternalLogger_Type() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerType == "fully.qualified.namespace.and.type"); - } - [Test] - public virtual void ExternalLogger_LogAuditTrail() - { - Assert.IsTrue(SettingsSection.Logging.ExternalLoggerEnableAuditTrail == false); - } + [Test] public void AutoCleanLogs() { diff --git a/src/Umbraco.Web/Editors/LogController.cs b/src/Umbraco.Web/Editors/LogController.cs index 2429d5b218..df4bf924d7 100644 --- a/src/Umbraco.Web/Editors/LogController.cs +++ b/src/Umbraco.Web/Editors/LogController.cs @@ -8,6 +8,7 @@ using AutoMapper; using Umbraco.Core; using Umbraco.Web.Models.ContentEditing; using umbraco.BusinessLogic; +using Umbraco.Core.Models; using Umbraco.Web.Mvc; namespace Umbraco.Web.Editors @@ -21,26 +22,25 @@ namespace Umbraco.Web.Editors public IEnumerable GetEntityLog(int id) { return Mapper.Map>( - Log.Instance.GetLogItems(id)); + Services.AuditService.GetLogs(id)); } - public IEnumerable GetCurrentUserLog(AuditLogType logType, DateTime? sinceDate) + public IEnumerable GetCurrentUserLog(AuditType logType, DateTime? sinceDate) { if (sinceDate == null) sinceDate = DateTime.Now.Subtract(new TimeSpan(7, 0, 0, 0, 0)); - - var u = new User(Security.CurrentUser); + return Mapper.Map>( - Log.Instance.GetLogItems(u, Enum.Parse(logType.ToString()), sinceDate.Value)); + Services.AuditService.GetUserLogs(Security.CurrentUser.Id, logType, sinceDate.Value)); } - public IEnumerable GetLog(AuditLogType logType, DateTime? sinceDate) + public IEnumerable GetLog(AuditType logType, DateTime? sinceDate) { if (sinceDate == null) sinceDate = DateTime.Now.Subtract(new TimeSpan(7, 0, 0, 0, 0)); return Mapper.Map>( - Log.Instance.GetLogItems(Enum.Parse(logType.ToString()), sinceDate.Value)); + Services.AuditService.GetLogs(logType, sinceDate.Value)); } } diff --git a/src/Umbraco.Web/Models/ContentEditing/AuditLog.cs b/src/Umbraco.Web/Models/ContentEditing/AuditLog.cs index 5e5730871c..7fdf279cc9 100644 --- a/src/Umbraco.Web/Models/ContentEditing/AuditLog.cs +++ b/src/Umbraco.Web/Models/ContentEditing/AuditLog.cs @@ -16,7 +16,7 @@ namespace Umbraco.Web.Models.ContentEditing public DateTime Timestamp { get; set; } [DataMember(Name = "logType", IsRequired = true)] - public AuditLogType LogType { get; set; } + public string LogType { get; set; } [DataMember(Name = "comment", IsRequired = true)] public string Comment { get; set; } diff --git a/src/Umbraco.Web/Models/ContentEditing/AuditLogType.cs b/src/Umbraco.Web/Models/ContentEditing/AuditLogType.cs deleted file mode 100644 index a023d5ba98..0000000000 --- a/src/Umbraco.Web/Models/ContentEditing/AuditLogType.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Umbraco.Web.Models.ContentEditing -{ - /// - /// Defines audit trail log types - /// - public enum AuditLogType - { - /// - /// Used when new nodes are added - /// - New, - /// - /// Used when nodes are saved - /// - Save, - /// - /// Used when nodes are opened - /// - Open, - /// - /// Used when nodes are deleted - /// - Delete, - /// - /// Used when nodes are published - /// - Publish, - /// - /// Used when nodes are send to publishing - /// - SendToPublish, - /// - /// Used when nodes are unpublished - /// - UnPublish, - /// - /// Used when nodes are moved - /// - Move, - /// - /// Used when nodes are copied - /// - Copy, - /// - /// Used when nodes are assígned a domain - /// - AssignDomain, - /// - /// Used when public access are changed for a node - /// - PublicAccess, - /// - /// Used when nodes are sorted - /// - Sort, - /// - /// Used when a notification are send to a user - /// - Notify, - - /// - /// Used when a node's content is rolled back to a previous version - /// - RollBack, - /// - /// Used when a package is installed - /// - PackagerInstall, - /// - /// Used when a package is uninstalled - /// - PackagerUninstall, - /// - /// Used when a node is send to translation - /// - SendToTranslate - - } -} diff --git a/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs b/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs index db205f9d9e..d829da89d1 100644 --- a/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs @@ -3,6 +3,7 @@ using Umbraco.Core; using Umbraco.Core.Models.Mapping; using Umbraco.Web.Models.ContentEditing; using umbraco.BusinessLogic; +using Umbraco.Core.Models; namespace Umbraco.Web.Models.Mapping { @@ -10,8 +11,8 @@ namespace Umbraco.Web.Models.Mapping { public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) { - config.CreateMap() - .ForMember(log => log.LogType, expression => expression.MapFrom(item => Enum.Parse(item.LogType.ToString()))); + config.CreateMap() + .ForMember(log => log.LogType, expression => expression.MapFrom(item => item.AuditType.ToString())); } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Scheduling/LogScrubber.cs b/src/Umbraco.Web/Scheduling/LogScrubber.cs index b3a5f303e3..d2f1eb2e11 100644 --- a/src/Umbraco.Web/Scheduling/LogScrubber.cs +++ b/src/Umbraco.Web/Scheduling/LogScrubber.cs @@ -79,7 +79,7 @@ namespace Umbraco.Web.Scheduling using (DisposableTimer.DebugDuration("Log scrubbing executing", "Log scrubbing complete")) { - Log.CleanLogs(GetLogScrubbingMaximumAge(_settings)); + _appContext.Services.AuditService.CleanLogs(GetLogScrubbingMaximumAge(_settings)); } return true; // repeat diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index e740e62df8..083b768b99 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -552,7 +552,6 @@ - @@ -1323,13 +1322,6 @@ Code - - LatestEdits.ascx - ASPXCodeBehind - - - LatestEdits.ascx - assemblyBrowser.aspx ASPXCodeBehind @@ -1801,9 +1793,6 @@ - - ASPXCodeBehind - diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx b/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx deleted file mode 100644 index 48ad25fec3..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx +++ /dev/null @@ -1,14 +0,0 @@ -<%@ Control Language="c#" AutoEventWireup="True" Codebehind="LatestEdits.ascx.cs" Inherits="dashboardUtilities.LatestEdits" %> -<%@ Register TagPrefix="umb" Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" %> - - - -
-

<%=umbraco.ui.Text("defaultdialogs", "lastEdited")%>

- Umbraco - - - <%# PrintNodeName(DataBinder.Eval(Container.DataItem, "NodeId"), DataBinder.Eval(Container.DataItem, "datestamp")) %> - - -
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.cs deleted file mode 100644 index fe2dc67250..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.cs +++ /dev/null @@ -1,68 +0,0 @@ -using umbraco.BusinessLogic; -using System; -using Umbraco.Core.IO; -using umbraco.cms.businesslogic.web; - -namespace dashboardUtilities -{ - /// - /// Summary description for LatestEdits. - /// - public partial class LatestEdits : System.Web.UI.UserControl - { - - // Find current user - private System.Collections.ArrayList printedIds = new System.Collections.ArrayList(); - private int count = 0; - public int MaxRecords { get; set; } - - protected void Page_Load(object sender, EventArgs e) - { - if (MaxRecords == 0) - MaxRecords = 30; - - Repeater1.DataSource = Log.GetLogReader(User.GetCurrent(), LogTypes.Save, DateTime.Now.Subtract(new TimeSpan(7,0,0,0,0)), MaxRecords); - Repeater1.DataBind(); - } - - public string PrintNodeName(object NodeId, object Date) - { - if (!printedIds.Contains(NodeId) && count < MaxRecords) - { - printedIds.Add(NodeId); - try - { - Document d = new Document(int.Parse(NodeId.ToString())); - count++; - return - " " + d.Text + " - " + umbraco.ui.Text("general", "edited", User.GetCurrent()) + " " + umbraco.library.ShortDateWithTimeAndGlobal(DateTime.Parse(Date.ToString()).ToString(), umbraco.ui.Culture(User.GetCurrent())) + ""; - } - catch { - return ""; - } - - } else - return ""; - } - - #region Web Form Designer generated code - override protected void OnInit(EventArgs e) - { - // - // CODEGEN: This call is required by the ASP.NET Web Form Designer. - // - InitializeComponent(); - base.OnInit(e); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - - } - #endregion - } -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.designer.cs deleted file mode 100644 index b605e86eff..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/LatestEdits.ascx.designer.cs +++ /dev/null @@ -1,24 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace dashboardUtilities { - - - public partial class LatestEdits { - - /// - /// Repeater1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Repeater Repeater1; - } -} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/MediaDashboardFolderBrowser.ascx b/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/MediaDashboardFolderBrowser.ascx deleted file mode 100644 index f4094b4455..0000000000 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dashboard/MediaDashboardFolderBrowser.ascx +++ /dev/null @@ -1,4 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="true" %> -<%@ Register TagPrefix="umb" Namespace="Umbraco.Web.UI.Controls" Assembly="umbraco" %> - - \ No newline at end of file diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.cs index ed26511e1a..91ea130d54 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.cs @@ -1,20 +1,17 @@ using System; -using System.Data; -using System.Configuration; -using System.Collections; +using System.Net.Mail; using System.Web; -using System.Web.Security; -using System.Web.UI; using System.Web.UI.WebControls; -using System.Web.UI.WebControls.WebParts; -using System.Web.UI.HtmlControls; - -using umbraco.cms.businesslogic.web; using umbraco.cms.businesslogic; using umbraco.BusinessLogic; +using umbraco.uicontrols; using Umbraco.Core; +using Umbraco.Core.IO; +using Umbraco.Core.Logging; +using Umbraco.Core.Models; using Umbraco.Web; using Umbraco.Web.UI.Pages; +using Language = umbraco.cms.businesslogic.language.Language; namespace umbraco.presentation.dialogs { @@ -29,7 +26,7 @@ namespace umbraco.presentation.dialogs protected void Page_Load(object sender, EventArgs e) { - _currentPage = new CMSNode(int.Parse(Request.GetItemAsString("id"))); + _currentPage = new CMSNode(Int32.Parse(Request.GetItemAsString("id"))); pp_translator.Text = ui.Text("translation","translator", Security.CurrentUser); pp_language.Text = ui.Text("translation", "translateTo", Security.CurrentUser); @@ -56,7 +53,7 @@ namespace umbraco.presentation.dialogs // languages language.Items.Add(new ListItem(ui.Text("general", "choose", Security.CurrentUser), "")); - foreach (var l in cms.businesslogic.language.Language.getAll) + foreach (var l in Language.getAll) { var li = new ListItem(); li.Text = l.FriendlyName; @@ -77,7 +74,7 @@ namespace umbraco.presentation.dialogs if (translator.Items.Count == 0) { feedback.Text = ui.Text("translation", "noTranslators"); - feedback.type = uicontrols.Feedback.feedbacktype.error; + feedback.type = Feedback.feedbacktype.error; doTranslation.Enabled = false; } @@ -86,7 +83,7 @@ namespace umbraco.presentation.dialogs } } - private bool UserHasTranslatePermission(BusinessLogic.User u, CMSNode node) + private bool UserHasTranslatePermission(User u, CMSNode node) { //the permissions column in umbracoUserType is legacy and needs to be rewritten but for now this is the only way to test return u.GetPermissions(node.Path).Contains("4"); @@ -95,11 +92,11 @@ namespace umbraco.presentation.dialogs protected void doTranslation_Click(object sender, EventArgs e) { // testing translate - cms.businesslogic.translation.Translation.MakeNew( + MakeNew( _currentPage, UmbracoContext.UmbracoUser, - BusinessLogic.User.GetUser(int.Parse(translator.SelectedValue)), - new cms.businesslogic.language.Language(int.Parse(language.SelectedValue)), + BusinessLogic.User.GetUser(Int32.Parse(translator.SelectedValue)), + new Language(Int32.Parse(language.SelectedValue)), comment.Text, includeSubpages.Checked, true); @@ -107,7 +104,82 @@ namespace umbraco.presentation.dialogs pl_buttons.Visible = false; feedback.Text = ui.Text("translation","pageHasBeenSendToTranslation", _currentPage.Text, Security.CurrentUser) + "

" + ui.Text("defaultdialogs", "closeThisWindow") + "

"; - feedback.type = uicontrols.Feedback.feedbacktype.success; + feedback.type = Feedback.feedbacktype.success; + } + + public void MakeNew(CMSNode Node, User User, User Translator, Language Language, string Comment, + bool IncludeSubpages, bool SendEmail) + { + // Get translation taskType for obsolete task constructor + var taskType = Services.TaskService.GetTaskTypeByAlias("toTranslate"); + + // Create pending task + var t = new cms.businesslogic.task.Task(new Task(taskType)); + t.Comment = Comment; + t.Node = Node; + t.ParentUser = User; + t.User = Translator; + t.Save(); + + Services.AuditService.Add(AuditType.SendToTranslate, + "Translator: " + Translator.Name + ", Language: " + Language.FriendlyName, + User.Id, Node.Id); + + // send it + if (SendEmail) + { + string serverName = HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; + int port = HttpContext.Current.Request.Url.Port; + + if (port != 80) + serverName += ":" + port; + + serverName += IOHelper.ResolveUrl(SystemDirectories.Umbraco); + + // Send mail + string[] subjectVars = { serverName, Node.Text }; + string[] bodyVars = { + Translator.Name, Node.Text, User.Name, + serverName, t.Id.ToString(), + Language.FriendlyName + }; + + if (User.Email != "" && User.Email.Contains("@") && Translator.Email != "" && + Translator.Email.Contains("@")) + { + // create the mail message + MailMessage mail = new MailMessage(User.Email, Translator.Email); + + // populate the message + mail.Subject = ui.Text("translation", "mailSubject", subjectVars, Translator); + mail.IsBodyHtml = false; + mail.Body = ui.Text("translation", "mailBody", bodyVars, Translator); + try + { + SmtpClient sender = new SmtpClient(); + sender.Send(mail); + } + catch (Exception ex) + { + LogHelper.Error("Error sending translation e-mail", ex); + } + } + else + { + LogHelper.Warn("Could not send translation e-mail because either user or translator lacks e-mail in settings"); + } + + } + + if (IncludeSubpages) + { + //store children array here because iterating over an Array property object is very inneficient. + var c = Node.Children; + foreach (CMSNode n in c) + { + MakeNew(n, User, Translator, Language, Comment, true, false); + } + } } } } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.designer.cs index f111990471..181a94beba 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.designer.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sendToTranslation.aspx.designer.cs @@ -7,9 +7,13 @@ // //------------------------------------------------------------------------------ -namespace umbraco.presentation.dialogs { - - +using System.Web.UI.WebControls; +using umbraco.uicontrols; + +namespace umbraco.presentation.dialogs +{ + + public partial class sendToTranslation { /// @@ -19,7 +23,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::umbraco.uicontrols.Feedback feedback; + protected Feedback feedback; /// /// pane_form control. @@ -28,7 +32,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::umbraco.uicontrols.Pane pane_form; + protected Pane pane_form; /// /// pp_translator control. @@ -37,7 +41,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::umbraco.uicontrols.PropertyPanel pp_translator; + protected PropertyPanel pp_translator; /// /// translator control. @@ -46,7 +50,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.DropDownList translator; + protected DropDownList translator; /// /// pp_language control. @@ -55,7 +59,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::umbraco.uicontrols.PropertyPanel pp_language; + protected PropertyPanel pp_language; /// /// language control. @@ -64,7 +68,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.DropDownList language; + protected DropDownList language; /// /// defaultLanguage control. @@ -73,7 +77,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Literal defaultLanguage; + protected Literal defaultLanguage; /// /// pp_includeSubs control. @@ -82,7 +86,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::umbraco.uicontrols.PropertyPanel pp_includeSubs; + protected PropertyPanel pp_includeSubs; /// /// includeSubpages control. @@ -91,7 +95,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.CheckBox includeSubpages; + protected CheckBox includeSubpages; /// /// pp_comment control. @@ -100,7 +104,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::umbraco.uicontrols.PropertyPanel pp_comment; + protected PropertyPanel pp_comment; /// /// comment control. @@ -109,7 +113,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.TextBox comment; + protected TextBox comment; /// /// pl_buttons control. @@ -118,7 +122,7 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Panel pl_buttons; + protected Panel pl_buttons; /// /// doTranslation control. @@ -127,6 +131,6 @@ namespace umbraco.presentation.dialogs { /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Button doTranslation; + protected Button doTranslation; } } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/viewAuditTrail.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/viewAuditTrail.aspx.cs index 205ef57f08..67820e916e 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/viewAuditTrail.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/viewAuditTrail.aspx.cs @@ -28,7 +28,7 @@ namespace umbraco.presentation.umbraco.dialogs { // Put user code to initialize the page here //nodeName.Text = new cms.businesslogic.CMSNode(int.Parse(helper.Request("nodeID"))).Text; - auditLog.DataSource = BusinessLogic.Log.Instance.GetAuditLogItems(int.Parse(Request["nodeID"])); + auditLog.DataSource = Services.AuditService.GetLogs(int.Parse(Request["nodeID"])); auditLog.DataBind(); auditLog.BorderWidth = 0; auditLog.BorderStyle = BorderStyle.None; diff --git a/src/umbraco.businesslogic/Interfaces/ILog.cs b/src/umbraco.businesslogic/Interfaces/ILog.cs deleted file mode 100644 index fdb042f017..0000000000 --- a/src/umbraco.businesslogic/Interfaces/ILog.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using umbraco.DataLayer; - -namespace umbraco.BusinessLogic.Interfaces -{ - public interface ILog - { - void Add(LogTypes logType, User user, int nodeId, string comment); - void Add(Exception exception); - void CleanLogs(int maximumAgeOfLogsInMinutes); - List GetLogItems(LogTypes Type, DateTime SinceDate); - List GetLogItems(int NodeId); - List GetLogItems(User user, DateTime SinceDate); - List GetLogItems(User user, LogTypes Type, DateTime SinceDate); - List GetAuditLogReader(int NodeId); - } -} diff --git a/src/umbraco.businesslogic/Log.cs b/src/umbraco.businesslogic/Log.cs deleted file mode 100644 index 7f3c9661a9..0000000000 --- a/src/umbraco.businesslogic/Log.cs +++ /dev/null @@ -1,436 +0,0 @@ -using System; -using System.Diagnostics; -using System.Globalization; -using System.Linq; -using System.Threading; -using Umbraco.Core; -using Umbraco.Core.Configuration; -using Umbraco.Core.IO; -using Umbraco.Core.Logging; -using Umbraco.Core.Persistence; -using umbraco.DataLayer; -using System.Collections.Generic; -using System.Reflection; -using umbraco.BusinessLogic.Utils; - -namespace umbraco.BusinessLogic -{ - /// - /// Summary description for Log. - /// - public class Log - { - #region Statics - private Interfaces.ILog _externalLogger; - private bool _externalLoggerInitiated; - - internal Interfaces.ILog ExternalLogger - { - get - { - if (_externalLoggerInitiated == false) - { - _externalLoggerInitiated = true; - if (string.IsNullOrEmpty(UmbracoConfig.For.UmbracoSettings().Logging.ExternalLoggerAssembly) == false - && string.IsNullOrEmpty(UmbracoConfig.For.UmbracoSettings().Logging.ExternalLoggerType) == false) - { - try - { - var assemblyPath = IOHelper.MapPath(UmbracoConfig.For.UmbracoSettings().Logging.ExternalLoggerAssembly); - _externalLogger = Assembly.LoadFrom(assemblyPath).CreateInstance(UmbracoConfig.For.UmbracoSettings().Logging.ExternalLoggerType) as Interfaces.ILog; - } - catch (Exception ee) - { - LogHelper.Error("Error loading external logger", ee); - } - } - } - - return _externalLogger; - } - } - - - #region Singleton - - public static Log Instance - { - get { return Singleton.Instance; } - } - - #endregion - - private static ISqlHelper SqlHelper - { - get { return Application.SqlHelper; } - } - - /// - /// Adds the specified log item to the log. - /// - /// The log type. - /// The user adding the item. - /// The affected node id. - /// Comment. - public static void Add(LogTypes type, User user, int nodeId, string comment) - { - if (Instance.ExternalLogger != null) - { - Instance.ExternalLogger.Add(type, user, nodeId, comment); - - if (UmbracoConfig.For.UmbracoSettings().Logging.ExternalLoggerEnableAuditTrail == false) - { - AddLocally(type, user, nodeId, comment); - } - } - else - { - if (UmbracoConfig.For.UmbracoSettings().Logging.EnableLogging == false) return; - - if (UmbracoConfig.For.UmbracoSettings().Logging.DisabledLogTypes.Any(x => x.LogTypeAlias.InvariantEquals(type.ToString())) == false) - { - if (comment != null && comment.Length > 3999) - comment = comment.Substring(0, 3955) + "..."; - - if (UmbracoConfig.For.UmbracoSettings().Logging.EnableAsyncLogging) - { - ThreadPool.QueueUserWorkItem( - delegate { AddSynced(type, user == null ? 0 : user.Id, nodeId, comment); }); - return; - } - - AddSynced(type, user == null ? 0 : user.Id, nodeId, comment); - } - - } - } - - [Obsolete("Use LogHelper to log exceptions/errors")] - public void AddException(Exception ee) - { - if (ExternalLogger != null) - { - ExternalLogger.Add(ee); - } - else - { - var ex2 = ee; - while (ex2 != null) - { - ex2 = ex2.InnerException; - } - LogHelper.Error("An error occurred", ee); - } - } - - /// - /// Adds the specified log item to the Umbraco log no matter if an external logger has been defined. - /// - /// The log type. - /// The user adding the item. - /// The affected node id. - /// Comment. - public static void AddLocally(LogTypes type, User user, int nodeId, string comment) - { - if (comment.Length > 3999) - comment = comment.Substring(0, 3955) + "..."; - - if (UmbracoConfig.For.UmbracoSettings().Logging.EnableAsyncLogging) - { - ThreadPool.QueueUserWorkItem( - delegate { AddSynced(type, user == null ? 0 : user.Id, nodeId, comment); }); - return; - } - - AddSynced(type, user == null ? 0 : user.Id, nodeId, comment); - } - - /// - /// Adds the specified log item to the log without any user information attached. - /// - /// The log type. - /// The affected node id. - /// Comment. - public static void Add(LogTypes type, int nodeId, string comment) - { - Add(type, null, nodeId, comment); - } - - /// - /// Adds a log item to the log immidiately instead of Queuing it as a work item. - /// - /// The type. - /// The user id. - /// The node id. - /// The comment. - public static void AddSynced(LogTypes type, int userId, int nodeId, string comment) - { - var logTypeIsAuditType = type.GetType().GetField(type.ToString()).GetCustomAttributes(typeof(AuditTrailLogItem), true).Length != 0; - - if (logTypeIsAuditType) - { - try - { - SqlHelper.ExecuteNonQuery( - "insert into umbracoLog (userId, nodeId, logHeader, logComment) values (@userId, @nodeId, @logHeader, @comment)", - SqlHelper.CreateParameter("@userId", userId), - SqlHelper.CreateParameter("@nodeId", nodeId), - SqlHelper.CreateParameter("@logHeader", type.ToString()), - SqlHelper.CreateParameter("@comment", comment)); - } - catch (Exception e) - { - LogHelper.Error("An error occurred adding an audit trail log to the umbracoLog table", e); - } - - //Because 'Custom' log types are also Audit trail (for some wacky reason) but we also want these logged normally so we have to check for this: - if (type != LogTypes.Custom) - { - return; - } - - } - - //if we've made it this far it means that the log type is not an audit trail log or is a custom log. - LogHelper.Info( - "Redirected log call (please use Umbraco.Core.Logging.LogHelper instead of umbraco.BusinessLogic.Log) | Type: {0} | User: {1} | NodeId: {2} | Comment: {3}", - () => type.ToString(), () => userId, () => nodeId.ToString(CultureInfo.InvariantCulture), () => comment); - } - - public List GetAuditLogItems(int NodeId) - { - if (UmbracoConfig.For.UmbracoSettings().Logging.ExternalLoggerEnableAuditTrail && ExternalLogger != null) - return ExternalLogger.GetAuditLogReader(NodeId); - - return LogItem.ConvertIRecordsReader(SqlHelper.ExecuteReader( - "select userId, nodeId, logHeader, DateStamp, logComment from umbracoLog where nodeId = @id and logHeader not in ('open','system') order by DateStamp desc", - SqlHelper.CreateParameter("@id", NodeId))); - } - - public List GetLogItems(LogTypes type, DateTime sinceDate) - { - if (ExternalLogger != null) - return ExternalLogger.GetLogItems(type, sinceDate); - - return LogItem.ConvertIRecordsReader(SqlHelper.ExecuteReader( - "select userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where logHeader = @logHeader and DateStamp >= @dateStamp order by dateStamp desc", - SqlHelper.CreateParameter("@logHeader", type.ToString()), - SqlHelper.CreateParameter("@dateStamp", sinceDate))); - } - - public List GetLogItems(int nodeId) - { - if (ExternalLogger != null) - return ExternalLogger.GetLogItems(nodeId); - - return LogItem.ConvertIRecordsReader(SqlHelper.ExecuteReader( - "select userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where id = @id order by dateStamp desc", - SqlHelper.CreateParameter("@id", nodeId))); - } - - public List GetLogItems(User user, DateTime sinceDate) - { - if (ExternalLogger != null) - return ExternalLogger.GetLogItems(user, sinceDate); - - return LogItem.ConvertIRecordsReader(SqlHelper.ExecuteReader( - "select userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where UserId = @user and DateStamp >= @dateStamp order by dateStamp desc", - SqlHelper.CreateParameter("@user", user.Id), - SqlHelper.CreateParameter("@dateStamp", sinceDate))); - } - - public List GetLogItems(User user, LogTypes type, DateTime sinceDate) - { - if (ExternalLogger != null) - return ExternalLogger.GetLogItems(user, type, sinceDate); - - return LogItem.ConvertIRecordsReader(SqlHelper.ExecuteReader( - "select userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where UserId = @user and logHeader = @logHeader and DateStamp >= @dateStamp order by dateStamp desc", - SqlHelper.CreateParameter("@logHeader", type.ToString()), - SqlHelper.CreateParameter("@user", user.Id), - SqlHelper.CreateParameter("@dateStamp", sinceDate))); - } - - public static void CleanLogs(int maximumAgeOfLogsInMinutes) - { - if (Instance.ExternalLogger != null) - Instance.ExternalLogger.CleanLogs(maximumAgeOfLogsInMinutes); - else - { - try - { - DateTime oldestPermittedLogEntry = DateTime.Now.Subtract(new TimeSpan(0, maximumAgeOfLogsInMinutes, 0)); - var formattedDate = oldestPermittedLogEntry.ToString("yyyy-MM-dd HH:mm:ss"); - - SqlHelper.ExecuteNonQuery("delete from umbracoLog where datestamp < @oldestPermittedLogEntry and logHeader in ('open','system')", - SqlHelper.CreateParameter("@oldestPermittedLogEntry", oldestPermittedLogEntry)); - - LogHelper.Info(string.Format("Log scrubbed. Removed all items older than {0}", formattedDate)); - } - catch (Exception e) - { - Debug.WriteLine(e.ToString(), "Error"); - Trace.WriteLine(e.ToString()); - } - } - } - - - #region New GetLog methods - DataLayer layer compatible - /// - /// Gets a reader for the audit log. - /// - /// The node id. - /// A reader for the audit log. - [Obsolete("Use the Instance.GetAuditLogItems method which return a list of LogItems instead")] - public static IRecordsReader GetAuditLogReader(int NodeId) - { - return SqlHelper.ExecuteReader( - "select u.userName as [User], logHeader as Action, DateStamp as Date, logComment as Comment from umbracoLog inner join umbracoUser u on u.id = userId where nodeId = @id and logHeader not in ('open','system') order by DateStamp desc", - SqlHelper.CreateParameter("@id", NodeId)); - } - - /// - /// Gets a reader for the log for the specified types. - /// - /// The type of log message. - /// The start date. - /// A reader for the log. - [Obsolete("Use the Instance.GetLogItems method which return a list of LogItems instead")] - public static IRecordsReader GetLogReader(LogTypes Type, DateTime SinceDate) - { - return SqlHelper.ExecuteReader( - "select userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where logHeader = @logHeader and DateStamp >= @dateStamp order by dateStamp desc", - SqlHelper.CreateParameter("@logHeader", Type.ToString()), - SqlHelper.CreateParameter("@dateStamp", SinceDate)); - } - - /// - /// Gets a reader for the log of the specified node. - /// - /// The node id. - /// A reader for the log. - [Obsolete("Use the Instance.GetLogItems method which return a list of LogItems instead")] - public static IRecordsReader GetLogReader(int NodeId) - { - return SqlHelper.ExecuteReader( - "select u.userName, DateStamp, logHeader, logComment from umbracoLog inner join umbracoUser u on u.id = userId where nodeId = @id", - SqlHelper.CreateParameter("@id", NodeId)); - } - - /// - /// Gets a reader for the log for the specified user. - /// - /// The user. - /// The start date. - /// A reader for the log. - [Obsolete("Use the Instance.GetLogItems method which return a list of LogItems instead")] - public static IRecordsReader GetLogReader(User user, DateTime SinceDate) - { - return SqlHelper.ExecuteReader( - "select userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where UserId = @user and DateStamp >= @dateStamp order by dateStamp desc", - SqlHelper.CreateParameter("@user", user.Id), - SqlHelper.CreateParameter("@dateStamp", SinceDate)); - } - - /// - /// Gets a reader of specific for the log for specific types and a specified user. - /// - /// The user. - /// The type of log message. - /// The since date. - /// A reader for the log. - [Obsolete("Use the Instance.GetLogItems method which return a list of LogItems instead")] - public static IRecordsReader GetLogReader(User user, LogTypes Type, DateTime SinceDate) - { - return SqlHelper.ExecuteReader( - "select userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where UserId = @user and logHeader = @logHeader and DateStamp >= @dateStamp order by dateStamp desc", - SqlHelper.CreateParameter("@logHeader", Type.ToString()), - SqlHelper.CreateParameter("@user", user.Id), - SqlHelper.CreateParameter("@dateStamp", SinceDate)); - } - - /// - /// Gets a reader of specific for the log for specific types and a specified user. - /// - /// The user. - /// The type of log message. - /// The since date. - /// Number of rows returned - /// A reader for the log. - [Obsolete("Use the Instance.GetLogItems method which return a list of LogItems instead")] - internal static IRecordsReader GetLogReader(User user, LogTypes type, DateTime sinceDate, int numberOfResults) - { - var query = "select {0} userId, NodeId, DateStamp, logHeader, logComment from umbracoLog where UserId = @user and logHeader = @logHeader and DateStamp >= @dateStamp order by dateStamp desc {1}"; - - query = ApplicationContext.Current.DatabaseContext.DatabaseProvider == DatabaseProviders.MySql - ? string.Format(query, string.Empty, "limit 0," + numberOfResults) - : string.Format(query, "top " + numberOfResults, string.Empty); - - return SqlHelper.ExecuteReader(query, - SqlHelper.CreateParameter("@logHeader", type.ToString()), - SqlHelper.CreateParameter("@user", user.Id), - SqlHelper.CreateParameter("@dateStamp", sinceDate)); - } - - #endregion - - #endregion - } - - public class LogItem - { - public int UserId { get; set; } - public int NodeId { get; set; } - public DateTime Timestamp { get; set; } - public LogTypes LogType { get; set; } - public string Comment { get; set; } - - public LogItem() - { - - } - - public LogItem(int userId, int nodeId, DateTime timestamp, LogTypes logType, string comment) - { - UserId = userId; - NodeId = nodeId; - Timestamp = timestamp; - LogType = logType; - Comment = comment; - } - - public static List ConvertIRecordsReader(IRecordsReader reader) - { - var items = new List(); - while (reader.Read()) - { - items.Add(new LogItem( - reader.GetInt("userId"), - reader.GetInt("nodeId"), - reader.GetDateTime("DateStamp"), - ConvertLogHeader(reader.GetString("logHeader")), - reader.GetString("logComment"))); - } - - return items; - - } - - private static LogTypes ConvertLogHeader(string logHeader) - { - try - { - return (LogTypes)Enum.Parse(typeof(LogTypes), logHeader, true); - } - catch - { - return LogTypes.Custom; - } - } - } - - public class AuditTrailLogItem : Attribute - { - } -} \ No newline at end of file diff --git a/src/umbraco.businesslogic/LogTypes.cs b/src/umbraco.businesslogic/LogTypes.cs deleted file mode 100644 index f8232c0df0..0000000000 --- a/src/umbraco.businesslogic/LogTypes.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System; - -namespace umbraco.BusinessLogic -{ - /// - /// The collection of available log types. - /// - public enum LogTypes - { - /// - /// Used when new nodes are added - /// - [AuditTrailLogItem] - New, - /// - /// Used when nodes are saved - /// - [AuditTrailLogItem] - Save, - /// - /// Used when nodes are opened - /// - [AuditTrailLogItem] - Open, - /// - /// Used when nodes are deleted - /// - [AuditTrailLogItem] - Delete, - /// - /// Used when nodes are published - /// - [AuditTrailLogItem] - Publish, - /// - /// Used when nodes are send to publishing - /// - [AuditTrailLogItem] - SendToPublish, - /// - /// Used when nodes are unpublished - /// - [AuditTrailLogItem] - UnPublish, - /// - /// Used when nodes are moved - /// - [AuditTrailLogItem] - Move, - /// - /// Used when nodes are copied - /// - [AuditTrailLogItem] - Copy, - /// - /// Used when nodes are assígned a domain - /// - [AuditTrailLogItem] - AssignDomain, - /// - /// Used when public access are changed for a node - /// - [AuditTrailLogItem] - PublicAccess, - /// - /// Used when nodes are sorted - /// - [AuditTrailLogItem] - Sort, - /// - /// Used when a notification are send to a user - /// - [AuditTrailLogItem] - Notify, - - /// - /// Used when a user logs into the umbraco back-end - /// - [Obsolete("Use LogHelper to write log messages")] - Login, - - /// - /// Used when a user logs out of the umbraco back-end - /// - [Obsolete("Use LogHelper to write log messages")] - Logout, - - /// - /// Used when a user login fails - /// - [Obsolete("Use LogHelper to write error log messages")] - LoginFailure, - - /// - /// General system notification - /// - [AuditTrailLogItem] - System, - - - /// - /// System debugging notification - /// - [Obsolete("Use LogHelper to write debug log messages")] - Debug, - - /// - /// System error notification - /// - [Obsolete("Use LogHelper to write error log messages")] - Error, - - /// - /// Notfound error notification - /// - [Obsolete("Use LogHelper to write log messages")] - NotFound, - - /// - /// Used when a node's content is rolled back to a previous version - /// - [AuditTrailLogItem] - RollBack, - /// - /// Used when a package is installed - /// - [AuditTrailLogItem] - PackagerInstall, - /// - /// Used when a package is uninstalled - /// - [AuditTrailLogItem] - PackagerUninstall, - - /// - /// Used when a ping is send to/from the system - /// - [Obsolete("Use LogHelper to write log messages")] - Ping, - /// - /// Used when a node is send to translation - /// - [AuditTrailLogItem] - SendToTranslate, - - /// - /// Notification from a Scheduled task. - /// - [Obsolete("Use LogHelper to write log messages")] - ScheduledTask, - - /// - /// Use this log action for custom log messages that should be shown in the audit trail - /// - [AuditTrailLogItem] - [Obsolete("Use LogHelper to write custom log messages")] - Custom - } -} \ No newline at end of file diff --git a/src/umbraco.businesslogic/umbraco.businesslogic.csproj b/src/umbraco.businesslogic/umbraco.businesslogic.csproj index 2f32fb3204..99967cb2a3 100644 --- a/src/umbraco.businesslogic/umbraco.businesslogic.csproj +++ b/src/umbraco.businesslogic/umbraco.businesslogic.csproj @@ -190,15 +190,10 @@ - Code - - - Code - Code diff --git a/src/umbraco.cms/businesslogic/translation/Translation.cs b/src/umbraco.cms/businesslogic/translation/Translation.cs deleted file mode 100644 index 13dfe060d9..0000000000 --- a/src/umbraco.cms/businesslogic/translation/Translation.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Net.Mail; -using System.Text.RegularExpressions; -using System.Web; -using Umbraco.Core.Logging; -using umbraco.BusinessLogic; -using umbraco.cms.businesslogic.language; -using umbraco.cms.businesslogic.task; -using umbraco.cms.businesslogic.web; -using Umbraco.Core; -using Umbraco.Core.IO; - -namespace umbraco.cms.businesslogic.translation -{ - [Obsolete("This will be removed in future versions, the translation utility will not work perfectly in v7.x")] - public class Translation - { - public static void MakeNew(CMSNode Node, User User, User Translator, Language Language, string Comment, - bool IncludeSubpages, bool SendEmail) - { - // Get translation taskType for obsolete task constructor - var taskType = ApplicationContext.Current.Services.TaskService.GetTaskTypeByAlias("toTranslate"); - - // Create pending task - Task t = new Task(new Umbraco.Core.Models.Task(taskType)); - t.Comment = Comment; - t.Node = Node; - t.ParentUser = User; - t.User = Translator; - t.Save(); - - // Add log entry - Log.Add(LogTypes.SendToTranslate, User, Node.Id, - "Translator: " + Translator.Name + ", Language: " + Language.FriendlyName); - - // send it - if (SendEmail) - { - string serverName = HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; - int port = HttpContext.Current.Request.Url.Port; - - if(port != 80) - serverName += ":" + port.ToString(); - - serverName += IOHelper.ResolveUrl(SystemDirectories.Umbraco); - - // Send mail - string[] subjectVars = {serverName, Node.Text}; - string[] bodyVars = { - Translator.Name, Node.Text, User.Name, - serverName, t.Id.ToString(), - Language.FriendlyName - }; - - if (User.Email != "" && User.Email.Contains("@") && Translator.Email != "" && - Translator.Email.Contains("@")) - { - // create the mail message - MailMessage mail = new MailMessage(User.Email, Translator.Email); - - // populate the message - mail.Subject = ui.Text("translation", "mailSubject", subjectVars, Translator); - mail.IsBodyHtml = false; - mail.Body = ui.Text("translation", "mailBody", bodyVars, Translator); - try - { - SmtpClient sender = new SmtpClient(); - sender.Send(mail); - } - catch (Exception ex) - { - LogHelper.Error("Error sending translation e-mail", ex); - } - } - else - { - LogHelper.Warn("Could not send translation e-mail because either user or translator lacks e-mail in settings"); - } - - } - - if (IncludeSubpages) - { - //store children array here because iterating over an Array property object is very inneficient. - var c = Node.Children; - foreach (CMSNode n in c) - { - MakeNew(n, User, Translator, Language, Comment, true, false); - } - } - } - - - } -} \ No newline at end of file diff --git a/src/umbraco.cms/umbraco.cms.csproj b/src/umbraco.cms/umbraco.cms.csproj index b01b098a90..ca3ec22b04 100644 --- a/src/umbraco.cms/umbraco.cms.csproj +++ b/src/umbraco.cms/umbraco.cms.csproj @@ -279,7 +279,6 @@ Code - Code