Exemple #1
0
        public IResult<PageInstance> GetPage(IEnumerable<string> path, IEnumerable<KeyValuePair<string, string>> parameters, ClaimsPrincipal user, bool preview)
        {
            var results = (this.contentRepository.FindContent(path) ?? Enumerable.Empty<FindContentResult>()).ToArray();

            if (!results.Any())
            {
                var notFoundTemplate = this.contentRepository.GetTemplate(new[] { "404" });
                var notFoundPage = notFoundTemplate == null ? null : this.BuildPage(notFoundTemplate, preview);
                return new NotFoundResult<PageInstance>(notFoundPage);
            }

            var result = preview ? results.TakeTemplateResult() : results.FavourRedirectResult();

            var visitor = new ContentVisitor<IResult<PageInstance>>(
                template =>
                    {
                        if (!result.Configuration.Conditions.SatisfiedBy(user))
                        {
                            return this.CreateFailedAuthResult(user, preview);
                        }

                        var contextItems = this.BuildContext(parameters, result.Configuration);
                        return new SuccessResult<PageInstance>(this.BuildPage(template, preview, contextItems, result.Configuration.CacheControl));
                    },
                redirect => new MovedPermanentlyResult<PageInstance>(redirect.Location));

            return result.Content.Accept(visitor);
        }
Exemple #2
0
 void IVisitable.Accept(ContentVisitor visitor)
 {
     visitor.Visit(this);
     visitor.Leave(this);
 }
Exemple #3
0
 public void accept(ContentVisitor visitor)
 {
     visitor.Visit(this);
 }