Ejemplo n.º 1
0
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            if (ExamineManager.Instance.SearchProviderCollection["RightsOfWayDepositsSearcher"] == null)
            {
                throw new ConfigurationErrorsException("The RightsOfWayDepositsSearcher is not configured in Examine config");
            }

            var viewModel = new RightsOfWayDepositsViewModelFromExamine(model.Content.Parent.Id, new Uri(model.Content.Parent.UrlAbsolute()), ExamineManager.Instance.SearchProviderCollection["RightsOfWayDepositsSearcher"], Request.QueryString["q"], new ISearchFilter[] { new SearchTermSanitiser() }, Umbraco).BuildModel();

            var rss = new RssViewModel <RightsOfWayDepositViewModel>();

            foreach (var deposit in viewModel.Deposits)
            {
                rss.Items.Add(deposit);
            }

            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(null);
            await modelBuilder.PopulateBaseViewModel(rss, model.Content, null,
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            if (!String.IsNullOrEmpty(Request.QueryString["q"]))
            {
                rss.Metadata.Title += $" matching '{Request.QueryString["q"]}'";
            }

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new[] { expiryDate });

            return(CurrentTemplate(rss));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var mediaUrlTransformer = new RemoveMediaDomainUrlTransformer();
            var viewModel           = new JobsHomeViewModelFromUmbraco(model.Content,
                                                                       new RelatedLinksService(mediaUrlTransformer, new RemoveAzureDomainUrlTransformer())).BuildModel();

            // Add common properties to the model
            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader())));
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            modelBuilder.PopulateBaseViewModelWithInheritedContent(viewModel,
                                                                   new UmbracoLatestService(model.Content),
                                                                   new UmbracoSocialMediaService(model.Content),
                                                                   null, null, null);

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") });

            return(CurrentTemplate(viewModel));
        }
        public async new Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var modelBuilder           = new JobsSearchViewModelFromUmbraco(model.Content, new JobsSearchViewModel());
            var viewModel              = modelBuilder.BuildModel();
            var lookupValuesDataSource = new JobsLookupValuesFromApi(new Uri(ConfigurationManager.AppSettings["JobsApiBaseUrl"]), viewModel.JobsSet, new MemoryJobCacheStrategy(MemoryCache.Default, Request.QueryString["ForceCacheRefresh"] == "1"));
            await modelBuilder.AddLookupValuesToModel(lookupValuesDataSource, viewModel);

            var expiryDate       = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var baseModelBuilder = new BaseViewModelBuilder(new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader())));
            await baseModelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                         expiryDate.ExpiryDate,
                                                         UmbracoContext.Current.InPreviewMode);

            baseModelBuilder.PopulateBaseViewModelWithInheritedContent(viewModel,
                                                                       new UmbracoLatestService(model.Content),
                                                                       new UmbracoSocialMediaService(model.Content),
                                                                       null, null, null);
            viewModel.Metadata.Description = String.Empty;

            // Jobs close at midnight, so don't cache beyond then
            var untilMidnightTonight = DateTime.Today.ToUkDateTime().AddDays(1) - DateTime.Now.ToUkDateTime();

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") }, (int)untilMidnightTonight.TotalSeconds);

            return(CurrentTemplate(viewModel));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            var expiryDate          = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var mediaUrlTransformer = new RemoveMediaDomainUrlTransformer();
            var viewModel           = await MapUmbracoContentToViewModel(model.Content, expiryDate.ExpiryDate,
                                                                         new UmbracoLatestService(model.Content),
                                                                         new UmbracoSocialMediaService(model.Content),
                                                                         new UmbracoEastSussex1SpaceService(model.Content),
                                                                         new UmbracoWebChatSettingsService(model.Content, new UrlListReader()),
                                                                         new RelatedLinksService(mediaUrlTransformer, new ElibraryUrlTransformer(), new RemoveAzureDomainUrlTransformer()),
                                                                         new ContentExperimentSettingsService(),
                                                                         new UmbracoEscisService(model.Content),
                                                                         new RatingSettingsFromUmbraco(model.Content),
                                                                         mediaUrlTransformer,
                                                                         new SkinFromUmbraco());

            SetupHttpCaching(model, viewModel, expiryDate);

            return(CurrentTemplate(viewModel));
        }
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public async new Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel = new JobsRssViewModelFromUmbraco(model.Content).BuildModel();

            // Add common properties to the model
            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(null);
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, null,
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            var jobsProvider = new JobsDataFromApi(new Uri(ConfigurationManager.AppSettings["JobsApiBaseUrl"]), viewModel.JobsSet, viewModel.JobAdvertPage.Url, new HttpClientProvider(), null);
            var jobs         = await jobsProvider.ReadProblemJobs();

            foreach (var job in jobs)
            {
                viewModel.Items.Add(job);
            }

            // Jobs close at midnight, so don't cache beyond then
            var untilMidnightTonight = DateTime.Today.ToUkDateTime().AddDays(1) - DateTime.Now.ToUkDateTime();

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new[] { expiryDate }, (int)untilMidnightTonight.TotalSeconds);

            return(CurrentTemplate(viewModel));
        }
        public void AlreadyClosedExceptionReturnsNull()
        {
            var searcher = new Mock <ISearcher>();

            searcher.Setup(x => x.CreateSearchCriteria()).Throws(new AlreadyClosedException("this IndexReader is closed"));
            var cache           = new Mock <ICacheStrategy>();
            var dateFromExamine = new ExpiryDateFromExamine(1, searcher.Object, cache.Object);

            var date = dateFromExamine.ExpiryDate;

            Assert.IsNull(date);
        }
        public void CachedValueIsReturned()
        {
            var searcher     = new Mock <ISearcher>();
            var expectedDate = new DateTime(2019, 1, 30);
            var cache        = new Mock <ICacheStrategy>();

            cache.Setup(x => x.ReadFromCache(It.IsAny <string>())).Returns(expectedDate);
            var dateFromExamine = new ExpiryDateFromExamine(1, searcher.Object, cache.Object);

            var date = dateFromExamine.ExpiryDate;

            Assert.AreEqual(expectedDate, date);
        }
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">model</exception>
        public override ActionResult Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel = MapUmbracoContentToViewModel(model.Content);

            var expiryDate = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") });

            return(CurrentTemplate(viewModel));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">model</exception>
        public async new Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel  = new HomePageViewModelFromUmbraco(model.Content, new RelatedLinksService(new RemoveMediaDomainUrlTransformer(), new ElibraryUrlTransformer(), new RemoveAzureDomainUrlTransformer())).BuildModel();
            var expiryDate = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));

            var modelBuilder = new BaseViewModelBuilder(new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader())));
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            modelBuilder.PopulateBaseViewModelWithInheritedContent(viewModel, null, null, null, null, new RatingSettingsFromUmbraco(model.Content));

            try
            {
                var forceCacheRefresh = Request.QueryString["ForceCacheRefresh"] == "1";

                var jobsData      = new JobsLookupValuesFromApi(new Uri(ConfigurationManager.AppSettings["JobsApiBaseUrl"]), JobsSet.PublicJobs, new MemoryJobCacheStrategy(MemoryCache.Default, forceCacheRefresh));
                var locationsTask = jobsData.ReadLocations();
                var jobTypesTask  = jobsData.ReadJobTypes();

                var wasteTypesDataSource = new UmbracoWasteTypesDataSource(new Uri(Request.Url, ConfigurationManager.AppSettings["WasteTypesDataUrl"]), new ConfigurationProxyProvider(), forceCacheRefresh ? null : new ApplicationCacheStrategy <List <string> >(TimeSpan.FromDays(1)));
                var wasteTypesTask       = wasteTypesDataSource.LoadWasteTypes();

                await Task.WhenAll(locationsTask, jobTypesTask, wasteTypesTask);

                viewModel.JobLocations = locationsTask.Result;
                viewModel.JobTypes     = jobTypesTask.Result;
                viewModel.RecyclingSiteSearch.WasteTypes = wasteTypesTask.Result;
            }
            catch (Exception ex)
            {
                // Report an error fetching jobs or waste site data, but don't cause the page to fail to load
                ex.ToExceptionless().Submit();
            }

            // Jobs close at midnight, so don't cache beyond then
            var untilMidnightTonight = DateTime.Today.ToUkDateTime().AddDays(1) - DateTime.Now.ToUkDateTime();

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") }, (int)untilMidnightTonight.TotalSeconds);

            return(CurrentTemplate(viewModel));
        }
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel = new RightsOfWayDepositsViewModelFromExamine(model.Content.Parent.Id, new Uri(model.Content.Parent.UrlAbsolute()), Request.QueryString["q"], new ISearchFilter[] { new SearchTermSanitiser() }, Umbraco).BuildModel();

            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(null);
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, null,
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new[] { expiryDate });

            return(CurrentTemplate(viewModel));
        }
