예제 #1
0
        public async Task <OperationResult> DeleteSlot(int slotId, LmsUser lmsUser, string message = null)
        {
            var slot = _slotModel.GetOneById(slotId).Value;

            if (slot == null)
            {
                return(OperationResult.Error("Slot not found"));
            }

            if (slot.Status == (int)OfficeHoursSlotStatus.Cancelled)
            {
                return(OperationResult.Error("Slot was deleted by teacher. Please refresh page"));
            }

            if (slot.User.Id != lmsUser.Id && slot.Availability.User.Id != lmsUser.Id)
            {
                return(OperationResult.Error("You don't have permissions to delete slot"));
            }

            //store availability to check who cancels
            //var meeting = slot.Availability.Meeting;
            slot.Availability.Slots.Remove(slot);
            _slotModel.RegisterDelete(slot, true);
            if (!string.IsNullOrEmpty(message))
            {
                //var details = await _meetingService.GetMeetingApiDetails(meeting);
                //await _notificationService.SendOHCancellationEmail(slot.Start, details.Topic, message, slot.RequesterName);
            }

            return(OperationResult.Success());
        }
예제 #2
0
        public List <LmsUser> GetUnassignedUsers()
        {
            List <LmsUser> users = new List <LmsUser>();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("LMSUserSelectUnassigned", cn); //Name of Eric's sproc--AdministratorDashboard
                cmd.CommandType = CommandType.StoredProcedure;

                cn.Open();
                using (var dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        var user = new LmsUser();
                        user.UserID = (int)dr["UserID"];
                        //user.Id = dr["ID"].ToString();
                        user.FirstName     = dr["FirstName"].ToString();
                        user.LastName      = dr["LastName"].ToString();
                        user.Email         = dr["Email"].ToString();
                        user.SuggestedRole = dr["SuggestedRole"].ToString();

                        if (dr["GradeLevelID"] != DBNull.Value)
                        {
                            user.GradeLevelID = (byte)dr["GradeLevelID"];
                        }

                        users.Add(user);
                    }
                }
            }
            return(users);
        }
        public ActionResult EditUser(LmsUser user)
        {
            var db = new SWC_LMSEntities();
            db.UpdateUser(user.LastName, user.FirstName, user.SuggestedRole, user.UserId);

            return RedirectToAction("AdminDashboard");
        }
예제 #4
0
        public List <LmsUser> GetStudents(int UserID)
        {
            List <LmsUser> students = new List <LmsUser>();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("UserParentDashboard", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@UserID", UserID);

                cn.Open();
                using (var dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        var student = new LmsUser();
                        student.UserID    = (int)dr["UserID"];
                        student.FirstName = dr["FirstName"].ToString();
                        student.LastName  = dr["LastName"].ToString();

                        students.Add(student);
                    }
                }
            }
            return(students);
        }
예제 #5
0
        public LmsUser GetUnassignedUserDetails(int UserID)
        {
            LmsUser user = new LmsUser();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("UserViewDetails", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@UserID", UserID);

                cn.Open();
                using (var dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        user.UserID        = (int)dr["UserID"];
                        user.ID            = dr["ID"].ToString();
                        user.FirstName     = dr["FirstName"].ToString();
                        user.LastName      = dr["LastName"].ToString();
                        user.Email         = dr["Email"].ToString();
                        user.SuggestedRole = dr["SuggestedRole"].ToString();

                        if (dr["GradeLevelID"] != DBNull.Value)
                        {
                            user.GradeLevelID = (byte)dr["GradeLevelID"];
                        }
                    }
                }
            }
            return(user);
        }
예제 #6
0
        public IFutureValue <LmsCourseMeeting> GetOneByUserAndType(int companyLmsId, string userId, LmsMeetingType type)
        {
            if (companyLmsId <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(companyLmsId));
            }
            if (string.IsNullOrWhiteSpace(userId))
            {
                throw new ArgumentException("userId can not be empty", nameof(userId));
            }
            if (type <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(type));
            }

            int typeValue       = (int)type;
            LmsCourseMeeting x  = null;
            OfficeHours      oh = null;
            LmsUser          u  = null;
            var defaultQuery    = new DefaultQueryOver <LmsCourseMeeting, int>()
                                  .GetQueryOver(() => x)
                                  .JoinAlias(() => x.OfficeHours, () => oh, JoinType.InnerJoin)
                                  .JoinAlias(() => oh.LmsUser, () => u, JoinType.InnerJoin)
                                  .Where(() => x.LmsCompanyId == companyLmsId &&
                                         x.LmsMeetingType == typeValue &&
                                         (x.OfficeHours != null && u.UserId == userId))
                                  .Take(1);

            return(this.Repository.FindOne(defaultQuery));
        }
