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")%>
-

-
-
- <%# 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