Exemplo n.º 1
0
        public async Task <ICollection <PageRoutingInfo> > ExecuteAsync(GetPageRoutingInfoByCustomEntityIdQuery query, IExecutionContext executionContext)
        {
            var result = await _queryExecutor.ExecuteAsync(new GetPageRoutingInfoByCustomEntityIdRangeQuery(new int[] { query.CustomEntityId }), executionContext);

            if (!result.ContainsKey(query.CustomEntityId))
            {
                return(Array.Empty <PageRoutingInfo>());
            }

            return(result[query.CustomEntityId]
                   .OrderBy(e => e.PageRoute.UrlPath.Length)
                   .ToList());
        }
Exemplo n.º 2
0
        public async Task <CustomEntityRenderDetails> ExecuteAsync(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext)
        {
            var dbResult = await QueryCustomEntityAsync(query, executionContext);

            if (dbResult == null)
            {
                return(null);
            }

            var entity = MapCustomEntity(dbResult, executionContext);

            if (dbResult.CustomEntity.LocaleId.HasValue)
            {
                var getLocaleQuery = new GetActiveLocaleByIdQuery(dbResult.CustomEntity.LocaleId.Value);
                entity.Locale = await _queryExecutor.ExecuteAsync(getLocaleQuery, executionContext);
            }

            var pageRoutesQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId);
            var pageRoutes      = await _queryExecutor.ExecuteAsync(pageRoutesQuery, executionContext);

            entity.PageUrls = MapPageRoutings(pageRoutes, dbResult);

            var selectedRoute = pageRoutes.FirstOrDefault(r => r.PageRoute.PageId == query.PageId);

            if (selectedRoute != null)
            {
                var pageVersion = selectedRoute.PageRoute.Versions.GetVersionRouting(PublishStatusQuery.PreferPublished);
                if (pageVersion == null)
                {
                    throw new Exception($"Error mapping routes: {nameof(pageVersion)} cannot be null. A page route should always have at least one version.");
                }

                entity.Regions = await GetRegionsAsync(pageVersion.PageTemplateId);

                var dbPageBlocks = await GetPageBlocksAsync(entity.CustomEntityVersionId, selectedRoute.PageRoute.PageId);

                var allBlockTypes = await _queryExecutor.ExecuteAsync(new GetAllPageBlockTypeSummariesQuery(), executionContext);

                await _entityVersionPageBlockMapper.MapRegionsAsync(dbPageBlocks, entity.Regions, allBlockTypes, query.PublishStatus, executionContext);
            }
            else
            {
                entity.Regions = Array.Empty <CustomEntityPageRegionRenderDetails>();
            }

            return(entity);
        }
Exemplo n.º 3
0
        private async Task MapPages(CustomEntityVersion dbVersion, CustomEntityDetails entity, IExecutionContext executionContext)
        {
            var pages = new List <CustomEntityPage>();

            entity.LatestVersion.Pages = pages;

            var routingsQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbVersion.CustomEntityId);
            var routings      = (await _queryExecutor.ExecuteAsync(routingsQuery, executionContext))
                                .Where(r => r.CustomEntityRouteRule != null);

            if (!routings.Any())
            {
                return;
            }

            // Map templates

            var pageTemplateIds = routings
                                  .Select(r => new
            {
                PageId       = r.PageRoute.PageId,
                VersionRoute = r.PageRoute.Versions.GetVersionRouting(PublishStatusQuery.Latest)
            })
                                  .Where(r => r.VersionRoute != null && r.VersionRoute.HasCustomEntityRegions)
                                  .ToDictionary(k => k.PageId, v => v.VersionRoute.PageTemplateId);

            var allTemplateIds = pageTemplateIds
                                 .Select(r => r.Value)
                                 .ToArray();

            var allTemplateRegions = await _dbContext
                                     .PageTemplateRegions
                                     .AsNoTracking()
                                     .Where(s => allTemplateIds.Contains(s.PageTemplateId) && s.IsCustomEntityRegion)
                                     .ToListAsync();

            var allPageBlockTypes = await _queryExecutor.ExecuteAsync(new GetAllPageBlockTypeSummariesQuery(), executionContext);

            foreach (var routing in routings)
            {
                var page = new CustomEntityPage();
                pages.Add(page);
                page.FullUrlPath = routing.CustomEntityRouteRule.MakeUrl(routing.PageRoute, routing.CustomEntityRoute);
                page.PageRoute   = routing.PageRoute;

                // Map Regions

                var templateId = pageTemplateIds.GetOrDefault(routing.PageRoute.PageId);
                page.Regions = allTemplateRegions
                               .Where(s => s.PageTemplateId == templateId)
                               .OrderBy(s => s.UpdateDate)
                               .Select(s => new CustomEntityPageRegionDetails()
                {
                    Name = s.Name,
                    PageTemplateRegionId = s.PageTemplateRegionId
                })
                               .ToList();

                // Map Blocks

                foreach (var region in page.Regions)
                {
                    region.Blocks = dbVersion
                                    .CustomEntityVersionPageBlocks
                                    .AsQueryable()
                                    .FilterActive()
                                    .Where(m => m.PageId == routing.PageRoute.PageId && m.PageTemplateRegionId == region.PageTemplateRegionId)
                                    .OrderBy(m => m.Ordering)
                                    .Select(m => MapBlock(m, allPageBlockTypes))
                                    .ToArray();
                }
            }

            // Map default full path

            entity.FullUrlPath = pages
                                 .OrderByDescending(p => p.PageRoute.Locale == null)
                                 .Select(p => p.FullUrlPath)
                                 .First();
        }
Exemplo n.º 4
0
 public IEnumerable <IPermissionApplication> GetPermissions(GetPageRoutingInfoByCustomEntityIdQuery query)
 {
     yield return(new PageReadPermission());
 }
        public IDomainRepositoryQueryContext <ICollection <PageRoutingInfo> > AsRoutingInfo()
        {
            var query = new GetPageRoutingInfoByCustomEntityIdQuery(_customEntityId);

            return(DomainRepositoryQueryContextFactory.Create(query, ExtendableContentRepository));
        }