예제 #7
0
        public LmsUser GetByAspNetId(string aspNetId)
        {
            LmsUser user = new LmsUser();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("ASPNetIDGet", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@AspNetID", aspNetId);

                cn.Open();

                using (var dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        user.UserID        = (int)dr["UserID"];
                        user.FirstName     = dr["FirstName"].ToString();
                        user.LastName      = dr["LastName"].ToString();
                        user.Email         = dr["Email"].ToString();
                        user.SuggestedRole = dr["SuggestedRole"].ToString();

                        //if (dr["GradeLevel"] != DBNull.Value)
                        //    user.GradeLevelID = (byte) dr["GradeLevelID"];
                    }
                }
            }
            return(user);
        }
        public ActionResult EditUser(LmsUser user)
        {
            var db = new SWC_LMSEntities();

            db.UpdateUser(user.LastName, user.FirstName, user.SuggestedRole, user.UserId);

            return(RedirectToAction("AdminDashboard"));
        }
예제 #9
0
        public IEnumerable <OfficeHoursTeacherAvailability> GetAvailabilities(int ohId)
        {
            OfficeHoursTeacherAvailability x = null;
            OfficeHours oh           = null;
            LmsUser     u            = null;
            var         defaultQuery = new DefaultQueryOver <OfficeHoursTeacherAvailability, int>()
                                       .GetQueryOver(() => x)
                                       .JoinAlias(() => x.Meeting, () => oh, JoinType.InnerJoin)
                                       .JoinAlias(() => x.User, () => u, JoinType.InnerJoin)
                                       .Where(() => x.Meeting.Id == ohId);

            return(Repository.FindAll(defaultQuery));
        }
        public ActionResult StudentDashboard(int id)
        {
            var db = new SWC_LMSEntities();
            var student = new LmsUser();
            var user = db.GetUserById(id);
            foreach (var x in user)
            {
                student.FirstName = x.FirstName;
                student.LastName = x.LastName;
                student.UserId = x.UserId;
            }

            return View(student);
        }
예제 #11
0
        private IEnumerable <LmsUser> UpdateDbUsers(List <LmsUserDTO> lmsUserDtos, ILmsLicense lmsCompany,
                                                    IEnumerable <LmsUser> existedDbUsers, IAdobeConnectProxy provider)
        {
            var newUsers = new List <LmsUser>();

            var company = lmsCompanyModel.GetOneById(lmsCompany.Id).Value;

            foreach (var lmsUserDto in lmsUserDtos.Where(x => x.Email != null || x.Login != null || x.Name != null))
            {
                var dbUser = existedDbUsers.FirstOrDefault(u =>
                                                           (lmsUserDto.LtiId != null && u.UserId == lmsUserDto.LtiId) || u.UserId == lmsUserDto.Id);
                if (dbUser == null)
                {
                    string    login     = lmsUserDto.GetLogin();
                    Principal principal = null;
                    try
                    {
                        principal = acUserService.GetOrCreatePrincipal(provider, login, lmsUserDto.Email,
                                                                       lmsUserDto.GetFirstName(),
                                                                       lmsUserDto.GetLastName(), lmsCompany);
                    }
                    catch (Exception ex)
                    {
                        logger.Error("SyncUsers - GetOrCreatePrincipal", ex);
                        continue;
                    }

                    var loginLength = login.Length > 50 ? 50 : login.Length;

                    dbUser = new LmsUser
                    {
                        LmsCompany  = company,
                        Username    = login.Substring(0, loginLength), // hack: to escape GenericADOException when name>50 //todo: review lmsUserDto.GetLogin() and lmsUser.Username usage
                        UserId      = lmsUserDto.LtiId ?? lmsUserDto.Id,
                        PrincipalId = principal?.PrincipalId,
                    };
                    newUsers.Add(dbUser);
                    logger.InfoFormat(
                        "New user to DB: lmsCompanyId={0}, UserId={1}, Username={2}, Name={3}, Email={4}",
                        lmsCompany.Id, dbUser.UserId, login, lmsUserDto.Name, lmsUserDto.Email);
                    lmsUserModel.RegisterSave(dbUser);
                }
                dbUser.Name           = lmsUserDto.Name;
                dbUser.Email          = lmsUserDto.Email;
                dbUser.UserIdExtended = lmsUserDto.LtiId != null ? lmsUserDto.Id : null;
                // todo: save lmsUserDto.id to dbUser.UserId
            }

            return(newUsers);
        }
