public ActionResult HandleProfileChangePasswordForm(ProfileChangePasswordForm profileChangePasswordForm)
        {
            FormResponse formResponse = new FormResponse();

            if (this.ModelState.IsValid)
            {
                IPartier partier = this.Members.GetCurrentPartier();


                // IMPORTANT ! TODO: check existing password


                IMember member = this.Services.MemberService.GetById(partier.Id);
                if (member != null)
                {
                    this.Services.MemberService.SavePassword(member, profileChangePasswordForm.Password);
                }

                formResponse.Success = true;
            }
            else
            {
                formResponse.Errors = this.ModelState.GetErrors();
            }

            return(Json(formResponse, "text/plain"));
        }
        public ActionResult HandleForgottenPasswordForm(ForgottenPasswordForm forgottenPasswordForm)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.CurrentUmbracoPage());
            }

            IPartier partier = this.Members.GetByUsername(forgottenPasswordForm.EmailAddress) as IPartier;

            if (partier != null)
            {
                Guid forgottenPasswordGuid = Guid.NewGuid();

                partier.ForgottenPasswordGuid = forgottenPasswordGuid;

                ForgottenPassword forgottenPassword = (ForgottenPassword)this.CurrentPage;

                MailMessage mailMessage = new MailMessage();

                mailMessage.From = new MailAddress(forgottenPassword.ServerEmailAddress);
                mailMessage.To.Add(new MailAddress(partier.Email));
                mailMessage.Subject    = forgottenPassword.EmailSubject;
                mailMessage.IsBodyHtml = true;

                mailMessage.Body = forgottenPassword.EmailBody.Replace("[%RESET_PASSWORD_LINK%]", this.Request.Url.Scheme + "://" + this.Request.Url.Host.ToLower() + this.Umbraco.TypedContentSingleAtXPath("//" + ResetPassword.Alias).Url + "?forgottenPasswordGuid=" + forgottenPasswordGuid.ToString("D"));

                using (SmtpClient smtpClient = new SmtpClient())
                {
                    smtpClient.Send(mailMessage);
                }
            }

            return(this.View("ForgottenPassword/Complete", this.CurrentPage));
        }
        public ActionResult HandleProfileBillingAddressForm(ProfileBillingAddressForm profileBillingAddressForm)
        {
            FormResponse formResponse = new FormResponse();

            if (this.ModelState.IsValid)
            {
                Address address = new Address(
                    profileBillingAddressForm.Address1,
                    profileBillingAddressForm.Address2,
                    profileBillingAddressForm.TownCity,
                    profileBillingAddressForm.Postcode);

                IPartier partier = this.Members.GetCurrentPartier();

                partier.BillingAddress = address;

                this.CheckRegistrationComplete(partier);

                formResponse.Success = true;
            }
            else
            {
                formResponse.Errors = this.ModelState.GetErrors();
            }

            return(Json(formResponse, "text/plain"));
        }
        private void MemberService_Deleting(IMemberService sender, DeleteEventArgs <IMember> e)
        {
            UmbracoHelper umbracoHelper = new UmbracoHelper(UmbracoContext.Current);

            foreach (IMember member in e.DeletedEntities)
            {
                switch (member.ContentTypeAlias)
                {
                case PartyHost.Alias:

                    PartyHost partyHost = (PartyHost)umbracoHelper.TypedMember(member.Id);

                    // remove party image media item
                    partyHost.PartyImage = null;

                    // delete all guests ?

                    break;

                default:

                    IPartier partier = (IPartier)umbracoHelper.TypedContent(member.Id);

                    // delete media item for profile Image
                    partier.ProfileImage = null;

                    // get all wonderlandMessage, remove or mark as deleted ? (media will be on s3, so delete from there)
                    // remove from wonderlandMemberParty

                    break;
                }
            }
        }
        public override ActionResult Index(RenderModel renderModel)
        {
            ResetPassword model = (ResetPassword)renderModel.Content;

            Guid forgottenPasswordGuid;

            if (Guid.TryParse(this.Request.QueryString["forgottenPasswordGuid"], out forgottenPasswordGuid))
            {
                IPartier partier = this.Members.GetPartier(forgottenPasswordGuid);
                if (partier != null)
                {
                    // clear guid, so it can't be reused
                    partier.ForgottenPasswordGuid = Guid.Empty;

                    // send cookie
                    FormsAuthentication.SetAuthCookie(partier.Email, true);

                    // cause redirect, so that the login takes effect
                    return(this.Redirect(this.Umbraco.TypedContentSingleAtXPath("//" + ResetPassword.Alias).Url));
                }
            }

            if (this.Members.IsLoggedInPartier())
            {
                return(this.CurrentTemplate(model));
            }
            else
            {
                // fallback and redirect to home
                return(this.Redirect(Home.GetCurrentHome(model).Url));
            }
        }
