Exemplo n.º 1
0
        /// <summary>
        /// Handles the Click event of the btnSendEmail control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSendEmail_Click(object sender, EventArgs e)
        {
            int sendCount = 0;

            foreach (RepeaterItem repeaterItem in rptRecipients.Items)
            {
                CheckBox cbEmailRecipient = (CheckBox)repeaterItem.FindControl("cbEmailRecipient");
                if (cbEmailRecipient != null && cbEmailRecipient.Checked)
                {
                    int?registrationId = cbEmailRecipient.Attributes["Id"].AsIntegerOrNull();
                    if (registrationId.HasValue)
                    {
                        var registration = _registrants.Where(r => r.RegistrationId == registrationId).Select(r => r.Registration).FirstOrDefault();
                        var mergeObjects = GetMergeObjects(registration);

                        var emailMessage = new RockEmailMessage();
                        emailMessage.AdditionalMergeFields = mergeObjects;
                        emailMessage.FromEmail             = tbFromEmail.Text;
                        emailMessage.FromName = tbFromName.Text;
                        emailMessage.Subject  = tbFromSubject.Text;
                        emailMessage.AddRecipient(new RecipientData(registration.ConfirmationEmail, mergeObjects));
                        emailMessage.Message   = ceEmailMessage.Text;
                        emailMessage.AppRoot   = ResolveRockUrl("~/");
                        emailMessage.ThemeRoot = ResolveRockUrl("~~/");
                        emailMessage.Send();

                        sendCount++;
                    }
                }
            }

            pnlSend.Visible     = false;
            pnlComplete.Visible = true;
            nbResult.Text       = string.Format("Wait List Transition emails have been sent to {0}.", "individuals".ToQuantity(sendCount));
        }
Exemplo n.º 2
0
        private void SendEmail(List <Person> emailrecipients, Dictionary <string, object> mergeFields)
        {
            var message = new RockEmailMessage();

            message.EnabledLavaCommands = GetAttributeValue("EnabledLavaCommands");

            foreach (var person in emailrecipients)
            {
                if (person.Id > 0)
                {
                    message.AddRecipient(new RockEmailMessageRecipient(person, mergeFields));
                }
                else
                {
                    message.AddRecipient(RockEmailMessageRecipient.CreateAnonymous(person.Email, mergeFields));
                }
            }

            message.FromEmail = tbEmail.Text;
            message.FromName  = tbFirstName.Text + " " + tbLastName.Text;
            message.Subject   = GetAttributeValue("Subject");
            message.Message   = GetAttributeValue("MessageBody");
            message.AppRoot   = ResolveRockUrl("~/");
            message.ThemeRoot = ResolveRockUrl("~~/");
            message.CreateCommunicationRecord = GetAttributeValue("SaveCommunicationHistory").AsBoolean();
            message.Send();
        }