예제 #12
0
        public IEnumerable <OfficeHoursSlot> GetSlotsForDate(DateTime start, DateTime end, int ohId)
        {
            OfficeHoursTeacherAvailability availability = null;
            OfficeHoursSlot x            = null;
            OfficeHours     oh           = null;
            LmsUser         u            = null;
            var             defaultQuery = new DefaultQueryOver <OfficeHoursSlot, int>()
                                           .GetQueryOver(() => x)
                                           .JoinAlias(() => x.User, () => u, JoinType.InnerJoin)
                                           .JoinAlias(() => x.Availability, () => availability, JoinType.InnerJoin)
                                           .JoinAlias(() => availability.Meeting, () => oh, JoinType.InnerJoin)
                                           .Where(() => x.Start >= start && x.Start < end && oh.Id == ohId);

            return(Repository.FindAll(defaultQuery));
        }
예제 #13
0
        public OfficeHoursSlot GetSlotForDate(DateTime start, int ohId)
        {
            OfficeHoursTeacherAvailability availability = null;
            OfficeHoursSlot x            = null;
            OfficeHours     oh           = null;
            LmsUser         u            = null;
            var             defaultQuery = new DefaultQueryOver <OfficeHoursSlot, int>()
                                           .GetQueryOver(() => x)
                                           .JoinAlias(() => x.User, () => u, JoinType.InnerJoin)
                                           .JoinAlias(() => x.Availability, () => availability, JoinType.InnerJoin)
                                           .JoinAlias(() => availability.Meeting, () => oh, JoinType.InnerJoin)
                                           .Where(() => x.Start == start && oh.Id == ohId);

            return(Repository.FindOne(defaultQuery).Value);
        }
예제 #14
0
        private static OfficeHoursTeacherAvailability ConvertFromDto(OfficeHours oh, LmsUser lmsUser, OfficeHoursTeacherAvailabilityDto availabilityDto)
        {
            var entity = new OfficeHoursTeacherAvailability
            {
                User        = lmsUser,
                Duration    = availabilityDto.Duration,
                Intervals   = string.Join(",", availabilityDto.Intervals.Select(x => $"{x.Start}-{x.End}")),
                DaysOfWeek  = string.Join(",", availabilityDto.DaysOfWeek),
                PeriodStart = availabilityDto.PeriodStart,
                PeriodEnd   = availabilityDto.PeriodEnd,
                Meeting     = oh
            };

            return(entity);
        }
예제 #15
0
        public Response Create(LmsUser user)   // Lis 6/28
        {
            var response = new Response();

            try
            {
                _lmsUserRepository.Create(user);
                response.Success = true;
            }
            catch (Exception ex)
            {
                response.Message = ex.Message;
            }

            return(response);
        }
        public ActionResult StudentDashboard(int id)
        {
            var db      = new SWC_LMSEntities();
            var student = new LmsUser();
            var user    = db.GetUserById(id);

            foreach (var x in user)
            {
                student.FirstName = x.FirstName;
                student.LastName  = x.LastName;
                student.UserId    = x.UserId;
            }


            return(View(student));
        }
