private int CommitTestSource(AutoEvaluation eval, IExternalSource zone) { FileSystem fs = new FileSystem(m_ident); //Make sure toplevel zone directory exists CFile zonedir = fs.GetFile(@"c:\zones"); if (null == zonedir) { zonedir = fs.CreateDirectory(@"c:\zones", true, null); } //Build file perms CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); CourseRole.CourseRoleList staff = new Courses(m_ident).GetTypedRoles(eval.CourseID, true, null); foreach (CourseRole role in staff) { perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); } //Create zone directory string zpath = @"c:\zones\" + eval.ID; CFile ezonedir; if (null == (ezonedir = fs.GetFile(zpath))) { ezonedir = fs.CreateDirectory(zpath, false, perms); ezonedir.Alias = eval.Name; ezonedir.SpecType = CFile.SpecialType.TEST; fs.UpdateFileInfo(ezonedir, false); } fs.ImportData(zpath, zone, false, true); //Import the data return(ezonedir.ID); }
/// <summary> /// Set permissions for a given file /// </summary> public void SetPermissions(CFile file, CFilePermission perm) { CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); perms.Add(perm); SetPermissions(file, perms); }
/// <summary> /// Create an assignment /// </summary> public int Create(int courseID, string creator, string desc, DateTime duedate) { //Check perm Authorize(courseID, Permission.COURSE, "createasst", courseID, null); Assignment asst = new Assignment(); asst.CourseID = courseID; asst.Creator = creator; asst.Description = desc; asst.DueDate = duedate; asst.Format = Assignment.DEFAULT_FORMAT; //Create m_dp.CreateAssignment(asst); //Setup default permissions CreatePermissions(asst.ID, courseID, Permission.ASSIGNMENT); //Setup default file permissions Courses courseda = new Courses(m_ident); CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); CourseRole.CourseRoleList staff = courseda.GetTypedRoles(courseID, true, null); CourseRole.CourseRoleList stu = courseda.GetTypedRoles(courseID, false, null); foreach (CourseRole role in staff) { perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); } foreach (CourseRole role in stu) { perms.Add(new CFilePermission(role.PrincipalID, FileAction.READ, true)); } //Create content area FileSystem fs = new FileSystem(m_ident); CFile cdir = fs.CreateDirectory(@"c:\acontent\" + asst.ID, false, perms, false); asst.ContentID = cdir.ID; Update(asst); //Log Log("Created assignment: " + desc, asst.ID); return(asst.ID); }
/// <summary> /// Create the course /// </summary> public bool Create(string name, string number, string instructor) { Course course = new Course(); //TODO: Verify these values course.Name = name; course.Number = number; //Create course m_dp.CreateCourse(course); //Get all data course = GetInfo(course.ID); //Define default roles CourseRole role = new CourseRole(); role.CourseID = course.ID; role.Name = "Student"; role.Staff = false; m_dp.CreateCourseRole(role); role.Name = "TA"; role.Staff = true; m_dp.CreateCourseRole(role); role.Name = "Instructor"; role.Staff = true; m_dp.CreateCourseRole(role); //Assign filesys permissions CourseRole student = GetRoleInfo("Student", course.ID); CourseRole ta = GetRoleInfo("TA", course.ID); CourseRole ins = GetRoleInfo("Instructor", course.ID); CFilePermission.FilePermissionList full = new CFilePermission.FilePermissionList(); full.AddRange(CFilePermission.CreateFullAccess(ta.PrincipalID)); full.AddRange(CFilePermission.CreateFullAccess(ins.PrincipalID)); full.Add(new CFilePermission(student.PrincipalID, FileAction.READ, true)); //Create content area FileSystem fs = new FileSystem(m_ident); string cpath = @"c:\ccontent\" + course.ID; CFile cdir = fs.CreateDirectory(cpath, false, full); course.ContentID = cdir.ID; Update(course); CFile ldir = fs.CreateDirectory(cpath + @"\" + "lnotes", false, null); ldir.Alias = "Lecture Notes"; fs.UpdateFileInfo(ldir, false); //Put operator in course temporarily m_dp.CreateCourseMember(m_ident.Name, course.ID, "Instructor", null); //Assign course perms CreatePermissions(course.ID, course.ID, Permission.COURSE); if (instructor != m_ident.Name) { //Add instructor AddUser(instructor, "Instructor", course.ID, null); //Take operator out RemoveUser(m_ident.Name, course.ID); } return(true); }
/// <summary> /// Load submission directory with new files, updates time /// </summary> public bool Update(Submission sub, IExternalSource files) { FileSystem fs = new FileSystem(m_ident); bool markcmp, unmarkcmp, defunct; //Get old sub Components.Submission oldsub = GetInfo(sub.ID); markcmp = (oldsub.Status == Components.Submission.UNGRADED && sub.Status == Components.Submission.GRADED); unmarkcmp = (oldsub.Status == Components.Submission.GRADED && sub.Status == Components.Submission.UNGRADED); defunct = (oldsub.Status != Components.Submission.DEFUNCT && sub.Status == Components.Submission.DEFUNCT); //Make sure toplevel zone directory exists CFile subdir = fs.GetFile(@"c:\subs"); if (null == subdir) { subdir = fs.CreateDirectory(@"c:\subs", true, null, false); } //Build file perms CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); int courseID = new Assignments(m_ident).GetInfo(sub.AsstID).CourseID; CourseRole.CourseRoleList staff = new Courses(m_ident).GetTypedRoles(courseID, true, null); foreach (CourseRole role in staff) { perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); } perms.AddRange(CFilePermission.CreateOprFullAccess(sub.PrincipalID)); //Create zone directory CFile esubdir; string zpath = @"c:\subs\" + sub.ID; if (null == (esubdir = fs.GetFile(zpath))) { esubdir = fs.CreateDirectory(zpath, false, perms, false); esubdir.SpecType = CFile.SpecialType.SUBMISSION; string name = new Principals(m_ident).GetInfo(sub.PrincipalID).Name; esubdir.Alias = String.Format("{0}: {1}", name, GetNextSubmission(sub.AsstID, sub.PrincipalID)); fs.UpdateFileInfo(esubdir, false); } //Update sub entry sub.LocationID = esubdir.ID; m_dp.UpdateSubmission(sub); //Load files try { fs.ImportData(zpath, files, false, false); //Import the data } catch (Exception) { throw new DataAccessException("Invalid external file source. This means the system does " + "not understand how to extract files from the source. Please create a valid source"); } //Verify submission structure VerifyFormat(sub.AsstID, zpath); //Log if (markcmp) { Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " completed", sub.ID); } else if (unmarkcmp) { Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " incomplete", sub.ID); } else if (defunct) { Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " defunct", sub.ID); } return(true); }
/// <summary> /// Recreate the file permissions table /// </summary> public void RecoverBaseFilePermissions() { //Get all submissions Components.Submission.SubmissionList subs = new Submissions(m_ident).GetAll(); Assignments asstda = new Assignments(m_ident); Courses courseda = new Courses(m_ident); CFilePermission.FilePermissionList full; foreach (Components.Submission sub in subs) { CFile subdir = GetFile(sub.LocationID); int courseID = asstda.GetInfo(sub.AsstID).CourseID; //Give staff access CourseRole.CourseRoleList staff = courseda.GetTypedRoles(courseID, true, null); foreach (CourseRole role in staff) { full = CFilePermission.CreateFullAccess(role.PrincipalID); SetPermissionsInt(subdir, full); } //Give sub principal access full = CFilePermission.CreateOprFullAccess(sub.PrincipalID); SetPermissionsInt(subdir, full); } //Do content Course.CourseList courses = courseda.GetAll(); foreach (Course course in courses) { CFile cont = GetFile(course.ContentID); //Give staff access CourseRole.CourseRoleList staff = courseda.GetTypedRoles(course.ID, true, null); foreach (CourseRole role in staff) { full = CFilePermission.CreateFullAccess(role.PrincipalID); SetPermissionsInt(cont, full); } //Give students read access CourseRole.CourseRoleList stu = courseda.GetTypedRoles(course.ID, false, null); foreach (CourseRole role in stu) { full = new CFilePermission.FilePermissionList(); full.Add(new CFilePermission(role.PrincipalID, FileAction.READ, true)); SetPermissionsInt(cont, full); } //Give staff and stuaccess to asst content Assignment.AssignmentList assts = courseda.GetAssignments(course.ID); foreach (Assignment asst in assts) { CFile acont = GetFile(asst.ContentID); foreach (CourseRole role in staff) { full = CFilePermission.CreateFullAccess(role.PrincipalID); SetPermissionsInt(acont, full); } foreach (CourseRole role in stu) { full = new CFilePermission.FilePermissionList(); full.Add(new CFilePermission(role.PrincipalID, FileAction.READ, true)); SetPermissionsInt(acont, full); } } } }