public static ProjectModerationDisputeModel ToDisputeModel(this ProjectModeration entity) { if (entity == null) return null; var model = new ProjectModerationDisputeModel { Id = entity.Id, Project = entity.Project.ToModel(), ComplaintId = entity.ComplaintId, ComplaintType = entity.ComplaintType, TypeDescription = entity.ComplaintType.GetDescription(), ModerationQueue = entity.ModerationQueue.ToModel(), Reason = entity.Reason }; return model; }
private ProjectModerationDisputeModel PrepareModerationDisputeModel(ProjectModerationDisputeModel model) { int createdBy = model.Project.CreatedById ?? 0; if (model.Project.CreatedById != null) model.CreatedByUser = _userService.GetUserById(createdBy).ToModel(); model.ProjectUserHistory = _projectService.GetAllProjectUserHistory(model.Project.Id).Select(x => x.ToModel()).ToList(); foreach (var user in model.Project.Owners) { if (createdBy != user.Id) { user.Actions.Add(new DeleteActionLink(user.Id, Search, Page)); model.CurrentModerators.Add(user); } } return model; }
public ActionResult Moderation(int id, bool type, ProjectModerationDisputeModel form) { if (!_permissionService.Authorize(PermissionProvider.ManageProjects)) return AccessDeniedView(); // Get the queue item var queue = _moderationQueueService.GetProjectModerationByModerationQueueId(id); if (queue == null || queue.Deleted) return RedirectToAction("index", "moderation"); // Get the action in preparation for updating var project = queue.Project; if (project == null) return RedirectToAction("index"); var model = queue.ToDisputeModel(); try { var queueUpdate = _moderationQueueService.GetById(id); project.ModeratorNotes = form.Project.ModerationNotes; if (type) { // Update the project properties project.LastModeratorApprovalBy = _workContext.CurrentUser.Id; project.LastModeratorApprovalDate = DateTime.Now; if (project.Owners.All(x => x.Id != model.ModerationQueue.CreatedBy)) project.Owners.Add(_userService.GetUserById(model.ModerationQueue.CreatedBy)); // Commit the changes _projectService.UpdateProject(project); SuccessNotification("The moderation request has been resolved, the action has been changed."); // Queue the messages _messageQueueService.ProjectUserMessage(project, MessageType.ProjectDisputeApproved, _userService.GetUserById(queue.ModerationQueue.CreatedBy), form.ModerationQueue.Notes); } else { // Commit the changes _projectService.UpdateProject(project); SuccessNotification("The moderation request has been resolved, the action has not be changed."); // Queue the messages _messageQueueService.ProjectUserMessage(project, MessageType.ProjectDisputeRejected, _userService.GetUserById(queue.ModerationQueue.CreatedBy), form.ModerationQueue.Notes); } // Mark the moderation request as resolved queueUpdate.StatusType = ModerationStatusType.Closed; _moderationQueueService.UpdateModerationQueue(queueUpdate); return RedirectToRoute("Admin_default", new { Controller = "moderation", Action = "index" }); } catch (Exception ex) { ErrorNotification(ex.ToString()); ErrorNotification("An error occurred saving the action details, please try again."); } PrepareModerationBreadcrumbs(); // Return the view if (model.ComplaintType == ProjectComplaintType.DisputeOwnership) return View("DisputeOwnership", PrepareModerationDisputeModel(model)); return View(model); }