コード例 #1
0
ファイル: Topics.cs プロジェクト: Smilefounder/forum
        public Topics(
            ApplicationDbContext applicationDbContext,
            UserContext userContext,
            BoardRepository boardRepository,
            BookmarkRepository bookmarkRepository,
            MessageRepository messageRepository,
            RoleRepository roleRepository,
            SmileyRepository smileyRepository,
            TopicRepository topicRepository,
            IForumViewResult forumViewResult,
            IActionContextAccessor actionContextAccessor,
            IUrlHelperFactory urlHelperFactory
            )
        {
            DbContext   = applicationDbContext;
            UserContext = userContext;

            BoardRepository    = boardRepository;
            BookmarkRepository = bookmarkRepository;
            MessageRepository  = messageRepository;
            RoleRepository     = roleRepository;
            SmileyRepository   = smileyRepository;
            TopicRepository    = topicRepository;

            ForumViewResult = forumViewResult;
            UrlHelper       = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
        }
コード例 #2
0
        public Topics(
            ApplicationDbContext applicationDbContext,
            UserContext userContext,
            AccountRepository accountRepository,
            BoardRepository boardRepository,
            MessageRepository messageRepository,
            NotificationRepository notificationRepository,
            RoleRepository roleRepository,
            SettingsRepository settingsRepository,
            SmileyRepository smileyRepository,
            TopicRepository topicRepository,
            IForumViewResult forumViewResult,
            IActionContextAccessor actionContextAccessor,
            IUrlHelperFactory urlHelperFactory
            )
        {
            DbContext   = applicationDbContext;
            UserContext = userContext;

            AccountRepository      = accountRepository;
            BoardRepository        = boardRepository;
            MessageRepository      = messageRepository;
            NotificationRepository = notificationRepository;
            RoleRepository         = roleRepository;
            SettingsRepository     = settingsRepository;
            SmileyRepository       = smileyRepository;
            TopicRepository        = topicRepository;

            ForumViewResult = forumViewResult;
            UrlHelper       = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
        }
コード例 #3
0
 public Smileys(
     SmileyRepository smileyRepository,
     ForumViewResult forumViewResult
     )
 {
     SmileyRepository = smileyRepository;
     ForumViewResult  = forumViewResult;
 }
コード例 #4
0
ファイル: Smileys.cs プロジェクト: iomeone/forum-1
        public async Task <IActionResult> Create(ControllerModels.Smileys.CreateSmileyInput input)
        {
            if (ModelState.IsValid)
            {
                var allowedExtensions = new[] { "gif", "png" };
                var extension         = Path.GetExtension(input.File.FileName).ToLower().Substring(1);

                if (Regex.IsMatch(input.File.FileName, @"[^a-zA-Z 0-9_\-\.]"))
                {
                    ModelState.AddModelError("File", "Your filename contains invalid characters.");
                }

                if (!allowedExtensions.Contains(extension))
                {
                    ModelState.AddModelError("File", $"Your file must be: {string.Join(", ", allowedExtensions)}.");
                }

                if (!(await SmileyRepository.FindByCode(input.Code) is null))
                {
                    ModelState.AddModelError(nameof(input.Code), "Another smiley exists with that code.");
                }

                if (ModelState.IsValid)
                {
                    var smileyRecord = new DataModels.Smiley {
                        Code     = input.Code,
                        Thought  = input.Thought,
                        FileName = input.File.FileName
                    };

                    DbContext.Smileys.Add(smileyRecord);

                    using (var inputStream = input.File.OpenReadStream()) {
                        smileyRecord.Path = await ImageStore.Save(new ImageStoreSaveOptions {
                            ContainerName = Constants.InternalKeys.SmileyImageContainer,
                            FileName      = input.File.FileName,
                            ContentType   = input.File.ContentType,
                            InputStream   = inputStream,
                            Overwrite     = true
                        });
                    }

                    await DbContext.SaveChangesAsync();

                    TempData[Constants.InternalKeys.StatusMessage] = $"Smiley '{input.File.FileName}' was added with code '{input.Code}'.";

                    var referrer = this.GetReferrer();
                    return(Redirect(referrer));
                }
            }

            var viewModel = new ViewModels.CreatePage {
                Code    = input.Code,
                Thought = input.Thought
            };

            return(View(viewModel));
        }
