private async Task ExecutePageAsync()
        {
            var modelType    = _actionDescriptor.ModelType?.AsType();
            var viewDataType = typeof(ViewDataDictionary <>).MakeGenericType(modelType ?? _actionDescriptor.PageType.AsType());

            var viewData = (ViewDataDictionary)Activator.CreateInstance(viewDataType, _metadataProvider, _actionContext.ModelState);

            var tempData = _tempDataFactory.GetTempData(_actionContext.HttpContext);

            var pageContext = new PageContext(_actionContext, viewData, tempData, _viewOptions.HtmlHelperOptions)
            {
                ActionDescriptor       = _actionDescriptor,
                ValueProviderFactories = _valueProviderFactories,
            };

            var page = (Page)_factory.CreatePage(pageContext);

            pageContext.Page = page;

            object model = null;

            if (modelType == null)
            {
                model = page;
            }
            else
            {
                model = _modelFactory.CreateModel(pageContext);
            }

            if (model != null)
            {
                viewData.Model = model;
            }

            var           tempDataPropertyTracker = _tempDataPropertyProvider.LoadAndTrackChanges(page, page.TempData);
            IActionResult result = null;

            var handler = _selector.Select(pageContext);

            if (handler != null)
            {
                var executor = ExecutorFactory.Create(handler.Method);
                result = await executor(page, model);
            }

            if (result == null)
            {
                result = new PageViewResult(page);
            }

            await result.ExecuteResultAsync(pageContext);

            tempDataPropertyTracker.SaveChanges();
        }
Beispiel #2
0
        private async Task ExecutePageAsync()
        {
            Type viewDataType     = null;
            var  viewDataProperty = _actionDescriptor.PageType.GetDeclaredProperty("ViewData");

            if (viewDataProperty != null)
            {
                var viewDataPropertyType = viewDataProperty.PropertyType.GetTypeInfo();
                if (viewDataPropertyType.IsGenericType && viewDataPropertyType.GetGenericTypeDefinition() == typeof(ViewDataDictionary <>))
                {
                    viewDataType = viewDataPropertyType.GetGenericArguments()[0];
                }
            }

            ViewDataDictionary viewData;

            if (viewDataType == null)
            {
                viewData = new ViewDataDictionary <object>(_metadataProvider, _actionContext.ModelState);
            }
            else
            {
                viewData = (ViewDataDictionary)Activator.CreateInstance(typeof(ViewDataDictionary <>).MakeGenericType(viewDataType), _metadataProvider, _actionContext.ModelState);
            }

            var tempData = _tempDataFactory.GetTempData(_actionContext.HttpContext);

            var pageContext = new PageContext(_actionContext, viewData, tempData, _viewOptions.HtmlHelperOptions)
            {
                ActionDescriptor       = _actionDescriptor,
                ValueProviderFactories = _valueProviderFactories,
            };

            var page = (Page)_factory.CreatePage(pageContext);

            var           tempDataPropertyTracker = _tempDataPropertyProvider.LoadAndTrackChanges(page, page.TempData);
            IActionResult result = null;

            var handler = _selector.Select(pageContext);

            if (handler != null)
            {
                var executor = ExecutorFactory.Create(handler.Method);
                result = await executor(page);
            }

            if (result == null)
            {
                result = new PageViewResult(page);
            }

            await result.ExecuteResultAsync(pageContext);

            tempDataPropertyTracker.SaveChanges();
        }
        public Task ExecuteAsync(PageContext pageContext, PageViewResult result)
        {
            if (result.Model != null)
            {
                result.Page.PageContext.ViewData.Model = result.Model;
            }

            var view = new RazorView(_razorViewEngine, _razorPageActivator, new IRazorPage[0], result.Page, _htmlEncoder);

            return(ExecuteAsync(pageContext, view, result.ContentType, result.StatusCode));
        }
        public static int TotalViewsFor(this HtmlHelper helper, Webpage webpage)
        {
            if (webpage == null)
            {
                return(0);
            }

            var session = helper.ViewContext.HttpContext.Get <ISession>();

            AnalyticsPageView pageView         = null;
            AnalyticsSession  analyticsSession = null;
            AnalyticsUser     analyticsUser    = null;
            IQueryOver <AnalyticsPageView, AnalyticsPageView> queryOver = session.QueryOver(() => pageView)
                                                                          .JoinAlias(() => pageView.AnalyticsSession, () => analyticsSession)
                                                                          .JoinAlias(() => analyticsSession.AnalyticsUser, () => analyticsUser)
                                                                          .Where(x => x.Webpage.Id == webpage.Id);


            PageViewResult result     = null;
            var            viewResult = queryOver
                                        .SelectList(builder =>
                                                    builder
                                                    .SelectGroup(() => pageView.Url)
                                                    .WithAlias(() => result.Url)
                                                    .SelectGroup(() => pageView.Webpage.Id)
                                                    .WithAlias(() => result.WebpageId)
                                                    .SelectCountDistinct(() => analyticsUser.Id)
                                                    .WithAlias(() => result.Unique)
                                                    .SelectCountDistinct(() => analyticsSession.Id)
                                                    .WithAlias(() => result.Sessions)
                                                    .SelectCountDistinct(() => pageView.Id)
                                                    .WithAlias(() => result.Total)
                                                    )
                                        .TransformUsing(Transformers.AliasToBean <PageViewResult>())
                                        .Take(1).SingleOrDefault <PageViewResult>();

            return(viewResult == null ? 0 : viewResult.Total);
        }
