Пример #1
0
        public JsonResult GetSolutionsData(int Page = 1, int PageSize = 25)
        {
            int UserID = WebSecurity.CurrentUserId;

            PaginatedList <Solution> solutions = repository
                                                 .Solutions
                                                 .OrderByDescending(s => s.SendTime)
                                                 .ToPaginatedList <Solution>(Page, PageSize);

            var response = new JsonResponseSolutionsData();

            // Get text view.
            using (var sw = new StringWriter())
            {
                ViewData["Solutions"] = solutions;
                repository.ProgrammingLanguages.Each(pl => ViewData[pl.ProgrammingLanguageID.ToString()] = pl.Title);
                var viewResult  = ViewEngines.Engines.FindPartialView(this.ControllerContext, "GetSolutionsData");
                var viewContext = new ViewContext(this.ControllerContext, viewResult.View, ViewData, TempData, sw);
                viewResult.View.Render(viewContext, sw);
                viewResult.ViewEngine.ReleaseView(this.ControllerContext, viewResult.View);
                response.HtmlTable = sw.GetStringBuilder().ToString();
            }

            response.Reload = solutions
                              .FirstOrDefault(s =>
                                              s.Result == TestResults.Waiting ||
                                              s.Result == TestResults.Executing ||
                                              s.Result == TestResults.Compiling) != null;

            return(Json(response, JsonRequestBehavior.AllowGet));
        }
