Пример #1
0
 private void unSubscribeEvents()
 {
     // unsubscribe events
     DiscussionViewModel.removeObserver(onChatRoomChange);
     DiscussionViewModel.removeObserver(onUpdateUsersStatusChange);
     _main.Startup.Dal.DALAgent.PropertyChanged -= onAgentDataDownloadingStatusChange;
 }
Пример #2
0
        private async Task signOutFromServerAsync(List <DiscussionModel> discussionList)
        {
            try
            {
                // disconnect the authenticated user
                Agent authenticatedUser = _main.Startup.Bl.BlSecurity.GetAuthenticatedUser();
                authenticatedUser.IsOnline = false;
                await _main.Startup.Bl.BlAgent.UpdateAgentAsync(new List <Agent> {
                    _main.Startup.Bl.BlSecurity.GetAuthenticatedUser()
                });

                // ending the discussions
                DiscussionViewModel.SelectedAgentModel = (AgentModel)_main.ModelCreator.createModel(QOBDModels.Enums.EModel.AGENT);
                await DiscussionViewModel.broadcastMessageAsync(DiscussionViewModel.ByeMessage);

                foreach (var ClientElement in DiscussionViewModel.ServerClientsDictionary)
                {
                    ClientElement.Value.Item2.Close();
                }
            }
            catch (System.IO.IOException) { }
            catch (System.Net.Sockets.SocketException) { }
            catch (Exception ex)
            {
                Log.error("<[" + _main.Startup.Bl.BlSecurity.GetAuthenticatedUser().UserName + "]Localhost =" + _main.Startup.Bl.BlSecurity.GetAuthenticatedUser().IPAddress + "> " + ex.Message, QOBDCommon.Enum.EErrorFrom.CHATROOM);
            }
        }
        public ActionResult Discussion(Guid?id)
        {
            var course = db.Courses.Include("Discussion")
                         .Include("Creator")
                         .Include("Discussion.Messages")
                         .Include("Discussion.Messages.Sender")
                         .Include("Discussion.Readings")
                         .FirstOrDefault(i => i.Id == id);

            if (course == null)
            {
                return(HttpNotFound());
            }

            if (!isMember(course) && !isCourseCreator(course))
            {
                return(RedirectToAction("Index", "Course", new { id = id }));
            }

            var model = new DiscussionViewModel {
                CId           = course.Id,
                CurrentUserId = User.Identity?.GetUserId(),
                Role          = isCourseCreator(course) ? "Creator" : "Member",
                Discussion    = course.Discussion.ToList(),
                IsActive      = course.IsCourseActive
            };

            return(View(model));
        }
        public ActionResult Discussion(Guid?id)
        {
            var community = db.Communities
                            .Include("Discussions")
                            .Include("Discussions.Messages")
                            .Include("Discussions.Messages.Sender")
                            .Include("Discussions.Readings")
                            .FirstOrDefault(i => i.Id == id);

            if (community == null)
            {
                return(HttpNotFound());
            }

            if (Status(community) != Enums.StatusType.Creator && Status(community) != Enums.StatusType.Member)
            {
                return(RedirectToAction("Index", "Community", new { id = id }));
            }

            var model = new DiscussionViewModel {
                CId           = community.Id,
                CurrentUserId = User.Identity?.GetUserId(),
                Role          = Status(community) == Enums.StatusType.Creator ? "Creator" : "Member",
                Discussion    = community.Discussions.ToList()
            };

            return(View(model));
        }
        public DiscussionViewModel CreateDiscussion(DiscussionViewModel discussion, int? currentClientId, int? currentProviderId, string loggedUserId)
        {
            var newDiscussion = new Discussion
            {
                Date = discussion.Date,
                SubjectOfDiscussion = discussion.SubjectOfDiscussion,
                Summary = discussion.Summary,
                Type = discussion.Type,
                NextDiscussionDate = discussion.NextDiscussionDate,
                NextDiscussionNote = discussion.NextDiscussionNote,
                NextDiscussionType = discussion.NextDiscussionType,
                UserId = loggedUserId,
                Comments = discussion.Comments,
                IsFinished = false,
                IsVisible = discussion.IsVisible
            };

            if (currentClientId != null)
            {
                newDiscussion.ClientId = currentClientId;
                newDiscussion.ProviderId = null;
                newDiscussion.Provider = null;
            }
            else if (currentProviderId != null)
            {
                newDiscussion.ProviderId = currentProviderId;
                newDiscussion.ClientId = null;
                newDiscussion.Client = null;
            }

            this.Data.Discussions.Add(newDiscussion);

            var user = this.Data.Users
                .GetById(loggedUserId);

            var schedulerTask = new SchedulerTask()
            {
                Title = discussion.SubjectOfDiscussion,
                Start = discussion.Date,
                End = discussion.Date,
                Description = discussion.Summary,
                IsAllDay = true,
                StartTimezone = null,
                EndTimezone = null,
                RecurrenceRule = null,
                RecurrenceException = null,
                RecurrenceId = null,
                UserId = loggedUserId,
                IsFinished = false
            };

            user.SchedulerTasks.Add(schedulerTask);

            this.Data.SaveChanges();

            discussion.Id = newDiscussion.Id;

            return discussion;
        }
        public JsonResult DestroyDiscussion([DataSourceRequest] DataSourceRequest request, DiscussionViewModel discussion)
        {
            var deletedDiscussion = this.discussions.DestroyDiscussion(discussion);

            var loggedUserId = this.User.Identity.GetUserId();
            Base.CreateActivity(ActivityType.Delete, discussion.Id.ToString(), ActivityTargetType.Discussion, loggedUserId);

            return Json(new[] { discussion }, JsonRequestBehavior.AllowGet);
        }
