コード例 #1
0
        public ViewBlogPostModelContainer ReadPostForViewByVisitor(string publicationName, int postId)
        {
            var content = BlogBiz.ReadPostForViewByVisitor(publicationName, postId);

            VisitBiz.IncrementContentVisits(content.Id);
            UnitOfWork.SaveChanges();
            return(new ViewBlogPostModelContainer()
            {
                BlogInfo = BlogBiz.Read(b => b.Id == content.PublicationId).MapTo <BlogInfoPM>().Single(),
                Post = content.GetContentInfoWithTextPM(),
                Tags = content.Tags.Select(tag => tag.GetPresentationModel()).ToList(),
                ArchiveItems = PublicationBiz.ReadPublicationArchivedItemsCalendar(content.PublicationId.Value, ContentType.BlogPost)
                               .Select(item => new ContentArchiveItemPM(item.Item1, item.Item2)),
                Links = BlogBiz.ReadBlogLinks(content.PublicationId.Value)
                        .MapTo <BlogLinkPM>()
                        .ToList(),
                Comments = content.Comments
                           .Where(comment => !comment.IsPrivate)
                           .Select(comment => comment.GetCommentInfoPM()).ToList(),
                LatestPosts = BlogBiz.ReadUserPublishedPostsForViewByVisitor(content.Publication.CreatorId)
                              .Take(10)
                              .MapTo <ContentInfoWithTextPM>()
                              .ToList()
            });
        }
コード例 #2
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(),
            });
        }
コード例 #3
0
        public IEnumerable <KeyValuePair <string, int> > GetContentVisitChartDataForUserDashboard(int userId, ContentType contentType)
        {
            var chartData = VisitBiz.GetContentVisitChartDataForUserDashboard(userId, contentType);

            ChartDataHelper.FillBlankDays <ChartData>(chartData);
            return(chartData.Select(data => new KeyValuePair <string, int>(data.Date.ToPersianDate("MMDD"), data.Value)));
        }
コード例 #4
0
 public ArticleService()
 {
     UnitOfWork = new CoreUnitOfWork();
     ArticleBiz = new ArticleBiz(UnitOfWork);
     VisitBiz   = new VisitBiz(UnitOfWork);
     CommentBiz = new CommentBiz(UnitOfWork);
     TagBiz     = new TagBiz(UnitOfWork);
 }
コード例 #5
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));
 }
コード例 #6
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));
 }
コード例 #7
0
 public BlogService(IPushNotificationProvider pushNotificationProvider)
 {
     UnitOfWork               = new CoreUnitOfWork();
     BlogBiz                  = new BlogBiz(UnitOfWork);
     PublicationBiz           = new PublicationBiz(UnitOfWork);
     TagBiz                   = new TagBiz(UnitOfWork);
     FriendBiz                = new BlogLinkBiz(UnitOfWork);
     ContentBiz               = new ContentBiz(UnitOfWork);
     VisitBiz                 = new VisitBiz(UnitOfWork);
     PushNotificationProvider = pushNotificationProvider;
 }
コード例 #8
0
 public AppStatisticsService()
 {
     UnitOfWork         = new CoreUnitOfWork();
     ArticleBiz         = new ArticleBiz(UnitOfWork);
     BlogBiz            = new BlogBiz(UnitOfWork);
     VisitBiz           = new VisitBiz(UnitOfWork);
     UserBiz            = new UserBiz(UnitOfWork);
     CommentBiz         = new CommentBiz(UnitOfWork);
     MessageBiz         = new MessageBiz(UnitOfWork);
     FeaturedContentBiz = new FeaturedContentBiz(UnitOfWork);
 }
コード例 #9
0
 public UserProfileService()
 {
     UnitOfWork           = new CoreUnitOfWork();
     UserBiz              = new UserBiz(UnitOfWork);
     MembershipBiz        = new MembershipBiz(UnitOfWork);
     ProfileBiz           = new ProfileBiz(UnitOfWork);
     ArticleBiz           = new ArticleBiz(UnitOfWork);
     BlogBiz              = new BlogBiz(UnitOfWork);
     EducationalResumeBiz = new EducationalResumeBiz(UnitOfWork);
     VisitBiz             = new VisitBiz(UnitOfWork);
     JobResumeBiz         = new JobResumeBiz(UnitOfWork);
     FollowBiz            = new FollowBiz(UnitOfWork);
 }
コード例 #10
0
        public ViewBlogPostModelContainer ReadPostForPreview(string publicationName, int postId)
        {
            var content = BlogBiz.ReadPostForPreview(publicationName, postId);

            VisitBiz.IncrementContentVisits(content.Id);
            UnitOfWork.SaveChanges();
            return(new ViewBlogPostModelContainer()
            {
                BlogInfo = BlogBiz.Read(b => b.Id == content.PublicationId).MapTo <BlogInfoPM>().Single(),
                Post = content.GetContentInfoWithTextPM(),
                Tags = content.Tags.Select(tag => tag.GetPresentationModel()).ToList(),
            });
        }
コード例 #11
0
        public DashboardModelContainer GetUserDashboardData(int userId)
        {
            var today = DateTime.Now.Date;

            return(new DashboardModelContainer()
            {
                PendingComments = CommentBiz.ReadNotConfirmedComments(userId).Take(4).MapTo <CommentInfoPM>().ToList(),
                ArticlesCount = ArticleBiz.ReadUserPublishedContents(userId, ContentType.Article).Count(),
                BlogPostsCount = BlogBiz.ReadUserTotalPublishedPostsCount(userId),
                TodayTotallVisits = VisitBiz.ReadUserTodayTotalVisits(userId),
                LatestMessages = MessageBiz.ReadUserMessages(userId, 4).MapTo <MessagePM>().ToList()
            });
        }