예제 #17
0
        public List <LmsUser> UserSearch(AdminUserSearch searchName)
        {
            List <LmsUser> users = new List <LmsUser>();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("UserSearch", cn);
                cmd.CommandType = CommandType.StoredProcedure;

                if (!string.IsNullOrEmpty(searchName.FirstName))
                {
                    cmd.Parameters.Add(new SqlParameter("@FirstNamePartial", searchName.FirstName));
                }

                if (!string.IsNullOrEmpty(searchName.LastName))
                {
                    cmd.Parameters.Add(new SqlParameter("@LastNamePartial", searchName.LastName));
                }

                if (!string.IsNullOrEmpty(searchName.Email))
                {
                    cmd.Parameters.Add(new SqlParameter("@EmailPartial", searchName.Email));
                }

                if (!string.IsNullOrEmpty(searchName.SelectedRoleID))
                {
                    cmd.Parameters.Add(new SqlParameter("@RoleID", searchName.SelectedRoleID));
                }

                cn.Open();
                using (var dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        var user = new LmsUser();
                        user.UserID    = (int)dr["UserID"];
                        user.FirstName = dr["FirstName"].ToString();
                        user.LastName  = dr["LastName"].ToString();
                        user.Email     = dr["Email"].ToString();

                        users.Add(user);
                    }
                }
            }
            return(users);
        }
예제 #18
0
        private bool CanJoin(
            LmsUser lmsUser,
            IEnumerable <MeetingPermissionInfo> permission)
        {
            // this method is called after the user has opened the application through LtiController, so there should already be Principal found and saved for the user.
            if (string.IsNullOrWhiteSpace(lmsUser.PrincipalId))
            {
                throw new InvalidOperationException(string.Format("lmsUser.PrincipalId is empty. LmsUserID: {0}", lmsUser.Id));
            }

            return((permission != null) &&
                   permission
                   .Where(x => x.PrincipalId == lmsUser.PrincipalId)
                   .Select(x => x.PermissionId)
                   .Intersect(new List <MeetingPermissionId> {
                MeetingPermissionId.host, MeetingPermissionId.mini_host, MeetingPermissionId.view
            })
                   .Any());
        }
예제 #19
0
        public LmsUser UpdateUserDetails(LMSUserUpdateRequest user)
        {
            LmsUser user1 = new LmsUser();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("UserUpdateDetails", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@UserID", user.UserID);
                cmd.Parameters.AddWithValue("@ID", user.ID);
                cmd.Parameters.AddWithValue("@FirstName", user.FirstName);
                cmd.Parameters.AddWithValue("@LastName", user.LastName);
                cmd.Parameters.AddWithValue("@GradeLevelID", user.GradeLevelID);

                cn.Open();
                cmd.ExecuteNonQuery();
            }

            return(user1);
        }
예제 #20
0
        public static LmsUser GetLmsUserById(int id)
        {
            using (var db = new SWC_LMSEntities())
            {
                LmsUser newUser = new LmsUser();
                var     user    = db.GetUserById(id);

                foreach (var x in user)
                {
                    newUser.UserId        = x.UserId;
                    newUser.FirstName     = x.FirstName;
                    newUser.LastName      = x.LastName;
                    newUser.GradeLevelId  = x.GradeLevelId;
                    newUser.SuggestedRole = x.SuggestedRole;
                    newUser.Id            = x.Id;
                    newUser.Email         = x.Email;
                }
                return(newUser);
            }
        }
예제 #21
0
        public static LmsUser GetLmsUserById(int id)
        {
            using (var db = new SWC_LMSEntities())
            {
                LmsUser newUser = new LmsUser();
                var user = db.GetUserById(id);

                foreach (var x in user)
                {
                    newUser.UserId = x.UserId;
                    newUser.FirstName = x.FirstName;
                    newUser.LastName = x.LastName;
                    newUser.GradeLevelId = x.GradeLevelId;
                    newUser.SuggestedRole = x.SuggestedRole;
                    newUser.Id = x.Id;
                    newUser.Email = x.Email;
                }
                return newUser;
            }
        }
예제 #22
0
        public void Create(LmsUser user)
        {
            user.ID = Guid.NewGuid().ToString();
            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("LmsUserAdd", cn);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@Id", user.ID);
                cmd.Parameters.AddWithValue("@Email", user.Email);
                cmd.Parameters.AddWithValue("@FirstName", user.FirstName);
                cmd.Parameters.AddWithValue("@LastName", user.LastName);
                cmd.Parameters.AddWithValue("@SuggestedRole", user.SuggestedRole);
                cmd.Parameters.AddWithValue("@GradeLevelID", user.GradeLevelID);
                cmd.Parameters.AddWithValue("@UserId", user.UserID).Direction = ParameterDirection.Output;
                cn.Open();
                cmd.ExecuteNonQuery();
                int ans = (int)cmd.Parameters["@UserId"].Value;
                user.UserID = ans;
            }
        }