コード例 #5
0
ファイル: Smileys.cs プロジェクト: Smilefounder/forum
 public Smileys(
     ApplicationDbContext dbContext,
     SmileyRepository smileyRepository,
     IForumViewResult forumViewResult
     )
 {
     DbContext        = dbContext;
     SmileyRepository = smileyRepository;
     ForumViewResult  = forumViewResult;
 }
コード例 #6
0
ファイル: Smileys.cs プロジェクト: iomeone/forum-1
 public Smileys(
     ApplicationDbContext dbContext,
     SmileyRepository smileyRepository,
     IImageStore imageStore
     )
 {
     DbContext        = dbContext;
     SmileyRepository = smileyRepository;
     ImageStore       = imageStore;
 }
コード例 #7
0
ファイル: Smileys.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Delete(int id)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = await SmileyRepository.Delete(id);

                return(await ForumViewResult.RedirectFromService(this, serviceResponse));
            }

            return(ForumViewResult.RedirectToReferrer(this));
        }
コード例 #8
0
ファイル: Smileys.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Edit(EditSmileysInput input)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = SmileyRepository.Update(input);
                return(await ForumViewResult.RedirectFromService(this, serviceResponse, failSync : FailureCallback));
            }

            return(FailureCallback());

            IActionResult FailureCallback()
            {
                return(RedirectToAction(nameof(Index)));
            }
        }
コード例 #9
0
ファイル: Topics.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Display(int id, int pageId = 1, int target = -1)
        {
            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var viewModel = await GetDisplayPageModel(id, pageId, target);

            if (string.IsNullOrEmpty(viewModel.RedirectPath))
            {
                return(await ForumViewResult.ViewResult(this, viewModel));
            }
            else
            {
                return(Redirect(viewModel.RedirectPath));
            }
        }
コード例 #10
0
        public async Task <IActionResult> Edit(EditSmileysInput input)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = SmileyRepository.Update(input);
                return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback));
            }

            return(await FailureCallback());

            async Task <IActionResult> FailureCallback()
            {
                return(await Task.Run(() => { return ForumViewResult.RedirectToReferrer(this); }));
            }
        }
