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