Пример #1
0
        public JsonResult ModifyStudent(NewStudent student, string sam, string fix, string id)
        {
            string[] toFix = fix.Split(' ');
            string msg = string.Empty;
            foreach (var curFix in toFix)
            {
                try
                {
                    switch (curFix)
                    {
                        case "Name":
                            string name = $"{student.lastName}, {student.firstName}";
                            name = string.IsNullOrEmpty(student.middleName) ? name : $"{name} {student.middleName.Substring(0, 1).ToUpper()}.";

                            var fixedStudent = new ADUser()
                            {
                                GivenName = student.firstName,
                                MiddleName = student.middleName,
                                SurName = student.lastName,
                                DisplayName = name,
                            };
                            ADUsers.ModifyUser(sam, fixedStudent);
                            msg += $"The name fields of \"{sam}\" were successfully modified.<br/>";
                            break;
                        case "gradYear":
                            var curStudent = ADUsers.GetUser(sam);
                            curStudent.GetGroups();

                            //remove from Class of PrevYYYY Group
                            var groupname = curStudent.Groups.First(group => group.Contains("Class"));
                            if (!string.IsNullOrEmpty(groupname))
                                ADUsers.RemoveUserFromGroup(sam, groupname);

                            //add to Class of newYYYY Group
                            ADUsers.AddUserToGroup(sam, $"Class of {student.graduatingYear}");

                            //Move OU
                            //var pattern = new Regex(@"OU=(?<gradYear>\d{4}),OU=(?<schoolName>.*),OU=(?<studentsStaff>(Students|Staff)),DC=gsd,DC=local");
                            //var match = pattern.Match(curStudent.DistinguishedName);
                            //var schoolName = match.Groups["schoolName"].Value;
                            var newYear = student.graduatingYear.ToString();

                            var schoolName = string.Empty;
                            foreach (var curSchool in new[] {"RES", "GMS", "GHS", "ECAP", "POST"})
                            {
                                if (!ADObjects.OUHasChildNamed($"OU={curSchool},OU=Students,DC=gsd,DC=local", newYear))
                                    continue;
                                schoolName = curSchool;
                                break;
                            }
                            var newLoc = $"OU={newYear},OU={schoolName},OU=Students,DC=gsd,DC=local";
                            ADObjects.MoveADObject(curStudent.DistinguishedName, newLoc);

                            //Move Home Folder.
                            if (curStudent.HomeDirectory.LastIndexOf('\\') != curStudent.HomeDirectory.Length)
                                curStudent.HomeDirectory = curStudent.HomeDirectory + '\\';
                            var dirRoot = Path.GetPathRoot(curStudent.HomeDirectory);
                            var newPath = Path.Combine(dirRoot, newYear, sam);
                            Directory.Move(curStudent.HomeDirectory, newPath);

                            //Update AD Home Directory.
                            ADUsers.SetUserHomeDirectory(sam, newPath);

                            //TODO: Add logic to GoogleAPI to move account to a different OU, and remove/add groups to which it belongs.
                            msg += "Grad Year fixed. Please sync Google using GADS.\n";
                            break;
                    }
                }
                catch (Exception ex)
                {
                    return Json(new {id, message = $"Error trying to modify {sam}: {ex.Message}", action = "Error", sam });
                }

            }
            return Json(!string.IsNullOrEmpty(msg) ?
                new {id, message = msg, action = "Created", sam } :
                new {id, message = $"Error: no case found to determine what to modify for {sam}.: ", action = "Error", sam }
            );
        }
Пример #2
0
        public ActionResult Create(NewStudent student)
        {
            try
            {
                student.firstName = student.firstName.Trim(); student.middleName = student.middleName.Trim(); student.lastName = student.lastName.Trim(); student.studentId = student.studentId.Trim();
                ValidateModel(student);

                if (!ModelState.IsValid) return View();

                student.firstName = student.firstName.Trim(); student.middleName = student.middleName.Trim(); student.lastName = student.lastName.Trim(); student.studentId = student.studentId.Trim();
                try
                {
                    Global.WriteLog("/Tech/Students/Create:Post", User.Identity.Name, $"{Computers.DetermineCompName(Request.UserHostAddress)} ({Computers.GetIP4Address(Computers.DetermineCompName(Request.UserHostAddress))})", "New Student Creation Started.");
                    var sam = ADUsers.NewStudent(student);
                    Global.WriteLog("/Tech/Students/Create:Post", User.Identity.Name, $"{Computers.DetermineCompName(Request.UserHostAddress)} ({Computers.GetIP4Address(Computers.DetermineCompName(Request.UserHostAddress))})", $"New Student Created ({sam}).");
                    ViewBag.isCreated = true;
                    ViewBag.newSAM = sam;
                    return View(new NewStudent());
                }
                catch (Exception ex)
                {
                    var msg = ex.Message;
                    if (ex.Message.Contains("The object already exists")) msg = "The student already exists.";
                    ModelState.AddModelError(string.Empty, msg);
                    Global.WriteLog("/Tech/Students/Create:Post", User.Identity.Name, $"{Computers.DetermineCompName(Request.UserHostAddress)} ({Computers.GetIP4Address(Computers.DetermineCompName(Request.UserHostAddress))})", $"New User Creation Error: {msg}",null,true);
                    return View();
                }
            }
            catch
            {
                return View();
            }
        }
