Exemple #1
0
        public async Task <IEnumerable <ISiteMapResource> > GetResourcesAsync()
        {
            var userContext = await _userContextService.GetCurrentContextAsync();

            var resources = new List <SiteMapResource>();

            if (!_permissionValidationService.HasPermission <PageReadPermission>(userContext))
            {
                return(resources);
            }

            var pageRoutes = await _queryExecutor.ExecuteAsync(new GetAllPageRoutesQuery());

            var allRules = await _queryExecutor.ExecuteAsync(new GetAllCustomEntityRoutingRulesQuery());

            foreach (var pageRoute in pageRoutes.Where(p => p.IsPublished() && p.ShowInSiteMap))
            {
                if (pageRoute.PageType == PageType.CustomEntityDetails)
                {
                    if (_permissionValidationService.HasCustomEntityPermission <CustomEntityReadPermission>(pageRoute.CustomEntityDefinitionCode, userContext))
                    {
                        var routesQuery           = new GetCustomEntityRoutesByDefinitionCodeQuery(pageRoute.CustomEntityDefinitionCode);
                        var allCustomEntityRoutes = await _queryExecutor.ExecuteAsync(routesQuery);

                        var pageLocaleId = pageRoute.Locale != null ? pageRoute.Locale.LocaleId : (int?)null;

                        foreach (var customEntityRoute in allCustomEntityRoutes
                                 .Where(r => r.Locale == null ? !pageLocaleId.HasValue : r.Locale.LocaleId == pageLocaleId))
                        {
                            var resource = MapCustomEntityResource(pageRoute, customEntityRoute, allRules);
                            if (resource != null)
                            {
                                resources.Add(resource);
                            }
                        }
                    }
                }
                else
                {
                    resources.Add(MapPageResource(pageRoute));
                }
            }

            return(resources);
        }
        public async Task <ICollection <CustomEntityRoute> > ExecuteAsync(GetCustomEntityRoutesByDefinitionCodeQuery query, IExecutionContext executionContext)
        {
            return(await _customEntityCache.GetOrAddAsync(query.CustomEntityDefinitionCode, async() =>
            {
                var dbRoutes = await _dbContext
                               .CustomEntities
                               .Include(c => c.CustomEntityVersions)
                               .Include(c => c.Locale)
                               .AsNoTracking()
                               .Where(e => e.CustomEntityDefinitionCode == query.CustomEntityDefinitionCode && (e.LocaleId == null || e.Locale.IsActive))
                               .ToListAsync();

                var allLocales = await _queryExecutor.ExecuteAsync(new GetAllActiveLocalesQuery(), executionContext);
                var localesLookup = allLocales.ToDictionary(l => l.LocaleId);

                return await MapRoutesAsync(query, dbRoutes, localesLookup);;
            }));
        }
        private async Task <ICollection <CustomEntityRoute> > MapRoutesAsync(
            GetCustomEntityRoutesByDefinitionCodeQuery query,
            List <CustomEntity> dbEntities,
            Dictionary <int, ActiveLocale> allLocales
            )
        {
            var definition = _customEntityDefinitionRepository.GetRequiredByCode(query.CustomEntityDefinitionCode);

            var routes = dbEntities
                         .Select(r => MapRoute(r, allLocales))
                         .ToList();

            // Map additional parameters

            await(Task) _mapAdditionalRouteDataAsyncMethod
            .MakeGenericMethod(definition.GetType(), definition.GetDataModelType())
            .Invoke(this, new object[] { definition, routes, dbEntities });

            return(routes);
        }
        public IDomainRepositoryQueryContext <ICollection <CustomEntityRoute> > AsRoutes()
        {
            var query = new GetCustomEntityRoutesByDefinitionCodeQuery(_customEntityDefinitionCode);

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