Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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;
            }
        }