示例#1
0
        public ActionResult Index(int page = 1, ViewSortOrder sortOrder = ViewSortOrder.DateAscending)
        {
            this.pageSize = 20;

            CategoriesViewModel model =
                ForumMapping
                    .CategoriesToCategoriesViewModel(new ForumItems()
                        .WithPageSize(this.pageSize)
                        .WithSortOrder(sortOrder)
                        .Categories(page),
                        sortOrder,
                        page,
                        this.pageSize
                    );

            foreach (var category in model.Categories)
            {
                category.ThreadCount = db.Threads.Count(t => t.CategoryId == category.CategoryId);
            }

            ViewBag.Message = "Forum";
            return View(model);
        }
示例#2
0
 /// <summary>
 /// Withes the sort order.
 /// </summary>
 /// <param name="newSortOrder">The sort order.</param>
 /// <returns>Forum Entities</returns>
 public ForumItems WithSortOrder(ViewSortOrder newSortOrder)
 {
     this.sortOrder = newSortOrder;
     return this;
 }
示例#3
0
        public static ForumPostsViewModel ForumPostsToForumPostsViewModel(IQueryable<ForumPost> posts, Thread thread, ViewSortOrder sort, int page = 1, int pageSize = 20)
        {
            var listOfPosts = new List<ForumPostViewModel>();

            foreach (ForumPost forumPost in posts)
            {
                listOfPosts.Add(
                    new ForumPostViewModel
                    {
                        ForumPostId = forumPost.ForumPostId,
                        Username = forumPost.Username,
                        Date =
                            (forumPost.Modified > forumPost.Created ? forumPost.Modified : forumPost.Created).ToString
                            (),
                        Content = forumPost.Content,
                    });
            }

            var model = new ForumPostsViewModel
            {
                ForumPosts = listOfPosts.Where(p => p != null),
                PagingInfo =
                    new PagingInfo
                    {
                        CurrentPage = page,
                        ItemsPerPage = pageSize,
                        TotalItems = listOfPosts.Count()
                    },
                SortOrder = sort,
                ParentThread = 
                    new ThreadViewModel
                    {
                        ThreadId = thread.ThreadId,
                        CategoryId = thread.CategoryId,
                        Username = thread.Username,
                        Subject = thread.Subject,
                        Date = thread.Modified.ToString()
                    }
            };

            return model;
        }
示例#4
0
        /// <summary>
        /// Threadses to threads view model.
        /// </summary>
        /// <param name="threads">The threads.</param>
        /// <param name="category">The category.</param>
        /// <param name="sort">The sort.</param>
        /// <param name="page">The page.</param>
        /// <param name="pageSize">Size of the page.</param>
        /// <returns>New ThreadsViewModel</returns>
        public static ThreadsViewModel ThreadsToThreadsViewModel(IQueryable<Thread> threads, Category category, ViewSortOrder sort, int page = 1, int pageSize = 20)
        {
            var threadList = new List<ThreadViewModel>();

            foreach (Thread thread in threads)
            {
                threadList.Add(
                    new ThreadViewModel
                    {
                        ThreadId = thread.ThreadId,
                        Subject = thread.Subject,
                        Date = (thread.Modified > thread.Created ? thread.Modified : thread.Created).ToString(),
                        Username = thread.Username,
                        CategoryId = category.CategoryId
                    });
            }

            var model = new ThreadsViewModel
            {
                Threads = threadList.Where(t => t != null),
                PagingInfo =
                    new PagingInfo
                    {
                        CurrentPage = page,
                        ItemsPerPage = pageSize,
                        TotalItems = threadList.Count()
                    },
                Category = 
                    new CategoryViewModel
                    {
                        CategoryId = category.CategoryId,
                        Title = category.Title,
                        Username = category.Username
                    },
                SortOrder = sort
            };

            return model;
        }
