Ejemplo n.º 1
0
        public ActionResult CreatePost(string slug, Thread thread, FormCollection collection)
        {
            // add post to post id

            User profile = Users.GetLoggedInUser();
            DidacheDb db = new DidacheDb();

            // make thread
            thread.UserID = profile.UserID;
            thread.TotalReplies = 0;
            thread.TotalViews = 0;
            thread.ThreadDate = DateTime.Now;
            thread.UserName = profile.Username;
            thread.LastPostUserName = profile.Username;
            thread.LastPostUserID = profile.UserID;
            thread.LastPostID = 0;
            thread.LastPostDate = DateTime.Now;
            thread.LastPostSubject = collection["Subject"];

            db.Threads.Add(thread);
            db.SaveChanges();

            // add post to thread
            ForumPost post = new ForumPost();
            post.ThreadID = thread.ThreadID;
            post.ForumID = Int32.Parse(collection["ForumID"]);
            post.PostDate = DateTime.Now;
            post.UserID = profile.UserID;
            post.UserName = profile.FullName;
            post.ReplyToPostID = 0;
            post.Subject = collection["Subject"];
            post.PostContent = collection["PostContent"];
            post.PostContentFormatted = Forums.FormatPost(post.PostContent);

            db.ForumPosts.Add(post);
            db.SaveChanges();

            return RedirectToAction("Thread", new { slug = slug, id = thread.ThreadID });
        }
Ejemplo n.º 2
0
        public ActionResult AddFileGroup(int id)
        {
            var didacheDb = new DidacheDb();

            // get data
            var reader = new JsonFx.Json.JsonReader();
            dynamic json = reader.Read(HttpUtility.UrlDecode(Request.Form.ToString()));

            CourseFileGroup group = new CourseFileGroup();
            group.CourseID = id;
            group.SortOrder = 9999;
            group.Name = json.name;

            didacheDb.CourseFileGroups.Add(group);
            didacheDb.SaveChanges();

            return Json(new {groupid = group.GroupID, name=json.name, courseid= id});
        }
Ejemplo n.º 3
0
        public static StudentFile SaveStudentFile(int userID, UserTaskData userData, HttpPostedFileBase file)
        {
            DidacheDb db = new DidacheDb();

            StudentFile studentFile = null;

            if (file.ContentLength > 0) {

                // setup data
                studentFile = new StudentFile();
                studentFile.UserID = userID;
                studentFile.UploadedDate = DateTime.Now;
                studentFile.UniqueID = Guid.NewGuid();
                studentFile.ContentType = file.ContentType;
                studentFile.Length = file.ContentLength;

                // setup physical file
                string extension = Path.GetExtension(file.FileName);
                string filenameWithoutExtension = Path.GetFileNameWithoutExtension(file.FileName);
                studentFile.Filename = Path.GetFileName(file.FileName);
                string savePath = Path.Combine(Settings.StudentFilesLocation, studentFile.UniqueID.ToString() + extension);

                // check file type
                /*
                if (!String.IsNullOrWhiteSpace(userData.Task.FileTypesAllowed)) {

                }
                */

                file.SaveAs(savePath);

                // save file info to DB
                db.StudentFiles.Add(studentFile);
                db.SaveChanges();
            }

            return studentFile;
        }
Ejemplo n.º 4
0
        public static void AddClassmateRequest(int requesterUserID, int targetUserID)
        {
            DidacheDb db = new DidacheDb();

            UserRelationship rel = db.UserRelationships
                .SingleOrDefault(ur => ur.RequesterUserID == requesterUserID && ur.TargetUserID == targetUserID);

            if (rel == null) {

                // status from requester
                rel = new UserRelationship() {
                    RequesterUserID = requesterUserID,
                    TargetUserID = targetUserID,
                    RelationshipStatus = RelationshipStatus.PendingTargetApproval
                };

                db.UserRelationships.Add(rel);

                // status from target
                rel = new UserRelationship() {
                    RequesterUserID = targetUserID,
                    TargetUserID = requesterUserID,
                    RelationshipStatus = RelationshipStatus.PendingRequesterApproval
                };

                db.UserRelationships.Add(rel);

                db.SaveChanges();

                User requesterUser = Users.GetUser(requesterUserID);
                User targetUser = Users.GetUser(targetUserID);

                string classmateRequestBody = Emails.FormatEmail(Didache.Resources.emails.classmates_approvalrequest, null,null,null, requesterUser, targetUser, null, null, null);

                Emails.EnqueueEmail("*****@*****.**", targetUser.Email, "Classmate Request", classmateRequestBody, false);
            }
        }