Пример #2
0
        public PaginatedUserActivityFeed ConverActivitiesToDTOModels(string currUserId, PaginatedList <UserActivity> activities)
        {
            PaginatedUserActivityFeed ret = new PaginatedUserActivityFeed();
            var acts = activities.GroupBy(p => p.FeedType);

            foreach (var item in acts)
            {
                switch (item.Key)
                {
                case UserActivityType.Add_Post_To_Favourites:
                    var ids = item.Select(p => p.SourceEntityId.Value);
                    if (ids.Count() == 0)
                    {
                        break;
                    }

                    var FavPostActivities =
                        _context.Set <Post>()
                        .AsNoTracking()
                        .Where(p => ids.Contains(p.Id) && p.IsPublished)
                        .Select(p => new Post()
                    {
                        DateUtcAdd       = p.DateUtcAdd,
                        DateUtcModified  = p.DateUtcModified,
                        DateUtcPublished = p.DateUtcPublished,
                        Description      = p.Description,
                        PostParts        = p.PostParts,
                        LikedUsers       = p.LikedUsers,
                        Content          = p.Content,
                        PrivacyStatus    = p.PrivacyStatus,
                        Title            = p.Title,
                        Collection       = p.Collection,
                        UserInfo         = p.UserInfo
                    })
                        .ToList();
                    foreach (var post in FavPostActivities)
                    {
                        post.Rating = GetPostRating(post.Id, 10);
                        var postActivity = activities
                                           .FirstOrDefault(p => p.FeedType == UserActivityType.Add_Post_To_Favourites && p.ParentEntityId == post.Id);
                        ret.Entities.Add(new UserActivityDTO <IActivityEntity>()
                        {
                            DateUtcActivity  = postActivity.DateUtcModified,
                            AppUserId        = postActivity.AppUserId,
                            FeedType         = UserActivityType.Add_Post_To_Favourites,
                            ParentEntityType = ParentEntityType.Post,
                            ParentEntity     = _mapper.Map <Post, PostActivityEntity>(post, opt =>
                            {
                                opt.Items["AppUserId"] = currUserId;
                            }),
                        });
                    }
                    break;

                case UserActivityType.Add_Review_To_Post:
                    var revIds = item.Select(p => p.SourceEntityId.Value).ToArray();
                    if (revIds.Count() == 0)
                    {
                        break;
                    }

                    var ActivityReviews = _context.Set <Review>()
                                          .AsNoTracking()
                                          .Where(p => revIds.Contains(p.Id))
                                          .Select(p => new
                    {
                        p.DateUtcAdd,
                        p.DateUtcModified,
                        p.DateUtcPublished,
                        p.IsSoftDeleted,
                        p.Id,
                        p.Content,
                        p.UserInfo,
                        p.UserId,
                        p.PostRate,
                        PostId         = p.PostId ?? 0,
                        AuthorImageUrl = p.UserInfo.ProfilePicture.SmallPath,
                        CommentCount   = p.Comments.Count(),
                    });

                    foreach (var review in ActivityReviews)
                    {
                        var reviewActivity = item
                                             .FirstOrDefault(p => p.SourceEntityId == review.Id);

                        var reviewedPost = _context.Set <Post>()
                                           .AsNoTracking()
                                           .Select(p => new PostActivityEntity()
                        {
                            DateUtcPublished = p.DateUtcPublished,
                            AuthorInfo       = new BaseUserInfoDisplay()
                            {
                                AppUserId    = p.UserInfoId,
                                Name         = p.UserInfo.Name,
                                Username     = p.UserInfo.UName,
                                Surname      = p.UserInfo.Surname,
                                ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfoId)
                            },
                            Content            = p.Content,
                            Title              = p.Title,
                            IsCurrentUserLiked = userPostLikesIds.Contains(p.Id),
                            PostParts          = p.PostParts.Select(f => new PostPartDisplay()
                            {
                                Description = f.Description,
                                Image       = new BaseImageReturn()
                                {
                                    Dimension = f.Image.ImageDimension,
                                    Extension = f.Image.FileExtension,
                                    LazyUrl   = f.Image.BlurLazyPath,
                                    SmallUrl  = f.Image.SmallPath,
                                    ThumbUrl  = f.Image.ThumbPath,
                                    Url       = f.Image.ResizedPath,
                                },
                                Title = f.Title,
                                Id    = f.Id
                            }).ToList(),
                            Id = p.Id,
                        })
                                           .FirstOrDefault(p => p.Id == reviewActivity.ParentEntityId);

                        reviewedPost.Rating         = GetPostRating(reviewedPost.Id, 10);
                        reviewedPost.FavouriteCount = _postCacheService.GetPostLikesCount(reviewedPost.Id)
                                                      ?? _postDataService.GetPostLikeCount(reviewedPost.Id, cacheTreshold: 20);
                        reviewedPost.ReviewCount = _postDataService.GetPostReviewsCount(reviewedPost.Id);

                        LikeStatus ls = userReviewLikesIds.Contains(review.Id) ? LikeStatus.Like : LikeStatus.None;
                        if (userReviewDislikesIds.Contains(review.Id))
                        {
                            ls = LikeStatus.Dislike;
                        }
                        ReviewActivityEntity reviewActivityInfo = new ReviewActivityEntity()
                        {
                            CommentCount     = review.CommentCount,
                            DateUtcPublished = review.DateUtcPublished,
                            PostId           = review.PostId,
                            LikeStatus       = ls,
                            DislikeCount     = _reviewCacheService.GetReviewDislikeCount(review.Id) ?? _reviewDataService.GetReviewDislikeCount(review.Id, 10),
                            Content          = review.Content,
                            Id         = review.Id,
                            PostRate   = review.PostRate ?? 0,
                            LikeCount  = _reviewCacheService.GetReviewLikeCount(review.Id) ?? _reviewDataService.GetReviewLikeCount(review.Id, 100),
                            AuthorInfo = new BaseUserInfoDisplay()
                            {
                                AppUserId    = review.UserInfo.AppUserId,
                                Name         = review.UserInfo.Name,
                                ProfileImage = review.AuthorImageUrl,
                                Surname      = review.UserInfo.Surname,
                                Username     = review.UserInfo.UName
                            }
                        };

                        ret.Entities.Add(new UserActivityDTO <IActivityEntity>()
                        {
                            Id = reviewActivity.Id,
                            DateUtcActivity  = reviewActivity.DateUtcModified,
                            AppUserId        = reviewActivity.AppUserId,
                            FeedType         = UserActivityType.Add_Review_To_Post,
                            ParentEntityType = ParentEntityType.Post,
                            ParentEntity     = reviewedPost,
                            PrimaryEntity    = reviewActivityInfo
                        });
                    }
                    break;

                case UserActivityType.Like_Review_Of_Post:
                    // Liked Review
                    var reviewIds = item.Select(p => p.SourceEntityId.Value);
                    if (reviewIds.Count() == 0)
                    {
                        break;
                    }
                    // Liked Reviews
                    var ActivityLikeReviews = _context.Set <Review>()
                                              .Select(p => new Review()
                    {
                        DateUtcAdd       = p.DateUtcAdd,
                        DateUtcModified  = p.DateUtcModified,
                        DateUtcPublished = p.DateUtcPublished,
                        IsSoftDeleted    = p.IsSoftDeleted,
                        UserLikes        = p.UserLikes,
                        Id       = p.Id,
                        Content  = p.Content,
                        UserInfo = p.UserInfo,
                        UserId   = p.UserId,
                        PostRate = p.PostRate
                    })
                                              .AsNoTracking().Where(p => reviewIds.Contains(p.Id)).ToList();
                    // For Each Liked Review
                    foreach (var review in ActivityLikeReviews)
                    {
                        // Belonging Activity
                        var reviewActivity = item
                                             .FirstOrDefault(p => p.SourceEntityId == review.Id && p.FeedType == UserActivityType.Like_Review_Of_Post);
                        // Reviewed Post
                        var reviewedPost = _context.Set <Post>()
                                           .AsNoTracking()
                                           .Select(p => new PostActivityEntity()
                        {
                            DateUtcPublished = p.DateUtcPublished,
                            AuthorInfo       = new BaseUserInfoDisplay()
                            {
                                AppUserId    = p.UserInfoId,
                                Name         = p.UserInfo.Name,
                                Username     = p.UserInfo.UName,
                                Surname      = p.UserInfo.Surname,
                                ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfo.AppUserId)
                            },
                            Content            = p.Content,
                            IsCurrentUserLiked = userPostLikesIds.Contains(p.Id),
                            PostParts          = p.PostParts.Select(f => new PostPartDisplay()
                            {
                                Description = f.Description,
                                Image       = new BaseImageReturn()
                                {
                                    Dimension = f.Image.ImageDimension,
                                    Extension = f.Image.FileExtension,
                                    LazyUrl   = f.Image.BlurLazyPath,
                                    SmallUrl  = f.Image.SmallPath,
                                    ThumbUrl  = f.Image.ThumbPath,
                                    Url       = f.Image.ResizedPath,
                                },
                                Title = f.Title,
                                Id    = f.Id
                            }).ToList(),
                            Id          = p.Id,
                            ReviewCount = p.Reviews.Count()
                        })
                                           .FirstOrDefault(p => p.Id == reviewActivity.ParentEntityId);
                        // Add Activity DTO to return List
                        ret.Entities.Add(new UserActivityDTO <IActivityEntity>()
                        {
                            Id = reviewActivity.Id,
                            DateUtcActivity  = reviewActivity.DateUtcModified,
                            AppUserId        = reviewActivity.AppUserId,
                            FeedType         = UserActivityType.Like_Review_Of_Post,
                            ParentEntityType = ParentEntityType.Post,
                            ParentEntity     = reviewedPost,
                            PrimaryEntity    = _mapper.Map <Review, ReviewActivityEntity>(review, opt =>
                            {
                                opt.Items["AppUserId"] = currUserId;
                            })
                        });
                    }
                    break;

                case UserActivityType.Add_Comment_To_Review:

                    // CommentsIds
                    var commentIds = item.Select(p => p.SourceEntityId.Value);
                    if (commentIds.Count() == 0)
                    {
                        break;
                    }
                    // Get User Likes From Cache

                    // Comments from DB
                    var ActivityComments = _context.Set <Comment>()
                                           .Select(p => new Comment()
                    {
                        DateUtcAdd      = p.DateUtcAdd,
                        DateUtcModified = p.DateUtcModified,
                        IsSoftDeleted   = p.IsSoftDeleted,
                        Id           = p.Id,
                        Content      = p.Content,
                        CommentLikes = p.CommentLikes,
                    })
                                           .AsNoTracking().Where(p => commentIds.Contains(p.Id)).ToList();
                    // Each commentActivity get belonging Review
                    foreach (var comment in ActivityComments)
                    {
                        var commentActivity = item
                                              .FirstOrDefault(p => p.SourceEntityId == comment.Id && p.FeedType == UserActivityType.Add_Comment_To_Review);

                        var commentedReview = _context.Set <Review>()
                                              .AsNoTracking()
                                              .Select(f => new {
                            Review          = f,
                            ReviewLikeCount = f.UserLikes.Where(p => p.LikeStatus == LikeStatus.Like).Count(),
                            AuthorInfo      = f.UserInfo,
                        })
                                              .Select(p => new CommentReviewActivityEntity()
                        {
                            AuthorInfo = new BaseUserInfoDisplay()
                            {
                                AppUserId    = p.AuthorInfo.AppUserId,
                                Name         = p.AuthorInfo.Name,
                                ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.AuthorInfo.AppUserId),
                                Surname      = p.AuthorInfo.Surname,
                                Username     = p.AuthorInfo.UName
                            },
                            Id          = p.Review.Id,
                            Content     = p.Review.Content,
                            IsUserLiked = this.userReviewLikesIds.Contains(p.Review.Id),
                            LikeCount   = p.ReviewLikeCount,
                        })
                                              .FirstOrDefault(p => p.Id == commentActivity.ParentEntityId);

                        commentedReview.CommentCount = _reviewCacheService.GetReviewCommentCount(commentedReview.Id)
                                                       ?? _reviewDataService.GetReviewCommentCount(commentedReview.Id, 20);
                        commentedReview.LikeCount = _reviewCacheService.GetReviewLikeCount(commentedReview.Id)
                                                    ?? _reviewDataService.GetReviewLikeCount(commentedReview.Id, cacheTreshold: 10);
                        commentedReview.DislikeCount = _reviewCacheService.GetReviewDislikeCount(commentedReview.Id)
                                                       ?? _reviewDataService.GetReviewDislikeCount(commentedReview.Id, 10);

                        ret.Entities.Add(new UserActivityDTO <IActivityEntity>()
                        {
                            Id = commentActivity.Id,
                            DateUtcActivity  = commentActivity.DateUtcModified,
                            AppUserId        = commentActivity.AppUserId,
                            FeedType         = UserActivityType.Add_Comment_To_Review,
                            ParentEntityType = ParentEntityType.Review,
                            ParentEntity     = commentedReview,
                            PrimaryEntity    = new CommentActivityEntity()
                            {
                                DateUtcAdded    = comment.DateUtcAdd,
                                DateUtcModified = comment.DateUtcModified,
                                DislikeCount    = comment.CommentLikes.Count(p => p.LikeStatus == LikeStatus.Dislike),
                                LikeCount       = comment.CommentLikes.Count(p => p.LikeStatus == LikeStatus.Like),
                                Content         = comment.Content,
                                Id             = comment.Id,
                                IsUserDisliked = userCommentLikesIds.Contains(comment.Id),
                                IsUserLiked    = userCommentDislikesIds.Contains(comment.Id),
                            }
                        });
                    }
                    break;

                case UserActivityType.Add_Comment_To_Comment:
                    break;

                case UserActivityType.Like_Comment:
                    break;

                case UserActivityType.Follow_User:
                    break;

                case UserActivityType.Add_New_Collection:
                    var colActIds = item.Select(p => p.SourceEntityId);
                    if (colActIds.Count() == 0)
                    {
                        break;
                    }

                    var AddCollectionActivities =
                        _context.Set <PostCollection>()
                        .AsNoTracking()
                        .Select(col => new
                    {
                        Collection = col,
                        PostCount  = col.Posts.Count(),
                        col.ThumbFile,
                        col.UserInfo
                    })
                        .Where(p => colActIds.Contains(p.Collection.Id)).ToList();


                    var AddCollectionActivityDtos =
                        AddCollectionActivities.Select(p => new AddCollectionActivityEntity()
                    {
                        DateUtcModified = p.Collection.DateUtcModified,
                        UserInfo        = new BaseUserInfoDisplay()
                        {
                            AppUserId    = p.UserInfo.AppUserId,
                            Name         = p.UserInfo.Name,
                            ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfo.AppUserId),
                            Surname      = p.UserInfo.Surname,
                            Username     = p.UserInfo.UName
                        },
                        Name          = p.Collection.Name,
                        Id            = p.Collection.Id,
                        PostsCount    = p.PostCount,
                        Description   = p.Collection.Description,
                        ThumbImageUrl = p.ThumbFile == null ? "" : p.ThumbFile.ThumbPath,
                        UserInfoId    = p.UserInfo.AppUserId,
                    });


                    foreach (var col in AddCollectionActivityDtos)
                    {
                        var colActivity = activities
                                          .FirstOrDefault(p => p.FeedType == UserActivityType.Add_New_Collection && p.SourceEntityId == col.Id);

                        ret.Entities.Add(new UserActivityDTO <IActivityEntity>()
                        {
                            Id = colActivity.Id,
                            DateUtcActivity  = colActivity.DateUtcModified,
                            AppUserId        = colActivity.AppUserId,
                            FeedType         = UserActivityType.Add_New_Collection,
                            ParentEntityType = ParentEntityType.None,
                            PrimaryEntity    = col
                        });
                    }
                    break;

                case UserActivityType.Add_New_Post:
                    var actIds = item.Select(p => p.SourceEntityId);
                    if (actIds.Count() == 0)
                    {
                        break;
                    }

                    var AddPostActivities =
                        _context.Set <Post>()
                        .AsNoTracking()
                        .Include(p => p.PostParts)
                        .ThenInclude(p => p.Image)
                        .Where(p => actIds.Contains(p.Id) && p.IsPublished)
                        .Select(post => new {
                        Post = post,
                        post.PostParts,
                        post.UserInfo,
                        post.Collection,
                        post.Groups
                    });

                    var AddPostActivityDtos =
                        AddPostActivities.Select(p => new PostActivityEntity()
                    {
                        DateUtcPublished = p.Post.DateUtcPublished,
                        AuthorInfo       = new BaseUserInfoDisplay()
                        {
                            AppUserId    = p.UserInfo.AppUserId,
                            Name         = p.UserInfo.Name,
                            ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", p.UserInfo.AppUserId),
                            Surname      = p.UserInfo.Surname,
                            Username     = p.UserInfo.UName
                        },
                        Content            = p.Post.Content,
                        Title              = p.Post.Title,
                        IsCurrentUserLiked = userPostLikesIds.Contains(p.Post.Id),
                        Id        = p.Post.Id,
                        PostParts = p.PostParts.Select(f => new PostPartDisplay()
                        {
                            Description = f.Description,
                            Id          = f.Id,
                            Title       = f.Title,
                            Image       = new BaseImageReturn()
                            {
                                Dimension = f.Image.ImageDimension,
                                Extension = f.Image.FileExtension,
                                LazyUrl   = f.Image.BlurLazyPath,
                                ThumbUrl  = f.Image.ThumbPath,
                                SmallUrl  = f.Image.SmallPath,
                                Url       = f.Image.ResizedPath,
                            }
                        }).ToList()
                    });


                    foreach (var post in AddPostActivityDtos)
                    {
                        post.Rating         = GetPostRating(post.Id, 10);
                        post.CollectionInfo = post.CollectionInfo ?? new PostCollectionInfo()
                        {
                        };
                        post.IsCurrentUserLiked = userPostLikesIds.Contains(post.Id);
                        post.FavouriteCount     = _postCacheService.GetPostLikesCount(post.Id)
                                                  ?? _postDataService.GetPostLikeCount(post.Id, cacheTreshold: 20);
                        post.ReviewCount = _postDataService.GetPostReviewsCount(post.Id);

                        var postActivity = activities
                                           .FirstOrDefault(p => p.FeedType == UserActivityType.Add_New_Post && p.SourceEntityId == post.Id);

                        ret.Entities.Add(new UserActivityDTO <IActivityEntity>()
                        {
                            Id = postActivity.Id,
                            DateUtcActivity  = postActivity.DateUtcModified,
                            AppUserId        = postActivity.AppUserId,
                            FeedType         = UserActivityType.Add_New_Post,
                            ParentEntityType = ParentEntityType.None,
                            PrimaryEntity    = post
                        });
                    }
                    break;

                case UserActivityType.Add_New_Post_To_Collection:
                    break;

                case UserActivityType.Post_Got_In_Trends:
                    break;

                default:
                    break;
                }
            }
            ret.Entities = ret.Entities.OrderByDescending(p => p.DateUtcActivity).ToList().ToPaginatedList(activities.PageIndex, activities.PageSize, activities.TotalCount);
            return(ret);
        }
Пример #3
0
 public ActionResult Editor(int id, int? page)
 {
     var blogs = new PaginatedList<Blog>(rep.BlogsDoUsuario(id), page ?? 0, 5);
     if (blogs.Count() > 0)
         ViewData["Editor"] = blogs.FirstOrDefault().Editor.Nome;
     rep.Dispose();
     return View(blogs);
 }
Пример #4
0
 public ActionResult Editor(int id, int? page)
 {
     var artigos = new PaginatedList<Artigo>(rep.ArtigosDoUsuario(id), page ?? 0, 5);
     if (artigos.Count() > 0)
         ViewData["Editor"] = artigos.FirstOrDefault().Editor.Nome;
     rep.Dispose();
     return View(artigos);
 }