public ActionResult GetDocumentsForCriticalReviewDiscussion(int discussionTeamId)
        {
            DiscussionTeam dt              = db.DiscussionTeams.Find(discussionTeamId);
            Assignment     CRAssignment    = dt.Assignment.PreceedingAssignment;
            Assignment     CRDAssignment   = dt.Assignment;
            Assignment     BasicAssignment = CRAssignment.PreceedingAssignment;
            Team           AuthorTeam      = dt.AuthorTeam;
            //Permission checking:
            // assert that the activeCourseUser is a member of the discussion team of discussionTeamID
            bool belongsToDiscussionTeam = false;

            foreach (TeamMember tm in dt.GetAllTeamMembers())
            {
                if (tm.CourseUserID == ActiveCourseUser.ID)
                {
                    belongsToDiscussionTeam = true;
                    break;
                }
            }

            //If user does not belong to DiscussionTeam and is not an instructor, do not let them get the documents
            if (belongsToDiscussionTeam || ActiveCourseUser.AbstractRole.CanModify || ActiveCourseUser.AbstractRoleID == (int)CourseRole.CourseRoles.Observer)
            {
                string zipFileName = "Critical Review Discussion Items for " + dt.TeamName + ".zip";
                return(GetAllReviewedDocuments(CRAssignment, AuthorTeam, zipFileName, CRDAssignment.DiscussionSettings));
            }

            return(RedirectToAction("Index", "Home"));
        }
示例#2
0
        public ActionResult CreateDiscussionTeam(int discussionTeamId)
        {
            List <UserProfile> recipientList = new List <UserProfile>();

            DiscussionTeam discussionTeam = db.DiscussionTeams.Find(discussionTeamId);

            foreach (TeamMember tm in discussionTeam.GetAllTeamMembers())
            {
                if (tm.CourseUserID != ActiveCourseUser.ID)
                {
                    recipientList.Add(tm.CourseUser.UserProfile);
                }
            }

            setUpMailViewBags(recipientList);
            return(View("Create", new Mail()));
        }
        /// <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 }));
            }
        }