public IHttpActionResult Get() { var authenticatedUser = this.ActionContext.RequestContext.Principal as ClaimsPrincipal; var username = authenticatedUser.Claims.FirstOrDefault(x => x.Type == "user_name").Value; var role = _roleCheckingService.getCollegeRole(username); var id = _accountService.GetAccountByUsername(username).GordonID; if (role == "student") { var result = _scheduleService.GetScheduleStudent(id); if (result == null) { return(NotFound()); } return(Ok(result)); } else if (role == "facstaff") { var result = _scheduleService.GetScheduleFaculty(id); if (result == null) { return(NotFound()); } return(Ok(result)); } return(NotFound()); }
public IHttpActionResult Search(string searchString) { //get token data from context, username is the username of current logged in person var authenticatedUser = this.ActionContext.RequestContext.Principal as ClaimsPrincipal; var viewerName = authenticatedUser.Claims.FirstOrDefault(x => x.Type == "user_name").Value; var viewerType = _roleCheckingService.getCollegeRole(viewerName); var accounts = Data.AllBasicInfo; // Create accounts viewmodel to search switch (viewerType) { case Position.GOD: accounts = Data.AllBasicInfo; break; case Position.POLICE: accounts = Data.AllBasicInfo; break; case Position.STUDENT: accounts = Data.AllBasicInfoWithoutAlumni; break; case Position.FACSTAFF: accounts = Data.AllBasicInfo; break; } if (!String.IsNullOrEmpty(searchString)) { // for every stored account, convert it to lowercase and compare it to the search paramter accounts = accounts.Where(s => s.ConcatonatedInfo.ToLower().Contains(searchString)); accounts = accounts.OrderBy(s => s.FirstName.CompareTo(searchString)).ThenBy(s => s.LastName.CompareTo(searchString)); } // Return all of the return(Ok(accounts)); }
public IHttpActionResult GetUserProfile(string username) { if (!ModelState.IsValid || string.IsNullOrWhiteSpace(username)) { string errors = ""; foreach (var modelstate in ModelState.Values) { foreach (var error in modelstate.Errors) { errors += "|" + error.ErrorMessage + "|" + error.Exception; } } throw new BadInputException() { ExceptionMessage = errors }; } //get token data from context, username is the username of current logged in person var authenticatedUser = this.ActionContext.RequestContext.Principal as ClaimsPrincipal; var viewerName = authenticatedUser.Claims.FirstOrDefault(x => x.Type == "user_name").Value; var viewerType = _roleCheckingService.getCollegeRole(viewerName); //search this person in cached data. var _student = _profileService.GetStudentProfileByUsername(username); var _faculty = _profileService.GetFacultyStaffProfileByUsername(username); var _alumni = _profileService.GetAlumniProfileByUsername(username); var _customInfo = _profileService.GetCustomUserInfo(username); object student = null; object faculty = null; object alumni = null; object customInfo = null; //security control depends on viewer type. apply different views to different viewers. switch (viewerType) { case Position.GOD: student = _student; faculty = _faculty; alumni = _alumni; customInfo = _customInfo; break; case Position.POLICE: student = _student; faculty = _faculty; alumni = _alumni; customInfo = _customInfo; break; case Position.STUDENT: student = (_student == null) ? null : (PublicStudentProfileViewModel)_student; //implicit conversion faculty = (_faculty == null) ? null : (PublicFacultyStaffProfileViewModel)_faculty; alumni = null; //student can't see alumini customInfo = _customInfo; break; case Position.FACSTAFF: student = _student; faculty = (_faculty == null) ? null : (PublicFacultyStaffProfileViewModel)_faculty; alumni = (_alumni == null) ? null : (PublicAlumniProfileViewModel)_alumni; customInfo = _customInfo; break; } // merge the person's info if this person is in multiple tables and return result if (student != null) { if (faculty != null) { if (alumni != null) { JObject stualufac = JObject.FromObject(student); //convert into JSON object in order to use JSON.NET library stualufac.Merge(JObject.FromObject(alumni), new JsonMergeSettings // user Merge function to merge two json object { MergeArrayHandling = MergeArrayHandling.Union }); stualufac.Merge(JObject.FromObject(faculty), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); stualufac.Merge(JObject.FromObject(customInfo), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); stualufac.Add("PersonType", "stualufac"); // assign a type to the json object return(Ok(stualufac)); } JObject stufac = JObject.FromObject(student); stufac.Merge(JObject.FromObject(faculty), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); stufac.Merge(JObject.FromObject(customInfo), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); stufac.Add("PersonType", "stufac"); return(Ok(stufac)); } else if (alumni != null) { JObject stualu = JObject.FromObject(student); stualu.Merge(JObject.FromObject(alumni), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); stualu.Merge(JObject.FromObject(customInfo), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); stualu.Add("PersonType", "stualu"); return(Ok(stualu)); } JObject stu = JObject.FromObject(student); stu.Merge(JObject.FromObject(customInfo), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); stu.Add("PersonType", "stu"); return(Ok(stu)); } else if (faculty != null) { if (alumni != null) { JObject alufac = JObject.FromObject(alumni); alufac.Merge(JObject.FromObject(faculty), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); alufac.Merge(JObject.FromObject(customInfo), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); alufac.Add("PersonType", "alufac"); return(Ok(alufac)); } JObject fac = JObject.FromObject(faculty); fac.Merge(JObject.FromObject(customInfo), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); fac.Add("PersonType", "fac"); return(Ok(fac)); } else if (alumni != null) { JObject alu = JObject.FromObject(alumni); alu.Merge(JObject.FromObject(customInfo), new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); alu.Add("PersonType", "alu"); return(Ok(alu)); } else { return(NotFound()); } }
public IHttpActionResult Search(string searchString) { //get token data from context, username is the username of current logged in person var authenticatedUser = this.ActionContext.RequestContext.Principal as ClaimsPrincipal; var viewerName = authenticatedUser.Claims.FirstOrDefault(x => x.Type == "user_name").Value; var viewerType = _roleCheckingService.getCollegeRole(viewerName); var accounts = Data.AllBasicInfo; String key; int precedence = 0; var allMatches = new SortedDictionary <String, BasicInfoViewModel>(); // Create accounts viewmodel to search switch (viewerType) { case Position.SUPERADMIN: accounts = Data.AllBasicInfo; break; case Position.POLICE: accounts = Data.AllBasicInfo; break; case Position.STUDENT: accounts = Data.AllBasicInfoWithoutAlumni; break; case Position.FACSTAFF: accounts = Data.AllBasicInfo; break; } if (!String.IsNullOrEmpty(searchString)) { // First name exact match (Highest priority) foreach (var match in accounts.Where(s => s.FirstName.ToLower() == searchString)) { key = GenerateKey(match.FirstName, match.LastName, match.UserName, precedence); while (allMatches.ContainsKey(key)) { key = key + "1"; } allMatches.Add(key, match); } precedence++; // Last name exact match foreach (var match in accounts.Where(s => !allMatches.ContainsValue(s)).Where(s => s.LastName.ToLower() == searchString)) { key = GenerateKey(match.LastName, match.FirstName, match.UserName, precedence); while (allMatches.ContainsKey(key)) { key = key + "1"; } allMatches.Add(key, match); } precedence++; // First name starts with foreach (var match in accounts.Where(s => !allMatches.ContainsValue(s)).Where(s => s.FirstName.ToLower().StartsWith(searchString))) { key = GenerateKey(match.FirstName, match.LastName, match.UserName, precedence); while (allMatches.ContainsKey(key)) { key = key + "1"; } allMatches.Add(key, match); } precedence++; // Username (first name) starts with foreach (var match in accounts.Where(s => !allMatches.ContainsValue(s)).Where(s => s.UserName.Contains('.') && s.UserName.Split('.')[0].ToLower().StartsWith(searchString))) { key = GenerateKey(match.UserName.Split('.')[1], match.UserName.Split('.')[0], match.UserName, precedence); while (allMatches.ContainsKey(key)) { key = key + "1"; } allMatches.Add(key, match); } precedence++; // Last name starts with foreach (var match in accounts.Where(s => !allMatches.ContainsValue(s)).Where(s => s.LastName.ToLower().StartsWith(searchString))) { key = GenerateKey(match.LastName, match.FirstName, match.UserName, precedence); while (allMatches.ContainsKey(key)) { key = key + "1"; } allMatches.Add(key, match); } precedence++; // Username (last name) starts with foreach (var match in accounts.Where(s => !allMatches.ContainsValue(s)).Where(s => s.UserName.Contains('.') && s.UserName.Split('.')[1].ToLower().StartsWith(searchString))) { key = GenerateKey(match.UserName.Split('.')[0], match.UserName.Split('.')[1], match.UserName, precedence); while (allMatches.ContainsKey(key)) { key = key + "1"; } allMatches.Add(key, match); } precedence++; // First name, last name, or username contains (Lowest priority) foreach (var match in accounts.Where(s => !allMatches.ContainsValue(s)).Where(s => s.FirstName.ToLower().Contains(searchString) || s.LastName.ToLower().Contains(searchString) || s.UserName.ToLower().Contains(searchString))) { if (match.FirstName.ToLower().Contains(searchString)) { key = GenerateKey(match.FirstName, match.LastName, match.UserName, precedence); } else if (match.LastName.ToLower().Contains(searchString)) { key = GenerateKey(match.LastName, match.FirstName, match.UserName, precedence); } else { key = GenerateKey(match.UserName, "", match.UserName, precedence); } while (allMatches.ContainsKey(key)) { key = key + '1'; } allMatches.Add(key, match); } allMatches.OrderBy(s => s.Key); accounts = allMatches.Values; } // Return all of the return(Ok(accounts)); }
public IHttpActionResult Search(string searchString) { //get token data from context, username is the username of current logged in person var authenticatedUser = ActionContext.RequestContext.Principal as ClaimsPrincipal; var viewerName = authenticatedUser.Claims.FirstOrDefault(x => x.Type == "user_name").Value; var viewerType = _roleCheckingService.getCollegeRole(viewerName); var accounts = viewerType == Position.STUDENT ? Data.AllBasicInfoWithoutAlumni : Data.AllBasicInfo; int precedence = 0; var allMatches = new SortedDictionary <string, BasicInfoViewModel>(); Action <string, BasicInfoViewModel> appendMatch = (string key, BasicInfoViewModel match) => { while (allMatches.ContainsKey(key)) { key += "1"; } ; allMatches.Add(key, match); }; if (!string.IsNullOrEmpty(searchString)) { // First name exact match (Highest priority) foreach (var match in accounts.Where(s => s.FirstNameMatches(searchString))) { string key = GenerateKey(match.FirstName, match.LastName, match.UserName, precedence); appendMatch(key, match); } precedence++; // Last name exact match foreach (var match in accounts .Where(s => !allMatches.ContainsValue(s)) .Where(s => s.LastNameMatches(searchString))) { string key = GenerateKey(match.LastName, match.FirstName, match.UserName, precedence); appendMatch(key, match); } precedence++; // First name starts with foreach (var match in accounts .Where(s => !allMatches.ContainsValue(s)) .Where(s => s.FirstNameStartsWith(searchString))) { string key = GenerateKey(match.FirstName, match.LastName, match.UserName, precedence); appendMatch(key, match); } precedence++; // Username (first name) starts with foreach (var match in accounts .Where(s => !allMatches.ContainsValue(s)) .Where(s => s.UsernameFirstNameStartsWith(searchString))) { string key = GenerateKey(match.GetFirstNameFromUsername(), match.GetLastNameFromUsername(), match.UserName, precedence); appendMatch(key, match); } precedence++; // Last name starts with foreach (var match in accounts .Where(s => !allMatches.ContainsValue(s)) .Where(s => s.LastNameStartsWith(searchString))) { string key = GenerateKey(match.LastName, match.FirstName, match.UserName, precedence); appendMatch(key, match); } precedence++; // Username (last name) starts with foreach (var match in accounts .Where(s => !allMatches.ContainsValue(s)) .Where(s => s.UsernameLastNameStartsWith(searchString))) { string key = GenerateKey(match.GetLastNameFromUsername(), match.GetFirstNameFromUsername(), match.UserName, precedence); appendMatch(key, match); } precedence++; // First name, last name, or username contains (Lowest priority) foreach (var match in accounts .Where(s => !allMatches.ContainsValue(s)) .Where(s => s.FirstNameContains(searchString) || s.LastNameContains(searchString) || s.UsernameContains(searchString))) { string key; if (match.FirstNameContains(searchString)) { key = GenerateKey(match.FirstName, match.LastName, match.UserName, precedence); } else if (match.LastNameContains(searchString)) { key = GenerateKey(match.LastName, match.FirstName, match.UserName, precedence); } else { key = GenerateKey(match.UserName, "", match.UserName, precedence); } appendMatch(key, match); } allMatches.OrderBy(m => m.Key); accounts = allMatches.Values; } // Return all of the return(Ok(accounts)); }