Ejemplo n.º 1
0
        public async Task <PageResultModel <CourseModel> > GetList(CourseFilter filter)
        {
            var query = _db.Courses.AsQueryable();

            if (filter.Status != null)
            {
                query = query.Where(x => x.Status == filter.Status);
            }
            if (filter.Level != null)
            {
                query = query.Where(x => x.Level == filter.Level);
            }
            query = query.OrderByDescending(x => x.Id)
                    .Skip((filter.Page - 1) * filter.Size)
                    .Take(filter.Size);

            var count = await query.CountAsync();

            var list = await MapQuery(query).ToListAsync();

            return(new PageResultModel <CourseModel>
            {
                Size = filter.Size,
                Page = filter.Page,
                TotalCount = count,
                List = list
            });
        }
Ejemplo n.º 2
0
 /// <summary>
 /// filters Courses for a certain status (planned, active, completed)
 /// </summary>
 /// <param name="courses"></param>
 /// <param name="filter"></param>
 /// <returns>a list of Courses</returns>
 public List <Course> FilterStatus(List <Course> courses, CourseFilter filter)
 {
     if (filter.status != null && filter.status.Count > 0)
     {
         if (!filter.status.Contains("active"))
         {
             var courseRemoveActive = courses.Where(x => x.Start <DateTime.Now && x.End> DateTime.Now).ToList();
             foreach (var course in courseRemoveActive)
             {
                 courses.Remove(course);
             }
         }
         if (!filter.status.Contains("planned"))
         {
             var courseRemovePlanned = courses.Where(x => x.Start > DateTime.Now).ToList();
             foreach (var course in courseRemovePlanned)
             {
                 courses.Remove(course);
             }
         }
         if (!filter.status.Contains("completed"))
         {
             var courseRemoveCompleted = courses.Where(x => x.Start < DateTime.Now && x.End < DateTime.Now).ToList();
             foreach (var course in courseRemoveCompleted)
             {
                 courses.Remove(course);
             }
         }
     }
     return(courses);
 }