示例#5
0
        /// <summary>
        /// Categorieses to categories view model.
        /// </summary>
        /// <param name="categories">The categories.</param>
        /// <param name="sort">The sort.</param>
        /// <param name="page">The page.</param>
        /// <param name="pageSize">Size of the page.</param>
        /// <returns>New Category View Model</returns>
        public static CategoriesViewModel CategoriesToCategoriesViewModel(IQueryable<Category> categories, ViewSortOrder sort, int page = 1, int pageSize = 20 )
        {
            var categoriesList = new List<CategoryViewModel>();

            foreach (var category in categories)
            {
                categoriesList.Add(
                    new CategoryViewModel
                    {
                        CategoryId = category.CategoryId,
                        Title = category.Title,
                        Date = category.Modified .ToString(),
                        Username = category.Username
                    });
            }

            CategoriesViewModel model = new CategoriesViewModel
            {
                Categories = categoriesList,
                PagingInfo =
                    new PagingInfo
                    {
                        CurrentPage = page,
                        ItemsPerPage = pageSize,
                        TotalItems = categories.Count()
                    },
                SortOrder = sort
            };

            return model;
        }
示例#6
0
        /// <summary>
        /// Indexes this instance.
        /// </summary>
        /// <param name="categoryId">The category id.</param>
        /// <param name="page">The page.</param>
        /// <param name="sortOrder">The sort order.</param>
        /// <returns>
        /// List of all threads
        /// </returns>
        public async Task<ActionResult> ListThreads(int categoryId = 0, int page = 1, ViewSortOrder sortOrder = ViewSortOrder.DateAscending)
        {
            this.pageSize = 20;

            Category category = await db.Categories.SingleOrDefaultAsync(c => c.CategoryId == categoryId);

            var model =
                ForumMapping.ThreadsToThreadsViewModel(
                    new ForumItems().WithPageSize(this.pageSize)
                        .WithCategoryId(categoryId)
                        .WithSortOrder(sortOrder)
                        .Threads(page),
                    category,
                    sortOrder,
                    page,
                    this.pageSize
                    );

            foreach (var thread in model.Threads)
            {
                var thread1 = thread;
                thread.PostCount = await db.ForumPosts.CountAsync(p => p.ThreadId == thread1.ThreadId);
            }

            return View(model);
        }
示例#7
0
        public ActionResult ListThreadsPartial(string name, int page = 1, ViewSortOrder sortOrder = ViewSortOrder.DateAscending)
        {
            this.pageSize = 20;

            Category category = db.Categories.FirstOrDefault(c => c.Title == name);

            var model =
                ForumMapping.ThreadsToThreadsViewModel(
                    new ForumItems().WithPageSize(
                        this.pageSize).WithCategoryId(category.CategoryId).WithSortOrder(sortOrder).Threads(page),
                    category,
                    sortOrder,
                    page,
                    this.pageSize
                    );

            return View(model);
        }
示例#8
0
        public async Task<ActionResult> ViewThread(int threadId, int page = 1, ViewSortOrder sortOrder = ViewSortOrder.DateAscending )
        {
            var identityManager = new IdentityManager();
            var thread = await this.db.Threads.SingleOrDefaultAsync(t => t.ThreadId == threadId);

            ForumPostsViewModel model =
                ForumMapping.ForumPostsToForumPostsViewModel(
                    new ForumItems().WithThreadId(threadId).WithPageSize(
                        this.pageSize).WithSortOrder(sortOrder).Posts(page),
                        thread,
                        sortOrder,
                        page,
                        this.pageSize);

            foreach (var post in model.ForumPosts)
            {
                var userId = await identityManager.GetUserIdByNameAsync(post.Username);
                var tag = "Guest";

                if (!string.IsNullOrEmpty(userId))
                {
                    if (identityManager.IsUserInRole(userId, "Member"))
                    {
                        tag = "Member";
                    }
                    else if (identityManager.IsUserInRole(userId, "Moderator"))
                    {
                        tag = "Moderator";
                    }
                    else if (identityManager.IsUserInRole(userId, "Admin"))
                    {
                        tag = "Admin";
                    }
                }

                post.UserTag = tag;

                var post1 = post;
                post.UserPosts = User.Identity.IsAuthenticated
                    ? await db.ForumPosts.CountAsync(p => p.Username == post1.Username)
                    : 0;

            }

            this.UpdateCategoryList();

            model.ParentThread.CategoryName =
                CategoryList.SingleOrDefault(c => thread != null && c.Key == thread.CategoryId).Value;
            
            return this.View(model);
        }