Пример #7
0
        public DiscussionPage()
        {
            InitializeComponent();

            // Make sure the page is not up in status bar and not in swipe-up area
            On <iOS>().SetUseSafeArea(true);

            BindingContext = new DiscussionViewModel(new DiscussionService());
        }
Пример #8
0
        public bool AddDiscussion(DiscussionViewModel objData)
        {
            bool status      = false;
            var  userDetails = (CustomerLoginDetail)Session["UserSession"];

            objData.objDiscussion.AddedDate   = DateTime.Now;
            objData.objDiscussion.UpdatedDate = DateTime.Now;
            objData.objDiscussion.AddedBy     = userDetails.LoginId;
            status = DR.AddDiscussions(objData.objDiscussion);

            return(status);
        }
Пример #9
0
        public ActionResult Discussions(string categoryUrl, string subcategoryUrl, string goodUrl)
        {
            using (GoodContext db = new GoodContext())
            {
                ViewBag.CategoriesData = GetCategoriesData();
                if (db.GoodCategories.Where(x => x.CategoryUrl == categoryUrl).Any() &&
                    db.GoodSubcategories.Where(x => x.SubcategoryUrl == subcategoryUrl).Any() &&
                    db.Goods.Where(x => x.GoodUrl == goodUrl).Any())
                {
                    string goodBrand       = db.Goods.Where(x => x.GoodUrl == goodUrl).First().GoodBrand;
                    string goodName        = db.Goods.Where(x => x.GoodUrl == goodUrl).First().GoodName;
                    string goodColor       = db.Goods.Where(x => x.GoodUrl == goodUrl).First().GoodColor;
                    string fullGoodName    = goodBrand + " " + goodName + ", " + goodColor;
                    string subcategoryName = db.GoodSubcategories.Where(x => x.SubcategoryUrl == subcategoryUrl).First().SubcategoryName;
                    string categoryName    = db.GoodCategories.Where(x => x.CategoryUrl == categoryUrl).First().CategoryName;

                    ViewBag.PageHeader = db.Goods.Where(x => x.GoodUrl == goodUrl).First().GoodBrand + " " +
                                         db.Goods.Where(x => x.GoodUrl == goodUrl).First().GoodName + " Discussions";
                    ViewBag.CategoryUrl    = categoryUrl;
                    ViewBag.SubcategoryUrl = subcategoryUrl;
                    ViewBag.GoodUrl        = goodUrl;
                    ViewBag.InitiallyShowedDiscussionsNumber = 2;

                    int currentGoodId = db.Goods.Where(x => x.GoodUrl == goodUrl).First().Id;
                    ViewBag.GoodId   = currentGoodId;
                    ViewBag.GoodName = db.Goods.Find(currentGoodId).GoodName;
                    DateTime currentDate = DateTime.Now.Date;
                    var      viewModel   = new DiscussionViewModel()
                    {
                        todayReviewsNumber     = db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.Where(c => c.Date >= currentDate && c.Date <= currentDate.AddDays(1)).Count(),
                        lastWeekReviewsNumber  = db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.Where(c => c.Date >= currentDate.AddDays(-7) && c.Date <= currentDate.AddDays(1)).Count(),
                        lastMonthReviewsNumber = db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.Where(c => c.Date >= currentDate.AddMonths(-1) && c.Date <= currentDate.AddDays(1)).Count(),
                        lastYearReviewsNumber  = db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.Where(c => c.Date >= currentDate.AddYears(-1) && c.Date <= currentDate.AddDays(1)).Count(),
                        allReviewsNumber       = db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.Count(),
                        discussions            = db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.GroupBy(p => p.DiscussionGroup).ToList().Count() <= 2
                                      ? db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.GroupBy(p => p.DiscussionGroup).ToList()
                                      : db.Goods.Where(x => x.Id == currentGoodId).First().Discussions.GroupBy(p => p.DiscussionGroup).ToList().GetRange(0, 2)
                    };
                    List <string> breadcrumbList = new List <string>()
                    {
                        "Discussions", fullGoodName, subcategoryName, categoryName, "Catalog", "Main"
                    };
                    ViewBag.breadCrumbList = breadcrumbList;
                    return(View(viewModel));
                }
                else
                {
                    return(Redirect("/"));
                }
            }
        }