Exemplo n.º 3
0
        private static void SendNotificationMessage(JobExecutionException jobException, ServiceJob job)
        {
            var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(null, null, new Lava.CommonMergeFieldsOptions {
                GetLegacyGlobalMergeFields = false
            });

            mergeFields.Add("Job", job);
            try
            {
                if (jobException != null)
                {
                    mergeFields.Add("Exception", Hash.FromAnonymousObject(jobException));
                }
            }
            catch
            {
                // ignore
            }

            var notificationEmailAddresses = job.NotificationEmails.ResolveMergeFields(mergeFields).SplitDelimitedValues().ToList();
            var emailMessage = new RockEmailMessage(Rock.SystemGuid.SystemCommunication.CONFIG_JOB_NOTIFICATION.AsGuid());

            emailMessage.AdditionalMergeFields = mergeFields;

            // NOTE: the EmailTemplate may also have TO: defined, so even if there are no notificationEmailAddress defined for this specific job, we still should send the mail
            foreach (var notificationEmailAddress in notificationEmailAddresses)
            {
                emailMessage.AddRecipient(RockEmailMessageRecipient.CreateAnonymous(notificationEmailAddress, null));
            }

            emailMessage.Send();
        }
        /// <summary>
        /// Sends the invite.
        /// </summary>
        /// <param name="rockContext">The rock context.</param>
        /// <param name="component">The component.</param>
        /// <param name="document">The document.</param>
        /// <param name="person">The person.</param>
        /// <param name="errors">The errors.</param>
        /// <returns></returns>
        private bool SendInvite(RockContext rockContext, DigitalSignatureComponent component, SignatureDocument document, Person person, out List <string> errors)
        {
            errors = new List <string>();
            if (document != null &&
                document.SignatureDocumentTemplate != null &&
                document.SignatureDocumentTemplate.InviteSystemCommunicationId.HasValue &&
                person != null &&
                !string.IsNullOrWhiteSpace(person.Email))
            {
                string inviteLink = component.GetInviteLink(document, person, out errors);
                if (!errors.Any())
                {
                    var systemEmail = new SystemCommunicationService(rockContext).Get(document.SignatureDocumentTemplate.InviteSystemCommunicationId.Value);
                    if (systemEmail != null)
                    {
                        var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(null, person);
                        mergeFields.Add("SignatureDocument", document);
                        mergeFields.Add("InviteLink", inviteLink);

                        var emailMessage = new RockEmailMessage(systemEmail);
                        emailMessage.AddRecipient(new RockEmailMessageRecipient(person, mergeFields));
                        emailMessage.Send();
                    }
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 5
0
        private void Send(string recipients, string fromEmail, string fromName, string subject, string body, Dictionary <string, object> mergeFields, RockContext rockContext, bool createCommunicationRecord, BinaryFile[] attachments)
        {
            var emailMessage = new RockEmailMessage();

            foreach (string recipient in recipients.SplitDelimitedValues().ToList())
            {
                emailMessage.AddRecipient(new RecipientData(recipient, mergeFields));
            }

            emailMessage.FromEmail = fromEmail;
            emailMessage.FromName  = fromName.IsNullOrWhiteSpace() ? fromEmail : fromName;
            emailMessage.Subject   = subject;
            emailMessage.Message   = body;

            foreach (BinaryFile b in attachments)
            {
                if (b != null)
                {
                    emailMessage.Attachments.Add(b);
                }
            }

            emailMessage.CreateCommunicationRecord = createCommunicationRecord;
            emailMessage.AppRoot = GlobalAttributesCache.Get().GetValue("InternalApplicationRoot") ?? string.Empty;

            emailMessage.Send();
        }
Exemplo n.º 6
0
        /// <summary>
        /// Displays the confirmation.
        /// </summary>
        /// <param name="personId">The person identifier.</param>
        private void DisplayConfirmation(int personId)
        {
            PersonService personService = new PersonService(new RockContext());
            Person        person        = personService.Get(personId);

            if (person != null)
            {
                Rock.Model.UserLogin user = CreateUser(person, false);

                string url = LinkedPageUrl(AttributeKey.ConfirmationPage);
                if (string.IsNullOrWhiteSpace(url))
                {
                    url = ResolveRockUrl("~/ConfirmAccount");
                }

                var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson);
                mergeObjects.Add("ConfirmAccountUrl", RootPath + url.TrimStart(new char[] { '/' }));
                mergeObjects.Add("Person", person);
                mergeObjects.Add("User", user);

                var emailMessage = new RockEmailMessage(GetAttributeValue(AttributeKey.ConfirmAccountTemplate).AsGuid());
                emailMessage.AddRecipient(new RockEmailMessageRecipient(person, mergeObjects));
                emailMessage.AppRoot   = ResolveRockUrl("~/");
                emailMessage.ThemeRoot = ResolveRockUrl("~~/");
                emailMessage.CreateCommunicationRecord = false;
                emailMessage.Send();

                ShowPanel(4);
            }
            else
            {
                ShowErrorMessage("Invalid Person");
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Sends the confirmation.
        /// </summary>
        /// <param name="userLogin">The user login.</param>
        private void SendConfirmation(UserLogin userLogin)
        {
            string url = LinkedPageUrl("ConfirmationPage");

            if (string.IsNullOrWhiteSpace(url))
            {
                url = ResolveRockUrl("~/ConfirmAccount");
            }

            var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(RockPage, CurrentPerson);

            mergeFields.Add("ConfirmAccountUrl", RootPath + url.TrimStart('/'));
            mergeFields.Add("Person", userLogin.Person);
            mergeFields.Add("User", userLogin);

            var recipients = new List <RecipientData>();

            recipients.Add(new RecipientData(userLogin.Person.Email, mergeFields));

            var message = new RockEmailMessage(GetAttributeValue("ConfirmAccountTemplate").AsGuid());

            message.SetRecipients(recipients);
            message.AppRoot   = ResolveRockUrl("~/");
            message.ThemeRoot = ResolveRockUrl("~~/");
            message.CreateCommunicationRecord = false;
            message.Send();
        }
Exemplo n.º 8
0
        private void SendNotifications(List <string> alarms, Guid systemCommunication, Guid notificationGroup)
        {
            var emailMessage = new RockEmailMessage(systemCommunication);
            var recipients   = new List <RockMessageRecipient>();

            var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(null, null);

            mergeFields.Add("Alarms", alarms);

            RockContext  rockContext  = new RockContext();
            GroupService groupService = new GroupService(rockContext);
            var          people       = groupService.Queryable()
                                        .Where(g => g.Guid == notificationGroup)
                                        .SelectMany(g => g.Members)
                                        .Select(m => m.Person)
                                        .ToList();

            foreach (var person in people)
            {
                recipients.Add(new RockEmailMessageRecipient(person, mergeFields));
            }

            emailMessage.SetRecipients(recipients);
            emailMessage.CreateCommunicationRecord = true;
            emailMessage.Send();
        }
Exemplo n.º 9
0
        /// <summary>
        /// Sends the confirmation.
        /// </summary>
        /// <param name="userLogin">The user login.</param>
        private void SendConfirmation(UserLogin userLogin)
        {
            string url = LinkedPageUrl("ConfirmationPage");

            if (string.IsNullOrWhiteSpace(url))
            {
                url = ResolveRockUrl("~/ConfirmAccount");
            }

            var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(null, CurrentPerson);

            mergeObjects.Add("ConfirmAccountUrl", RootPath + url.TrimStart(new char[] { '/' }));

            var personDictionary = userLogin.Person.ToLiquid() as Dictionary <string, object>;

            mergeObjects.Add("Person", personDictionary);
            mergeObjects.Add("User", userLogin);

            var recipients = new List <RockMessageRecipient>();

            recipients.Add(new RockEmailMessageRecipient(userLogin.Person, mergeObjects));

            var emailMessage = new RockEmailMessage(GetAttributeValue("ConfirmAccountTemplate").AsGuid());

            emailMessage.SetRecipients(recipients);
            emailMessage.CreateCommunicationRecord = false;
            emailMessage.Send();
        }
        private void SendConfirmation(Person person)
        {
            if (person == null)
            {
                return;
            }

            var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson);

            mergeObjects["Person"]       = person;
            mergeObjects["PublishGroup"] = _publishGroup;
            mergeObjects["Group"]        = _publishGroup.Group;

            var message = new RockEmailMessage();

            message.FromEmail = _publishGroup.ConfirmationEmail;
            message.FromName  = _publishGroup.ConfirmationFromName;
            message.Subject   = _publishGroup.ConfirmationSubject;
            message.Message   = _publishGroup.ConfirmationBody;
            message.AddRecipient(new RecipientData(new CommunicationRecipient()
            {
                PersonAlias = person.PrimaryAlias
            }, mergeObjects));
            message.Send();
        }
Exemplo n.º 11
0
        /// <summary>
        /// Executes the specified context.
        /// </summary>
        /// <param name="context">The context.</param>
        public virtual void Execute(IJobExecutionContext context)
        {
            JobDataMap    dataMap         = context.JobDetail.JobDataMap;
            int           alertPeriod     = dataMap.GetInt("AlertPeriod");
            Guid?         systemEmailGuid = dataMap.GetString("AlertEmail").AsGuidOrNull();
            List <string> recipientEmails = dataMap.GetString("AlertRecipients").SplitDelimitedValues().ToList();

            if (systemEmailGuid.HasValue && recipientEmails.Any())
            {
                var rockContext = new RockContext();

                int expirationDays = GetJobAttributeValue("ExpirationPeriod", 3, rockContext);
                var cutoffTime     = RockDateTime.Now.AddMinutes(0 - alertPeriod);

                var communications = new CommunicationService(rockContext)
                                     .GetQueued(expirationDays, alertPeriod, false, false)
                                     .Where(c => !c.ReviewedDateTime.HasValue || c.ReviewedDateTime.Value.CompareTo(cutoffTime) < 0) // Make sure communication wasn't just recently approved
                                     .OrderBy(c => c.Id)
                                     .ToList();

                if (communications.Any())
                {
                    var mergeFields = Lava.LavaHelper.GetCommonMergeFields(null);
                    mergeFields.Add("Communications", communications);

                    var emailMessage = new RockEmailMessage(systemEmailGuid.Value);
                    foreach (var email in recipientEmails)
                    {
                        emailMessage.AddRecipient(new RecipientData(email, mergeFields));
                    }
                    emailMessage.Send();
                }
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Sends the specified recipients.
        /// </summary>
        /// <param name="recipients">The recipients.</param>
        /// <param name="fromEmail">From email.</param>
        /// <param name="fromName">From name.</param>
        /// <param name="subject">The subject.</param>
        /// <param name="body">The body.</param>
        /// <param name="ccEmails">The CC emails.</param>
        /// <param name="bccEmails">The BCC emails.</param>
        /// <param name="createCommunicationRecord">if set to <c>true</c> [create communication record].</param>
        /// <param name="attachments">The attachments.</param>
        /// <param name="errorMessages">The error messages.</param>
        private void Send(List <RockEmailMessageRecipient> recipients, string fromEmail, string fromName, string subject, string body, List <string> ccEmails, List <string> bccEmails, bool createCommunicationRecord, BinaryFile[] attachments, out List <string> errorMessages)
        {
            var emailMessage = new RockEmailMessage();

            emailMessage.SetRecipients(recipients);
            emailMessage.FromEmail = fromEmail;
            emailMessage.FromName  = fromName.IsNullOrWhiteSpace() ? fromEmail : fromName;
            emailMessage.Subject   = subject;
            emailMessage.Message   = body;

            emailMessage.CCEmails  = ccEmails ?? new List <string>();
            emailMessage.BCCEmails = bccEmails ?? new List <string>();

            foreach (BinaryFile b in attachments)
            {
                if (b != null)
                {
                    emailMessage.Attachments.Add(b);
                }
            }

            emailMessage.CreateCommunicationRecord = createCommunicationRecord;
            emailMessage.AppRoot = Rock.Web.Cache.GlobalAttributesCache.Get().GetValue("InternalApplicationRoot") ?? string.Empty;

            emailMessage.Send(out errorMessages);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Handles the Click event of the btnSendReminders control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSendReminders_Click(object sender, EventArgs e)
        {
            var registrationsSelected = new List <int>();

            int sendCount = 0;

            gRegistrations.SelectedKeys.ToList().ForEach(r => registrationsSelected.Add(r.ToString().AsInteger()));
            if (registrationsSelected.Any())
            {
                if (_registrationInstance == null)
                {
                    int?registrationInstanceId = PageParameter("RegistrationInstanceId").AsIntegerOrNull();

                    using (RockContext rockContext = new RockContext())
                    {
                        RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext);
                        _registrationInstance = registrationInstanceService.Queryable("RegistrationTemplate").AsNoTracking()
                                                .Where(r => r.Id == registrationInstanceId).FirstOrDefault();
                    }

                    foreach (var registrationId in registrationsSelected)
                    {
                        // use a new rockContext for each registration so that ChangeTracker doesn't get bogged down
                        using (RockContext rockContext = new RockContext())
                        {
                            var registrationService = new RegistrationService(rockContext);

                            var registration = registrationService.Get(registrationId);
                            if (registration != null && !string.IsNullOrWhiteSpace(registration.ConfirmationEmail))
                            {
                                Dictionary <string, object> mergeObjects = new Dictionary <string, object>();
                                mergeObjects.Add("Registration", registration);
                                mergeObjects.Add("RegistrationInstance", _registrationInstance);

                                var emailMessage = new RockEmailMessage(GetAttributeValue("ConfirmAccountTemplate").AsGuid());
                                emailMessage.AdditionalMergeFields = mergeObjects;
                                emailMessage.FromEmail             = txtFromEmail.Text;
                                emailMessage.FromName = txtFromName.Text;
                                emailMessage.Subject  = txtFromSubject.Text;
                                emailMessage.AddRecipient(registration.GetConfirmationRecipient(mergeObjects));
                                emailMessage.Message   = ceEmailMessage.Text;
                                emailMessage.AppRoot   = ResolveRockUrl("~/");
                                emailMessage.ThemeRoot = ResolveRockUrl("~~/");
                                emailMessage.CreateCommunicationRecord = true;
                                emailMessage.Send();

                                registration.LastPaymentReminderDateTime = RockDateTime.Now;
                                rockContext.SaveChanges();

                                sendCount++;
                            }
                        }
                    }
                }
            }

            pnlSend.Visible     = false;
            pnlComplete.Visible = true;
            nbResult.Text       = string.Format("Payment reminders have been sent to {0}.", "individuals".ToQuantity(sendCount));
        }
Exemplo n.º 14
0
        /// <summary>
        /// Displays the success.
        /// </summary>
        /// <param name="user">The user.</param>
        private void DisplaySuccess(Rock.Model.UserLogin user)
        {
            Authorization.SignOut();
            Authorization.SetAuthCookie(tbUserName.Text, false, false);

            if (user != null && user.PersonId.HasValue)
            {
                PersonService personService = new PersonService(new RockContext());
                Person        person        = personService.Get(user.PersonId.Value);

                if (person != null)
                {
                    try
                    {
                        string url = LinkedPageUrl(AttributeKey.ConfirmationPage);
                        if (string.IsNullOrWhiteSpace(url))
                        {
                            url = ResolveRockUrl("~/ConfirmAccount");
                        }

                        var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson);
                        mergeObjects.Add("ConfirmAccountUrl", RootPath + url.TrimStart(new char[] { '/' }));
                        mergeObjects.Add("Person", person);
                        mergeObjects.Add("User", user);

                        var emailMessage = new RockEmailMessage(GetAttributeValue(AttributeKey.AccountCreatedTemplate).AsGuid());
                        emailMessage.AddRecipient(new RockEmailMessageRecipient(person, mergeObjects));
                        emailMessage.AppRoot   = ResolveRockUrl("~/");
                        emailMessage.ThemeRoot = ResolveRockUrl("~~/");
                        emailMessage.CreateCommunicationRecord = false;
                        emailMessage.Send();
                    }
                    catch (SystemException ex)
                    {
                        ExceptionLogService.LogException(ex, Context, RockPage.PageId, RockPage.Site.Id, CurrentPersonAlias);
                    }

                    string returnUrl = Request.QueryString["returnurl"];
                    btnContinue.Visible = !string.IsNullOrWhiteSpace(returnUrl);

                    lSuccessCaption.Text = GetAttributeValue(AttributeKey.SuccessCaption);
                    if (lSuccessCaption.Text.Contains("{0}"))
                    {
                        lSuccessCaption.Text = string.Format(lSuccessCaption.Text, person.FirstName);
                    }

                    ShowPanel(5);
                }
                else
                {
                    ShowErrorMessage("Invalid Person");
                }
            }
            else
            {
                ShowErrorMessage("Invalid User");
            }
        }
Exemplo n.º 15
0
        /// <summary>
        /// Sends the confirmation e-mail to the person this <see cref="UserLogin"/>
        /// is associated with. The e-mail will contain a link to the page where
        /// the person can confirm they own the account.
        /// </summary>
        /// <param name="userLogin">The user login.</param>
        /// <param name="systemEmailGuid">The system email unique identifier.</param>
        /// <param name="confirmationPage">The confirmation page.</param>
        /// <param name="baseUrl">The base URL to use if known, such as https://www.rockrms.com/. If <c>null</c> the default domain for the page will be used.</param>
        /// <param name="mergeFields">The additional merge fields to provide.</param>
        internal static void SendConfirmationEmail(UserLogin userLogin, Guid systemEmailGuid, PageCache confirmationPage, string baseUrl, Dictionary <string, object> mergeFields)
        {
            string url = null;

            // Check for the required parameters.
            if (userLogin == null)
            {
                throw new ArgumentNullException(nameof(userLogin));
            }

            if (confirmationPage == null)
            {
                throw new ArgumentNullException(nameof(confirmationPage));
            }

            // Get the default route that doesn't require any parameters.
            url = confirmationPage.PageRoutes
                  .Where(r => !r.Route.Contains("{"))
                  .OrderByDescending(r => r.IsGlobal)
                  .Select(r => r.Route)
                  .FirstOrDefault();

            // No route, just use legacy page id syntax.
            if (url.IsNullOrWhiteSpace())
            {
                url = $"/page/{confirmationPage.Id}";
            }

            // If they didn't provide a base url, then use the one for the page.
            if (baseUrl.IsNullOrWhiteSpace())
            {
                baseUrl = confirmationPage.Layout.Site.DefaultDomainUri.AbsoluteUri;
            }

            var confirmAccountUrl = baseUrl.TrimEnd('/') + "/" + url.TrimStart('/');

            // Duplicate the merge fields so we don't corrupt the original
            // dictionary.
            mergeFields = mergeFields != null ? new Dictionary <string, object>(mergeFields) : new Dictionary <string, object>();
            mergeFields.AddOrReplace("ConfirmAccountUrl", confirmAccountUrl);
            mergeFields.AddOrReplace("Person", userLogin.Person);
            mergeFields.AddOrReplace("User", userLogin);

            // Send the e-mail to the on-file address for the person.
            var recipients = new List <RockEmailMessageRecipient>
            {
                new RockEmailMessageRecipient(userLogin.Person, mergeFields)
            };

            // Send it off.
            var message = new RockEmailMessage(systemEmailGuid);

            message.SetRecipients(recipients);
            message.AppRoot   = "/";
            message.ThemeRoot = $"/Themes/{confirmationPage.Layout.Site.Theme}";
            message.CreateCommunicationRecord = false;
            message.Send();
        }
Exemplo n.º 16
0
        /// <summary>
        /// Displays the sent login.
        /// </summary>
        /// <param name="direction">The direction.</param>
        private void DisplaySentLogin(Direction direction)
        {
            var           rockContext   = new RockContext();
            PersonService personService = new PersonService(rockContext);
            Person        person        = personService.Get(hfSendPersonId.Value.AsInteger());

            if (person != null)
            {
                string url = LinkedPageUrl(AttributeKey.ConfirmationPage);
                if (string.IsNullOrWhiteSpace(url))
                {
                    url = ResolveRockUrl("~/ConfirmAccount");
                }

                var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson);
                mergeObjects.Add("ConfirmAccountUrl", RootPath + url.TrimStart(new char[] { '/' }));
                var results = new List <IDictionary <string, object> >();

                var users            = new List <UserLogin>();
                var userLoginService = new UserLoginService(rockContext);
                foreach (UserLogin user in userLoginService.GetByPersonId(person.Id))
                {
                    if (user.EntityType != null)
                    {
                        var component = AuthenticationContainer.GetComponent(user.EntityType.Name);
                        if (component.ServiceType == AuthenticationServiceType.Internal)
                        {
                            users.Add(user);
                        }
                    }
                }

                var resultsDictionary = new Dictionary <string, object>();
                resultsDictionary.Add("Person", person);
                resultsDictionary.Add("Users", users);
                results.Add(resultsDictionary);

                mergeObjects.Add("Results", results.ToArray());

                var emailMessage = new RockEmailMessage(GetAttributeValue(AttributeKey.ForgotUsernameTemplate).AsGuid());
                emailMessage.AddRecipient(new RockEmailMessageRecipient(person, mergeObjects));
                emailMessage.AppRoot   = ResolveRockUrl("~/");
                emailMessage.ThemeRoot = ResolveRockUrl("~~/");
                emailMessage.CreateCommunicationRecord = false;
                emailMessage.Send();
            }
            else
            {
                ShowErrorMessage("Invalid Person");
            }

            ShowPanel(3);
        }
Exemplo n.º 17
0
        /// <summary>
        /// Sends the specified recipients.
        /// </summary>
        /// <param name="recipients">The recipients.</param>
        /// <param name="fromEmail">From email.</param>
        /// <param name="fromName">From name.</param>
        /// <param name="subject">The subject.</param>
        /// <param name="body">The body.</param>
        /// <param name="createCommunicationRecord">if set to <c>true</c> [create communication record].</param>
        /// <param name="metaData">The meta data.</param>
        private void Send(List <RockEmailMessageRecipient> recipients, string fromEmail, string fromName, string subject, string body, bool createCommunicationRecord, Dictionary <string, string> metaData)
        {
            var emailMessage = new RockEmailMessage();

            emailMessage.SetRecipients(recipients);
            emailMessage.FromEmail = fromEmail;
            emailMessage.FromName  = fromName;
            emailMessage.Subject   = subject;
            emailMessage.Message   = body;
            emailMessage.CreateCommunicationRecord = createCommunicationRecord;
            emailMessage.MessageMetaData           = metaData;
            emailMessage.Send();
        }
Exemplo n.º 18
0
        /// <summary>
        /// Checks the integrity of the database
        /// </summary>
        /// <param name="commandTimeout">The command timeout.</param>
        /// <param name="alertEmail">The alert email.</param>
        /// <returns></returns>
        private bool IntegrityCheck(int commandTimeout, string alertEmail)
        {
            string databaseName   = new RockContext().Database.Connection.Database;
            string integrityQuery = $"DBCC CHECKDB('{ databaseName }',NOINDEX) WITH PHYSICAL_ONLY, NO_INFOMSGS";
            bool   checkPassed    = true;

            Stopwatch stopwatch = Stopwatch.StartNew();

            // DBCC CHECKDB will return a count of how many issues there were
            int integrityErrorCount = DbService.ExecuteCommand(integrityQuery, System.Data.CommandType.Text, null, commandTimeout);

            stopwatch.Stop();

            var databaseMaintenanceTaskResult = new DatabaseMaintenanceTaskResult
            {
                Title   = "Integrity Check",
                Elapsed = stopwatch.Elapsed
            };

            _databaseMaintenanceTaskResults.Add(databaseMaintenanceTaskResult);

            if (integrityErrorCount > 0)
            {
                // oh no...
                checkPassed = false;
                string errorMessage = $"Some errors were reported when running a database integrity check on your Rock database. We'd recommend running the command below under 'Admin Tools > Power Tools > SQL Command' to get further details. <p>DBCC CHECKDB ('{ databaseName }') WITH NO_INFOMSGS, ALL_ERRORMSGS</p>";

                var mergeFields = Lava.LavaHelper.GetCommonMergeFields(null, null);
                mergeFields.Add("ErrorMessage", errorMessage);
                mergeFields.Add("Errors", integrityErrorCount);

                databaseMaintenanceTaskResult.Exception = new Exception(errorMessage);

                if (alertEmail.IsNotNullOrWhiteSpace())
                {
                    var    globalAttributes = GlobalAttributesCache.Get();
                    string emailHeader      = globalAttributes.GetValue("EmailHeader");
                    string emailFooter      = globalAttributes.GetValue("EmailFooter");
                    string messageBody      = $"{emailHeader} {errorMessage} <p><small>This message was generated from the Rock Database Maintenance Job</small></p>{emailFooter}";

                    var emailMessage   = new RockEmailMessage();
                    var alertEmailList = alertEmail.Split(',').ToList();
                    var recipients     = alertEmailList.Select(a => RockEmailMessageRecipient.CreateAnonymous(a, mergeFields)).ToList();
                    emailMessage.Subject = "Rock: Database Integrity Check Error";
                    emailMessage.Message = messageBody;
                    emailMessage.Send();
                }
            }

            return(checkPassed);
        }
Exemplo n.º 19
0
        /// <summary>
        /// Executes this instance.
        /// </summary>
        /// <param name="message"></param>
        public override void Execute(Message message)
        {
            using (var rockContext = new RockContext())
            {
                var communication = new CommunicationService(rockContext).Get(message.CommunicationId);

                if (communication != null && communication.Status == CommunicationStatus.PendingApproval)
                {
                    // get notification group
                    var groupGuid = SystemGuid.Group.GROUP_COMMUNICATION_APPROVERS.AsGuid();
                    var approvers = new GroupMemberService(rockContext).Queryable()
                                    .Where(m =>
                                           m.Group.Guid == groupGuid &&
                                           m.GroupMemberStatus == GroupMemberStatus.Active)
                                    .ToList();

                    if (approvers.Any())
                    {
                        var communicationSettingApprovalGuid = Rock.Web.SystemSettings.GetValue(SystemSetting.COMMUNICATION_SETTING_APPROVAL_TEMPLATE).AsGuidOrNull();
                        if (communicationSettingApprovalGuid.HasValue)
                        {
                            var approvalPageUrl = message.ApprovalPageUrl;

                            // create approval link if one was not provided
                            if (string.IsNullOrEmpty(approvalPageUrl))
                            {
                                var internalApplicationRoot = GlobalAttributesCache.Value("InternalApplicationRoot").EnsureTrailingForwardslash();
                                approvalPageUrl = $"{internalApplicationRoot}Communication/{communication.Id}";
                            }

                            foreach (var approver in approvers)
                            {
                                var recipients   = new List <RockEmailMessageRecipient>();
                                var emailMessage = new RockEmailMessage(communicationSettingApprovalGuid.Value);

                                // Build Lava merge fields.
                                var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(null);
                                mergeFields.Add("Approver", approver.Person);
                                mergeFields.Add("Communication", communication);
                                mergeFields.Add("RecipientsCount", communication.GetRecipientsQry(rockContext).Count());
                                mergeFields.Add("ApprovalPageUrl", approvalPageUrl);
                                recipients.Add(new RockEmailMessageRecipient(approver.Person, mergeFields));
                                emailMessage.SetRecipients(recipients);
                                emailMessage.Send();
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 20
0
        /// <summary>
        /// Executes the specified context.
        /// </summary>
        /// <param name="context">The context.</param>
        public virtual void Execute(IJobExecutionContext context)
        {
            JobDataMap    dataMap         = context.JobDetail.JobDataMap;
            int           alertPeriod     = dataMap.GetInt("AlertPeriod");
            Guid?         systemEmailGuid = dataMap.GetString("AlertEmail").AsGuidOrNull();
            List <string> recipientEmails = dataMap.GetString("AlertRecipients").SplitDelimitedValues().ToList();

            if (systemEmailGuid.HasValue && recipientEmails.Any())
            {
                var rockContext = new RockContext();

                int expirationDays = GetJobAttributeValue("ExpirationPeriod", 3, rockContext);
                var beginWindow    = RockDateTime.Now.AddDays(0 - expirationDays);
                var cutoffTime     = RockDateTime.Now.AddMinutes(0 - alertPeriod);

                var communications = new CommunicationService(rockContext)
                                     .GetQueued(expirationDays, alertPeriod, false, false)
                                     .NotRecentlyApproved(cutoffTime)
                                     .IfScheduledAreInWindow(beginWindow, cutoffTime)
                                     .OrderBy(c => c.Id)
                                     .ToList();

                if (communications.Any())
                {
                    var mergeFields = Lava.LavaHelper.GetCommonMergeFields(null);
                    mergeFields.Add("Communications", communications);

                    var emailMessage = new RockEmailMessage(systemEmailGuid.Value);
                    foreach (var email in recipientEmails)
                    {
                        emailMessage.AddRecipient(RockEmailMessageRecipient.CreateAnonymous(email, mergeFields));
                    }

                    var errors = new List <string>();
                    emailMessage.Send(out errors);

                    context.Result = string.Format("Notified about {0} queued communications. {1} errors encountered.", communications.Count, errors.Count);
                    if (errors.Any())
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine();
                        sb.Append("Errors: ");
                        errors.ForEach(e => { sb.AppendLine(); sb.Append(e); });
                        string errorMessage = sb.ToString();
                        context.Result += errorMessage;
                        throw new Exception(errorMessage);
                    }
                }
            }
        }
Exemplo n.º 21
0
        private void Send(string recipients, string fromEmail, string fromName, string subject, string body, Dictionary <string, object> mergeFields, RockContext rockContext, bool createCommunicationRecord)
        {
            var emailMessage = new RockEmailMessage();

            foreach (string recipient in recipients.SplitDelimitedValues().ToList())
            {
                emailMessage.AddRecipient(new RecipientData(recipient, mergeFields));
            }
            emailMessage.FromEmail = fromEmail;
            emailMessage.FromName  = fromName;
            emailMessage.Subject   = subject;
            emailMessage.Message   = body;
            emailMessage.CreateCommunicationRecord = createCommunicationRecord;

            emailMessage.Send();
        }
Exemplo n.º 22
0
        private void SendReceipt()
        {
            RockContext rockContext  = new RockContext();
            var         receiptEmail = new SystemEmailService(rockContext).Get(new Guid(GetAttributeValue("ReceiptEmail")));

            if (receiptEmail != null)
            {
                var givingUnit = new PersonAliasService(rockContext).Get(this.SelectedGivingUnit.PersonAliasId).Person;

                var emailMessage = new RockEmailMessage(receiptEmail.Guid);
                emailMessage.AddRecipient(new RecipientData(givingUnit.Email, GetMergeFields(givingUnit)));
                emailMessage.AppRoot   = ResolveRockUrl("~/");
                emailMessage.ThemeRoot = ResolveRockUrl("~~/");
                emailMessage.Send();
            }
        }
Exemplo n.º 23
0
        /// <summary>
        /// Sends the new group member an email using the group attributes
        /// </summary>
        /// <returns>true if settings are valid; false otherwise</returns>
        protected void SendGroupEmail(GroupMember groupMember)
        {
            var group = groupMember.Group;

            if (group.Attributes == null)
            {
                group.LoadAttributes();
            }

            var sendEmail = group.GetAttributeValue("SendEmail").AsBoolean();

            if (sendEmail && !string.IsNullOrWhiteSpace(groupMember.Person.Email))
            {
                var message = group.GetAttributeValue("Message");

                if (!string.IsNullOrWhiteSpace(message))
                {
                    var mergeFields = new Dictionary <string, object>()
                    {
                        { "Group", group },
                        { "GroupMember", groupMember },
                        { "Person", groupMember.Person }
                    };

                    var fromEmail = group.GetAttributeValue("FromEmail");
                    var fromName  = group.GetAttributeValue("FromName");
                    var subject   = group.GetAttributeValue("Subject");

                    var emailMessage = new RockEmailMessage();
                    emailMessage.AddRecipient(new RecipientData(groupMember.Person.Email, mergeFields));

                    emailMessage.FromEmail = fromEmail;
                    emailMessage.FromName  = fromName;
                    emailMessage.Subject   = subject;
                    emailMessage.Message   = message;

                    emailMessage.CreateCommunicationRecord = true;
                    emailMessage.AppRoot = Rock.Web.Cache.GlobalAttributesCache.Get().GetValue("InternalApplicationRoot") ?? string.Empty;

                    emailMessage.Send();
                }
            }
        }
Exemplo n.º 24
0
        private void SendNotificationEmail(List <TestResult> alarms, List <Person> people)
        {
            var systemCommunication = dataMap.GetString("NotificationCommunication").AsGuid();
            var emailMessage        = new RockEmailMessage(systemCommunication);
            var recipients          = new List <RockMessageRecipient>();

            var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(null, null);

            mergeFields.Add("Alarms", alarms);

            foreach (var person in people)
            {
                recipients.Add(new RockEmailMessageRecipient(person, mergeFields));
            }

            emailMessage.SetRecipients(recipients);
            emailMessage.CreateCommunicationRecord = true;
            emailMessage.Send();
        }
Exemplo n.º 25
0
        private void SendEmailToMember(GroupMember member, Group group, KeyValuePair <int, List <DateTime> > occGroup)
        {
            var email = staffEmail;

            if (member.IsNotNull())
            {
                email = member.Person.Email;
            }

            if (email.IsNotNullOrWhiteSpace())
            {
                groupsNotified.Add(group.Id);

                var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(null, member.IsNotNull() ? member.Person : null);
                mergeObjects.Add("Person", member.IsNotNull() ? member.Person : null);
                mergeObjects.Add("Group", group);
                mergeObjects.Add("Occurrence", occGroup.Value.Max());

                var recipients = new List <RockEmailMessageRecipient>();
                recipients.Add(RockEmailMessageRecipient.CreateAnonymous(email, mergeObjects));

                var emailMessage = new RockEmailMessage(systemEmailGuid);
                emailMessage.SetRecipients(recipients);
                var errors = new List <string>();
                emailMessage.Send(out errors);

                if (errors.Any())
                {
                    errorCount += errors.Count;
                    errorMessages.AddRange(errors);
                }
                else
                {
                    attendanceRemindersSent++;
                }
            }
            else
            {
                errorCount += 1;
                errorMessages.Add(string.Format("No email specified for group {0} and no fallback email provided.", group.Id));
            }
        }
Exemplo n.º 26
0
        private List <string> SendReminderEmail(Guid assessmentSystemEmailGuid, int PersonAliasId)
        {
            var person = new PersonAliasService(new RockContext()).GetPerson(PersonAliasId);

            var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(null);

            mergeObjects.Add("Person", person);

            var recipients = new List <RecipientData>();

            recipients.Add(new RecipientData(person.Email, mergeObjects));

            var errors       = new List <string>();
            var emailMessage = new RockEmailMessage(assessmentSystemEmailGuid);

            emailMessage.SetRecipients(recipients);
            emailMessage.Send(out errors);

            return(errors);
        }
Exemplo n.º 27
0
        /// <summary>
        /// Executes the specified context.
        /// </summary>
        /// <param name="context">The context.</param>
        public virtual void Execute(IJobExecutionContext context)
        {
            JobDataMap dataMap           = context.JobDetail.JobDataMap;
            var        emailTemplateGuid = dataMap.Get("SystemEmail").ToString().AsGuid();
            var        groupGuid         = dataMap.Get("Group").ToString().AsGuid();
            var        sendToDescendants = dataMap.Get("SendToDescendantGroups").ToString().AsBoolean();

            var rockContext = new RockContext();
            var group       = new GroupService(rockContext).Get(groupGuid);

            if (group != null)
            {
                List <int> groupIds = new List <int>();
                GetGroupIds(groupIds, sendToDescendants, group);

                var recipients = new List <RecipientData>();

                var groupMemberList = new GroupMemberService(rockContext).Queryable().Where(gm =>
                                                                                            groupIds.Contains(gm.GroupId) &&
                                                                                            gm.GroupMemberStatus == GroupMemberStatus.Active)
                                      .ToList();
                foreach (GroupMember groupMember in groupMemberList)
                {
                    var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(null);
                    mergeFields.Add("Person", groupMember.Person);
                    mergeFields.Add("GroupMember", groupMember);
                    mergeFields.Add("Group", groupMember.Group);

                    recipients.Add(new RecipientData(groupMember.Person.Email, mergeFields));
                }

                if (recipients.Any())
                {
                    var emailMessage = new RockEmailMessage(emailTemplateGuid);
                    emailMessage.SetRecipients(recipients);
                    emailMessage.Send();
                }

                context.Result = string.Format("{0} emails sent", recipients.Count());
            }
        }
        /// <summary>
        /// Sends and individual digest email to the specified person.
        /// </summary>
        /// <param name="systemCommunication">The system communication.</param>
        /// <param name="mergeObjects">The Lava merge objects.</param>
        /// <param name="person">The person who should receive the email.</param>
        /// <param name="regionalGroup">The regional group that this digest email represents.</param>
        private void SendDigestEmail(SystemCommunication systemCommunication, Dictionary <string, object> mergeObjects, Person person, Group regionalGroup)
        {
            mergeObjects.AddOrReplace("Person", person);

            var recipient = new RockEmailMessageRecipient(person, mergeObjects);
            var message   = new RockEmailMessage(systemCommunication);

            message.Subject = $"'{regionalGroup.Name}' Group Attendance Digest";
            message.SetRecipients(new List <RockEmailMessageRecipient> {
                recipient
            });
            message.Send(out List <string> errorMessages);

            if (!errorMessages.Any())
            {
                _digestsSentCount++;
                return;
            }

            _errors.Add($"Unable to send '{regionalGroup.Name}' digest to '{person.Email}'.");
        }
        /// <summary>
        /// Sends the confirmation email.
        /// </summary>
        /// <param name="attendance">The attendance.</param>
        /// <param name="recipientEmailAddresses">The recipient email addresses.</param>
        private void SendResponseEmail(Attendance attendance, List <string> recipientEmailAddresses)
        {
            try
            {
                var mergeFields = MergeFields(attendance);

                // Distinct is used so that if the same email address is for both the Scheduler and ScheduleCancellationPersonAlias
                // Only one email will be sent
                foreach (var recipient in recipientEmailAddresses.Distinct(StringComparer.CurrentCultureIgnoreCase).Where(s => s.IsNotNullOrWhiteSpace()))
                {
                    var emailMessage = new RockEmailMessage(GetAttributeValue("SchedulingResponseEmail").AsGuid());
                    emailMessage.AddRecipient(new RecipientData(recipient, mergeFields));
                    emailMessage.CreateCommunicationRecord = false;
                    emailMessage.Send();
                }
            }
            catch (SystemException ex)
            {
                ExceptionLogService.LogException(ex, Context, RockPage.PageId, RockPage.Site.Id, CurrentPersonAlias);
            }
        }
Exemplo n.º 30
0
        /// <summary>
        /// Sends the confirmation email.
        /// </summary>
        /// <param name="attendance">The attendance.</param>
        /// <param name="recipientEmailAddresses">The recipient email addresses.</param>
        private void SendResponseEmail(Attendance attendance, List <RockEmailMessageRecipient> recipients)
        {
            try
            {
                var mergeFields = MergeFields(attendance);

                // Distinct is used so that if the same email address is for both the Scheduler and ScheduleCancellationPersonAlias
                // Only one email will be sent
                foreach (var recipient in recipients)
                {
                    recipient.MergeFields = mergeFields;
                    var emailMessage = new RockEmailMessage(GetAttributeValue("SchedulingResponseEmail").AsGuid());
                    emailMessage.AddRecipient(recipient);
                    emailMessage.CreateCommunicationRecord = false;
                    emailMessage.Send();
                }
            }
            catch (SystemException ex)
            {
                ExceptionLogService.LogException(ex, Context, RockPage.PageId, RockPage.Site.Id, CurrentPersonAlias);
            }
        }