Ejemplo n.º 5
0
        public ActionResult UpdateUserGroupSorting(int id)
        {
            var didacheDb = new DidacheDb();

            string data = HttpUtility.UrlDecode(Request.Form.ToString());

            //dynamic newValue = Newtonsoft.Json.JsonConvert.DeserializeObject<System.Dynamic.>(data);
            var reader = new JsonFx.Json.JsonReader();
            dynamic output = reader.Read(data);

            // get groups
            List<CourseUserGroup> groups = db.CourseUserGroups.Where(cfg => cfg.CourseID == id).ToList();
            List<int> groupIDs = groups.Select(cfg => cfg.GroupID).ToList();

            // get files
            List<CourseUser> courseUsers = db.CourseUsers.Where(cu => groupIDs.Contains(cu.GroupID)).ToList();

            foreach (var groupInfo in output) {
                CourseUserGroup userGroup = groups.SingleOrDefault(cug => cug.GroupID == groupInfo.groupid);

                foreach (var userInfo in groupInfo.users) {
                    CourseUser courseUser = courseUsers.SingleOrDefault(cu => cu.UserID == userInfo.userid);

                    // has the group changed?
                    if (courseUser.GroupID != userGroup.GroupID) {

                        // create a new one with the new group
                        CourseUser newCourseFile = new CourseUser() {
                            UserID = courseUser.UserID,
                            GroupID = userGroup.GroupID,
                            RoleID = (int)CourseUserRole.Student
                        };

                        db.CourseUsers.Remove(courseUser);
                        db.CourseUsers.Add(newCourseFile);

                    }
                    else {
                        // do nothing since we don't care about the order
                    }

                }
            }
            db.SaveChanges();

            /*
            foreach (var groupInfo in output) {

                // get and update the group
                CourseFileGroup fileGroup = didacheDb.CourseFileGroups.Find(groupInfo.groupid);
                fileGroup.SortOrder = groupInfo.sortorder;
                //fileGroup.Name = groupInfo.name;

                // TEST 2: get all existing, update, remove missing

                // get exsiting files
                List<CourseFileAssociation> courseFiles = didacheDb.CourseFileAssociations.Where(cfa => cfa.GroupID == fileGroup.GroupID).ToList();

                foreach (var fileInfo in groupInfo.files) {
                    // find the file
                    CourseFileAssociation cfa = courseFiles.Find(c => c.FileID == fileInfo.fileid);
                    if (cfa != null) {
                        // update
                        cfa.SortOrder = fileInfo.sortorder;
                        // add to change list
                        //changedFiles.Add(cfa);
                        courseFiles.Remove(cfa);
                    } else {
                        cfa = new CourseFileAssociation();
                        cfa.GroupID = fileGroup.GroupID;
                        cfa.FileID = fileInfo.fileid;
                        cfa.SortOrder = fileInfo.sortorder;
                        didacheDb.CourseFileAssociations.Add(cfa);
                    }
                }

                // remove all remaining files
                foreach (CourseFileAssociation notUpdated in courseFiles) {
                    didacheDb.CourseFileAssociations.Remove(notUpdated);
                }

            }
            */

            didacheDb.SaveChanges();

            // need to deserialize this and update all the groups and files

            return Json(new { success = true });
        }
Ejemplo n.º 6
0
        public ActionResult UpdateUnitSorting(int id)
        {
            var didacheDb = new DidacheDb();

            string data = HttpUtility.UrlDecode(Request.Form.ToString());

            //dynamic newValue = Newtonsoft.Json.JsonConvert.DeserializeObject<System.Dynamic.>(data);
            var reader = new JsonFx.Json.JsonReader();
            dynamic output = reader.Read(data);

            foreach (var unitInfo in output) {

                // get and update the unit
                Unit unit = didacheDb.Units.Find(unitInfo.unitid);
                unit.SortOrder = unitInfo.sortorder;

                foreach (var taskInfo in unitInfo.tasks) {
                    // get and update the task
                    Task task = didacheDb.Tasks.Find(taskInfo.taskid);
                    task.SortOrder = taskInfo.sortorder;

                }

            }

            string errorMessage = "";
            bool success = false;

            try {
                didacheDb.SaveChanges();
                success = true;
            } catch {
                var entries = didacheDb.GetValidationErrors();
                foreach (var entry in entries) {
                    errorMessage += "[" + entry.Entry.Entity.ToString() + "]\n";
                    foreach (var error in entry.ValidationErrors) {
                        errorMessage += error.PropertyName + " = " + error.ErrorMessage + "; ";
                    }
                }
            }

            return Json(new { success = success, errorMessage = errorMessage});
        }
