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 } ); }
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(); } }
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 }); }
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" }); } }