コード例 #11
0
ファイル: Messages.cs プロジェクト: fabiojansenbr/forum
        public async Task <IActionResult> Reply(ControllerModels.Messages.CreateReplyInput input)
        {
            if (input.Id > 0)
            {
                var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == input.Id);

                if (message is null || message.Deleted)
                {
                    throw new HttpNotFoundError();
                }
            }

            if (ModelState.IsValid)
            {
                var result = await MessageRepository.CreateReply(input);

                ModelState.AddModelErrors(result.Errors);

                if (ModelState.IsValid)
                {
                    var hubAction = "new-reply";

                    if (result.Merged)
                    {
                        hubAction = "updated-message";
                    }

                    await ForumHub.Clients.All.SendAsync(hubAction, new HubModels.Message {
                        TopicId   = result.TopicId,
                        MessageId = result.MessageId
                    });

                    var redirectPath = base.Url.DisplayMessage(result.TopicId, result.MessageId);
                    return(Redirect(redirectPath));
                }
            }

            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var viewModel = new ViewModels.Messages.ReplyForm {
                Id        = input.Id.ToString(),
                Body      = input.Body,
                ElementId = $"message-reply-{input.Id}"
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #12
0
ファイル: Messages.cs プロジェクト: fabiojansenbr/forum
        public async Task <IActionResult> Reply(int id = 0)
        {
            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id);

            if (message is null || message.Deleted)
            {
                throw new HttpNotFoundError();
            }

            var viewModel = new ViewModels.Messages.ReplyForm {
                Id        = id.ToString(),
                ElementId = $"message-reply-{id}"
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #13
0
        public async Task <IActionResult> Edit(ControllerModels.Smileys.EditSmileysInput input)
        {
            if (ModelState.IsValid)
            {
                var result = await SmileyRepository.Edit(input);

                ModelState.AddModelErrors(result.Errors);

                if (ModelState.IsValid)
                {
                    TempData[Constants.InternalKeys.StatusMessage] = $"Smileys were updated.";

                    var referrer = ForumViewResult.GetReferrer(this);
                    return(Redirect(referrer));
                }
            }

            return(RedirectToAction(nameof(Index)));
        }
コード例 #14
0
ファイル: Messages.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Edit(int id)
        {
            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var record = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id);

            if (record is null)
            {
                throw new HttpNotFoundError();
            }

            var viewModel = new ViewModels.Messages.EditMessageForm {
                Id        = id.ToString(),
                Body      = record.OriginalBody,
                ElementId = $"edit-message-{id}"
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #15
0
ファイル: Topics.cs プロジェクト: fabiojansenbr/forum
        public async Task <IActionResult> Create(ControllerModels.Topics.CreateTopicInput input)
        {
            if (ModelState.IsValid)
            {
                // Creating a topic via bookmarklet
                if (Request.Method == "GET" && input.BoardId != null)
                {
                    input.SelectedBoards.Add((int)input.BoardId);
                }
                else
                {
                    foreach (var board in await BoardRepository.Records())
                    {
                        if (Request.Form.TryGetValue("Selected_" + board.Id, out var boardSelected))
                        {
                            if (boardSelected == "True")
                            {
                                input.SelectedBoards.Add(board.Id);
                            }
                        }
                    }
                }

                var result = await TopicRepository.CreateTopic(input);

                ModelState.AddModelErrors(result.Errors);

                if (ModelState.IsValid)
                {
                    var redirectPath = Url.DisplayMessage(result.TopicId, result.MessageId);
                    return(Redirect(redirectPath));
                }
            }

            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var viewModel = new ViewModels.Topics.CreateTopicForm {
                BoardId = input.BoardId.ToString(),
                Body    = input.Body
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #16
0
ファイル: Messages.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Create(InputModels.MessageInput input)
        {
            if (ModelState.IsValid)
            {
                if (Request.Method == "GET" && input.BoardId != null)
                {
                    input.SelectedBoards.Add((int)input.BoardId);
                }
                else
                {
                    foreach (var board in await BoardRepository.Records())
                    {
                        if (Request.Form.TryGetValue("Selected_" + board.Id, out var boardSelected))
                        {
                            if (boardSelected == "True")
                            {
                                input.SelectedBoards.Add(board.Id);
                            }
                        }
                    }
                }

                var serviceResponse = await MessageRepository.CreateTopic(input);

                return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback));
            }

            return(await FailureCallback());

            async Task <IActionResult> FailureCallback()
            {
                ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

                var viewModel = new ViewModels.Messages.CreateTopicForm {
                    Id      = "0",
                    BoardId = input.BoardId.ToString(),
                    Body    = input.Body
                };

                return(await ForumViewResult.ViewResult(this, viewModel));
            }
        }
コード例 #17
0
ファイル: Messages.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Reply(InputModels.MessageInput input)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = await MessageRepository.CreateReply(input);

                if (input.SideLoad)
                {
                    foreach (var kvp in serviceResponse.Errors)
                    {
                        ModelState.AddModelError(kvp.Key, kvp.Value);
                    }
                }
                else
                {
                    return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback));
                }
            }

            if (input.SideLoad)
            {
                var errors = ModelState.Keys.Where(k => ModelState[k].Errors.Count > 0).Select(k => new { propertyName = k, errorMessage = ModelState[k].Errors[0].ErrorMessage });
                return(new JsonResult(errors));
            }
            else
            {
                return(await FailureCallback());
            }

            async Task <IActionResult> FailureCallback()
            {
                ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

                var viewModel = new ViewModels.Messages.ReplyForm {
                    Id        = input.Id.ToString(),
                    Body      = input.Body,
                    ElementId = $"message-reply-{input.Id}"
                };

                return(await ForumViewResult.ViewResult(this, viewModel));
            }
        }
