public bool JoinSite(Site site) { if (IsSiteMember(site, GetLoggedInProfile())) return false; SiteMember siteMember = new SiteMember() { Site = site, Profile = GetLoggedInProfile(), AccessLevel = 1 }; dc.SiteMembers.InsertOnSubmit(siteMember); dc.SubmitChanges(); return true; }
public ActionResult AcceptInvite(Guid id, string userName, string password, string confirmPassword) { Invitation invite = dataRepository.Single<Invitation>(inv => inv.InvitationID == id); if (invite == null) { FlashMessageHelper.AddMessage("Invite not found."); return RedirectToRoute(new { action = "Index", controller = "Home" }); } using (TransactionScope scope = new TransactionScope()) { string email = invite.Email; ViewData["PasswordLength"] = MembershipService.MinPasswordLength; if (ValidateRegistration(userName, email, password, confirmPassword)) { // Attempt to register the user MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email); if (createStatus == MembershipCreateStatus.Success) { Guid membershipID = UserHelpers.GetIDFromUsername(userName); Profile profile = new Profile(); UpdateModel(profile); if (ModelState.IsValid) { try { profile.MembershipID = membershipID; dataRepository.CreateProfile(profile); //Create site membership SiteMember sitemember = new SiteMember() { AccessLevel = invite.SiteAccessLevel, Site = invite.Site, Profile = profile }; //Create courseterm member if (invite.CourseTerm != null) { CourseTermMember ctmember = new CourseTermMember() { AccessLevel = invite.CourseTermAccessLevel.Value, CourseTerm = invite.CourseTerm, Profile = profile }; } invite.Accepted = true; dataRepository.Save(); FormsAuth.SignIn(userName, false /* createPersistentCookie */); scope.Complete(); return RedirectToAction("Index", "Home"); } catch { ModelState.AddModelErrors(profile.GetRuleViolations()); } } } else { ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus)); } } } // If we got this far, something failed, redisplay form return View(invite); }
public ActionResult Create(FormCollection input) { InviteModel invite = new InviteModel(); UpdateModel(invite, "InviteModel"); if (ModelState.IsValid) { //If a user is already registered with this email //create the appropriate membership if (UserHelpers.IsEmailRegistered(invite.Email)) { Guid profileid = UserHelpers.GetIDFromEmail(invite.Email); Profile profile = dataRepository.GetProfileByID(profileid); //Create site membership if user is not a site member already SiteMember existingSiteMember = dataRepository.Single<SiteMember>(sm => sm.SiteID == site.SiteID && sm.MembershipID == profileid); if (existingSiteMember == null) { SiteMember sitemember = new SiteMember() { AccessLevel = (byte)invite.SiteAccessLevel, Site = site, Profile = profile }; } else { existingSiteMember.AccessLevel = (byte)invite.SiteAccessLevel; } //Create courseterm member if user is not already a member if (invite.CourseTermID != null) { CourseTermMember existingCourseTermMember = dataRepository.Single<CourseTermMember>(ctm => ctm.CourseTermID == invite.CourseTermID && ctm.MembershipID == profileid); if (existingCourseTermMember == null) { CourseTermMember ctmember = new CourseTermMember() { AccessLevel = (byte)invite.CourseTermAccessLevel.Value, CourseTermID = invite.CourseTermID.Value, Profile = profile }; } else { existingCourseTermMember.AccessLevel = (byte)invite.CourseTermAccessLevel; } } dataRepository.Save(); FlashMessageHelper.AddMessage(string.Format(@"""{0}"" is already registered. They have been granted the requested permissions.", invite.Email)); return RedirectToAction("Index", new { siteShortName = site.ShortName }); } Invitation inv = new Invitation(); try { inv = new Invitation() { Accepted = false, CourseTermAccessLevel = (byte?)invite.CourseTermAccessLevel, CourseTermID = (Guid?)invite.CourseTermID, Email = invite.Email, Site = site, SiteAccessLevel = (byte)invite.SiteAccessLevel }; site.Invitations.Add(inv); dataRepository.Save(); if (!inv.CourseTermID.HasValue) { EmailHelper.SendInvitationEmail(inv.Email, site.Title, inv.InvitationID); } else { CourseTerm ct = dataRepository.GetCourseTermByID(inv.CourseTermID.Value); //If the CourseTerm can't be found, an exception should be raised when we try to save //the Invitation EmailHelper.SendInvitationEmail(inv.Email, site.Title, ct.Name, inv.InvitationID); } FlashMessageHelper.AddMessage("Invite created successfully."); return RedirectToAction("Index", new { siteShortName = site.ShortName }); } catch (RuleViolationException) { ModelState.AddModelErrors(inv.GetRuleViolations()); } catch (Exception ex) { ModelState.AddModelError("_FORM", ex); } } IEnumerable<CourseTerm> courseTerms = dataRepository.GetAllCourseTerms(site); invite.SetCourseTermList(courseTerms); return View(invite); }