예제 #23
0
        public async Task <ActionResult> Register(RegisterViewModel RegisterViewModel)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {
                    UserName = RegisterViewModel.Email, Email = RegisterViewModel.Email
                };
                var result = await UserManager.CreateAsync(user, RegisterViewModel.Password);

                if (result.Succeeded)
                {
                    var lmsUser = new LmsUser();
                    lmsUser.Email         = RegisterViewModel.Email;
                    lmsUser.FirstName     = RegisterViewModel.FirstName;
                    lmsUser.LastName      = RegisterViewModel.LastName;
                    lmsUser.ID            = user.Id;
                    lmsUser.GradeLevelID  = RegisterViewModel.GradeLevelID;
                    lmsUser.SuggestedRole = RegisterViewModel.SuggestedRole;

                    _lmsUserManager.Create(lmsUser);

                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                    // Send an email with this link
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    return(RedirectToAction("NotApprovedYet", "Home"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            //return RedirectToAction("Home",RegisterViewModel);
            return(View());
        }
예제 #24
0
        public virtual async Task <ActionResult> ImsLogin(LtiParamDTO param)
        {
            try
            {
                Request.CheckForRequiredLtiParameters();

                LmsCompany lmsCompany =
                    lmsCompanyModel.GetOneByConsumerKey(param.oauth_consumer_key)
                    .Value;

                if (lmsCompany != null)
                {
                    System.Threading.Thread.CurrentThread.CurrentUICulture =
                        new System.Globalization.CultureInfo(LanguageModel.GetById(lmsCompany.LanguageId).TwoLetterCode);
                }
                else
                {
                    Logger.ErrorFormat("Adobe Connect integration is not set up. param:{0}.",
                                       JsonSerializer.JsonSerialize(param));
                    throw new LtiException(Resources.Messages.LtiValidationNoSetup);
                }

                if (!lmsCompany.IsActive)
                {
                    Logger.ErrorFormat("LMS license is not active. Request's lms_domain:{0}. oauth_consumer_key:{1}.", param.lms_domain, param.oauth_consumer_key);
                    throw new LtiException(Resources.Messages.LtiValidationInactiveLmsLicense);
                }

                if (!BltiProviderHelper.VerifyBltiRequest(lmsCompany, Request, () => true))
                {
                    Logger.ErrorFormat("Invalid LTI request. Invalid signature. oauth_consumer_key:{0}.",
                                       param.oauth_consumer_key);
                    throw new LtiException(Resources.Messages.LtiValidationWrongSignature);
                }

                ValidateLtiVersion(param);

                ValidateIntegrationRequiredParameters(lmsCompany, param);

                var contextRoles = GetContextRoles(param.roles);
                if (!contextRoles.Any())
                {
                    throw new LtiException(Resources.Messages.LtiValidationNoContextRole);
                }

                var adobeConnectProvider = this.GetAdminProvider(lmsCompany);

                // TRICK: if LMS don't return user login - try to call lms' API to fetch user's info using user's LMS-ID.
                param.ext_user_username = await usersSetup.GetParamLogin(param, lmsCompany); // NOTE: is saved in session!

                var lmsUser = lmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, lmsCompany.Id).Value;

                LmsUserSession session = this.SaveSession(lmsCompany, param, lmsUser);
                var            key     = session.Id.ToString();
                if (!string.IsNullOrWhiteSpace(param.lis_outcome_service_url) &&
                    !string.IsNullOrWhiteSpace(param.lis_result_sourcedid))
                {
                    return(View("~/Views/Lti/Outcomes.cshtml", new OutcomeModel {
                        LmsProviderName = key
                    }));
                }
                //this.meetingSetup.SetupFolders(lmsCompany, adobeConnectProvider);

                Principal acPrincipal = null;

                acPrincipal = acUserService.GetOrCreatePrincipal(
                    adobeConnectProvider,
                    param.lms_user_login,
                    param.lis_person_contact_email_primary,
                    param.PersonNameGiven,
                    param.PersonNameFamily,
                    lmsCompany);
                if (lmsUser == null)
                {
                    lmsUser = new LmsUser
                    {
                        LmsCompany  = lmsCompany,
                        UserId      = param.lms_user_id,
                        Username    = param.GetUserNameOrEmail(),
                        PrincipalId = acPrincipal?.PrincipalId,
                    };
                    this.lmsUserModel.RegisterSave(lmsUser);

                    // TRICK: save lmsUser to session
                    SaveSessionUser(session, lmsUser);
                }

                if (acPrincipal != null && !acPrincipal.PrincipalId.Equals(lmsUser.PrincipalId))
                {
                    lmsUser.PrincipalId = acPrincipal.PrincipalId;
                    this.lmsUserModel.RegisterSave(lmsUser);
                }

                if (acPrincipal == null)
                {
                    Logger.ErrorFormat(
                        "[LoginWithProvider] Unable to create AC account. LmsCompany ID: {0}. LmsUserID: {1}. lms_user_login: {2}.",
                        lmsCompany.Id, lmsUser.Id, param.lms_user_login);
                    throw new Core.WarningMessageException(Resources.Messages.LtiNoAcAccount);
                }

                return(await RedirectToExtJs(session, lmsUser));
            }
            catch (LtiException ex)
            {
                Logger.Error("Lti exception", ex);
                ViewBag.Message = $"Invalid LTI request. {ex.Message}";
                if (!string.IsNullOrEmpty(param.launch_presentation_return_url))
                {
                    ViewBag.ReturnUrl = param.launch_presentation_return_url;
                }
                return(View("~/Views/Lti/LtiError.cshtml"));
            }
            catch (Core.WarningMessageException ex)
            {
                Logger.WarnFormat("[WarningMessageException] param:{0}.",
                                  JsonSerializer.JsonSerialize(param));
                this.ViewBag.Message = ex.Message;
                return(this.View("~/Views/Lti/LtiError.cshtml"));
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat(ex, "LoginWithProvider exception. oauth_consumer_key:{0}.", param.oauth_consumer_key);
                this.ViewBag.DebugError = IsDebug ? (ex.Message + ex.StackTrace) : string.Empty;
                return(this.View("~/Views/Lti/LtiError.cshtml"));
            }
        }
예제 #25
0
        public LmsUser GetByAspNetId(string aspNetId)
        {
            LmsUser user = new LmsUser();

            return(user);
        }
예제 #26
0
 public void Create(LmsUser user)
 {
     LmsUser user3 = new LmsUser();
 }
예제 #27
0
        public LmsUser GetUnassignedUserDetails(int UserID)
        {
            LmsUser user = new LmsUser();

            return(user);
        }
예제 #28
0
        public LmsUser UpdateUserDetails(LmsUser user)
        {
            LmsUser user1 = new LmsUser();

            return(user1);
        }
예제 #29
0
        public async Task <OperationResultWithData <OfficeHoursTeacherAvailabilityDto> > AddAvailability(OfficeHours oh, LmsUser lmsUser, OfficeHoursTeacherAvailabilityDto availabilityDto)
        {
            var overlappingSlots = await ValidateSlotsRange(oh, lmsUser.Id, availabilityDto);

            if (overlappingSlots.Any())
            {
                return(OperationResultWithData <OfficeHoursTeacherAvailabilityDto> .Error(
                           "The range of dates overlaps another date range. Please choose another date range."));
            }
            var entity = ConvertFromDto(oh, lmsUser, availabilityDto);

            _availabilityModel.RegisterSave(entity, true);
            return(ConvertToDto(entity).ToSuccessResult());
        }
예제 #30
0
        public async Task <OperationResultWithData <IEnumerable <SlotDto> > > AddSlots(int ohId, LmsUser lmsUser, IEnumerable <CreateSlotDto> dtos, OfficeHoursSlotStatus status = OfficeHoursSlotStatus.Booked)
        {
            var availabilities = _availabilityModel.GetAvailabilities(ohId); //await _context.OhTeacherAvailabilities.Include(x => x.Meeting).Where(x => x.Meeting.Id == meetingId).ToListAsync();// &&x.lmsUserId == lmsUserId
            var entities       = new List <OfficeHoursSlot>();

            foreach (var dto in dtos)
            {
                //validate interval and non-busy
                var availability = availabilities.FirstOrDefault(x =>
                {
                    var availabilityDto = ConvertToDto(x);
                    var slots           = GetSlotsForAvailability(availabilityDto, dto.Start, dto.End, lmsUser.Id, x);
                    return(slots.Any(s => s.Start == dto.Start && s.Status == (int)OfficeHoursSlotStatus.Free));
                });
                if (availability == null)
                {
                    return(OperationResultWithData <IEnumerable <SlotDto> > .Error(
                               "Time is already booked or out of any availability range. Please refresh page."));
                }

                var entity = new OfficeHoursSlot
                {
                    Availability = availability,
                    //RequesterName = requesterName,
                    User      = lmsUser,
                    Start     = dto.Start,
                    End       = dto.End,
                    Subject   = dto.Subject,
                    Questions = dto.Questions,
                    Status    = (int)status
                };

                _slotModel.RegisterSave(entity, false);
                entities.Add(entity);
            }

            _slotModel.Flush();
            return(entities.Select(x => ConvertToDto(x, lmsUser.Id)).ToSuccessResult());
        }
예제 #31
0
        private void PopulateLicenseRooms(
            string licenseScoId, string licenseName, bool canAddSeminars,
            ref List <SeminarLicenseDto> licenseDtos,
            IAdobeConnectProxy acProxy,
            IEnumerable <LmsCourseMeeting> seminarRecords,
            LmsUser lmsUser,
            LtiParamDTO param,
            LmsCompany lmsCompany
            //,TimeZoneInfo timeZone
            )
        {
            var seminars = GetSeminars(licenseScoId, acProxy);
            var rooms    = new List <SeminarDto>();

            foreach (ScoContent seminar in seminars)
            {
                LmsCourseMeeting meetingRecord = seminarRecords.FirstOrDefault(x => x.ScoId == seminar.ScoId);
                if (meetingRecord == null)
                {
                    continue;
                }

                var sessions = GetSeminarSessions(seminar.ScoId, acProxy);

                var room = GetDtoByScoInfo(acProxy, lmsUser, param, lmsCompany, seminar, meetingRecord, /* timeZone,*/ canAddSeminars);
                if (canAddSeminars || room.CanJoin) //don't show user-seminars to those who is not participating
                {
                    room.Id = meetingRecord.Id;     // TRICK: within LTI we use RECORD ID - not original SCO-ID!!

                    room.Sessions =
                        sessions.Select(x => new Esynctraining.AdobeConnect.Api.Seminar.Dto.SeminarSessionDto
                    {
                        Id = x.ScoId,

                        Name           = x.Name,
                        StartTimeStamp =
                            (long)x.BeginDate.ConvertToUnixTimestamp(),      // + (long) GetTimezoneShift(timeZone, x.BeginDate),
                        Duration   = (x.EndDate - x.BeginDate).ToString(@"h\:mm"),
                        Summary    = x.Description,
                        AcRoomUrl  = x.UrlPath.Trim('/'),
                        IsEditable = room.IsEditable,

                        // TRICK: within LTI we use RECORD ID - not original SCO-ID!!
                        SeminarRoomId = meetingRecord.Id.ToString(),
                    }).ToArray();
                    rooms.Add(room);
                }
            }

            if (canAddSeminars || rooms.Any())
            {
                var dto = new SeminarLicenseDto
                {
                    Id             = licenseScoId,
                    Name           = licenseName,
                    Rooms          = rooms.ToArray(),
                    CanAddSeminars = canAddSeminars
                };
                licenseDtos.Add(dto);
            }
        }
예제 #32
0
        private SeminarDto GetDtoByScoInfo(
            IAdobeConnectProxy provider,
            LmsUser lmsUser,
            LtiParamDTO param,
            LmsCompany lmsCompany,
            ScoContent seminar,
            LmsCourseMeeting seminarMeeting,
            //TimeZoneInfo timeZone,
            bool isEditable,
            StringBuilder trace = null)
        {
            var psw = Stopwatch.StartNew();

            bool meetingExistsInAC;
            IEnumerable <MeetingPermissionInfo> permission = provider.GetMeetingPermissions(seminar.ScoId,
                                                                                            new List <string> {
                "public-access", lmsUser.PrincipalId
            },
                                                                                            out meetingExistsInAC).Values;

            psw.Stop();
            if (trace != null)
            {
                trace.AppendFormat("\t GetMeetings - AC GetMeetingPermissions time: {0}. MeetingId: {1}\r\n", psw.Elapsed.ToString(), seminar.ScoId);
            }

            if (!meetingExistsInAC)
            {
                return(null);
            }

            var canJoin = this.CanJoin(lmsUser, permission) || GetGuestAuditRoleMappings(lmsCompany, param).Any() ||
                          (lmsCompany.UseSynchronizedUsers && seminarMeeting.EnableDynamicProvisioning);

            MeetingPermissionInfo permissionInfo = permission != null
                ? permission.FirstOrDefault(x => x.PrincipalId == "public-access" && x.PermissionId != MeetingPermissionId.none)
                : null;

            var sw = Stopwatch.StartNew();

            sw.Stop();
            if (trace != null)
            {
                trace.AppendFormat("\t GetMeetings - DB GetByCompanyAndScoId time: {0}. MeetingId: {1}\r\n", sw.Elapsed.ToString(), seminar.ScoId);
            }

            var scoInfo = provider.GetScoInfo(seminar.ScoId);

            var ret = new SeminarDto
            {
                Id             = long.Parse(seminar.ScoId),
                AcRoomUrl      = seminar.UrlPath.Trim("/".ToCharArray()),
                Name           = seminar.Name,
                Summary        = seminar.Description,
                Template       = seminar.SourceScoId,
                StartTimeStamp = (long)seminar.BeginDate.ConvertToUnixTimestamp(), // + (long)GetTimezoneShift(timeZone, seminar.BeginDate),
                Duration       = (seminar.EndDate - seminar.BeginDate).ToString(@"h\:mm"),
                // TRICK: .Replace("-", "_") for "view_hidded" on client-side
                AccessLevel = permissionInfo != null?permissionInfo.PermissionId.ToString().Replace("-", "_") : "remove",
                                  CanJoin     = canJoin,
                                  IsEditable  = isEditable,
                                  Type        = (int)LmsMeetingType.Seminar,
                                  OfficeHours = null,
                                  Reused      = false,

                                  AudioProfileId   = scoInfo.ScoInfo.TelephonyProfile, // TODO: ???seminar.AudioProfileId
                                  SeminarLicenseId = seminar.FolderId.ToString(),
            };

            return(ret);
        }
예제 #33
0
        public IEnumerable <SeminarLicenseDto> GetLicensesWithContent(IAdobeConnectProxy acProxy,
                                                                      IEnumerable <LmsCourseMeeting> seminarRecords,
                                                                      LmsUser lmsUser,
                                                                      LtiParamDTO param,
                                                                      LmsCompany lmsCompany
                                                                      //,TimeZoneInfo timeZone
                                                                      )
        {
            if (acProxy == null)
            {
                throw new ArgumentNullException(nameof(acProxy));
            }
            if (seminarRecords == null)
            {
                throw new ArgumentNullException(nameof(seminarRecords));
            }
            if (lmsUser == null)
            {
                throw new ArgumentNullException(nameof(lmsUser));
            }
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (lmsCompany == null)
            {
                throw new ArgumentNullException(nameof(lmsCompany));
            }
            //if (timeZone == null)
            //    throw new ArgumentNullException(nameof(timeZone));

            var  licenseDtos    = new List <SeminarLicenseDto>();
            bool canAddSeminars = UsersSetup.IsTeacher(param, lmsCompany);

            var sharedLicenses = GetSharedSeminarLicenses(acProxy).Where(x => !x.IsExpired);

            foreach (var license in sharedLicenses)
            {
                PopulateLicenseRooms(
                    license.ScoId, license.Name, canAddSeminars,
                    ref licenseDtos,
                    acProxy,
                    seminarRecords,
                    lmsUser,
                    param,
                    lmsCompany
                    //,timeZone
                    );
            }

            try
            {
                var userLicenses = GetUserSeminarLicenses(acProxy);//.Where(x => x.PrincipalId == lmsUser.PrincipalId);
                foreach (var license in userLicenses)
                {
                    PopulateLicenseRooms(
                        license.ScoId, license.Name, canAddSeminars && license.PrincipalId == lmsUser.PrincipalId,
                        ref licenseDtos,
                        acProxy,
                        seminarRecords,
                        lmsUser,
                        param,
                        lmsCompany
                        //,timeZone
                        );
                }
            }
            catch (Exception ex)
            {
                _logger.Error("[GetUserSeminarLicenses] error", ex);
            }

            return(licenseDtos);
        }