示例#6
0
        public ActionResult RenderDonateForm()
        {
            DonateForm donateForm = new DonateForm();

            // set hidden field with party guid
            donateForm.PartyGuid = ((Donate)this.CurrentPage).PartyHost.PartyGuid;

            PartyHost partyHost = this.Members.GetPartyHost(donateForm.PartyGuid);
            IPartier  partier   = this.Members.GetCurrentPartier();

            // set the default amount to the party host's suggested donation (only if user isn't the party host)
            if (partier is PartyHost && partier.Id == partyHost.Id)
            {
                donateForm.Amount = 0;
            }
            else
            {
                donateForm.Amount = partyHost.SuggestedDonation;
            }

            if (partier != null)
            {
                donateForm.FirstName = partier.FirstName;
                donateForm.LastName  = partier.LastName;

                donateForm.Address1 = partier.BillingAddress.Address1;
                donateForm.Address2 = partier.BillingAddress.Address2;
                donateForm.TownCity = partier.BillingAddress.TownCity;
                donateForm.Postcode = partier.BillingAddress.Postcode;
            }

            return(this.PartialView("Donate/Forms/DonateForm", donateForm));
        }
        public ActionResult RenderProfileNamesForm()
        {
            ProfileNamesForm profileNamesForm = new ProfileNamesForm();

            IPartier partier = this.Members.GetCurrentPartier();

            profileNamesForm.FirstName = partier.FirstName;
            profileNamesForm.LastName  = partier.LastName;

            return(this.PartialView("Profile/Forms/ProfileNamesForm", profileNamesForm));
        }