Ejemplo n.º 3
0
        private IReadOnlyCollection <DataSetValuePair> UpdateDatasetSource()
        {
            var sources  = new List <DataSetValuePair>();
            var sessions = ViewModelLocatorStatic.Locator.SessionModule.Sessions.Select(c => c.Model);

            if (CodeFilter != null)
            {
                var sessionsfiltered =
                    sessions.Where(
                        c => c.SessionId.ToLowerInvariant().Contains(CodeFilter.ToLowerInvariant()));
                sessions = sessionsfiltered;
            }

            if (CourseFilter != null)
            {
                var cf = CourseFilter.ToLowerInvariant();
                var sessionsfiltered =
                    sessions.Where(
                        c => c.Course.CourseId.ToLowerInvariant().Contains(cf) || c.Course.CourseName.ToLowerInvariant().Contains(cf));
                sessions = sessionsfiltered;
            }

            sources.Add(new DataSetValuePair("SessionDataset", sessions));

            return(sources);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// filters Courses for a certain course category (e.g. Coding Campus)
 /// </summary>
 /// <param name="courses"></param>
 /// <param name="filter"></param>
 /// <returns>a list of Courses</returns>
 public List <Course> FilterCategory(List <Course> courses, CourseFilter filter)
 {
     if (filter.category != null && filter.category.Length > 0)
     {
         courses = courses.Where(x => x.Category == filter.category).ToList();
     }
     return(courses);
 }
Ejemplo n.º 5
0
        public CourseFilter ToCourseFilter()
        {
            var filter = new CourseFilter();

            filter.Code = Code;
            filter.Name = Keyword;
            return(filter);
        }
Ejemplo n.º 6
0
 public async Task <IEnumerable <CourseModel> > GetAllCoursesAsync(CourseFilter courseFilter)
 {
     courseFilter.CurrentPage = (courseFilter.CurrentPage - 1) * courseFilter.PageSize;
     if (courseFilter.CurrentPage <= 0)
     {
         courseFilter.CurrentPage = 0;
     }
     return(await(_courseRepository.GetAllCoursesAsync(courseFilter)));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// filters Courses for a certain Content
 /// </summary>
 /// <param name="courses"></param>
 /// <param name="filter"></param>
 /// <returns>a list of Courses</returns>
 public List <Course> FilterContent(List <Course> courses, CourseFilter filter)
 {
     if (filter.content_id != null && filter.content_id != 0)
     {
         // get all course-content relations where a certain content exists
         var relations = entities.RelCourseContents.Where(x => x.ContentId == filter.content_id).ToList();
         // filter courses for existing course-content relations
         courses = courses.Where(x => relations.Any(z => x.Id == z.CourseId)).ToList();
     }
     return(courses);
 }
Ejemplo n.º 8
0
 /// <summary>
 /// filters Courses for assignment to a certain trainer
 /// </summary>
 /// <param name="courses"></param>
 /// <param name="filter"></param>
 /// <returns>a list of Courses</returns>
 public List <Course> FilterTrainer(List <Course> courses, CourseFilter filter)
 {
     if (filter.trainer_id != null && filter.trainer_id != 0)
     {
         // get all course-trainer relations where a certain trainer exists
         var relations = entities.RelCourseTrainers.Where(x => x.TrainerId == filter.trainer_id).ToList();
         // filter courses for existing course-trainer relations
         courses = courses.Where(x => relations.Any(z => x.Id == z.CourseId)).ToList();
     }
     return(courses);
 }
Ejemplo n.º 9
0
        public IActionResult Index()
        {
            var currentUserId = HttpContext.Session.GetInt32("_Id").Value;

            Services.Courses.DTOs.CourseFilter filter = new CourseFilter()
            {
                UserId = currentUserId
            };
            var result = _courseService.GetListDTOPaged(1, 50, null, filter).ToViewModel();

            return(View(result));
        }
Ejemplo n.º 10
0
        public async Task <IActionResult> GetCoursesFiltered([FromBody] CourseFilter courseFilter)
        {
            if (courseFilter != null && ModelState.IsValid)
            {
                var courses = await _courseManager.GetAllCoursesAsync(courseFilter);

                if (courses.Count() > 0)
                {
                    return(Ok(courses));
                }
                return(NoContent());
            }
            return(BadRequest("Invalid Parameters"));
        }
Ejemplo n.º 11
0
        public PagedResult <Course> GetList(CourseFilter filter, Paging paging)
        {
            const string func = "GetList";

            _logger.LogTrace("{}: Entering {}.", func, func);
            try
            {
                return(_courseRepo.GetList(filter, paging));
            }
            catch (Exception ex)
            {
                _logger.LogInformation("{}: Exception caught.", func, ex);
                throw ex;
            }
        }
Ejemplo n.º 12
0
        public List <JSONCourseSend> Get([FromBody] CourseFilter filter)
        {
            List <JSONCourseSend> returnList = null;

            try
            {
                returnList          = courseController.GetFilteredCourses(filter);
                Response.StatusCode = 200;
            }
            catch (Exception ex)
            {
                Response.StatusCode = 500;
                Response.WriteAsync(ex.Message);
            }
            return(returnList);
        }
Ejemplo n.º 13
0
        public void LoadCourses()
        {
            try
            {
                var bl = Service.Get <ICourseBusinessLogic>();

                var filter   = new CourseFilter();
                var griddata = bl.GetCourses(filter);

                View.SetGridData(griddata);
            }
            catch (Exception err)
            {
                View.ShowError(err);
            }
        }
Ejemplo n.º 14
0
        public IHttpActionResult GetCourses([FromUri] CourseFilter courseFilter)
        {
            var queryable = Course.FilterCourses(db.Courses, courseFilter);

            if (courseFilter.Favourites)
            {
                int userId       = JwtAuthManager.GetUserIdFromRequest(Request);
                var favouriteIds = db.Users.Find(userId).Favorites.Select(course => course.Id).ToList();
                queryable = queryable.Where(c => favouriteIds.Contains(c.Id));
            }
            var coursesPage = Pagination.CreateMappedPage <Course, CourseCard>(
                queryable, courseFilter.Page, courseFilter.PageSize, "Title", true
                );

            return(Ok(coursesPage));
        }
Ejemplo n.º 15
0
        /// <summary>
        /// filters Courses for four filter options
        /// </summary>
        /// <param name="filter"></param>
        /// <returns>a list of JSONCourseSends</returns>
        public List <JSONCourseSend> GetFilteredCourses(CourseFilter filter)
        {
            var courses = GetAll();

            courses = FilterStatus(courses, filter);
            courses = FilterTrainer(courses, filter);
            courses = FilterCategory(courses, filter);
            courses = FilterSearch(courses, filter);
            courses = FilterContent(courses, filter);
            var jsonCourses = new List <JSONCourseSend>();

            foreach (var course in courses)
            {
                jsonCourses.Add(jsonConverter.ConvertCourseToJSON(course));
            }
            return(jsonCourses);
        }
Ejemplo n.º 16
0
        public IActionResult GetCoursesForPagination(PaginationData data)
        {
            int page = data.RequestPage ?? 0;

            _pageSize = data.PageLimit ?? 4;
            var itemsToSkip =
                page == 0 ? 0 : (page - 1) * _pageSize;

            var container = new ApiContainer();


            var filter = new CourseFilter()
            {
                Category        = data.Category,
                UserSearchInput = data.UserSearchInput
            };
            var courses = _data.GetCourses(filter).OrderBy(t => t.Id).Skip(itemsToSkip).Take(_pageSize);

            if (!courses.Any())
            {
                return(NotFound());
            }

            var dataRez = new List <CourseDto>();
            var model   = courses.Select(c => _mapper.Map <Course, CourseDto>(c));

            foreach (var course in courses)
            {
                var dtoModel = _mapper.Map <Course, CourseDto>(course);
                dtoModel.StudentCount = course.Users.Count();
                dtoModel.UserRaiting  = 5;
                dtoModel.Author       =
                    string.IsNullOrEmpty(course.Author.Name) || string.IsNullOrEmpty(course.Author.Surname)
                        ? course.Author.UserName
                        : $"{course.Author.Name} {course.Author.Surname}";
                dataRez.Add(dtoModel);
            }
            container.Data        = dataRez;
            container.CurrentPage = page;
            container.TotalRecord = _data.GetCourses(filter).Count();
            container.PageLimit   = _pageSize;
            container.Fetched     = courses.Count();
            return(Ok(container));
        }
Ejemplo n.º 17
0
        private List <KeyValuePair <string, object> > GetFilterParam(CourseFilter filter)
        {
            List <KeyValuePair <string, object> > parameters = new List <KeyValuePair <string, object> >();

            if (filter == null)
            {
                return(parameters);
            }

            if (filter.Id.HasValue)
            {
                parameters.Add(new KeyValuePair <string, object>("@Id", filter.Id));
            }
            if (filter.Name != null && filter.Name != "")
            {
                parameters.Add(new KeyValuePair <string, object>("@Name", filter.Name));
            }

            return(parameters);
        }
Ejemplo n.º 18
0
        public IEnumerable <ListCourseGridViewModel> GetCourses(CourseFilter filter)
        {
            IEnumerable <ListCourseGridViewModel> result = null;

            using (var ctx = new ModelContext())
            {
                var query = ctx.Courses.AsQueryable();

                result = query
                         .Select(x => new ListCourseGridViewModel
                {
                    Id    = x.Id,
                    Title = x.course_title,
                    Level = x.course_level
                })
                         .ToArray();
            }

            return(result);
        }
Ejemplo n.º 19
0
        public async Task <CourseVO[]> BbCourses(CourseFilter filter)
        {
            _tryCount += 1;

            if (_tryCount == 3)
            {
                await ResetConnection();

                _crseClient = null;
            }

            if (_crseClient == null)
            {
                _crseClient = await GetCourseClient();
            }
            var crseVo = await _crseClient.getCourseAsync(filter);

            _tryCount = 0;
            return(crseVo.@return);
        }
Ejemplo n.º 20
0
        public IEnumerable <Course> GetCourses(CourseFilter filter)
        {
            var query = _context.Courses.AsQueryable();

            if (filter.Category != null)
            {
                query = _context.CoursesToCategories
                        .Where(c => c.Category.Name == filter.Category)
                        .Select(c => c.Course);
            }


            if (filter.UserSearchInput != null)
            {
                var t = filter.UserSearchInput.ToLower();
                query = query.Where(c => c.Name.ToLower().Contains(t));
            }

            return(query.Include(u => u.Users).Include(u => u.Author).ToList());
        }
Ejemplo n.º 21
0
        public IEnumerable <Course> Select(CourseFilter filter)
        {
            string procedureName = "Course_Select";

            using (SqlConnection connection = new SqlConnection(_connectionString))
            {
                connection.Open();
                SqlCommand command = new SqlCommand(procedureName, connection)
                {
                    CommandType = System.Data.CommandType.StoredProcedure
                };
                var paramList = GetFilterParam(filter);
                foreach (var param in paramList)
                {
                    SqlParameter Param = new SqlParameter
                    {
                        ParameterName = param.Key,
                        Value         = param.Value
                    };
                    command.Parameters.Add(Param);
                }
                var           result     = command.ExecuteReader();
                List <Course> resultList = new List <Course>();
                if (result.HasRows)
                {
                    while (result.Read())
                    {
                        Course entity = new Course
                        {
                            Id   = result.GetInt32(0),
                            Name = result.GetString(1)
                        };
                        resultList.Add(entity);
                    }
                }
                result.Close();
                return(resultList);
            }
        }
Ejemplo n.º 22
0
        private async Task FilterCourses(CourseFilter filter, IEnumerable<Course> unfilteredCourses)
        {
            Courses = new ObservableCollection<Course>();

            Courses = await Task<ObservableCollection<Course>>.Run(() =>
                {
                    IEnumerable<Course> filteredCourses = null;
                    switch (filter)
                    {
                        case CourseFilter.Code:
                            filteredCourses = unfilteredCourses.OrderBy(course => course.Id);
                            break;
                        case CourseFilter.Name:
                            filteredCourses = unfilteredCourses.OrderBy(course => course.Name);
                            break;
                        case CourseFilter.Department:
                            filteredCourses = unfilteredCourses.OrderBy(course => course.DepartmentId);
                            break;
                    }
                    return new ObservableCollection<Course>(filteredCourses);
                });
        }
Ejemplo n.º 23
0
 /// <summary>
 /// filters Course titles for an entry in the search field (at frontend)
 /// </summary>
 /// <param name="courses"></param>
 /// <param name="filter"></param>
 /// <returns>a list of Courses</returns>
 public List <Course> FilterSearch(List <Course> courses, CourseFilter filter)
 {
     // not the best looking code but working...
     if (filter.search != null && filter.search.Length > 0)
     {
         var filteredCourses = new List <Course>();
         foreach (var course in courses)
         {
             var title  = course.Title.ToLower();
             var search = filter.search.ToLower();
             if (title.Contains(search))
             {
                 filteredCourses.Add(course);
             }
         }
         return(filteredCourses);
     }
     else
     {
         return(courses);
     }
 }
Ejemplo n.º 24
0
        public PagedResult <Course> GetList(CourseFilter filter, Paging paging)
        {
            const string func = "GetList";

            _logger.LogTrace("{}: Entering {}.", func, func);
            try
            {
                var courses = from c in _context.Course
                              select c;

                if (!string.IsNullOrEmpty(filter.Code))
                {
                    courses = courses.Where(c => c.Code.ToLower().Contains(filter.Code.ToLower()));
                }
                if (!string.IsNullOrEmpty(filter.Name))
                {
                    courses = courses.Where(c => c.Name.ToLower().Contains(filter.Name.ToLower()));
                }

                // Not paging
                if (paging == null)
                {
                    paging.CurrentPage = 0;
                    paging.PageSize    = int.MaxValue;
                }

                var result = courses.GetPaged(paging.CurrentPage, paging.PageSize);

                return(result);
            }
            catch (Exception ex)
            {
                _logger.LogInformation("{}: Exception caught.", func, ex);
                throw ex;
            }
        }
Ejemplo n.º 25
0
    public List <CourseVO> LoadCourses(CourseFilter pFilter, int pId = -1, int[] pIds = null)
    {
        List <CourseVO> result = null;

        try
        {
            AuthenticationService.CheckIfUSerIsAuthenticated();
            LogService.Log("CourseService", "LoadCourses", String.Format("Filter:{0}; ID:{1}; IDs: {2}", pFilter, pId, pIds));

            CourseTableAdapter          adapter = new CourseTableAdapter();
            ONyRDataSet.CourseDataTable table;
            result = new List <CourseVO>();


            if (pFilter == CourseFilter.All)
            {
                table = adapter.GetData();
            }
            else if (pFilter == CourseFilter.ById)
            {
                table = adapter.GetDataByID(pId);
            }
            else if (pFilter == CourseFilter.ByIds)
            {
                table = adapter.GetData();
            }
            else
            {
                throw new ONyRException(ErrorCode.UnknownError);
            }

            for (int i = 0; i < table.Count; ++i)
            {
                if (pFilter != CourseFilter.ByIds || pIds.Contains(table[i].ID))
                {
                    // TODO: Fill properties here
                    // TODO: try-catch block for every Nullable field!
                    result.Add(new CourseVO(table[i].ID, table[i].Name));
                }
            }

            adapter.Dispose();
        }
        catch (ONyRException e)
        {
            LogService.LogError(e.ErrorCode, e.StackTrace);
            throw new FaultException <ONyRFaultException>(new ONyRFaultException((int)e.ErrorCode));
        }
        catch (SqlException ex)
        {
            string s = "Class: " + ex.Class + "\n";
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                s += "Index #" + i + "\n" +
                     "Message: " + ex.Errors[i].Message + "\n" +
                     "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                     "Source: " + ex.Errors[i].Source + "\n" +
                     "Procedure: " + ex.Errors[i].Procedure + "\n" +
                     "Class: " + ex.Errors[i].Class + "\n";
            }
            LogService.LogError(ErrorCode.UnknownError, null, s);
            throw new FaultException <ONyRFaultException>(new ONyRFaultException((int)ErrorCode.DatabaseError));
        }
        catch (Exception e)
        {
            LogService.LogError(ErrorCode.UnknownError, e.StackTrace, e.Message);
            throw new FaultException <ONyRFaultException>(new ONyRFaultException((int)ErrorCode.UnknownError));
        }


        return(result);
    }
Ejemplo n.º 26
0
        public async Task <CourseReconResult> ReconcileCourses()
        {
            //await GetProfile();

            var courseFilter = new CourseFilter
            {
                filterTypeSpecified = true,
                filterType          = (int)CourseFilterType.LoadByCatId
            };

            if (Faculty != null)
            {
                var academy = StaticAcademy.AcadLookupById[Faculty.AcademyId];
                courseFilter.categoryIds = new[] { academy.BbCategoryId };
            }
            else
            {
                var ids = StaticAcademy.AcadLookupById.Select(acad => acad.Value.BbCategoryId).ToArray();
                courseFilter.categoryIds = ids;
            }

            var autoRetry       = new Retrier <CourseVO[]>();
            var bbCoursesResult = await autoRetry.Try(() => _bbWs.BbCourses(courseFilter), 3);

            if (bbCoursesResult == null)
            {
                throw new InvalidDataException("No Bb Responses received");
            }

            var queryKnownCourses = ctxManager.Context.Courses.AsQueryable();

            queryKnownCourses = Faculty == null
                ? queryKnownCourses
                : queryKnownCourses.Where(crse => crse.AcademyId == Faculty.AcademyId);

            var knownCoursesIds = queryKnownCourses.Select(crse => crse.BbCourseId).ToList();

            var reconResult = new CourseReconResult
            {
                Id        = Guid.NewGuid(),
                AcademyId = Faculty?.AcademyId,
                Courses   = new List <Course>()
            };

            foreach (var nc in bbCoursesResult
                     .Where(bbc => !knownCoursesIds.Contains(bbc.id))
                     .Select(bbc => new Course
            {
                BbCourseId = bbc.id,
                AcademyId = Faculty.AcademyId,
                Name = bbc.name,
                StartDate = DateTime.Now,
                GradDate = DateTime.Now.AddDays(25)
            }))
            {
                reconResult.NumAdded += 1;
                reconResult.Courses.Add(nc);
                ctxManager.Context.Courses.Add(nc);
            }

            await ctxManager.Context.SaveChangesAsync();

            foreach (var course in reconResult.Courses)
            {
                course.ReconResultId = reconResult.Id;
            }

            return(reconResult);
        }
Ejemplo n.º 27
0
        public async Task <IEnumerable <CourseModel> > GetAllCoursesAsync(CourseFilter courseFilter)
        {
            try
            {
                StringBuilder dynamicQuery = new StringBuilder();
                dynamicQuery.Append(SqlQueries.GetAllCourses);
                if (courseFilter.Keyword != null && courseFilter.Keyword.Length > 0)
                {
                    StringBuilder subKeywordSearchConditions = new StringBuilder();
                    string        keyword = $"'%{courseFilter.Keyword.Trim()}%'";

                    subKeywordSearchConditions.Append($"[C].[BatchType] LIKE {keyword} OR");
                    subKeywordSearchConditions.Append($"[C].[CourseType] LIKE {keyword} OR");
                    subKeywordSearchConditions.Append($"[C].[Academy] LIKE {keyword} OR");
                    subKeywordSearchConditions.Append($"[C].[Name] LIKE {keyword} OR");
                    subKeywordSearchConditions.Append($"[C].[YorbitCourseId] LIKE {keyword}");

                    dynamicQuery.Append(" ");
                    dynamicQuery.Append($"AND ({subKeywordSearchConditions.ToString()})");
                }
                string order;
                switch (courseFilter.Sort)
                {
                case E_COURSE_SORT.ACADEMY_NAME_ASC:
                    order = "[C].[Academy] ASC";
                    break;

                case E_COURSE_SORT.ACADEMY_NAME_DESC:
                    order = "[C].[Academy] DESC";
                    break;

                case E_COURSE_SORT.COURSE_NAME_DESC:
                    order = "[C].[Name] DESC";
                    break;

                case E_COURSE_SORT.BATCH_TYPE_ASC:
                    order = "[C].[BatchType] ASC";
                    break;

                case E_COURSE_SORT.BATCH_TYPE_DESC:
                    order = "[C].[BatchType] DESC";
                    break;

                case E_COURSE_SORT.COURSE_TYPE_ASC:
                    order = "[C].[CourseType] ASC";
                    break;

                case E_COURSE_SORT.COURSE_TYPE_DESC:
                    order = "[C].[CourseType] DESC";
                    break;

                case E_COURSE_SORT.YORBIT_COURSE_ID_ASC:
                    order = "[C].[YorbitCourseId] ASC";
                    break;

                case E_COURSE_SORT.YORBIT_COURSE_ID_DESC:
                    order = "[C].[YorbitCourseId] DESC";
                    break;

                default:
                    order = "[C].[Name] ASC";
                    break;
                }
                order = "ORDER BY " + order;
                dynamicQuery.Append(" ");
                dynamicQuery.Append(order);

                //Pagination
                dynamicQuery.Append($" offset {courseFilter.CurrentPage} rows fetch next {courseFilter.PageSize} rows only;");


                return(await _dataRepository.QueryAsync <CourseModel>(dynamicQuery.ToString()));
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Ejemplo n.º 28
0
 public IEnumerable <Course> GetCoursesWithAuthor(CourseFilter filter)
 {
     return(_context.Courses.Include(c => c.Author));
 }
Ejemplo n.º 29
0
 public LoadCoursesNotifier(CourseFilter pFilter, int pId = -1, int[] pIds = null)
 {
     mFilter = pFilter;
     mId     = pId;
     mIds    = pIds;
 }
Ejemplo n.º 30
0
        static String[,] getCourseList(String courseuser)
        {
            // Create a two dimensional array to house the course and membership data
            String[,] courseList = new String[10000, 4];

            // Add headers as the first element of the array
            courseList[0, 0] = "COURSE ID";
            courseList[0, 1] = "COURSE NAME";
            courseList[0, 2] = "MEMBERSHIP ID";
            courseList[0, 3] = "COURSE ROLE";

            if (DEBUG)
            {
                Console.WriteLine(courseList[0, 0] + "," + courseList[0, 1] + "," + courseList[0, 2] + "," + courseList[0, 3]);
            }

            // Get the list of courseIds associated with the user requested.
            CourseIdVO [] courses = ctx.getMemberships(courseuser);

            if (courses == null)
            {
                return(courseList);
            }

            // Initialize a user filter, set to get user by username and availability.
            UserFilter uf = new UserFilter();

            uf.filterType          = 6;
            uf.filterTypeSpecified = true;
            uf.name = new string[] { courseuser };

            // Get the user object
            UserVO [] user = usr.getUser(uf);

            if (user == null)
            {
                return(courseList);
            }

            int i = 1;

            // Iterate through the course list returned from contextWS.getMemberships()
            foreach (CourseIdVO courseIdVO in courses)
            {
                try
                {
                    // Grab the course Id
                    String courseId = courseIdVO.externalId;

                    // Initialize a new Course Filter and Membership Filter
                    CourseFilter     cf = new CourseFilter();
                    MembershipFilter mf = new MembershipFilter();

                    // Set course filter to search for courses by user Id. Yes, this is redundant, however
                    // ContextWS.getMemberships returns both courses and organizations. This only retrieves courses
                    cf.filterType          = 3;
                    cf.filterTypeSpecified = true;
                    cf.ids = new string[] { courseId };

                    // Set the membership filter to get memberships by course Id and UserId.
                    // Getting by user Id only (filter type 5) always fails. The course Id will be added
                    // during the foreach loop below.
                    mf.filterType          = 6;
                    mf.filterTypeSpecified = true;
                    mf.userIds             = new string[] { user[0].id };

                    // Load courses according to the course filter above
                    CourseVO[] course = crs.loadCourses(cf);

                    // if course is null, either the call failed, or the courseId actually refers to an organization.
                    // Check for course == null so we don't throw an exception when attempting to access the array.
                    if (course == null || course[0] == null)
                    {
                        continue;
                    }
                    else
                    {
                        // Add the current course Id to the membership filter
                        mf.courseIds = new string[] { courseId };

                        // Get Course memberships for the given user and course, as specified in the membership filter
                        CourseMembershipVO[] memberships = crm.loadCourseMembership(courseId, mf);

                        // If memberships were returned...
                        if (memberships != null)
                        {
                            // add the course id, the course name, the membership pk1, and the role id
                            courseList[i, 0] = course[0].courseId;
                            courseList[i, 1] = course[0].name;
                            courseList[i, 2] = memberships[0].id;
                            courseList[i, 3] = memberships[0].roleId;
                            if (DEBUG)
                            {
                                Console.WriteLine(i + ": " + courseList[i, 0] + "," + courseList[i, 1] + "," + courseList[i, 2] + "," + courseList[i, 3]);
                            }
                            i++;
                        }
                    }
                }
                catch (Exception e)
                {
                    // This error handling is not very useful, but essentially it is likely failing because of a
                    // NullReferenceException, so the current courselist is returned.
                    return(courseList);
                }
            }
            // Finished processing, return courseLIst.
            return(courseList);
        }