Ejemplo n.º 7
0
        public static void ApproveClassmateRequest(int requesterUserID, int targetUserID)
        {
            DidacheDb db = new DidacheDb();

            UserRelationship rel1 = db.UserRelationships
                .SingleOrDefault(ur => ur.RequesterUserID == requesterUserID && ur.TargetUserID == targetUserID);

            UserRelationship rel2 = db.UserRelationships
                .SingleOrDefault(ur => ur.RequesterUserID == targetUserID && ur.TargetUserID == requesterUserID);

            if (rel1 != null) {
                rel1.Status = (int) RelationshipStatus.Approved;
            }
            if (rel2 != null) {
                rel2.Status = (int) RelationshipStatus.Approved;
            }

            //db.SaveChanges();

            // add user actions
            UserAction ua = new UserAction() {
                SourceUserID = requesterUserID,
                TargetUserID = targetUserID,
                UserActionType = UserActionType.BecomeClassmates,
                ActionDate = DateTime.Now,
                GroupID =0,
                MessageID = 0,
                PostCommentID = 0,
                PostID = 0,
                Text = ""
            };
            db.UserActions.Add(ua);
            UserAction ua2 = new UserAction() {
                SourceUserID = targetUserID,
                TargetUserID = requesterUserID,
                UserActionType = UserActionType.BecomeClassmates,
                ActionDate = DateTime.Now,
                GroupID = 0,
                MessageID = 0,
                PostCommentID = 0,
                PostID = 0,
                Text = ""
            };
            db.UserActions.Add(ua2);
            db.SaveChanges();
        }
Ejemplo n.º 8
0
        public static Course CloneCourse(int courseID, int sessionID, DateTime startDate, string courseCode, string section)
        {
            DidacheDb db = new DidacheDb();

            Course oldCourse = db.Courses
                                                .Include("Units.Tasks")
                                                .Include("CourseFileGroups.CourseFileAssociations")
                                                .SingleOrDefault(c => c.CourseID == courseID);

            int daysToShift = (startDate - oldCourse.StartDate).Days;

            Course newCourse = new Course() {
                SessionID = sessionID,
                CampusID = oldCourse.CampusID,
                IsActive = oldCourse.IsActive,
                CourseCode = !String.IsNullOrWhiteSpace(courseCode) ? courseCode : oldCourse.CourseCode,
                Name = oldCourse.Name,
                Section = !String.IsNullOrWhiteSpace(section) ? section : oldCourse.Section,
                StartDate = oldCourse.StartDate.AddDays(daysToShift),
                EndDate = oldCourse.EndDate.AddDays(daysToShift),
                Description = oldCourse.Description
            };

            db.Courses.Add(newCourse);
            db.SaveChanges();

            /*
            } catch (DbEntityValidationException dbEx) {
                string errors = "";

                foreach (var validationErrors in dbEx.EntityValidationErrors) {
                    foreach (var validationError in validationErrors.ValidationErrors) {
                        //System.Web.HttpContext.Current.Trace.Warn("Property: {0} Error: {1}", validationError.PropertyName, dbEx);
                        errors += string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage) + "; ";
                    }
                }

                throw new Exception(errors);
            }
            */

            foreach (Unit oldUnit in oldCourse.Units) {
                Unit newUnit = new Unit() {
                    CourseID = newCourse.CourseID,
                    IsActive = oldUnit.IsActive,
                    SortOrder = oldUnit.SortOrder,
                    Name = oldUnit.Name,
                    StartDate = oldUnit.StartDate.AddDays(daysToShift),
                    EndDate = oldUnit.EndDate.AddDays(daysToShift),
                    Instructions = oldUnit.Instructions
                };

                db.Units.Add(newUnit);
                db.SaveChanges();

                Dictionary<int, int> taskMap = new Dictionary<int, int>();
                List<Task> newTasks = new List<Task>();

                foreach (Task oldTask in oldUnit.Tasks) {
                    Task newTask = new Task() {
                        CourseID = newUnit.CourseID,
                        UnitID = newUnit.UnitID,
                        IsActive = oldTask.IsActive,
                        SortOrder = oldTask.SortOrder,
                        Name = oldTask.Name,
                        DueDate = null,
                        FileTypesAllowed = oldTask.FileTypesAllowed,
                        InstructionsAvailableDate = null,
                        IsSkippable = oldTask.IsSkippable,
                        Priority = oldTask.Priority,
                        RelatedTaskID = oldTask.RelatedTaskID,
                        SubmissionAvailableDate = null,
                        TaskID = oldTask.TaskID,
                        TaskTypeName = oldTask.TaskTypeName,
                        Instructions = oldTask.Instructions,
                        CustomAttributes = oldTask.CustomAttributes
                    };

                    if (oldTask.DueDate.HasValue)
                        newTask.DueDate = oldTask.DueDate.Value.AddDays(daysToShift);

                    if (oldTask.SubmissionAvailableDate.HasValue)
                        newTask.SubmissionAvailableDate = oldTask.SubmissionAvailableDate.Value.AddDays(daysToShift);

                    if (oldTask.InstructionsAvailableDate.HasValue)
                        newTask.InstructionsAvailableDate = oldTask.InstructionsAvailableDate.Value.AddDays(daysToShift);

                    db.Tasks.Add(newTask);

                    db.SaveChanges();

                    // store to remap the tasks below
                    newTasks.Add(newTask);
                    taskMap.Add(oldTask.TaskID, newTask.TaskID);
                }

                // go back and remap the related tasks
                List<int> newTaskIds = taskMap.Values.ToList();

                foreach(Task newTask in newTasks) {
                    if (newTask.RelatedTaskID > 0 && taskMap.ContainsKey(newTask.RelatedTaskID)) {
                        newTask.RelatedTaskID = taskMap[newTask.RelatedTaskID];
                    }
                }

                db.SaveChanges();
            }

            // FILES
            foreach (CourseFileGroup oldGroup in oldCourse.CourseFileGroups) {
                CourseFileGroup newGroup = new CourseFileGroup() {
                    CourseID = newCourse.CourseID,
                    Name = oldGroup.Name,
                    SortOrder = oldGroup.SortOrder
                };

                db.CourseFileGroups.Add(newGroup);
                db.SaveChanges();

                foreach (CourseFileAssociation oldFile in oldGroup.CourseFileAssociations) {
                    CourseFileAssociation newFile = new CourseFileAssociation() {
                        GroupID = newGroup.GroupID,
                        FileID = oldFile.FileID,
                        DateAdded = newCourse.StartDate,
                        IsActive = oldFile.IsActive,
                        SortOrder = oldFile.SortOrder
                    };

                    db.CourseFileAssociations.Add(newFile);
                }

                db.SaveChanges();

            }

            return newCourse;
        }
