예제 #1
0
        public VisitorHomePageModelContainer ReadStatisticsForHomePage()
        {
            var topVisits = VisitBiz.Read().GroupBy(r => r.ContentId)
                            .Select(group => new { ContentId = group.Key, TotalVisit = group.Sum(r => r.Count) })
                            .OrderByDescending(r => r.TotalVisit)
                            .Take(AppConfigurationManager.TopArticlesNumber);

            var topArticlesVisits = from a in ArticleBiz.ReadPublishedArticles()
                                    join av in topVisits
                                    on a.Id equals av.ContentId
                                    select new { a, av.TotalVisit };

            var topArticles = topArticlesVisits.OrderByDescending(t => t.TotalVisit).Select(t => t.a);

            return(new VisitorHomePageModelContainer()
            {
                TopArticles =
                    topArticles.MapTo <ContentInfo6PM>()
                    .ToList(),
                LatestArticles =
                    ArticleBiz.ReadLatestArticles(AppConfigurationManager.LatestArticlesNumber)
                    .MapTo <ContentInfo6PM>()
                    .ToList(),
                FeaturedArticles = FeaturedContentBiz.ReadFeaturedArticles().MapTo <ContentInfo6PM>().ToList(),
            });
        }
예제 #2
0
 public IEnumerable <ChartData> GetAuthorTotalBlogPostsChartData(UserIdentity user)
 {
     return(VisitBiz.Read(v => v.Content.AuthorId == user.UserId && v.Content.Type == ContentType.BlogPost, true).GroupBy(v => DbFunctions.TruncateTime(v.Date))
            .Select(group => new ChartData {
         Date = group.Key.Value, Value = group.Sum(visit => visit.Count)
     })
            .OrderBy(v => v.Date));
 }
예제 #3
0
 public IEnumerable <ChartData> GetSiteTotalVisistsByDate()
 {
     return(VisitBiz.Read(v => true, true).GroupBy(v => DbFunctions.TruncateTime(v.Date))
            .Select(group => new ChartData {
         Date = group.Key.Value, Value = group.Sum(visit => visit.Count)
     })
            .OrderBy(v => v.Date));
 }
예제 #4
0
        public ViewArticleModelContainer ReadArticleForViewByVisitor(int contentId)
        {
            var content = ArticleBiz.ReadArticleForViewByVisitor(contentId);

            VisitBiz.IncrementContentVisits(contentId);
            UnitOfWork.SaveChanges();
            int totalVisits = 0;

            try
            {
                totalVisits = VisitBiz.Read(e => e.ContentId == contentId).Sum(e => e.Count);
            }
            catch (InvalidOperationException ex)
            {
            }

            var result = new ViewArticleModelContainer()
            {
                Article       = content.GetContentForViewByVisitorPM(),
                Tags          = content.Tags.Select(tag => tag.GetPresentationModel()).ToList(),
                AuthorProfile = new ProfileForViewByVisitorPM()
                {
                    AboutMe = content.Author.ProfileKeyValues.SingleOrDefault(profileKeyValye =>
                                                                              profileKeyValye.Type == ProfileKeyValueType.AboutMe)?.Value
                },
                AuthorBusinessIntroduce = new BusinessIntroducePM()
                {
                    Text = content.Author.ProfileKeyValues.SingleOrDefault(profileKeyValye =>
                                                                           profileKeyValye.Type == ProfileKeyValueType.UserBusinessIntroduceText)?.Value
                },
                Comments            = CommentBiz.GetArticleComments(content.Id).MapTo <CommentInfoPM>().ToList(),
                UserRelatedArticles = ArticleBiz.ReadUserRelatedArticles(content.AuthorId, contentId, 10)
                                      .MapTo <ContentInfo4PM>()
                                      .ToList(),
                RelatedArticles = ArticleBiz.ReadRelatedArticles(content.AuthorId, contentId, 10)
                                  .MapTo <ContentInfo4PM>()
                                  .ToList(),
                TotalVisits = VisitBiz.Read(e => e.ContentId == contentId).Sum(e => e.Count)
            };

            if (result.UserRelatedArticles.Count == 0 && result.RelatedArticles.Count == 0)
            {
                result.TopArticles = ArticleBiz.ReadTopArticles(10)
                                     .MapTo <ContentInfo4PM>()
                                     .ToList();
            }
            return(result);
        }