コード例 #12
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);
        }
コード例 #13
0
        public AdminDashboardModelContainer GetAdminDashboardStatistics()
        {
            var today = DateTime.Now.Date;

            return(new AdminDashboardModelContainer()
            {
                TodayVisitsCount =
                    VisitBiz.GetTodaySiteTotalVisitsCount(),
                TotalArticlesCount =
                    ArticleBiz.Read(c => c.State == ContentState.Published && c.Type == ContentType.Article).Count(),
                TotalBlogPostCount =
                    ArticleBiz.Read(c => c.State == ContentState.Published && c.Type == ContentType.BlogPost).Count(),
                TotalUsersCount = UserBiz.Read().Count(),
                NewUsers = UserBiz.GetNewUsers(top: 3).MapTo <AdminDashboardNewUserPm>().ToList(),
                NewArticles = ArticleBiz.ReadLatestArticles(3).MapTo <AdminDashboardNewArticlePm>().ToList()
            });
        }
コード例 #14
0
        public ProfileStatisticsAndSocialLinksPM ReadProfileStatisticsAndSocialLinks(int userId)
        {
            var userLinks = ProfileBiz.ReadUserProfileValues(userId,
                                                             ProfileKeyValueType.WebSiteUrl,
                                                             ProfileKeyValueType.FacebookUrl,
                                                             ProfileKeyValueType.TwitterUrl,
                                                             ProfileKeyValueType.LinkedInUrl);
            var articlesCount = ArticleBiz.ReadUserPublishedContents(userId, ContentType.Article).Count();
            var blogsCount    = ArticleBiz.ReadUserPublishedContents(userId, ContentType.Article).Count();

            return(new ProfileStatisticsAndSocialLinksPM()
            {
                WebSiteUrl = userLinks.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.WebSiteUrl)?.Value,
                FacebookUrl = userLinks.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.FacebookUrl)?.Value,
                TwitterUrl = userLinks.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.TwitterUrl)?.Value,
                LinkedInUrl = userLinks.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.LinkedInUrl)?.Value,
                TotalArticles = ArticleBiz.ReadUserPublishedContents(userId, ContentType.Article).Count(),
                TotalBlogPosts = ArticleBiz.ReadUserPublishedContents(userId, ContentType.BlogPost).Count(),
                TotalVisits = VisitBiz.ReadUserTodayTotalVisits(userId),
            });
        }
コード例 #15
0
        public UserInfoForHomePageModelContainer ReadUserInfoForProfilePage(int userId, UserIdentity userIdentity)
        {
            var user = UserBiz.Read(u => u.Id == userId)
                       .Include(u => u.Membership)
                       .Include(u => u.EducationalResumes.Select(x => x.Organization))
                       .Include(u => u.EducationalResumes.Select(x => x.UniversityField))
                       .Include(u => u.JobResumes.Select(x => x.Organization))
                       .Include(u => u.JobResumes.Select(x => x.Job))
                       .Single();
            var profileKeyValues = ProfileBiz.ReadUserProfileValues(userId,
                                                                    ProfileKeyValueType.WebSiteUrl,
                                                                    ProfileKeyValueType.FacebookUrl,
                                                                    ProfileKeyValueType.TwitterUrl,
                                                                    ProfileKeyValueType.LinkedInUrl,
                                                                    ProfileKeyValueType.AboutMe);
            var userBlog = BlogBiz.ReadSingleOrDefault(b => b.CreatorId == userId);

            return(new UserInfoForHomePageModelContainer()
            {
                UserId = userId,
                FirstName = user.FirstName,
                LastName = user.LastName,
                AboutMe = profileKeyValues.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.AboutMe)?.Value,
                WebSiteUrl = profileKeyValues.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.WebSiteUrl)?.Value,
                FacebookUrl = profileKeyValues.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.FacebookUrl)?.Value,
                TwitterUrl = profileKeyValues.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.TwitterUrl)?.Value,
                LinkedInUrl = profileKeyValues.SingleOrDefault(kv => kv.Type == ProfileKeyValueType.LinkedInUrl)?.Value,
                TotalArticles = ArticleBiz.ReadUserPublishedContents(userId, ContentType.Article).Count(),
                TotalBlogPosts = ArticleBiz.ReadUserPublishedContents(userId, ContentType.BlogPost).Count(),
                TotalVisits = VisitBiz.ReadUserTodayTotalVisits(userId),
                LatestArticles = ArticleBiz.ReadUserLatestPublishedArticles(userId, 200).MapTo <ContentInfo2PM>().ToList(),
                LatestBlogPosts = BlogBiz.ReadUserLatestPosts(userId, 5).MapTo <ContentInfo2PM>().ToList(),
                EducationalResumes = user.EducationalResumes.OrderByDescending(x => x.EducationGrade).Select(x => x.GetPresentationModel()).ToList(),
                JobResumes = user.JobResumes.OrderByDescending(x => x.StartYear).Select(x => x.GetPresentationModel()).ToList(),
                WeblogName = userBlog?.Name,
                RegistrationDateString = user.Membership.CreateDate.ToPersianDate(),
                CurrentUserFollowsThisUser = userIdentity != null?FollowBiz.AnyFollow(userIdentity.UserId, userId) : false,
                                                 Followers = FollowBiz.ReadFollowersCount(userId)
            });
        }