Пример #1
0
        public async Task<CustomEntityRenderDetails> ExecuteAsync(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext)
        {
            var dbResult = await QueryCustomEntityAsync(query, executionContext);
            if (dbResult == null) return null;

            var entity = await MapCustomEntityAsync(dbResult);

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

            entity.Regions = await QueryRegions(query).ToListAsync();
            var dbPageBlocks = await QueryPageBlocks(entity).ToListAsync();

            var allBlockTypes = await _queryExecutor.ExecuteAsync(new GetAllPageBlockTypeSummariesQuery(), executionContext);
            await _entityVersionPageBlockMapper.MapRegionsAsync(dbPageBlocks, entity.Regions, allBlockTypes, query.PublishStatus);

            var routingQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId);
            var routing = await _queryExecutor.ExecuteAsync(routingQuery, executionContext);
            entity.PageUrls = MapPageRoutings(routing, dbResult);

            return entity;
        }
Пример #2
0
        public async Task <IEnumerable <PageRoutingInfo> > ExecuteAsync(GetPageRoutingInfoByCustomEntityIdQuery query, IExecutionContext executionContext)
        {
            var result = await _queryExecutor.ExecuteAsync(new GetPageRoutingInfoByCustomEntityIdRangeQuery(new int[] { query.CustomEntityId }), executionContext);

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

            return(result[query.CustomEntityId].OrderBy(e => e.PageRoute.UrlPath.Length));
        }
Пример #3
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);
            }
            else
            {
                entity.Regions = Array.Empty <CustomEntityPageRegionRenderDetails>();
            }

            return(entity);
        }
        public CustomEntityRenderDetails Execute(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext)
        {
            var dbResult = QueryCustomEntity(query).FirstOrDefault();
            var entity   = MapCustomEntity(dbResult);

            entity.Sections = QuerySections(query).ToList();
            var dbModules = QueryModules(entity).ToList();

            var allModuleTypes = _queryExecutor.GetAll <PageModuleTypeSummary>(executionContext);

            _entityVersionPageModuleMapper.MapSections(dbModules, entity.Sections, allModuleTypes, query.WorkFlowStatus);

            var routingQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId);
            var routing      = _queryExecutor.Execute(routingQuery, executionContext);

            entity.DetailsPageUrls = MapPageRoutings(routing, dbResult);

            return(entity);
        }
Пример #5
0
        public async Task <CustomEntityRenderDetails> ExecuteAsync(GetCustomEntityRenderDetailsByIdQuery query, IExecutionContext executionContext)
        {
            var dbQuery = _dbContext
                          .CustomEntityVersions
                          .AsNoTracking()
                          .FilterByCustomEntityId(query.CustomEntityId)
                          .FilterByWorkFlowStatusQuery(query.WorkFlowStatus, query.CustomEntityVersionId)
                          .Include(e => e.CustomEntity)
                          .Include(e => e.CustomEntity.Locale);

            var dbResult = await dbQuery.FirstOrDefaultAsync();

            _permissionValidationService.EnforceCustomEntityPermission <CustomEntityReadPermission>(dbResult.CustomEntity.CustomEntityDefinitionCode);

            var entity = Mapper.Map <CustomEntityRenderDetails>(dbResult);

            entity.Model = _customEntityDataModelMapper.Map(dbResult.CustomEntity.CustomEntityDefinitionCode, dbResult.SerializedData);

            entity.Sections = await _dbContext
                              .PageTemplateSections
                              .AsNoTracking()
                              .Where(s => s.PageTemplateId == query.PageTemplateId)
                              .ProjectTo <CustomEntityPageSectionRenderDetails>()
                              .ToListAsync();

            var dbModules = await _dbContext
                            .CustomEntityVersionPageModules
                            .AsNoTracking()
                            .Where(m => m.CustomEntityVersionId == entity.CustomEntityVersionId)
                            .ToListAsync();

            await _entityVersionPageModuleMapper.MapSectionsAsync <CustomEntityVersionPageModuleRenderDetails>(dbModules, entity.Sections, query.WorkFlowStatus, executionContext);

            var routingQuery = new GetPageRoutingInfoByCustomEntityIdQuery(dbResult.CustomEntityId);
            var routing      = await _queryExecutor.ExecuteAsync(routingQuery, executionContext);

            entity.DetailsPageUrls = MapPageRoutings(routing, dbResult);

            return(entity);
        }
Пример #6
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.FullPath  = 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.PageTemplateRegionId == region.PageTemplateRegionId)
                                    .OrderBy(m => m.Ordering)
                                    .Select(m => MapBlock(m, allPageBlockTypes))
                                    .ToArray();
                }
            }

            // Map default full path

            entity.FullPath = pages
                              .OrderByDescending(p => p.PageRoute.Locale == null)
                              .Select(p => p.FullPath)
                              .First();
        }
Пример #7
0
 public IEnumerable <IPermissionApplication> GetPermissions(GetPageRoutingInfoByCustomEntityIdQuery query)
 {
     yield return(new PageReadPermission());
 }
 public Task<ICollection<PageRoutingInfo>> AsRoutingInfoAsync()
 {
     var query = new GetPageRoutingInfoByCustomEntityIdQuery(_customEntityId);
     return ExtendableContentRepository.ExecuteQueryAsync(query);
 }
Пример #9
0
        public IContentRepositoryQueryContext <ICollection <PageRoutingInfo> > AsRoutingInfo()
        {
            var query = new GetPageRoutingInfoByCustomEntityIdQuery(_customEntityId);

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