Ejemplo n.º 11
0
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }

            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var landingModel = await MapUmbracoContentToViewModel(Request, model.Content, expiryDate.ExpiryDate,
                                                                  new UmbracoLatestService(model.Content),
                                                                  new UmbracoSocialMediaService(model.Content),
                                                                  new UmbracoEastSussex1SpaceService(model.Content),
                                                                  new UmbracoWebChatSettingsService(model.Content, new UrlListReader()),
                                                                  new ContentExperimentSettingsService(),
                                                                  new UmbracoEscisService(model.Content),
                                                                  new RatingSettingsFromUmbraco(model.Content),
                                                                  new SkinFromUmbraco());

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") });

            return(CurrentTemplate(landingModel));
        }
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public async new Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel = new JobsRssViewModelFromUmbraco(model.Content).BuildModel();

            // Add common properties to the model
            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(null);
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, null,
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            viewModel.Query = new JobSearchQueryConverter(ConfigurationManager.AppSettings["TranslateObsoleteJobTypes"]?.ToUpperInvariant() == "TRUE").ToQuery(Request.QueryString);
            viewModel.Query.ClosingDateFrom = DateTime.Today;
            viewModel.Query.JobsSet         = viewModel.JobsSet;

            var jobsProvider = new JobsDataFromApi(new Uri(ConfigurationManager.AppSettings["JobsApiBaseUrl"]), viewModel.JobsSet, viewModel.JobAdvertPage.Url, new HttpClientProvider(), new MemoryJobCacheStrategy(MemoryCache.Default, Request.QueryString["ForceCacheRefresh"] == "1"));
            var jobs         = await jobsProvider.ReadJobs(viewModel.Query);

            foreach (var job in jobs.Jobs)
            {
                viewModel.Items.Add(job);
            }

            // Jobs close at midnight, so don't cache beyond then.
            // But we reindex every 2 hours, so expire then if it's sooner.
            var untilMidnightTonight = DateTime.Today.ToUkDateTime().AddDays(1) - DateTime.Now.ToUkDateTime();
            var untilNextReindex     = TimeUntilNextReindex();
            var cacheDuration        = untilMidnightTonight > untilNextReindex ? untilNextReindex : untilMidnightTonight;

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new[] { expiryDate }, (int)cacheDuration.TotalSeconds);

            return(CurrentTemplate(viewModel));
        }
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel = new RightsOfWayModificationViewModelFromUmbraco(model.Content).BuildModel();

            var where = "in " + viewModel.Parishes.Humanize() + " parish(es)";
            if (viewModel.Addresses.Any())
            {
                where = "at " + viewModel.Addresses[0].BS7666Address.ToString();
                if (viewModel.Addresses.Count > 1)
                {
                    where += " and other addresses";
                }
            }
            viewModel.Metadata.Title       = "Rights of way definitive map modification application: " + viewModel.Reference;
            viewModel.Metadata.Description = "A application to modify the definitive map of rights of way over land " + where;

            // Add common properties to the model
            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader())));
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            modelBuilder.PopulateBaseViewModelWithInheritedContent(viewModel,
                                                                   new UmbracoLatestService(model.Content),
                                                                   new UmbracoSocialMediaService(model.Content),
                                                                   null, null);

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new[] { expiryDate });

            return(CurrentTemplate(viewModel));
        }