示例#8
0
        internal PartyWallItem(DonationRow donation)
        {
            IPartier partier = (IPartier) new MembershipHelper(UmbracoContext.Current).GetById((int)donation.MemberId);

            this.Id = -1;
            this.PartyWallItemType = PartyWallItemType.Donation;
            this.ThumbnailUrl      = partier.ProfileImageUrl;
            this.IsPartyHost       = partier is PartyHost && donation.PartyGuid == partier.PartyGuid;
            this.Name      = partier.FirstName + " " + partier.LastName;
            this.Text      = donation.Amount.ToString();
            this.Timestamp = donation.Timestamp.ToUniversalTime();
        }
        public ActionResult RenderProfileBillingAddressForm()
        {
            ProfileBillingAddressForm profileBillingAddressForm = new ProfileBillingAddressForm();

            IPartier partier = this.Members.GetCurrentPartier();

            profileBillingAddressForm.Address1 = partier.BillingAddress.Address1;
            profileBillingAddressForm.Address2 = partier.BillingAddress.Address2;
            profileBillingAddressForm.TownCity = partier.BillingAddress.TownCity;
            profileBillingAddressForm.Postcode = partier.BillingAddress.Postcode;

            return(this.PartialView("Profile/Forms/ProfileBillingAddressForm", profileBillingAddressForm));
        }
        public ActionResult HandleProfileImageForm(ProfileImageForm profileImageForm)
        {
            FormResponse formResponse = new FormResponse();

            if (this.ModelState.IsValid)
            {
                formResponse.Success = true;

                IPartier partier = this.Members.GetCurrentPartier();

                if (profileImageForm.ProfileImage != null && profileImageForm.ProfileImage.ContentLength > 0 && profileImageForm.ProfileImage.InputStream.IsImage())
                {
                    ProfileImage profileImage = partier.ProfileImage;

                    string url = string.Empty;

                    if (profileImage == null)
                    {
                        // create new profile image
                        profileImage = ProfileImages.CreateProfileImage(profileImageForm.ProfileImage);

                        // get the new url
                        url = profileImage.Url;

                        // update pointer on partier
                        partier.ProfileImage = profileImage;
                    }
                    else
                    {
                        // update existing profile image
                        url = profileImage.UploadImage(profileImageForm.ProfileImage);
                    }

                    formResponse.Message = JsonConvert.SerializeObject(new { id = profileImage.Id, url = url }); //TODO:S3URL
                }
                else // remove reference to image
                {
                    // this will cause the file deletion
                    partier.ProfileImage = null;
                }
            }
            else
            {
                formResponse.Errors = this.ModelState.GetErrors();
            }

            return(Json(formResponse, "text/plain"));
        }
 /// <summary>
 /// a member can register, and skip the 2nd step
 /// if these values are then set afterwards when editing this profile, then we can then mark the registration as complete
 /// </summary>
 /// <param name="partier"></param>
 private void CheckRegistrationComplete(IPartier partier)
 {
     // once it has been completed, we never revert back, so only process if dot mailer thinks the host hasn't yet completed registration
     if (!partier.DotMailerRegistrationComplete)
     {
         if (!string.IsNullOrWhiteSpace(partier.FirstName) && !string.IsNullOrWhiteSpace(partier.LastName) && !string.IsNullOrWhiteSpace(partier.BillingAddress.ToString()))
         {
             if (partier is PartyHost)
             {
                 DotMailerService.HostRegistrationCompleted((Contact)(PartyHost)partier);
             }
             else if (partier is PartyGuest)
             {
                 DotMailerService.GuestRegistrationCompleted((Contact)(PartyGuest)partier);
             }
         }
     }
 }
示例#12
0
        public ActionResult HandleResetPasswordForm(ResetPasswordForm resetPasswordForm)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.CurrentUmbracoPage());
            }

            IPartier partier = this.Members.GetCurrentPartier();

            if (partier != null)
            {
                IMember member = this.Services.MemberService.GetById(partier.Id);
                if (member != null)
                {
                    this.Services.MemberService.SavePassword(member, resetPasswordForm.Password);
                }
            }

            return(this.View("ResetPassword/Complete", this.CurrentPage));
        }
示例#13
0
        internal PartyWallItem(MessageRow message)
        {
            IPartier partier = (IPartier) new MembershipHelper(UmbracoContext.Current).GetById(message.MemberId);

            this.Id = message.MessageId;
            this.PartyWallItemType = PartyWallItemType.Message;
            this.ThumbnailUrl      = partier.ProfileImageUrl;
            this.IsPartyHost       = partier is PartyHost;
            this.Name = partier.FirstName + " " + partier.LastName;
            this.Text = message.Text;

            if (message.Image.HasValue)
            {
                UmbracoHelper umbracoHelper = new UmbracoHelper(UmbracoContext.Current);

                this.ImageUrl = umbracoHelper.TypedMedia(message.Image.Value).Url; // TODO:S3URL
            }

            this.Timestamp = message.Timestamp.ToUniversalTime();
        }
        public ActionResult HandleProfileNamesForm(ProfileNamesForm profileNamesForm)
        {
            FormResponse formResponse = new FormResponse();

            if (this.ModelState.IsValid)
            {
                IPartier partier = this.Members.GetCurrentPartier();

                partier.FirstName = profileNamesForm.FirstName;
                partier.LastName  = profileNamesForm.LastName;

                this.CheckRegistrationComplete(partier);

                formResponse.Success = true;
            }
            else
            {
                formResponse.Errors = this.ModelState.GetErrors();
            }

            return(Json(formResponse, "text/plain"));
        }