Пример #3
0
        public JsonResult AnalyzeStudent(NewStudent student, string id)
        {
            var msg = string.Empty;
            var action = string.Empty;
            var sam = string.Empty;

            if (TryValidateModel(student))
            {  //all data given is valid.
                var lname = student.lastName.Replace(" ", "").Split('-')[0].Length >= 4 ? student.lastName.Replace(" ", "").Split('-')[0].Substring(0, 4) : student.lastName.Replace(" ", "").Split('-')[0];
                var fname = student.firstName.Substring(0, 1);
                var l4 = student.studentId.Substring(student.studentId.Length - 4);
                sam = $"{lname}{fname}{l4}";

                if (student.exitDate.HasValue)
                {
                    msg += "Student not attending the district since " + student.exitDate.Value.ToShortDateString() + ".";
                    action = "Ignore";
                }
                else
                {
                    if (student.graduatingYear < DateTime.Now.Year - 1 || (student.graduatingYear > (DateTime.Now.Year + 12)))
                    {
                        msg += "Graduating Year either too far in future, or past.";
                        action = "Ignore";
                    }
                    else
                    {
                        var curStudent = ADUsers.GetUser(sam);

                        if (curStudent != null)
                        {   //current student already exists.
                            if (string.IsNullOrEmpty(curStudent.HomeDirectory))
                            {  //no home directory. no way to tell graduation year.
                                msg = "Student Exists, but no home directory found. unable to determine graduation year.";
                                action = "Error";
                            }
                            else
                            {
                                uint curYear = Convert.ToUInt16(curStudent.HomeDirectory.Split('\\')[4]);

                                if (curYear != student.graduatingYear)
                                {
                                    msg += $"Graduating Year From \"{curYear}\" To \"{student.graduatingYear}\"<br>";
                                    action = "Modify";
                                }

                                if (curStudent.GivenName != student.firstName)
                                {
                                    msg += $"First Name From \"{curStudent.GivenName}\" To \"{student.firstName}\"<br>";
                                    action = "Modify";
                                }

                                if (curStudent.MiddleName != student.middleName)
                                {
                                    msg += $"Middle Name From \"{curStudent.MiddleName}\" To \"{student.middleName}\"<br>";
                                    action = "Modify";
                                }

                                if (curStudent.SurName != student.lastName)
                                {
                                    msg += $"Last Name From \"{curStudent.SurName}\" To \"{student.lastName}\"<br>";
                                    action = "Modify";
                                }
                                msg = string.IsNullOrEmpty(msg) ? "no changes needed." : msg;
                                action = string.IsNullOrEmpty(action) ? "Exists" : action;
                            }
                        }
                        else
                        {   //new student.
                            msg = "New student.";
                            action = "Create";
                        }
                    }
                }
            }
            else
            {// invalid/missing data.
                msg = "Invalid or missing data.";
                action = "Error";
            }
            return Json(new {id, message = msg, action, sam });
        }
Пример #4
0
 public JsonResult BatchCreate(NewStudent student, string id)
 {
     try
     {
         if (TryValidateModel(student))
         {
             var sam = ADUsers.NewStudent(student);
             return Json(new { id, message = $"Created user {sam}", action = "Created", sam });
         }
         else
         {
             var errmsg = string.Empty;
             foreach (var modelState in ModelState.Values)
             {
                 foreach (var error in modelState.Errors)
                 {
                     if (!errmsg.Contains(error.ErrorMessage))
                     {
                         errmsg += error.ErrorMessage + "<br/>";
                     }
                 }
             }
             return Json(new {id, message = errmsg, action = "Error" });
         }
     }
     catch (Exception ex)
     {
         return Json(new {id, message = $"{ex.Message}", action = "Error" });
     }
 }