Пример #10
0
        public DiscussionViewModel GetDiscussion(int topicId)
        {
            var topic      = _topicRepository.Get(topicId);
            var posts      = _topicRepository.GetPostsFromTopic(topicId);
            var discussion = new DiscussionViewModel
            {
                TopicViewModel = _mapper.Map <TopicViewModel>(topic),
                PostsViewModel = _mapper.Map <List <PostViewModel> >(posts),
                ReplyViewModel = new PostViewModel {
                    TopicId = topicId
                }
            };

            return(discussion);
        }
        public JsonResult CreateDiscussion([DataSourceRequest]  DataSourceRequest request, DiscussionViewModel discussion, int? currentClientId, int? currentProviderId)
        {
            if (discussion == null || !ModelState.IsValid)
            {
                return Json(new[] { discussion }.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
            }

            var loggedUserId = this.User.Identity.GetUserId();
            var createdDiscussion = this.discussions.CreateDiscussion(discussion, currentClientId, currentProviderId, loggedUserId);

            Base.CreateActivity(ActivityType.Create, createdDiscussion.Id.ToString(), ActivityTargetType.Discussion, loggedUserId);

            discussion.Id = createdDiscussion.Id;

            return Json(new[] { discussion }.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
        }
Пример #12
0
        public void cleanUp()
        {
            if (UdpClient != null)
            {
                UdpClient.Close();
            }

            DiscussionViewModel.Dispose();
            MessageViewModel.Dispose();
            _main.Startup.Dal.Dispose();

            if (_main.Startup.ProxyClient.State == System.ServiceModel.CommunicationState.Opened)
            {
                _main.Startup.ProxyClient.Close();
            }
        }
        private void addNewDiscussionToFirebase(UserDiscussionViewModel data)
        {
            //fillDiscussionsListFromFireBase();

            FirebaseDB firebaseDB      = new FirebaseDB(pathFireBase);
            FirebaseDB firebaseDBTeams = firebaseDB.Node("discussions");

            firebaseDBTeams.NodePath("discussions");
            DiscussionViewModel dis = new DiscussionViewModel(data);


            string json = js.Serialize(dis);

            LuckyWithYouForum.Database.FirebaseResponse postResponse = firebaseDBTeams.Post(json);
            //updateDiscussionsToFireBase();
        }
Пример #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="discussionViewModel"></param>
        /// <returns></returns>
        public DiscussionViewModel CreateDiscussion(DiscussionViewModel discussionViewModel)
        {
            DiscussionViewModel model = new DiscussionViewModel();

            try
            {
                Discussion discussion = ObjectMapper.Map <DiscussionViewModel, Discussion>(discussionViewModel);
                discussion = DiscussionManager.Add(discussion);
                model      = ObjectMapper.Map <Discussion, DiscussionViewModel>(discussion);
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException(ex, PolicyNameType.ExceptionReplacing);
            }
            return(model);
        }
Пример #15
0
        /// <summary>
        /// broadcast
        /// </summary>
        private async Task receiverAsync()
        {
            try
            {
                // updating the user status
                AuthenticatedAgent.IsOnline = true;
                var updatedUserList = await _main.Startup.Bl.BlAgent.UpdateAgentAsync(new List <Agent> {
                    AuthenticatedAgent.Agent
                });

                if (updatedUserList.Count > 0)
                {
                    int       port      = Utility.intTryParse(updatedUserList[0].IPAddress.Split(':')[1]);
                    IPAddress ipAddress = default(IPAddress);
                    IPAddress.TryParse(updatedUserList[0].IPAddress.Split(':')[0], out ipAddress);

                    EndPoint  = new IPEndPoint(ipAddress, port);
                    UdpClient = new UdpClient(port);

                    // updating authenticated user online status
                    DiscussionViewModel.SelectedAgentModel = (AgentModel)_main.ModelCreator.createModel(QOBDModels.Enums.EModel.AGENT);
                    await DiscussionViewModel.broadcastMessageAsync(DiscussionViewModel.WelcomeMessage);

                    // create discussion thread
                    Thread ctThread = new Thread(DiscussionViewModel.getMessage);
                    ctThread.SetApartmentState(ApartmentState.STA);
                    ctThread.IsBackground = true;
                    ctThread.Start();
                }
                else
                {
                    new ApplicationException("Error while updating the user[" + AuthenticatedAgent.TxtID + "|" + AuthenticatedAgent.TxtIPAddress + "] network information");
                }
            }
            catch (Exception ex)
            {
                _isServerConnectionError = true;
                CurrentViewModel         = DiscussionViewModel;
                Log.error("<[" + _main.Startup.Bl.BlSecurity.GetAuthenticatedUser().UserName + "]Localhost =" + _main.Startup.Bl.BlSecurity.GetAuthenticatedUser().IPAddress + "> " + ex.Message, QOBDCommon.Enum.EErrorFrom.CHATROOM);

                // updating the user status
                AuthenticatedAgent.IsOnline = false;
                var updatedUserList = await _main.Startup.Bl.BlAgent.UpdateAgentAsync(new List <Agent> {
                    AuthenticatedAgent.Agent
                });
            }
        }
Пример #16
0
        public async Task <IActionResult> CreateContribution(DiscussionViewModel model)
        {
            model.Discussion = await discussionsRepository.FindByIdAsync(model.DiscussionId);

            if (string.IsNullOrWhiteSpace(model.Contribution.Content))
            {
                ModelState.AddModelError <TopicViewModel>(m => m.Contribution.Content, "Zadejte příspěvek.");
                return(View("Discussion", model));
            }

            model.Contribution.Discussion = model.Discussion;
            model.Contribution.Created    = DateTime.Now;
            model.Contribution.User       = await userManager.GetUserAsync(User);

            await contributionsRepository.CreateAsync(model.Contribution);

            return(RedirectToAction("Discussion", new { id = model.DiscussionId }));
        }
Пример #17
0
        public ActionResult AllDiscussions(string groupId, string isOnboarding)
        {
            CommonFunctions common = new CommonFunctions();

            groupId = common.DecryptString(groupId);

            var userDetails = (CustomerLoginDetail)Session["UserSession"];

            userDetails.CustomerName = CR.GetCustomerName(groupId);
            Session["UserSession"]   = userDetails;

            DiscussionViewModel objData       = new DiscussionViewModel();
            BOTS_TblDiscussion  objDiscussion = new BOTS_TblDiscussion();
            string GroupName = string.Empty;

            if (string.IsNullOrEmpty(isOnboarding))
            {
                var objGroup = CR.GetGroupDetails(Convert.ToInt32(groupId));
                GroupName = objGroup.GroupName;
            }
            else
            {
                var objGroup = CR.GetOnboardingGroupDetails(groupId);
                GroupName = objGroup.GroupName;
            }
            objDiscussion.GroupId   = groupId;
            objDiscussion.GroupName = GroupName;
            objData.objDiscussion   = objDiscussion;
            objData.lstDiscussions  = DR.GetDiscussions(groupId);
            objData.lstCallTypes    = DR.GetCallTypes();
            List <SelectListItem> callSubType = new List <SelectListItem>();
            SelectListItem        item        = new SelectListItem();

            item.Value = "0";
            item.Text  = "Please Select";
            callSubType.Add(item);
            objData.lstCallSubTypes = callSubType;

            return(View(objData));
        }
Пример #18
0
        public IActionResult Discussion(int id = 0)
        {
            if (id != 0)
            {
                var userId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);

                TempData["DiscussionId"] = id;

                TempData["Url"] = $"/Discussions/Discussion/{id}";
                Discussion discussion = dataManager.discussionsRepository.GetDiscussionById(id);
                if (dataManager.usersRepository.GetUserById(discussion.UserId) != null)
                {
                    discussion.User = dataManager.usersRepository.GetUserById(discussion.UserId);
                }
                DiscussionViewModel discussionViewModel = new DiscussionViewModel(discussion, userId);
                return(View(discussionViewModel));
            }
            else
            {
                return(View());
            }
        }
        public IActionResult Discussion(DiscussionViewModel discussionViewModel)
        {
            var replyViewModel = discussionViewModel.ReplyViewModel;

            replyViewModel.UserId = UserId;

            discussionViewModel = _applicationService.GetDiscussion(discussionViewModel.ReplyViewModel.TopicId);
            discussionViewModel.ReplyViewModel = replyViewModel;

            if (replyViewModel.TopicId == 0)
            {
                return(NotFound());
            }
            if (!ModelState.IsValid)
            {
                return(View(discussionViewModel));
            }
            _applicationService.AddPost(discussionViewModel.ReplyViewModel);
            TempData["ServerResult"] = IsValidOperation() ? "success;Post created successfully!" : "error;Post was not created. See the notifications for details.";

            return(IsValidOperation() ? (IActionResult)RedirectToAction("Discussion", new { id = discussionViewModel.TopicViewModel.Id }) : View("Discussion", discussionViewModel));
        }
Пример #20
0
        public ActionResult Discussions(int?gid, int?did)
        {
            CheckCr();
            var uid       = User.Identity.GetUserId();
            var viewModel = new DiscussionViewModel();

            viewModel.Gp = db.GroupPersons
                           .Include(i => i.Group)
                           .Include(i => i.User);

            ViewBag.UserId = uid;

            List <GroupPerson> gpr = viewModel.Gp.Where(u => u.User.Id == uid && u.Status == "Confirmed").ToList();
            List <Group>       gro = new List <Group>();

            for (var i = 0; i < gpr.Count; i++)
            {
                gro.Add(gpr[i].Group);
            }
            viewModel.Groups = gro;
            //ask about connection IMPORTANT!!!!!! viewModel.groups
            //var userProfiles = _dataContext.UserProfile
            // .Where(t => idList.Contains(t.Id));

            if (gid != null)
            {
                List <Discussion> fil;
                fil                   = db.Discussions.Where(f => f.Group.GId == gid).ToList();
                ViewBag.GroupId       = gid;
                viewModel.Discussions = fil;
            }
            if (did != null)
            {
                ViewBag.DiscId   = did;
                ViewBag.DiscName = db.Discussions.Where(d => d.DiscId == did).Single().Name;
            }
            return(View(viewModel));
        }
Пример #21
0
        public async Task <IActionResult> Discussion(CancellationToken cancellationToken = default)
        {
            bool isLoggedIn = _signInManager.IsSignedIn(User);

            ApplicationUser user = await _userManager.GetUserAsync(User);

            Comment[] comments = await _commentService.List(cancellationToken);

            CommentViewModel[] commentViewModels = comments
                                                   .Select(x => new CommentViewModel(x)
            {
                CanEdit   = isLoggedIn && x.ByUserId == user.Id,
                CanRemove = isLoggedIn && (x.ByUserId == user.Id || user.Role == ApplicationRole.Administrator),
            })
                                                   .ToArray();

            var model = new DiscussionViewModel
            {
                Comments = commentViewModels,
                UserId   = user?.Id,
            };

            return(View(model));
        }
Пример #22
0
 private void setInitEvents()
 {
     DiscussionViewModel.addObserver(onChatRoomChange);
     DiscussionViewModel.addObserver(onUpdateUsersStatusChange);
     _main.Startup.Dal.DALAgent.PropertyChanged += onAgentDataDownloadingStatusChange;
 }
        public ActionResult TeacherIndex(int assignmentId, int discussionTeamID, int courseUserId = 0, string highlightValueString = "None", bool anonymous = false)
        {
            HighlightValue highlightValue;

            Enum.TryParse(highlightValueString, out highlightValue);
            Assignment assignment = db.Assignments.Find(assignmentId);

            if (assignment.CourseID == ActiveCourseUser.AbstractCourseID && ActiveCourseUser.AbstractRole.CanGrade)
            {
                List <DiscussionPost> posts = null;
                CourseUser            student;
                DiscussionTeam        discussionTeam = (from dt in assignment.DiscussionTeams
                                                        where dt.ID == discussionTeamID
                                                        select dt).FirstOrDefault();

                DiscussionViewModel dvm = new DiscussionViewModel(discussionTeam, ActiveCourseUser);

                //anonymize if requested
                if (anonymous == true)
                {
                    foreach (DiscussionPostViewModel vm in dvm.DiscussionPostViewModels)
                    {
                        vm.poster.Anonymize = true;
                        foreach (ReplyViewModel rvm in vm.Replies)
                        {
                            rvm.poster.Anonymize = true;
                        }
                    }
                }

                if (highlightValue == HighlightValue.None || courseUserId <= 0)  //If hightlightValue == None, we want no selections - so setting student to null.
                {
                    student = null;
                }
                else
                {
                    student = db.CourseUsers.Find(courseUserId);
                }

                if (assignment.HasDiscussionTeams)
                {
                    ViewBag.DiscussionHeader = assignment.AssignmentName + " - " + discussionTeam.TeamName;
                }
                else
                {
                    ViewBag.DiscussionHeader = assignment.AssignmentName;
                }

                bool canPost = true;
                //If the user is a TA and TAs can only participate in some discussions, then we must confirm the TA
                //is in the team before we give them permission to post
                if (ActiveCourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.TA && !assignment.DiscussionSettings.TAsCanPostToAllDiscussions &&
                    discussionTeam.Team.TeamMembers.Where(tm => tm.CourseUserID == ActiveCourseUser.ID).ToList().Count == 0)
                {
                    canPost = false;
                }
                //for CRD assignment types we need a list of all discussions they can participate in for navigation.
                //additionally for CRD assignments we want to display all teammates invovled in the discussion
                if (assignment.HasDiscussionTeams)
                {
                    ViewBag.DiscussionTeamList = assignment.DiscussionTeams;
                }

                ViewBag.LastVisit = GetAndUpdateLastVisit(discussionTeamID);
                ViewBag.CanPost   = canPost;
                ViewBag.DiscussionPostViewModelList = dvm.DiscussionPostViewModels;
                ViewBag.HighlightValue   = highlightValue;
                ViewBag.Posts            = posts;
                ViewBag.Student          = student;
                ViewBag.Assignment       = assignment;
                ViewBag.IsFirstPost      = false;
                ViewBag.ActiveCourse     = ActiveCourseUser;
                ViewBag.DiscussionTeamID = discussionTeam.ID;
                ViewBag.IsAnonymous      = anonymous;
                ViewBag.DiscussionTeam   = discussionTeam;
                return(View("Index"));
            }
            return(RedirectToAction("Index", "Home", new { area = "AssignmentDetails", assignmentId = assignmentId }));
        }
        /// <summary>
        /// This is the discussion view used by non-Instructor/non-TA users. It displays a discussion assignment for discussionTeamId.
        /// </summary>
        /// <param name="assignmentId"></param>
        /// <param name="discussionTeamId"></param>
        /// <param name="displayNewPosts">If true, any new posts made since the current users last visit will be highlighted.</param>
        /// <returns></returns>
        public ActionResult Index(int assignmentId, int discussionTeamId, bool?displayNewPosts = false)
        {
            ViewBag.HideMail = OSBLE.Utility.DBHelper.GetAbstractCourseHideMailValue(ActiveCourseUser.AbstractCourseID);

            Assignment     assignment     = null;
            DiscussionTeam discussionTeam = null;

            //checking if ids are good
            if (discussionTeamId > 0 && assignmentId > 0)
            {
                assignment     = db.Assignments.Find(assignmentId);
                discussionTeam = (from dt in assignment.DiscussionTeams
                                  where dt.ID == discussionTeamId
                                  select dt).FirstOrDefault();
            }

            //Make sure ActiveCourseUser is a valid discussion member
            //Valid discussion members are in the discussion team, or in the class of a classwide discussion assignment
            bool allowedInDiscussion = false;

            if (assignment != null && assignment.HasDiscussionTeams == false)//Classwide discussion
            {
                //make sure user is in course
                if (ActiveCourseUser.AbstractCourseID == assignment.CourseID)
                {
                    allowedInDiscussion = true;
                }
            }
            else if (assignment != null && discussionTeam != null)//Assignment has discussion teams
            {
                //make sure user is part of team.
                foreach (TeamMember tm in discussionTeam.GetAllTeamMembers())
                {
                    if (tm.CourseUserID == ActiveCourseUser.ID)
                    {
                        allowedInDiscussion = true;
                        break;
                    }
                }
            }


            //if ActiveCourseUser belongs to the discussionTeam, continue. Otherwise kick them out.
            if (allowedInDiscussion || ActiveCourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.Observer)
            {
                DiscussionViewModel dvm = new DiscussionViewModel(discussionTeam, ActiveCourseUser);


                //Checking if its users first post
                ViewBag.IsFirstPost = (from dpvm in dvm.DiscussionPostViewModels
                                       where dpvm.poster.CourseUser.ID == ActiveCourseUser.ID
                                       select dpvm).Count() == 0;


                //assigning a header value.
                if (assignment.HasDiscussionTeams)
                {
                    ViewBag.DiscussionHeader = assignment.AssignmentName + "- " + discussionTeam.TeamName;
                }
                else
                {
                    ViewBag.DiscussionHeader = assignment.AssignmentName;
                }

                //for CRD assignment types we need a list of all discussions they can participate in for navigation.
                if (assignment.Type == AssignmentTypes.CriticalReviewDiscussion)
                {
                    List <DiscussionTeam> DiscussionTeamList = new List <DiscussionTeam>();
                    //Generating a list of discussion assignments that the current user belongs to
                    foreach (DiscussionTeam dt in assignment.DiscussionTeams)
                    {
                        foreach (TeamMember tm in dt.GetAllTeamMembers())
                        {
                            if (tm.CourseUserID == ActiveCourseUser.ID)
                            {
                                DiscussionTeamList.Add(dt);
                                break;
                            }
                        }
                    }
                    ViewBag.DiscussionTeamList = DiscussionTeamList.OrderBy(dt => dt.TeamName).ToList();
                }
                if (displayNewPosts.HasValue && displayNewPosts.Value)
                {
                    ViewBag.HighlightValue = HighlightValue.NewPosts;
                }

                //Allow Moderators to post w/o word count restriction
                if (ActiveCourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.Moderator)
                {
                    ViewBag.IsFirstPost = false;
                }

                ViewBag.LastVisit = GetAndUpdateLastVisit(discussionTeamId);
                if (ActiveCourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.Observer)
                {
                    ViewBag.CanPost = false;
                }
                else
                {
                    ViewBag.CanPost = assignment.DueDate > DateTime.UtcNow;
                }
                ViewBag.DiscussionPostViewModelList = dvm.DiscussionPostViewModels.OrderBy(dpvm => dpvm.Posted).ToList();
                ViewBag.ActiveCourse     = ActiveCourseUser;
                ViewBag.Assignment       = assignment;
                ViewBag.DiscussionTeamID = discussionTeam.ID;
                ViewBag.DiscussionTeam   = discussionTeam;
                return(View());
            }
            else //User is not part of discussion, kick them to assignment details.
            {
                return(RedirectToAction("Index", "Home", new { area = "AssignmentDetails", assignmentId = assignmentId }));
            }
        }
Пример #25
0
        public override DynamicDictionary BuildHeader(Assignment assignment)
        {
            dynamic header = Builder.BuildHeader(assignment);

            header.DiscussionTeam = new DynamicDictionary();

            //create list of lists to store all the posters. A list of stringsfor team names, and a list of ints for all the team's ids
            List <List <Poster> > ListOfListOfPosters = new List <List <Poster> >();
            List <string>         ListOfTeamNames     = new List <string>();
            List <int>            ListOfTeamIDs       = new List <int>();
            List <bool>           ListOfHideMailIcon  = new List <bool>();
            List <int>            ListOfNewPostCounts = new List <int>();

            //AC: Quick hack to get author IDs into the view.  Not sure if this is the best way to go about.
            Dictionary <int, int> TeamsToAuthors = new Dictionary <int, int>();

            //Finding "Client's" Discussion Team(s). In some assignment types (CRD) users can be part of multiple DiscussionTeams
            foreach (DiscussionTeam dt in assignment.DiscussionTeams.OrderBy(dt => dt.TeamName).ToList())
            {
                foreach (TeamMember tm in dt.GetAllTeamMembers())
                {
                    if (tm.CourseUserID == Client.ID || Client.AbstractRoleID == (int)CourseRole.CourseRoles.Observer) //Checking if Client is a member within the DiscussionTeam
                    {
                        //generating a list of "Posters" which is a view model used to display courseusers with proper anonmization.
                        bool          hideMail = false;
                        List <Poster> posters  = new List <Poster>();
                        if (assignment.Type == AssignmentTypes.CriticalReviewDiscussion)
                        {
                            List <int> AuthorCourseUserIds   = dt.AuthorTeam.TeamMembers.Select(teamMem => teamMem.CourseUserID).ToList();
                            List <int> ReviewerCourseUserIds = dt.Team.TeamMembers.Where(teamMem => teamMem.CourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.Student).Select(teamMem => teamMem.CourseUserID).ToList();
                            bool       clientIsAuthor        = AuthorCourseUserIds.Contains(Client.ID);
                            bool       clientIsReviewer      = ReviewerCourseUserIds.Contains(Client.ID);

                            foreach (CourseUser cu in dt.GetAllTeamMembers().Select(teamMem => teamMem.CourseUser).ToList())
                            {
                                bool   isAuthor   = AuthorCourseUserIds.Contains(cu.ID);
                                bool   isReviewer = ReviewerCourseUserIds.Contains(cu.ID);
                                string RoleName   = "";
                                if (isAuthor && isReviewer)
                                {
                                    RoleName = "Author/Reviewer";
                                }
                                else if (isReviewer)
                                {
                                    RoleName = "Reviewer";
                                }
                                else if (isAuthor)
                                {
                                    RoleName = "Author";
                                }
                                Poster poster = new Poster()
                                {
                                    Anonymize   = DiscussionViewModel.AnonymizeNameForCriticalReviewDiscussion(cu, Client, assignment, isAuthor, isReviewer, clientIsAuthor, clientIsReviewer),
                                    CourseUser  = cu,
                                    HideRole    = assignment.DiscussionSettings.HasHiddenRoles,
                                    RoleName    = RoleName,
                                    UserProfile = cu.UserProfile
                                };
                                hideMail = hideMail || poster.Anonymize; //If any poster is Anonymized, then hideMail should true.
                                posters.Add(poster);
                            }
                        }
                        else
                        {
                            foreach (CourseUser cu in dt.GetAllTeamMembers().Select(teamMem => teamMem.CourseUser).ToList())
                            {
                                Poster poster = new Poster()
                                {
                                    Anonymize   = DiscussionViewModel.AnonymizeNameForDiscussion(cu, Client, assignment.DiscussionSettings),
                                    CourseUser  = cu,
                                    HideRole    = assignment.DiscussionSettings.HasHiddenRoles,
                                    RoleName    = "",
                                    UserProfile = cu.UserProfile
                                };
                                hideMail = hideMail || poster.Anonymize; //If any poster is Anonymized, then hideMail should true.
                                posters.Add(poster);
                            }
                        }

                        ListOfNewPostCounts.Add(dt.GetNewPostsCount(Client.ID));
                        ListOfHideMailIcon.Add(hideMail);
                        ListOfListOfPosters.Add(posters);
                        ListOfTeamNames.Add(dt.TeamName);
                        ListOfTeamIDs.Add(dt.ID);
                        if (dt.AuthorTeamID != null)
                        {
                            TeamsToAuthors[dt.ID] = (int)dt.AuthorTeamID;
                        }
                        break;
                    }
                }
            }

            header.DiscussionTeam.ListOfNewPostCounts = ListOfNewPostCounts;
            header.DiscussionTeam.ListOfHideMailIcon  = ListOfHideMailIcon;
            header.DiscussionTeam.Assignment          = assignment;
            header.DiscussionTeam.ListOfListOfPosters = ListOfListOfPosters;
            header.DiscussionTeam.ListOfTeamNames     = ListOfTeamNames;
            header.DiscussionTeam.ListOfTeamIDs       = ListOfTeamIDs;
            header.DiscussionTeam.TeamsToAuthors      = TeamsToAuthors;

            return(header);
        }
        public DiscussionViewModel DestroyDiscussion(DiscussionViewModel discussion)
        {
            this.Data.Discussions.Delete(discussion.Id);
            this.Data.SaveChanges();

            return discussion;
        }
        public DiscussionViewModel UpdateDiscussion(DiscussionViewModel discussion)
        {
            var discussionFromDb = this.Data.Discussions
                .All()
                .FirstOrDefault(d => d.Id == discussion.Id);

            discussionFromDb.Date = discussion.Date;
            discussionFromDb.SubjectOfDiscussion = discussion.SubjectOfDiscussion;
            discussionFromDb.Summary = discussion.Summary;
            discussionFromDb.Type = discussion.Type;
            discussionFromDb.NextDiscussionDate = discussion.NextDiscussionDate;
            discussionFromDb.NextDiscussionNote = discussion.NextDiscussionNote;
            discussionFromDb.NextDiscussionType = discussion.NextDiscussionType;
            discussionFromDb.Comments = discussion.Comments;
            discussionFromDb.IsVisible = discussion.IsVisible;

            this.Data.SaveChanges();

            return discussion;
        }
        public JsonResult UpdateDiscussion([DataSourceRequest] DataSourceRequest request, DiscussionViewModel discussion)
        {
            foreach (var propertyName in ModelState.Select(modelError => modelError.Key))
            {
                if (propertyName.Contains("Client"))
                {
                    ModelState[propertyName].Errors.Clear();
                }
                else if (propertyName.Contains("Provider"))
                {
                    ModelState[propertyName].Errors.Clear();
                }
            }

            if (discussion == null || !ModelState.IsValid)
            {
                return Json(new[] { discussion }.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
            }

            var updatedDiscussion = this.discussions.UpdateDiscussion(discussion);

            var loggedUserId = this.User.Identity.GetUserId();
            Base.CreateActivity(ActivityType.Edit, updatedDiscussion.Id.ToString(), ActivityTargetType.Discussion, loggedUserId);

            return Json((new[] { discussion }.ToDataSourceResult(request, ModelState)), JsonRequestBehavior.AllowGet);
        }