internal void GetEntityData <T>(LinkResolverData data, int languageId, Expression <Func <T, ResolverEntitySummary> > selector) where T : BaseEntity { ResolverEntitySummary summary = null; string systemName = null; if (data.Value is string) { data.Id = 0; systemName = (string)data.Value; } else { data.Id = (int)data.Value; } if (data.Type == LinkType.Topic) { var query = _services.DbContext.Set <Topic>() .AsNoTracking() .AsQueryable(); query = string.IsNullOrEmpty(systemName) ? query.Where(x => x.Id == data.Id) : query.Where(x => x.SystemName == systemName); summary = query.Select(x => new ResolverEntitySummary { Id = x.Id, Name = x.SystemName, Title = x.Title, ShortTitle = x.ShortTitle, Published = x.IsPublished, SubjectToAcl = x.SubjectToAcl, LimitedToStores = x.LimitedToStores }) .FirstOrDefault(); } else { summary = _services.DbContext.Set <T>() .AsNoTracking() .Where(x => x.Id == data.Id) .Select(selector) .FirstOrDefault(); } if (summary != null) { var entityName = data.Type.ToString(); data.Id = summary.Id != 0 ? summary.Id : data.Id; data.SubjectToAcl = summary.SubjectToAcl; data.LimitedToStores = summary.LimitedToStores; data.PictureId = summary.PictureId; data.Status = summary.Deleted ? LinkStatus.NotFound : summary.Published ? LinkStatus.Ok : LinkStatus.Hidden; if (data.Type == LinkType.Topic) { data.Label = GetLocalized(data.Id, entityName, "ShortTitle", languageId, null) ?? GetLocalized(data.Id, entityName, "Title", languageId, null) ?? summary.ShortTitle.NullEmpty() ?? summary.Title.NullEmpty() ?? summary.Name; } else { data.Label = GetLocalized(data.Id, entityName, "Name", languageId, summary.Name); } data.Slug = _urlRecordService.GetActiveSlug(data.Id, entityName, languageId).NullEmpty() ?? _urlRecordService.GetActiveSlug(data.Id, entityName, 0); if (!string.IsNullOrEmpty(data.Slug)) { data.Link = _urlHelper.RouteUrl(entityName, new { SeName = data.Slug }); } } else { data.Label = systemName; data.Status = LinkStatus.NotFound; } }
internal void GetEntityData <T>( LinkResolverData data, int storeId, int languageId, Expression <Func <T, ResolverEntitySummary> > selector) where T : BaseEntity { ResolverEntitySummary summary = null; string systemName = null; if (data.Value is string) { data.Id = 0; systemName = (string)data.Value; } else { data.Id = (int)data.Value; } if (data.Type == LinkType.Topic) { Topic topic = null; if (string.IsNullOrEmpty(systemName)) { topic = _services.DbContext.Set <Topic>() .AsNoTracking() .FirstOrDefault(x => x.Id == data.Id); } else { topic = _topicService.GetTopicBySystemName(systemName, storeId, false); data.CheckLimitedToStores = false; } if (topic != null) { summary = new ResolverEntitySummary { Id = topic.Id, Name = topic.SystemName, Title = topic.Title, ShortTitle = topic.ShortTitle, Published = topic.IsPublished, SubjectToAcl = topic.SubjectToAcl, LimitedToStores = topic.LimitedToStores }; } } else { summary = _services.DbContext.Set <T>() .AsNoTracking() .Where(x => x.Id == data.Id) .Select(selector) .FirstOrDefault(); } if (summary != null) { var entityName = data.Type.ToString(); data.Id = summary.Id != 0 ? summary.Id : data.Id; data.SubjectToAcl = summary.SubjectToAcl; data.LimitedToStores = summary.LimitedToStores; data.PictureId = summary.PictureId; data.Status = summary.Deleted ? LinkStatus.NotFound : summary.Published ? LinkStatus.Ok : LinkStatus.Hidden; switch (data.Type) { case LinkType.Topic: data.Label = GetLocalized(data.Id, entityName, nameof(Topic.ShortTitle), languageId, null) ?? GetLocalized(data.Id, entityName, "Title", languageId, null) ?? summary.ShortTitle.NullEmpty() ?? summary.Title.NullEmpty() ?? summary.Name; break; case LinkType.BlogPost: case LinkType.NewsItem: data.Label = GetLocalized(data.Id, entityName, "Title", languageId, summary.Name); break; default: data.Label = GetLocalized(data.Id, entityName, "Name", languageId, summary.Name); break; } data.Slug = _urlRecordService.GetActiveSlug(data.Id, entityName, languageId).NullEmpty() ?? _urlRecordService.GetActiveSlug(data.Id, entityName, 0); if (!string.IsNullOrEmpty(data.Slug)) { data.Link = _urlHelper.RouteUrl(entityName, new { SeName = data.Slug }); } } else { data.Label = systemName; data.Status = LinkStatus.NotFound; } }