Beispiel #5
0
        public IPagedList <PageViewResult> Search(PageViewSearchQuery query)
        {
            AnalyticsPageView pageView         = null;
            AnalyticsSession  analyticsSession = null;
            AnalyticsUser     analyticsUser    = null;
            IQueryOver <AnalyticsPageView, AnalyticsPageView> queryOver = _session.QueryOver(() => pageView)
                                                                          .JoinAlias(() => pageView.AnalyticsSession, () => analyticsSession)
                                                                          .JoinAlias(() => analyticsSession.AnalyticsUser, () => analyticsUser);

            if (!string.IsNullOrWhiteSpace(query.Url))
            {
                queryOver = queryOver.Where(view => view.Url.IsInsensitiveLike(query.Url, MatchMode.Anywhere));
            }

            queryOver = queryOver.Where(() => pageView.CreatedOn >= query.From && pageView.CreatedOn <= query.To);

            switch (query.SearchType)
            {
            case PageViewSearchType.UsersOnly:
                queryOver = queryOver.Where(() => analyticsUser.User != null);
                break;

            case PageViewSearchType.AnonymousOnly:
                queryOver = queryOver.Where(() => analyticsUser.User == null);
                break;
            }

            PageViewResult result = null;
            IPagedList <PageViewResult> pageViewResults = queryOver
                                                          .SelectList(builder =>
                                                                      builder
                                                                      .SelectGroup(() => pageView.Url)
                                                                      .WithAlias(() => result.Url)
                                                                      .SelectGroup(() => pageView.Webpage.Id)
                                                                      .WithAlias(() => result.WebpageId)
                                                                      .SelectCountDistinct(() => analyticsUser.Id)
                                                                      .WithAlias(() => result.Unique)
                                                                      .SelectCountDistinct(() => analyticsSession.Id)
                                                                      .WithAlias(() => result.Sessions)
                                                                      .SelectCountDistinct(() => pageView.Id)
                                                                      .WithAlias(() => result.Total)
                                                                      )
                                                          .TransformUsing(Transformers.AliasToBean <PageViewResult>())
                                                          .OrderBy(Projections.CountDistinct(() => analyticsUser.Id)).Desc
                                                          .ThenBy(Projections.CountDistinct(() => analyticsSession.Id)).Desc
                                                          .ThenBy(Projections.CountDistinct(() => pageView.Id)).Desc
                                                          .Paged <AnalyticsPageView, PageViewResult>(Projections.CountDistinct(() => pageView.Url), query.Page, enableCache: false); //todo enable cache when Nhibernate is updated to 4.1

            List <int?> ids = pageViewResults.Select(viewResult => viewResult.WebpageId).Where(i => i.HasValue).ToList();
            Dictionary <int, Webpage> webpages =
                _session.QueryOver <Webpage>()
                .Where(webpage => webpage.Id.IsIn(ids))
                .Cacheable()
                .List()
                .ToDictionary(webpage => webpage.Id, webpage => webpage);

            foreach (PageViewResult pageViewResult in pageViewResults)
            {
                if (!pageViewResult.WebpageId.HasValue)
                {
                    continue;
                }
                if (!webpages.ContainsKey(pageViewResult.WebpageId.Value))
                {
                    continue;
                }
                pageViewResult.WebpageName = webpages[pageViewResult.WebpageId.Value].Name;
            }

            return(pageViewResults);
        }