コード例 #18
0
ファイル: Messages.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Create(int id = 0)
        {
            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var board = (await BoardRepository.Records()).First(item => item.Id == id);

            if (Request.Query.TryGetValue("source", out var source))
            {
                return(await Create(new InputModels.MessageInput {
                    BoardId = id, Body = source
                }));
            }

            var viewModel = new ViewModels.Messages.CreateTopicForm {
                Id      = "0",
                BoardId = id.ToString()
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #19
0
ファイル: Messages.cs プロジェクト: Smilefounder/forum
 public Messages(
     ApplicationDbContext dbContext,
     UserContext userContext,
     AccountRepository accountRepository,
     BoardRepository boardRepository,
     MessageRepository messageRepository,
     SmileyRepository smileyRepository,
     IActionContextAccessor actionContextAccessor,
     IForumViewResult forumViewResult,
     IUrlHelperFactory urlHelperFactory
     )
 {
     DbContext         = dbContext;
     UserContext       = userContext;
     AccountRepository = accountRepository;
     BoardRepository   = boardRepository;
     MessageRepository = messageRepository;
     SmileyRepository  = smileyRepository;
     ForumViewResult   = forumViewResult;
     UrlHelper         = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
 }
コード例 #20
0
ファイル: Smileys.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Index()
        {
            var viewModel = new ViewModels.IndexPage();

            foreach (var smiley in await SmileyRepository.Records())
            {
                var sortColumn = smiley.SortOrder / 1000;
                var sortRow    = smiley.SortOrder % 1000;

                viewModel.Smileys.Add(new ViewModels.IndexItem {
                    Id      = smiley.Id,
                    Code    = smiley.Code,
                    Path    = smiley.Path,
                    Thought = smiley.Thought,
                    Column  = sortColumn,
                    Row     = sortRow
                });
            }

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #21
0
ファイル: Smileys.cs プロジェクト: Smilefounder/forum
        public async Task <IActionResult> Create(CreateSmileyInput input)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = await SmileyRepository.Create(input);

                return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback));
            }

            return(await FailureCallback());

            async Task <IActionResult> FailureCallback()
            {
                var viewModel = new ViewModels.CreatePage {
                    Code    = input.Code,
                    Thought = input.Thought
                };

                return(await ForumViewResult.ViewResult(this, viewModel));
            }
        }
