示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
                    }
                }
            }
        }