Ejemplo n.º 14
0
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var expiryDate      = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var templateRequest = new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader()));
            var viewModel       = await MapUmbracoContentToViewModel(model.Content, expiryDate.ExpiryDate, templateRequest);

            var modelBuilder = new BaseViewModelBuilder(templateRequest);
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode, new SkinFromUmbraco());

            if (!viewModel.Steps.Any())
            {
                return(new HttpNotFoundResult());
            }

            // This only has one view, for printing, so if not requested as such, redirect
            if (Request.Url != null && !Request.Url.AbsolutePath.EndsWith("/print", StringComparison.OrdinalIgnoreCase))
            {
                var firstStep = viewModel.Steps.First();
                if (firstStep != null && firstStep.Steps.Any())
                {
                    Response.Headers.Add("Location", new Uri(Request.Url, firstStep.Steps.First().Url).ToString());
                    return(new HttpStatusCodeResult(303));
                }
            }

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") });

            return(CurrentTemplate(viewModel));
        }
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public new async Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            if (ExamineManager.Instance.SearchProviderCollection["RightsOfWayDepositsSearcher"] == null)
            {
                throw new ConfigurationErrorsException("The RightsOfWayDepositsSearcher is not configured in Examine config");
            }

            var paging = new PagingController()
            {
                ResultsTextSingular = "deposit",
                ResultsTextPlural   = "deposits",
                PageSize            = 30
            };

            var query = HttpUtility.ParseQueryString(Request.Url.Query);
            var sort  = RightsOfWayDepositsSortOrder.DateDepositedDescending;
            RightsOfWayDepositsSortOrder parsedSort;

            if (Enum.TryParse(query["sort"], true, out parsedSort))
            {
                sort = parsedSort;
            }

            var viewModel = new RightsOfWayDepositsViewModelFromExamine(model.Content.Id, Request.Url, ExamineManager.Instance.SearchProviderCollection["RightsOfWayDepositsSearcher"], Request.QueryString["q"], new ISearchFilter[] { new SearchTermSanitiser() }, paging.CurrentPage, paging.PageSize, sort).BuildModel();

            viewModel.Paging = paging;
            viewModel.Paging.TotalResults = viewModel.TotalDeposits;
            viewModel.SortOrder           = sort;
            viewModel.LeadingText         = new HtmlString(model.Content.GetPropertyValue <string>("leadingText_Content"));

            // Add common properties to the model
            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader())));
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            modelBuilder.PopulateBaseViewModelWithInheritedContent(viewModel,
                                                                   new UmbracoLatestService(model.Content),
                                                                   new UmbracoSocialMediaService(model.Content),
                                                                   null, null);

            // Look for an RSS feed and CSV download
            var rss = model.Content.Children.Where <IPublishedContent>(child => child.DocumentTypeAlias == "RightsOfWayDepositsRss").FirstOrDefault();

            if (rss != null)
            {
                viewModel.RssUrl = new Uri(rss.Url, UriKind.Relative);
            }

            var csv = model.Content.Children.Where <IPublishedContent>(child => child.DocumentTypeAlias == "RightsOfWayDepositsCsv").FirstOrDefault();

            if (csv != null)
            {
                viewModel.CsvUrl = new Uri(csv.Url, UriKind.Relative);
            }

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") });

            return(CurrentTemplate(viewModel));
        }