Ejemplo n.º 9
0
        public static void MakeUserPrivate(int userID)
        {
            DidacheDb db = new DidacheDb();

            User user = db.Users.Find(userID);

            if (user != null) {
                user.AllowClassmateRequests = false;

                user.AddressSecuritySetting = UserSecuritySetting.Private;
                user.BiographySecuritySetting = UserSecuritySetting.Private;
                user.BirthdateSecuritySetting = UserSecuritySetting.Private;
                user.ChildrenSecuritySetting = UserSecuritySetting.Private;
                user.EmailSecuritySetting = UserSecuritySetting.Private;
                user.PhoneSecuritySetting = UserSecuritySetting.Private;
                user.PictureSecuritySetting = UserSecuritySetting.Private;
                user.ScheduleSecuritySetting = UserSecuritySetting.Private;
                user.SpouseSecuritySetting = UserSecuritySetting.Private;

                db.SaveChanges();
            }
        }
Ejemplo n.º 10
0
        public static void RemoveUserFromCourse(int courseID, int userID, CourseUserRole userRole)
        {
            DidacheDb db = new DidacheDb();

            CourseUser courseUser = db.CourseUsers.SingleOrDefault(cu => cu.UserID == userID && cu.CourseID == courseID && cu.RoleID == (int) userRole);

            if (courseUser != null) {
                db.CourseUsers.Remove(courseUser);
            }

            if (userRole == CourseUserRole.Student) {
                // don't delete assignments
            }

            db.SaveChanges();
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="courseID"></param>
        /// <param name="userID"></param>
        /// <param name="groupID"></param>
        /// <param name="userRole"></param>
        /// <returns>Whether or not the user was added (false = just updated)</returns>
        public static bool AddUserToCourse(int courseID, int userID, int groupID, CourseUserRole userRole)
        {
            DidacheDb db = new DidacheDb();

            CourseUser courseUser = db.CourseUsers.SingleOrDefault(cu => cu.UserID == userID && cu.CourseID == courseID && cu.RoleID == (int) userRole);

            if (courseUser != null) {

                // update the group
                if (groupID > 0) {
                    courseUser.GroupID = groupID;
                    db.SaveChanges();
                }

                return false;
            } else {
                courseUser = new CourseUser() {
                    UserID = userID,
                    CourseID = courseID,
                    RoleID = (int) userRole,
                    GroupID = groupID
                };

                db.CourseUsers.Add(courseUser);

                if (userRole == CourseUserRole.Student) {

                    // check for assignments
                    bool hasTasks = db.UserTasks.Count(ut => ut.UserID == userID && ut.Task.CourseID == courseID) > 0;

                    if (!hasTasks) {

                        // create assignments
                        List<Task> tasks = db.Tasks.Where(t => t.CourseID == courseID).ToList();

                        foreach (Task task in tasks) {
                            UserTaskData utd = new UserTaskData() {
                                TaskID = task.TaskID,
                                CourseID = task.CourseID,
                                UnitID = task.UnitID,
                                GraderComments = "",
                                GraderSubmitDate = null,
                                GraderUserID = 0,
                                GradeStatus = 0,
                                LetterGrade = "",
                                NumericGrade = null,
                                StudentComments = "",
                                StudentSubmitDate = null,
                                TaskCompletionStatus = TaskCompletionStatus.NotStarted,
                                TaskData = "",
                                GraderFileID = 0,
                                PostID = 0,
                                StudentFileID = 0,
                                UserID = userID
                            };

                            db.UserTasks.Add(utd);
                        }
                    }
                }

                db.SaveChanges();
                return true;

            }
        }
Ejemplo n.º 12
0
        public static bool SyncCourse(int courseID, string sessionYear, string sessionCode, string courseCode, string section, string courseHours)
        {
            DidacheDb db = new DidacheDb();
            bool success = false;

            Course course = db.Courses.Find(courseID);

            // get code from CARS
            List<CarsStudentUser> users = GetCarsData(sessionYear, sessionCode, courseCode, section, courseHours);

            List<CarsStudentUser> toRemove = users.Where(u => u.CarsUserStatus == CarsUserStatus.NotActive).ToList();
            List<CarsStudentUser> toAdd = users.Where(u => u.CarsUserStatus == CarsUserStatus.Active).ToList();

            // remove all droppies
            foreach (CarsStudentUser carsStudentUser in toRemove) {
                CourseUsers.RemoveUserFromCourse(courseID, carsStudentUser.UserID, CourseUserRole.Student);
            }

            // add all the 'R'
            foreach (CarsStudentUser carsStudentUser in toAdd) {

                User user = db.Users.Find(carsStudentUser.UserID);

                // check for user
                if (user == null) {
                    // create login
                    MembershipUser membershipUser = null;

                    // try to find
                    membershipUser = Membership.GetUser(carsStudentUser.UserID.ToString(), false);
                    if (membershipUser == null)
                        membershipUser = Membership.CreateUser(carsStudentUser.UserID.ToString(), carsStudentUser.UserID.ToString() + carsStudentUser.LastName.Substring(0, 1), carsStudentUser.Email);

                    // create user
                    user = new User() {
                        UserID = carsStudentUser.UserID,
                        FirstName = carsStudentUser.FirstName,
                        MiddleName = carsStudentUser.MiddleName,
                        LastName = carsStudentUser.LastName,
                        Email = carsStudentUser.Email,
                        NameFormat = carsStudentUser.NameFormat,
                        Username = membershipUser.UserName,
                        AspnetUserID = new Guid(membershipUser.ProviderUserKey.ToString()),
                        BirthDate = null,
                        DeceasedDate = null,
                        LastUpdatedDate = DateTime.Now,
                        IsDeceased = false,
                        Language = "en-US",

                        PersonID = Guid.Empty,
                        IsRegistered = true,

                        TimezoneOffset = -6,

                        Hometown  = "",
                        AlmaMater  = "",
                        Bio  = "",
                        MinistryGoals  = "",
                        Facebook  = "",
                        Twitter  = "",
                        Website  = "",

                        AliasName = "",

                        PictureSecurity = 0,
                        AddressSecurity = 0,
                        EmailSecurity = 0,
                        PhoneSecurity = 0,
                        SpouseSecurity = 1,
                        ChildrenSecurity = 1,
                        BiographySecurity = 0,
                        ScheduleSecurity = 1,
                        BirthdateSecurity = 1
                    };

                    db.Users.Add(user);
                    //try {
                        db.SaveChanges();
                    //} catch (Exception ex) {

                    //}
                }

                CourseUsers.AddUserToCourse(courseID, user.UserID, -1, CourseUserRole.Student);

            }

            //CourseUsers.RemoveUserFromCourse(courseID, userID, (CourseUserRole)roleID);
            //CourseUsers.AddUserToCourse(courseID, userID, groupID, (CourseUserRole)roleID);

            return success;
        }