コード例 #22
0
ファイル: Topics.cs プロジェクト: fabiojansenbr/forum
        public async Task <IActionResult> Create(int id = 0)
        {
            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var boards = await BoardRepository.Records();

            var board = boards.First(item => item.Id == id);

            // Creating a topic via bookmarklet
            if (Request.Query.TryGetValue("source", out var source))
            {
                return(await Create(new ControllerModels.Topics.CreateTopicInput {
                    BoardId = id, Body = source
                }));
            }

            var viewModel = new ViewModels.Topics.CreateTopicForm {
                BoardId = id.ToString()
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #23
0
ファイル: Messages.cs プロジェクト: fabiojansenbr/forum
 public Messages(
     ApplicationDbContext dbContext,
     UserContext userContext,
     AccountRepository accountRepository,
     BoardRepository boardRepository,
     MessageRepository messageRepository,
     SmileyRepository smileyRepository,
     TopicRepository topicRepository,
     IHubContext <ForumHub> forumHub,
     ForumViewResult forumViewResult
     )
 {
     DbContext         = dbContext;
     UserContext       = userContext;
     AccountRepository = accountRepository;
     BoardRepository   = boardRepository;
     MessageRepository = messageRepository;
     SmileyRepository  = smileyRepository;
     TopicRepository   = topicRepository;
     ForumHub          = forumHub;
     ForumViewResult   = forumViewResult;
 }
コード例 #24
0
ファイル: Smileys.cs プロジェクト: iomeone/forum-1
        public async Task <IActionResult> Delete(int id)
        {
            if (ModelState.IsValid)
            {
                var smileyRecord = await SmileyRepository.FindById(id);

                if (smileyRecord is null)
                {
                    TempData[Constants.InternalKeys.StatusMessage] = $"No smiley was found with the id '{id}'";
                    return(this.RedirectToReferrer());
                }

                DbContext.Smileys.Remove(smileyRecord);

                var thoughts = DbContext.MessageThoughts.Where(t => t.SmileyId == id).ToList();

                if (thoughts.Any())
                {
                    DbContext.MessageThoughts.RemoveRange(thoughts);
                }

                // Only delete the file if no other smileys are using the file.
                if (!DbContext.Smileys.Any(s => s.FileName == smileyRecord.FileName))
                {
                    await ImageStore.Delete(new ImageStoreDeleteOptions {
                        ContainerName = Constants.InternalKeys.SmileyImageContainer,
                        Path          = smileyRecord.Path
                    });
                }

                await DbContext.SaveChangesAsync();

                TempData[Constants.InternalKeys.StatusMessage] = "The smiley was deleted.";
            }

            return(this.RedirectToReferrer());
        }
コード例 #25
0
        public async Task <IActionResult> Create(ControllerModels.Smileys.CreateSmileyInput input)
        {
            if (ModelState.IsValid)
            {
                var result = await SmileyRepository.Create(input);

                ModelState.AddModelErrors(result.Errors);

                if (ModelState.IsValid)
                {
                    TempData[Constants.InternalKeys.StatusMessage] = $"Smiley '{input.File.FileName}' was added with code '{input.Code}'.";

                    var referrer = ForumViewResult.GetReferrer(this);
                    return(Redirect(referrer));
                }
            }

            var viewModel = new ViewModels.CreatePage {
                Code    = input.Code,
                Thought = input.Thought
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #26
0
ファイル: Topics.cs プロジェクト: fabiojansenbr/forum
        public Topics(
            ApplicationDbContext applicationDbContext,
            UserContext userContext,
            BoardRepository boardRepository,
            BookmarkRepository bookmarkRepository,
            MessageRepository messageRepository,
            SmileyRepository smileyRepository,
            TopicRepository topicRepository,
            IHubContext <ForumHub> forumHub,
            ForumViewResult forumViewResult
            )
        {
            DbContext   = applicationDbContext;
            CurrentUser = userContext;

            BoardRepository    = boardRepository;
            BookmarkRepository = bookmarkRepository;
            MessageRepository  = messageRepository;
            SmileyRepository   = smileyRepository;
            TopicRepository    = topicRepository;

            ForumHub        = forumHub;
            ForumViewResult = forumViewResult;
        }
コード例 #27
0
ファイル: Messages.cs プロジェクト: fabiojansenbr/forum
        public async Task <IActionResult> Edit(int id)
        {
            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id);

            if (message is null || message.Deleted)
            {
                throw new HttpNotFoundError();
            }

            if (message.PostedById != UserContext.ApplicationUser.Id && !UserContext.IsAdmin)
            {
                throw new HttpForbiddenError();
            }

            var viewModel = new ViewModels.Messages.EditMessageForm {
                Id        = id.ToString(),
                Body      = message.OriginalBody,
                ElementId = $"edit-message-{id}"
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
コード例 #28
0
ファイル: Topics.cs プロジェクト: fabiojansenbr/forum
        public async Task <IActionResult> Display(int id, int page = 1, int target = -1)
        {
            var topic = await DbContext.Topics.FindAsync(id);

            if (topic is null || topic.Deleted)
            {
                throw new HttpNotFoundError();
            }

            if (page < 1)
            {
                var redirectUrl = Url.Action(nameof(Display), new { id, page = 1, target });
                return(Redirect(redirectUrl));
            }

            var messageIds = MessageRepository.GetMessageIds(topic.Id);

            if (target >= 0)
            {
                var targetPage = MessageRepository.GetPageNumber(target, messageIds);

                if (targetPage != page)
                {
                    return(Redirect(GetRedirectPath(id, targetPage, target)));
                }
            }

            var take           = CurrentUser.ApplicationUser.MessagesPerPage;
            var skip           = take * (page - 1);
            var totalPages     = Convert.ToInt32(Math.Ceiling(1.0 * messageIds.Count / take));
            var pageMessageIds = messageIds.Skip(skip).Take(take).ToList();

            var viewModel = new ViewModels.Topics.TopicDisplayPage {
                Id              = topic.Id,
                FirstMessageId  = topic.FirstMessageId,
                Subject         = string.IsNullOrEmpty(topic.FirstMessageShortPreview) ? "No subject" : topic.FirstMessageShortPreview,
                AssignedBoards  = new List <ViewModels.Boards.IndexBoard>(),
                IsAuthenticated = CurrentUser.IsAuthenticated,
                IsOwner         = topic.FirstMessagePostedById == CurrentUser.Id,
                IsAdmin         = CurrentUser.IsAdmin,
                IsPinned        = topic.Pinned,
                ShowFavicons    = CurrentUser.ApplicationUser.ShowFavicons,
                TotalPages      = totalPages,
                ReplyCount      = topic.ReplyCount,
                ViewCount       = topic.ViewCount,
                CurrentPage     = page,
                ReplyForm       = new ViewModels.Messages.ReplyForm {
                    Id        = "0",
                    TopicId   = topic.Id.ToString(),
                    ElementId = "topic-reply"
                }
            };

            await isBookmarked();
            await loadMessages();
            await loadCategories();
            await loadTopicBoards();
            await loadSmileyViewData();

            return(await ForumViewResult.ViewResult(this, viewModel));

            async Task isBookmarked()
            {
                viewModel.IsBookmarked = await BookmarkRepository.IsBookmarked(topic.Id);
            }

            async Task loadMessages()
            {
                viewModel.Messages = await MessageRepository.GetMessages(pageMessageIds);

                var latestMessageTime = viewModel.Messages.Max(r => r.RecordTime);
                await TopicRepository.MarkRead(topic.Id, latestMessageTime, pageMessageIds);

                topic.ViewCount++;
                DbContext.Update(topic);
                await DbContext.SaveChangesAsync();
            }

            async Task loadCategories()
            {
                viewModel.Categories = await BoardRepository.CategoryIndex();
            }

            async Task loadTopicBoards()
            {
                var topicBoards = await BoardRepository.GetTopicBoards(topic.Id);

                foreach (var topicBoard in topicBoards)
                {
                    var indexBoard = await BoardRepository.GetIndexBoard(topicBoard);

                    viewModel.AssignedBoards.Add(indexBoard);
                }
            }

            async Task loadSmileyViewData()
            {
                ViewData[Constants.InternalKeys.SmileyViewData] = await SmileyRepository.GetSelectorList();
            }
        }
コード例 #29
0
ファイル: Smileys.cs プロジェクト: iomeone/forum-1
        public async Task <IActionResult> Edit(ControllerModels.Smileys.EditSmileysInput input)
        {
            if (ModelState.IsValid)
            {
                var smileySortOrder = new Dictionary <int, int>();

                foreach (var smileyInput in input.Smileys)
                {
                    var smileyRecord = await SmileyRepository.FindById(smileyInput.Id);

                    if (smileyRecord is null)
                    {
                        ModelState.AddModelError(nameof(smileyInput.Id), $@"No smiley was found with the id '{smileyInput.Id}'");
                        break;
                    }

                    smileySortOrder.Add(smileyRecord.Id, smileyRecord.SortOrder);
                }

                if (ModelState.IsValid)
                {
                    foreach (var smileyInput in input.Smileys)
                    {
                        var newSortOrder = (smileyInput.Column * 1000) + smileyInput.Row;

                        if (smileySortOrder[smileyInput.Id] != newSortOrder)
                        {
                            foreach (var kvp in smileySortOrder.Where(kvp => smileyInput.Column == kvp.Value / 1000 && kvp.Value >= newSortOrder).ToList())
                            {
                                smileySortOrder[kvp.Key]++;
                            }

                            smileySortOrder[smileyInput.Id] = newSortOrder;
                        }
                    }

                    foreach (var smileyInput in input.Smileys)
                    {
                        var smileyRecord = await SmileyRepository.FindById(smileyInput.Id);

                        if (smileyRecord.Code != smileyInput.Code)
                        {
                            smileyRecord.Code = smileyInput.Code;
                            DbContext.Update(smileyRecord);
                        }

                        if (smileyRecord.Thought != smileyInput.Thought)
                        {
                            smileyRecord.Thought = smileyInput.Thought;
                            DbContext.Update(smileyRecord);
                        }

                        if (smileyRecord.SortOrder != smileySortOrder[smileyRecord.Id])
                        {
                            smileyRecord.SortOrder = smileySortOrder[smileyRecord.Id];
                            DbContext.Update(smileyRecord);
                        }
                    }

                    await DbContext.SaveChangesAsync();

                    TempData[Constants.InternalKeys.StatusMessage] = $"Smileys were updated.";

                    var referrer = this.GetReferrer();
                    return(Redirect(referrer));
                }
            }

            return(RedirectToAction(nameof(Index)));
        }