Ejemplo n.º 16
0
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public async new Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel = new JobAdvertViewModelFromUmbraco(model.Content).BuildModel();

            // Add common properties to the model
            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader())));
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            modelBuilder.PopulateBaseViewModelWithInheritedContent(viewModel,
                                                                   new UmbracoLatestService(model.Content),
                                                                   new UmbracoSocialMediaService(model.Content),
                                                                   null, null);

            // Show page for preferred URL
            var jobUrlSegment = Regex.Match(Request.Url.AbsolutePath, "/([0-9]+)/");

            if (jobUrlSegment.Success)
            {
                var jobsProvider = new JobsDataFromApi(new Uri(ConfigurationManager.AppSettings["JobsApiBaseUrl"]), viewModel.JobsSet, new Uri(model.Content.UrlAbsolute()), new HttpClientProvider(), new MemoryJobCacheStrategy(MemoryCache.Default, Request.QueryString["ForceCacheRefresh"] == "1"));
                viewModel.Job = await jobsProvider.ReadJob(jobUrlSegment.Groups[1].Value);

                if (viewModel.Job.Id == 0 || viewModel.Job.ClosingDate < DateTime.Today)
                {
                    // The job URL looks valid but the job isn't in the index, so it's probably closed.
                    // Find some similar jobs to suggest the user may want to apply for instead.
                    await FindSimilarJobs(jobsProvider, viewModel);
                }
            }
            else
            {
                // The page was accessed by its default Umbraco URL with no parameters. Returning HttpNotFoundResult() ends up with a generic browser 404,
                // so to get our custom one we need to look it up and transfer control to it.

                // However, we need to check for "alttemplate" because a link to the default Umbraco URL with just a querystring that doesn't match any data
                // will in turn want to load the jobs CSS for a job that matches nothing, and that request ends up here. We want it to continue and return
                // the JobsCss view, not our 404 page.
                if (String.IsNullOrEmpty(Request.QueryString["alttemplate"]))
                {
                    var notFoundUrl = new HttpStatusFromConfiguration().GetCustomUrlForStatusCode(404);
                    if (notFoundUrl != null && Server != null)
                    {
                        Server.TransferRequest(notFoundUrl + "?404;" + HttpUtility.UrlEncode(Request.Url.ToString()));
                    }
                }
            }

            // The page should expire when the job closes
            var expirySeconds = 86400; // one day

            if (viewModel.Job != null && viewModel.Job.ClosingDate != null)
            {
                var secondsToClosingDate = (int)(viewModel.Job.ClosingDate.Value.AddDays(1).Date.ToUkDateTime() - DateTime.Now.ToUkDateTime()).TotalSeconds;
                if (secondsToClosingDate >= 0)
                {
                    expirySeconds = secondsToClosingDate;
                }
            }
            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") }, expirySeconds);

            return(CurrentTemplate(viewModel));
        }
        /// <summary>
        /// The default action to render the front-end view
        /// </summary>
        /// <param name="model"/>
        /// <returns/>
        public async new Task <ActionResult> Index(RenderModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var viewModel = new JobSearchResultsViewModelFromUmbraco(model.Content).BuildModel();

            // Add common properties to the model
            var expiryDate   = new ExpiryDateFromExamine(model.Content.Id, ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"], new ExpiryDateMemoryCache(TimeSpan.FromHours(1)));
            var modelBuilder = new BaseViewModelBuilder(new EastSussexGovUKTemplateRequest(Request, webChatSettingsService: new UmbracoWebChatSettingsService(model.Content, new UrlListReader())));
            await modelBuilder.PopulateBaseViewModel(viewModel, model.Content, new ContentExperimentSettingsService(),
                                                     expiryDate.ExpiryDate,
                                                     UmbracoContext.Current.InPreviewMode);

            modelBuilder.PopulateBaseViewModelWithInheritedContent(viewModel,
                                                                   new UmbracoLatestService(model.Content),
                                                                   new UmbracoSocialMediaService(model.Content),
                                                                   null, null, null);

            if (String.IsNullOrEmpty(Request.QueryString["altTemplate"]))
            {
                viewModel.Query = new JobSearchQueryConverter(ConfigurationManager.AppSettings["TranslateObsoleteJobTypes"]?.ToUpperInvariant() == "TRUE").ToQuery(Request.QueryString);
                viewModel.Query.ClosingDateFrom = DateTime.Today;
                viewModel.Query.JobsSet         = viewModel.JobsSet;
                if (Request.QueryString["page"]?.ToUpperInvariant() != "ALL")
                {
                    viewModel.Query.PageSize    = viewModel.Paging.PageSize;
                    viewModel.Query.CurrentPage = viewModel.Paging.CurrentPage;
                }
                viewModel.Metadata.Title = viewModel.Query.ToString();

                var jobsProvider = new JobsDataFromApi(
                    new Uri(ConfigurationManager.AppSettings["JobsApiBaseUrl"]),
                    viewModel.JobsSet,
                    viewModel.JobAdvertPage?.Url,
                    new HttpClientProvider(),
                    new MemoryJobCacheStrategy(MemoryCache.Default, Request.QueryString["ForceCacheRefresh"] == "1")
                    );

                var jobs = await jobsProvider.ReadJobs(viewModel.Query);

                viewModel.Jobs = jobs.Jobs;
                viewModel.Paging.TotalResults = jobs.TotalJobs;
                if (Request.QueryString["page"]?.ToUpperInvariant() == "ALL")
                {
                    viewModel.Paging.PageSize = viewModel.Paging.TotalResults;
                }

                if (!String.IsNullOrEmpty(viewModel.Metadata.RssFeedUrl))
                {
                    var queryString = HttpUtility.ParseQueryString(Request.Url.Query);
                    queryString.Remove("page");
                    if (queryString.HasKeys())
                    {
                        viewModel.Metadata.RssFeedUrl = viewModel.Metadata.RssFeedUrl + "?" + queryString;
                    }
                }
            }

            // Jobs close at midnight, so don't cache beyond then
            var untilMidnightTonight = DateTime.Today.ToUkDateTime().AddDays(1) - DateTime.Now.ToUkDateTime();

            new HttpCachingService().SetHttpCacheHeadersFromUmbracoContent(model.Content, UmbracoContext.Current.InPreviewMode, Response.Cache, new IExpiryDateSource[] { expiryDate, new ExpiryDateFromPropertyValue(model.Content, "latestUnpublishDate_Latest") }, (int)untilMidnightTonight.TotalSeconds);

            return(CurrentTemplate(viewModel));
        }