示例#15
0
        private void SendPaymentConfirmationEmail(DonationRow donationRow)
        {
            if (donationRow.MemberId.HasValue)
            {
                Donate donate = (Donate)this.Umbraco.TypedContentSingleAtXPath("//" + Donate.Alias);

                IPartier partier = (IPartier)this.Members.GetById(donationRow.MemberId.Value);

                PartyHost partyhost = this.Members.GetPartyHost(donationRow.PartyGuid);

                MailMessage mailMessage = new MailMessage();

                mailMessage.From = new MailAddress(donate.ServerEmailAddress);
                mailMessage.To.Add(new MailAddress(partier.Email));
                mailMessage.Subject    = donate.EmailSubject;
                mailMessage.IsBodyHtml = true;

                mailMessage.Body = donate.EmailBody
                                   .Replace("[%FIRST_NAME%]", partier.FirstName)
                                   .Replace("[%LAST_NAME%]", partier.LastName)
                                   .Replace("[%PARTY_HOST%]", partyhost.FirstName + " " + partyhost.LastName)
                                   .Replace("[%EMAIL%]", partier.Email)
                                   .Replace("[%AMOUNT%]", "£" + donationRow.Amount.ToString("F"))
                                   .Replace("[%DONATION_TIMESTAMP%]", donationRow.Timestamp.ToShortDateString())
                                   .Replace("[%VENDOR_TX_CODE%]", donationRow.VendorTxCode.ToString());

                // Fire and forget
                Task.Run(() =>
                {
                    using (SmtpClient smtpClient = new SmtpClient())
                    {
                        smtpClient.Send(mailMessage);
                    }
                });
            }
        }
示例#16
0
        public override ActionResult Index(RenderModel renderModel) // have to override index instead of a Party() method, as there isn't a Party template
        {
            Party model = (Party)renderModel.Content;

            PartyHost partyHost;

            try
            {
                partyHost = (PartyHost)this.Members.GetById(int.Parse(this.HttpContext.Items["partyHostId"].ToString()));
            }
            catch
            {
                partyHost = null;
            }

            // party host not found on query string, so
            if (!(partyHost is PartyHost))
            {
                if (this.Members.IsLoggedInPartier())
                {
                    return(this.Redirect(((IPartier)this.Members.GetCurrentMember()).PartyUrl));
                }

                // fallback to login
                return(this.Redirect(model.SiteSettings.LoginUrl));
            }

            // known host, so set the party host for this cms page, and build the model
            model.PartyHost = partyHost;

            model.Heading = partyHost.PartyHeading;

            model.Copy = partyHost.PartyCopy;

            // partiers - the host + all guests
            model.Partiers = this.Members.GetPartiers(partyHost.PartyGuid);

            // urls with guids
            model.DonateUrl        = this.Umbraco.TypedContentSingleAtXPath("//" + Donate.Alias).Url + "?partyGuid=" + partyHost.PartyGuid.ToString();
            model.RegisterGuestUrl = this.Umbraco.TypedContentSingleAtXPath("//" + RegisterGuest.Alias).Url + "?partyGuid=" + partyHost.PartyGuid.ToString();

            // determine view to return
            if (model.PartyHost.Blocked)
            {
                return(View("Blocked", model));
            }

            if (this.Members.IsLoggedInPartier())
            {
                IPartier partier = (IPartier)this.Members.GetCurrentMember();
                if (partier is PartyHost && partier.Id == partyHost.Id)
                {
                    return(View("Host", model));
                }
                else if (partier is PartyGuest && ((PartyGuest)partier).PartyGuid == partyHost.PartyGuid)
                {
                    return(View("Guest", model));
                }
            }

            return(View("Anonymous", model));
        }