Exemple #1
0
        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));
        }
Exemple #5
0
        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));
        }