/// <summary> /// Gets the audit log data for the specified filter parameters /// </summary> /// <param name="logType">The type of the log entry (eg. 'Save')</param> /// <param name="userName">Name of the user responsible for the entry</param> /// <param name="dateFrom">The date to search from</param> /// <param name="searchTerm">An optional search term</param> /// <param name="dateTo">The date to search up to (inclusive)</param> /// <param name="itemsPerPage">How many items per page to retrieve (default = 50)</param> /// <param name="nodeId">The optional nodeId to search for</param> /// <param name="pageNumber">The page number</param> /// <param name="sortColumn">The column name to sort by (default = date)</param> /// <param name="sortOrder">The sort order - either ascending or descending (default = ascending)</param> /// <returns>A paged list of log data</returns> /// <remarks>/Umbraco/Backoffice/AuditLogViewer/ContentLog/GetLogData</remarks> public PagedLogEntryResult <LogEntry> GetLogData(string logType = null, string userName = null, DateTime?dateFrom = null, DateTime?dateTo = null, int?nodeId = null, int itemsPerPage = 50, int pageNumber = 1, string sortColumn = "L.Datestamp", string sortOrder = "asc", string searchTerm = null) { var request = new ContentLogSearchRequest() { DateFrom = dateFrom, DateTo = dateTo, ItemsPerPage = itemsPerPage, LogType = logType, NodeId = nodeId, PageNumber = pageNumber, SearchTerm = searchTerm, SortColumn = sortColumn, SortOrder = sortOrder, UserName = userName }; var paged = this._logService.SearchLog(request); var result = new PagedLogEntryResult <LogEntry>() { CurrentPage = paged.CurrentPage, ItemsPerPage = paged.ItemsPerPage, LogEntries = paged.Items, TotalItems = paged.TotalItems, TotalPages = paged.TotalPages }; return(result); }
/// <summary> /// Searches the Umbraco Log table /// </summary> /// <param name="request">The search request criteria</param> /// <returns>A page of log results</returns> public Page <LogEntry> SearchLog(ContentLogSearchRequest request) { using (var scope = this.scopeProvider.CreateScope(autoComplete: true)) { if (!IsValidOrderByParameter(request.SortColumn)) { throw new ArgumentOutOfRangeException("The order by value '" + request.SortColumn + "' is not a valid sort parameter."); } if (!IsValidOrderByDirectionParameter(request.SortOrder)) { throw new ArgumentOutOfRangeException("The order by value '" + request.SortOrder + "' is not a valid sort order."); } const string sql = @"SELECT L.Id, N.[text] as Text, CASE WHEN U.userName IS NULL THEN 'SYSTEM' ELSE U.userName END as Username, L.Datestamp as DateStamp, L.logHeader, L.logComment, L.nodeId, CT.Alias as Alias, N.nodeObjectType, CT.icon as Icon FROM umbracoLog L LEFT JOIN umbracoUser U ON L.userId = U.id LEFT JOIN umbracoNode N ON N.id = L.nodeId LEFT JOIN umbracoContent C ON C.nodeId = N.id LEFT JOIN cmsContentType CT ON C.contentTypeId = CT.nodeId WHERE 1 = 1"; var query = scope.SqlContext.Sql(sql); if (!string.IsNullOrEmpty(request.LogType)) { query = query.Append(" AND L.LogHeader = @0", request.LogType); } if (!string.IsNullOrEmpty(request.UserName)) { query = query.Append(" AND (CASE When U.userName IS NULL Then 'SYSTEM' ELSE U.userName END) = @0", request.UserName); } if (request.DateFrom.HasValue) { query = query.Append(" AND L.Datestamp >= @0", request.DateFrom.Value); } if (request.DateTo.HasValue) { query = query.Append(" AND L.Datestamp <= @0", request.DateTo.Value.AddDays(1)); } if (!string.IsNullOrEmpty(request.SearchTerm)) { query = query.Append(" AND (L.logComment LIKE @0 OR N.[text] LIKE @0)", "%" + request.SearchTerm + "%"); } if (request.NodeId.HasValue) { query = query.Append(" AND L.NodeId = @0", request.NodeId.Value); } if (request.SortColumn.InvariantEquals("id")) { request.SortColumn = "L.id"; } if (request.SortOrder == "desc") { query.OrderByDescending(request.SortColumn); } else { query.OrderBy(request.SortColumn); } var page = scope.Database.Page <LogEntry>(request.PageNumber, request.ItemsPerPage, query); foreach (var node in page.Items.Where(n => n.TypeId.HasValue)) { node.TypeDesc = GetNodeObjectTypeName(node.TypeId.Value.ToString().ToUpper()); } return(page); } }