public DashboardViewModel GetViewModel() { var umbracoRepository = new UmbracoRepository(); var dashboardViewModel = new DashboardViewModel(); var unpublishedContent = umbracoRepository.GetUnpublishedContent().ToArray(); var logItems = umbracoRepository.GetLatestLogItems().ToArray(); var nodesInRecyleBin = umbracoRepository.GetRecycleBinNodes().Select(x => x.Id).ToArray(); foreach (var logItem in logItems.Take(10)) { var user = GetUser(logItem.UserId); var contentNode = GetContent(logItem.NodeId); if (contentNode == null || !CurrentUserHasPermissions(contentNode)) continue; var activityViewModel = new ActivityViewModel { UserDisplayName = user.Name, UserAvatarUrl = UserAvatarProvider.GetAvatarUrl(user), NodeId = logItem.NodeId, NodeName = contentNode.Name, Message = logItem.Comment, LogItemType = logItem.LogType.ToString(), Timestamp = logItem.Timestamp }; var unpublishedVersionOfLogItem = unpublishedContent.FirstOrDefault(x => x.NodeId == logItem.NodeId && x.ReleaseDate != null); if (logItem.LogType == LogTypes.Save && unpublishedVersionOfLogItem != null && unpublishedVersionOfLogItem.UpdateDate != null) { if(logItem.Timestamp.IsSameMinuteAs(unpublishedVersionOfLogItem.UpdateDate.Value)) activityViewModel.LogItemType = "SavedAndScheduled"; activityViewModel.ScheduledPublishDate = unpublishedVersionOfLogItem.ReleaseDate; } if (logItem.LogType == LogTypes.UnPublish && nodesInRecyleBin.Contains(logItem.NodeId)) { activityViewModel.LogItemType = "UnPublishToRecycleBin"; } dashboardViewModel.Activities.Add(activityViewModel); } foreach (var item in unpublishedContent.Where(x => x.ReleaseDate == null)) { var user = GetUser(item.DocumentUser); var contentNode = GetContent(item.NodeId); // Checking for null, making sure that user has permissions and checking for this content node in the recycle bin. If its in the recycle bin // we should not return this as an unpublished node. if (contentNode == null || !CurrentUserHasPermissions(contentNode) || nodesInRecyleBin.Contains(contentNode.Id)) continue; var activityViewModel = new ActivityViewModel { UserDisplayName = user.Name, UserAvatarUrl = UserAvatarProvider.GetAvatarUrl(user), NodeId = item.NodeId, NodeName = contentNode.Name, Timestamp = item.UpdateDate != null ? item.UpdateDate.Value : (DateTime?) null }; dashboardViewModel.UnpublishedContent.Add(activityViewModel); } foreach (var item in logItems.Where(x => x.UserId == Security.CurrentUser.Id).Take(10)) { var contentNode = GetContent(item.NodeId); if (contentNode == null || !CurrentUserHasPermissions(contentNode)) continue; var activityViewModel = new ActivityViewModel { NodeId = item.NodeId, NodeName = contentNode.Name, LogItemType = item.LogType.ToString(), Timestamp = item.Timestamp }; dashboardViewModel.UserRecentActivity.Add(activityViewModel); } dashboardViewModel.CountPublishedNodes = umbracoRepository.CountPublishedNodes(); dashboardViewModel.CountTotalWebsiteMembers = umbracoRepository.CountMembers(); dashboardViewModel.CountNewMembersLastWeek = umbracoRepository.CountNewMember(); dashboardViewModel.CountContentInRecycleBin = nodesInRecyleBin.Count(); return dashboardViewModel; }