Beispiel #1
0
        private string GetSlug(PublishGroup publishGroup)
        {
            if (publishGroup.Slug.IsNotNullOrWhiteSpace())
            {
                return(publishGroup.Slug);
            }

            var slug = publishGroup.Title.RemoveAllNonAlphaNumericCharacters().ToLower();

            RockContext         rockContext         = new RockContext();
            PublishGroupService publishGroupService = new PublishGroupService(rockContext);
            var takenSlug = publishGroupService.Queryable()
                            .Where(pg => pg.Slug == slug && pg.GroupId != publishGroup.Group.Id).FirstOrDefault();

            var i = 0;

            while (takenSlug != null)
            {
                i++;
                var testSlug = slug + i.ToString();
                takenSlug = publishGroupService.Queryable().Where(pg => pg.Slug == testSlug).FirstOrDefault();
            }

            if (i != 0)
            {
                slug += i.ToString();
            }

            return(slug);
        }
Beispiel #2
0
        private Dictionary <ImageFile, ImageLayouter> LayoutImage(PublishGroup publishGroup, MySortedList <ImageFile> bitmaps, bool isPOT, bool isSquare)
        {
            var  result = new Dictionary <ImageFile, ImageLayouter>();
            uint order  = 0;

            while (bitmaps.Count > 0)
            {
                var layouter = new ImageLayouter(PublishTarget.Current.DefaultImageSize, PublishTarget.Current.MaxImageSize, isPOT, isSquare);
                var copyList = new MySortedList <ImageFile>();
                copyList.AddRange(bitmaps);

                layouter.Generate(copyList);
                bitmaps.RemoveRange(layouter.UsedImages);

                if (layouter.ResultImageFixedSize != Size.Empty)
                {
                    FileInfo newFile     = new FileInfo(publishGroup.GenerateNewFileName(PathManager.OutputImagesPath, order));
                    var      resultImage = new ImageFile(newFile, true, true)
                    {
                        TextureRect = new Rectangle(Point.Empty, layouter.ResultImageFixedSize)
                    };

                    resultImage.Order = order;
                    if (PublishTarget.Current.IsPVR)
                    {
                        resultImage.IsPVREnabled = layouter.UsedImages.All(usedImage => usedImage.IsPVREnabled);
                    }
                    else
                    {
                        resultImage.IsPVREnabled = false;
                    }

                    result.Add(resultImage, layouter);
                    Logger.LogInfo("\t\tPack Image:{0}:\r\n", resultImage.FileInfo.Name);
                }
                else
                {
                    foreach (var usedImage in layouter.UsedImages)
                    {
                        Logger.LogInfo("\t\tToo Big Image:{0}:\r\n", usedImage);
                    }
                }
                ++order;
            }



            //foreach (var mergeResult in result)
            //{
            //    Logger.LogInfo("\t{0} {1}=>{2}:\r\n", mergeResult.Key, mergeResult.Value.ResultImageSize,
            //                   mergeResult.Value.ResultImageFixedSize);

            //    foreach (var imageFile in mergeResult.Value.UsedImages)
            //    {
            //        Logger.LogInfo("\t\t{0}:\r\n", imageFile);
            //    }
            //}

            return(result);
        }
Beispiel #3
0
        /// <summary>Gets the publish group.</summary>
        /// <param name="rockContext">The rock context.</param>
        /// <param name="publishGroupService">The publish group service.</param>
        /// <returns></returns>
        private PublishGroup GetPublishGroup(RockContext rockContext = null, PublishGroupService publishGroupService = null)
        {
            rockContext         = rockContext ?? new RockContext();
            publishGroupService = publishGroupService ?? new PublishGroupService(rockContext);
            if (PageParameter(PageParameterKeys.PublishGroupId).IsNotNullOrWhiteSpace())
            {
                var publishGroup = publishGroupService.Get(PageParameter(PageParameterKeys.PublishGroupId).AsInteger());
                if (publishGroup != null)
                {
                    return(publishGroup);
                }
            }

            if (PageParameter(PageParameterKeys.GroupId).IsNotNullOrWhiteSpace())
            {
                int          groupId      = PageParameter(PageParameterKeys.GroupId).AsInteger();
                GroupService groupService = new GroupService(rockContext);
                var          group        = groupService.Get(groupId);
                if (group != null)
                {
                    var publishGroup = publishGroupService.Queryable()
                                       .Where(pg => pg.GroupId == groupId)
                                       .ToList()
                                       .LastOrDefault();

                    if (publishGroup != null)
                    {
                        return(publishGroup);
                    }

                    publishGroup = new PublishGroup
                    {
                        PublishGroupStatus      = PublishGroupStatus.PendingApproval,
                        RegistrationRequirement = RegistrationRequirement.NoRegistration,
                        ChildcareOptions        = ChildcareOptions.NoChildcare,
                        Group                            = group,
                        RequestorAliasId                 = CurrentPersonAliasId.Value,
                        ConfirmationBody                 = GetAttributeValue(AttributeKeys.DefaultEmail),
                        RegistrationDescription          = GetAttributeValue(AttributeKeys.RegistrationDetails),
                        ChildcareRegistrationDescription = GetAttributeValue(AttributeKeys.ChildcareRegistrationDetails)
                    };

                    if (group.Schedule != null)
                    {
                        publishGroup.WeeklyDayOfWeek = group.Schedule.WeeklyDayOfWeek;
                        publishGroup.WeeklyTimeOfDay = group.Schedule.WeeklyTimeOfDay;
                    }

                    if (group.GroupLocations.Any())
                    {
                        publishGroup.MeetingLocation = group.GroupLocations.FirstOrDefault().Location.Name;
                    }

                    return(publishGroup);
                }
            }
            return(null);
        }
 protected override void OnInit(EventArgs e)
 {
     base.OnInit(e);
     publishGroup = GetPublishGroup();
     if (publishGroup != null)
     {
         publishGroup.LoadAttributes();
         Rock.Attribute.Helper.AddEditControls(publishGroup, phAttributeEdits, false);
     }
 }
        private PublishGroup GetPublishGroup(RockContext rockContext = null, PublishGroupService publishGroupService = null)
        {
            rockContext         = rockContext ?? new RockContext();
            publishGroupService = publishGroupService ?? new PublishGroupService(rockContext);
            if (PageParameter("PublishGroupId").IsNotNullOrWhiteSpace())
            {
                var publishGroup = publishGroupService.Get(PageParameter("PublishGroupId").AsInteger());
                if (publishGroup != null)
                {
                    return(publishGroup);
                }
            }

            if (PageParameter("GroupId").IsNotNullOrWhiteSpace())
            {
                int          groupId      = PageParameter("GroupId").AsInteger();
                GroupService groupService = new GroupService(rockContext);
                var          group        = groupService.Get(groupId);
                if (group != null)
                {
                    var publishGroup = publishGroupService.Queryable()
                                       .Where(pg => pg.GroupId == groupId)
                                       .ToList()
                                       .LastOrDefault();

                    if (publishGroup != null)
                    {
                        return(publishGroup);
                    }

                    publishGroup = new PublishGroup
                    {
                        PublishGroupStatus = PublishGroupStatus.Pending,
                        Group            = group,
                        RequestorAliasId = CurrentPersonAliasId.Value
                    };

                    if (group.Schedule != null)
                    {
                        publishGroup.WeeklyDayOfWeek = group.Schedule.WeeklyDayOfWeek;
                        publishGroup.WeeklyTimeOfDay = group.Schedule.WeeklyTimeOfDay;
                    }

                    if (group.GroupLocations.Any())
                    {
                        publishGroup.MeetingLocation = group.GroupLocations.FirstOrDefault().Location.Name;
                    }

                    return(publishGroup);
                }
            }
            return(null);
        }
Beispiel #6
0
 public FileListFile(FileInfo filePath, bool enablePacking = true, bool isCoded = false)
 {
     FileInfo      = filePath;
     ResourceName  = GetResourceName(FileInfo.Name);
     Order         = GetResourceOrder(FileInfo.Name);
     IsPacked      = false;
     IsPVREnabled  = false;
     EnablePacking = enablePacking;
     PublishGroup  = PublishGroup.GetPublishGroup(FileInfo);
     Usage         = FileInfo.DirectoryName.Replace(PathManager.InputImagesPath.FullName, string.Empty).TrimStart(new[] { '/', '\\' });
     IsCoded       = isCoded;
 }
Beispiel #7
0
 public void UpdateFileInfo(FileInfo newFileInfo)
 {
     if (OriginalFileInfo == null)
     {
         OriginalFileInfo = FileInfo;
     }
     FileInfo     = newFileInfo;
     ResourceName = GetResourceName(FileInfo.Name);
     Order        = GetResourceOrder(FileInfo.Name);
     PublishGroup = PublishGroup.GetPublishGroup(FileInfo);
     Usage        = FileInfo.DirectoryName.Replace(PathManager.InputImagesPath.FullName, string.Empty).TrimStart(new[] { '/', '\\' });
     Md5          = null;
 }
Beispiel #8
0
        public Dictionary <ImageFile, ImageLayouter> Generate(PublishGroup publishGroup, MySortedList <ImageFile> inputFiles)
        {
            bool isPOT    = inputFiles.All(inputFile => inputFile.IsPOT);
            bool isSquare = inputFiles.All(inputFile => inputFile.IsSquare);


            var imageLayouts = LayoutImage(publishGroup, inputFiles, isPOT, isSquare);

            foreach (var imageLayouter in imageLayouts)
            {
                MergeImages(imageLayouter.Key, imageLayouter.Value);
            }

            return(imageLayouts);
        }
        private void DisplayForm(PublishGroup publishGroup)
        {
            if (IsUserAuthorized(Rock.Security.Authorization.EDIT))
            {
                iGroupImage.Required = true;
            }

            ddlAudience.BindToDefinedType(DefinedTypeCache.Get(Rock.SystemGuid.DefinedType.MARKETING_CAMPAIGN_AUDIENCE_TYPE.AsGuid()));
            ddlDayOfWeek.BindToEnum <DayOfWeek>(true);
            ltGroupName.Text                  = publishGroup.Group.Name;
            tbDescription.Text                = publishGroup.Description.IsNotNullOrWhiteSpace() ? publishGroup.Description : publishGroup.Group.Description;
            iGroupImage.BinaryFileId          = publishGroup.ImageId;
            drPublishDates.UpperValue         = publishGroup.EndDateTime;
            drPublishDates.LowerValue         = publishGroup.StartDateTime;
            ddlDayOfWeek.SelectedValue        = publishGroup.WeeklyDayOfWeek != null ? (( int )publishGroup.WeeklyDayOfWeek).ToString() : "";
            tTimeOfDay.SelectedTime           = publishGroup.WeeklyTimeOfDay;
            dpStartDate.SelectedDate          = publishGroup.StartDate;
            tbLocationName.Text               = publishGroup.MeetingLocation;
            cbRequiresRegistration.Checked    = publishGroup.RequiresRegistration;
            tbRegistrationLink.Text           = publishGroup.RegistrationLink;
            cbAllowSpouseRegistration.Checked = publishGroup.AllowSpouseRegistration;
            cbChildcareAvailable.Checked      = publishGroup.ChildcareAvailable;
            tbChildcareRegistrationLink.Text  = publishGroup.ChildcareRegistrationLink;
            if (publishGroup.ContactPersonAlias != null)
            {
                pContactPerson.SetValue(publishGroup.ContactPersonAlias.Person);
            }
            tbContactEmail.Text          = publishGroup.ContactEmail;
            tbContactPhoneNumber.Text    = publishGroup.ContactPhoneNumber;
            tbConfirmationFromName.Text  = publishGroup.ConfirmationFromName;
            tbConfirmationFromEmail.Text = publishGroup.ConfirmationEmail;
            tbConfirmationSubject.Text   = publishGroup.ConfirmationSubject;
            ceConfirmationBody.Text      = publishGroup.ConfirmationBody;

            ddlAudience.SetValues(publishGroup.AudienceValues.Select(i => i.Id.ToString()));

            if (publishGroup.Attributes.Any())
            {
                pnlAttributes.Visible = true;
                phAttributeEdits.Controls.Clear();
                Rock.Attribute.Helper.AddEditControls(publishGroup, phAttributeEdits, true);
            }
        }
Beispiel #10
0
 /// <summary>
 /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event.
 /// </summarysni>
 /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param>
 protected override void OnLoad(EventArgs e)
 {
     if (!Page.IsPostBack)
     {
         ddlStatus.BindToEnum <PublishGroupStatus>();
         PublishGroup publishGroup = GetPublishGroup();
         if (publishGroup != null)
         {
             publishGroup.LoadAttributes();
             pnlEdit.Visible = true;
             DisplayForm(publishGroup);
         }
         else
         {
             pnlEdit.Visible        = false;
             pnlSelectGroup.Visible = true;
         }
     }
 }
Beispiel #11
0
        public void UpdateSubPublishGroup(PublishGroup publishGroup)
        {
            if (PublishGroup == null || publishGroup == null)
            {
                PublishGroup = publishGroup;
            }
            else
            {
                if (PublishGroup.SubGroupName != publishGroup.GroupName) //when assign one file to multi group, it means to be a "Common" group.
                {
                    //Logger.LogAllLine("Merge to group Common from {0},{1}", mPublishGroup.GroupName, value.GroupName);
                    if (!PublishGroup.SubGroupName.Contains(publishGroup.GroupName))
                    {
                        PublishGroup.SubGroupName += publishGroup.GroupName;
                    }
                }

                //Don't change path
                //PublishGroup.PublishInfo.Merge(publishGroup.PublishInfo);
            }
        }
        /// <summary>
        /// Sends the email.
        /// </summary>
        private bool SendMessage()
        {
            var          rockContext         = new RockContext();
            var          personAliasService  = new PersonAliasService(rockContext);
            var          groupService        = new GroupService(rockContext);
            var          publishGroupService = new PublishGroupService(rockContext);
            Group        group        = null;
            PublishGroup publishGroup = null;
            bool         allowSMS     = GetAttributeValue("EnableSMS").AsBoolean();
            var          mergeFields  = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson);

            List <Person> emailRecipients = new List <Person>();
            List <Person> smsRecipients   = new List <Person>();

            // get person from url
            if (PageParameter("PersonGuid").IsNotNullOrWhiteSpace())
            {
                Guid?personGuid = this.PageParameter("PersonGuid").AsGuidOrNull();
                if (personGuid.HasValue)
                {
                    var person = personAliasService.Queryable()
                                 .Where(pa => pa.Guid == personGuid.Value)
                                 .Select(pa => pa.Person)
                                 .FirstOrDefault();
                    var phoneNumber = person.PhoneNumbers.GetFirstSmsNumber();
                    if (person != null && allowSMS && person.CommunicationPreference == CommunicationType.SMS && phoneNumber.IsNotNullOrWhiteSpace())
                    {
                        smsRecipients.Add(person);
                    }
                    else
                    {
                        emailRecipients.Add(person);
                    }
                }
            }

            // get group members from url
            if (PageParameter("GroupGuid").IsNotNullOrWhiteSpace())
            {
                Guid?groupGuid = PageParameter("GroupGuid").AsGuidOrNull();

                if (groupGuid.HasValue)
                {
                    group = groupService.Get(groupGuid.Value);

                    var leaders = GetGroupLeaders(group);
                    foreach (var leader in leaders)
                    {
                        var phonenumber = leader.PhoneNumbers.GetFirstSmsNumber();
                        if (allowSMS && leader.CommunicationPreference == CommunicationType.SMS && phonenumber.IsNotNullOrWhiteSpace())
                        {
                            smsRecipients.Add(leader);
                        }
                        else
                        {
                            emailRecipients.Add(leader);
                        }
                    }
                }
            }

            // get group members from url
            if (PageParameter("PublishGroupGuid").IsNotNullOrWhiteSpace())
            {
                Guid?publishGroupGuid = PageParameter("PublishGroupGuid").AsGuidOrNull();

                if (publishGroupGuid.HasValue)
                {
                    publishGroup = publishGroupService.Get(publishGroupGuid.Value);
                    if (publishGroup != null)
                    {
                        var person = new Person {
                            Email = publishGroup.ContactEmail
                        };
                        emailRecipients.Add(person);
                    }
                }
            }

            if (!emailRecipients.Any() && !smsRecipients.Any())
            {
                Guid defaultRecipient = this.GetAttributeValue("DefaultRecipient").AsGuid();
                var  defaultPerson    = personAliasService.Queryable()
                                        .Where(pa => pa.Guid == defaultRecipient)
                                        .Select(pa => pa.Person)
                                        .FirstOrDefault();
                if (defaultPerson != null)
                {
                    var phonenumber = defaultPerson.PhoneNumbers.GetFirstSmsNumber();
                    if (allowSMS && defaultPerson.CommunicationPreference == CommunicationType.SMS && phonenumber.IsNotNullOrWhiteSpace())
                    {
                        smsRecipients.Add(defaultPerson);
                    }
                    else
                    {
                        emailRecipients.Add(defaultPerson);
                    }
                }
            }

            if (!emailRecipients.Any() && !smsRecipients.Any())
            {
                Guid defaultGroupGuid = GetAttributeValue("LeaderGroup").AsGuid();
                var  defaultGroup     = groupService.Get(defaultGroupGuid);
                var  leaders          = GetGroupLeaders(defaultGroup);
                foreach (var leader in leaders)
                {
                    var phonenumber = leader.PhoneNumbers.GetFirstSmsNumber();
                    if (allowSMS && leader.CommunicationPreference == CommunicationType.SMS && phonenumber.IsNotNullOrWhiteSpace())
                    {
                        smsRecipients.Add(leader);
                    }
                    else
                    {
                        emailRecipients.Add(leader);
                    }
                }
            }

            if (!cpCaptcha.IsAvailable || cpCaptcha.IsResponseValid())
            {
                mergeFields.Add("NickName", tbFirstName.Text);
                mergeFields.Add("LastName", tbLastName.Text);
                mergeFields.Add("Email", tbEmail.Text);
                mergeFields.Add("PublishGroup", publishGroup);
                mergeFields.Add("Group", group);
                mergeFields.Add("Message", tbMessage.Text);
                mergeFields.Add("FromEmail", tbEmail.Text);
                mergeFields.Add("FromName", tbFirstName.Text + " " + tbLastName.Text);

                if (emailRecipients.Any())
                {
                    SendEmail(emailRecipients, mergeFields);
                }

                if (smsRecipients.Any())
                {
                    SendTextMessage(smsRecipients, mergeFields);
                }

                // display response message
                lResponse.Visible = true;
                pnlContactGroupLeaders.Visible = false;
                lResponse.Text = GetAttributeValue("ResponseMessage").ResolveMergeFields(mergeFields, GetAttributeValue("EnabledLavaCommands"));
                return(true);
            }
            else
            {
                lResponse.Visible = true;
                pnlContactGroupLeaders.Visible = true;
                lResponse.Text = "<div class='alert alert-danger'>You appear to be a computer. Check the box above and then click Submit.</div>";
                return(false);
            }
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            RockContext         rockContext         = new RockContext();
            PublishGroupService publishGroupService = new PublishGroupService(rockContext);

            publishGroup = GetPublishGroup(rockContext, publishGroupService);

            if (publishGroup.PublishGroupStatus == PublishGroupStatus.Approved)
            {
                var tempGroup = publishGroup.Group;
                publishGroup       = ( PublishGroup )publishGroup.Clone();
                publishGroup.Guid  = Guid.NewGuid();
                publishGroup.Id    = 0;
                publishGroup.Group = tempGroup;
                publishGroupService.Add(publishGroup);
            }

            publishGroup.ImageId                   = iGroupImage.BinaryFileId;
            publishGroup.PublishGroupStatus        = PublishGroupStatus.Pending;
            publishGroup.Description               = tbDescription.Text;
            publishGroup.EndDateTime               = drPublishDates.UpperValue.Value;
            publishGroup.StartDateTime             = drPublishDates.LowerValue.Value;
            publishGroup.WeeklyDayOfWeek           = ddlDayOfWeek.SelectedValueAsEnumOrNull <DayOfWeek>();
            publishGroup.WeeklyTimeOfDay           = tTimeOfDay.SelectedTime;
            publishGroup.StartDate                 = dpStartDate.SelectedDate;
            publishGroup.MeetingLocation           = tbLocationName.Text;
            publishGroup.RequiresRegistration      = cbRequiresRegistration.Checked;
            publishGroup.RegistrationLink          = cbRequiresRegistration.Checked ? tbRegistrationLink.Text : "";
            publishGroup.AllowSpouseRegistration   = cbAllowSpouseRegistration.Checked;
            publishGroup.ChildcareAvailable        = cbChildcareAvailable.Checked;
            publishGroup.ChildcareRegistrationLink = cbChildcareAvailable.Checked ? tbChildcareRegistrationLink.Text : "";
            publishGroup.AudienceValues            = GetSelectedAudiences(rockContext);
            publishGroup.ContactPersonAliasId      = pContactPerson.PersonAliasId.Value;
            publishGroup.RequestorAliasId          = CurrentPersonAliasId.Value;
            publishGroup.ContactEmail              = tbContactEmail.Text;
            publishGroup.ContactPhoneNumber        = tbContactPhoneNumber.Text;
            publishGroup.ConfirmationFromName      = tbConfirmationFromName.Text;
            publishGroup.ConfirmationEmail         = tbConfirmationFromEmail.Text;
            publishGroup.ConfirmationSubject       = tbConfirmationSubject.Text;
            publishGroup.ConfirmationBody          = ceConfirmationBody.Text;

            if (publishGroup.Id == 0)
            {
                publishGroupService.Add(publishGroup);
            }

            if (IsUserAuthorized(Rock.Security.Authorization.EDIT))
            {
                publishGroup.PublishGroupStatus = PublishGroupStatus.Approved;
                publishGroup.Group.IsActive     = true;
                publishGroup.Group.IsPublic     = true;
                //remove all other publish groups for this computer
                publishGroupService.DeleteRange(publishGroupService.Queryable().Where(pg => pg.GroupId == publishGroup.GroupId && pg.Id != publishGroup.Id));
            }
            ;

            //Set the binary file to not be temporary
            if (publishGroup.ImageId.HasValue)
            {
                BinaryFileService binaryFileService = new BinaryFileService(rockContext);
                var binaryFile = binaryFileService.Get(publishGroup.ImageId.Value);
                if (binaryFile != null)
                {
                    binaryFile.IsTemporary = false;
                }
            }

            rockContext.SaveChanges();

            publishGroup.LoadAttributes(rockContext);

            if (publishGroup.Attributes.Any())
            {
                Rock.Attribute.Helper.GetEditValues(phAttributeEdits, publishGroup);
                publishGroup.SaveAttributeValues(rockContext);
            }

            if (IsUserAuthorized(Rock.Security.Authorization.EDIT))
            {
                publishGroup.LaunchWorkflow(GetAttributeValue("CompleteWorkflow").AsGuidOrNull());
            }
            else
            {
                publishGroup.LaunchWorkflow(GetAttributeValue("RequestWorkflow").AsGuidOrNull());
            }
            NavigateToParentPage();
        }
Beispiel #14
0
        /// <summary>Displays the form.</summary>
        /// <param name="publishGroup">The publish group.</param>
        private void DisplayForm(PublishGroup publishGroup)
        {
            if (IsUserAuthorized(Rock.Security.Authorization.EDIT))
            {
                btnSave.Text            = "Save";
                btnDraft.Visible        = false;
                ddlStatus.SelectedValue = publishGroup.PublishGroupStatus.ConvertToInt().ToString();
            }
            else
            {
                ddlStatus.Visible = false;
            }

            ddlAudience.BindToDefinedType(DefinedTypeCache.Get(Rock.SystemGuid.DefinedType.MARKETING_CAMPAIGN_AUDIENCE_TYPE.AsGuid()));
            ddlDayOfWeek.BindToEnum <DayOfWeek>(true);

            var groupPageId = PageCache.Get(Rock.SystemGuid.Page.GROUP_VIEWER.AsGuid()).Id;

            tbName.Text = publishGroup.Title;
            tbSlug.Text = GetSlug(publishGroup);
            if (tbSlug.Text.IsNotNullOrWhiteSpace())
            {
                lSlug.Visible = true;
                lSlug.Text    = GetAttributeValue(AttributeKeys.GroupRegistrationUrl) + tbSlug.Text;
            }

            ltGroupName.Text              = string.Format("<a href='/page/{0}' target='_blank'>{1}</a>", groupPageId, publishGroup.Group.Name);
            tbDescription.Text            = publishGroup.Description.IsNotNullOrWhiteSpace() ? publishGroup.Description : publishGroup.Group.Description;
            iGroupImage.BinaryFileId      = publishGroup.ImageId;
            iGroupImage.Required          = publishGroup.PublishGroupStatus == PublishGroupStatus.Approved;
            drPublishDates.UpperValue     = publishGroup.EndDateTime;
            drPublishDates.LowerValue     = publishGroup.StartDateTime;
            ddlDayOfWeek.SelectedValue    = publishGroup.WeeklyDayOfWeek != null ? (( int )publishGroup.WeeklyDayOfWeek).ToString() : "";
            tTimeOfDay.SelectedTime       = publishGroup.WeeklyTimeOfDay;
            dpStartDate.SelectedDate      = publishGroup.StartDate;
            tbCustomSchedule.Text         = publishGroup.CustomSchedule;
            cbIsHidden.Checked            = publishGroup.IsHidden;
            tbLocationName.Text           = publishGroup.MeetingLocation;
            ddlRegistration.SelectedValue = publishGroup.RegistrationRequirement.ConvertToInt().ToString();

            SwitchRegistrationRequirement(publishGroup.RegistrationRequirement);
            tbRegistrationDetails.Text = publishGroup.RegistrationDescription;

            ddlChildcareNeedRegistration.SelectedValue = publishGroup.ChildcareRegistrationLink.IsNotNullOrWhiteSpace() ? "1" :
                                                         publishGroup.ChildcareRegistrationDescription.IsNotNullOrWhiteSpace() ? "2" : "";
            SwitchChildcareOptions(publishGroup.ChildcareOptions);
            tbChildcareRegistrationDetails.Text = publishGroup.ChildcareRegistrationDescription;

            CheckRegistationConflict();

            tbRegistrationLink.Text           = publishGroup.RegistrationLink;
            cbAllowSpouseRegistration.Checked = publishGroup.AllowSpouseRegistration;
            tbRegistrationDetails.Text        = publishGroup.RegistrationDescription;

            ddlChildcareOptions.SelectedValue = publishGroup.ChildcareOptions.ConvertToInt().ToString();
            tbChildcareRegistrationLink.Text  = publishGroup.ChildcareRegistrationLink;
            if (publishGroup.ContactPersonAlias != null)
            {
                pContactPerson.SetValue(publishGroup.ContactPersonAlias.Person);
            }
            tbContactEmail.Text          = publishGroup.ContactEmail;
            tbContactPhoneNumber.Text    = publishGroup.ContactPhoneNumber;
            tbConfirmationFromName.Text  = publishGroup.ConfirmationFromName;
            tbConfirmationFromEmail.Text = publishGroup.ConfirmationEmail;
            tbConfirmationSubject.Text   = publishGroup.ConfirmationSubject;
            ceConfirmationBody.Text      = publishGroup.ConfirmationBody;

            ddlAudience.SetValues(publishGroup.AudienceValues.Select(i => i.Id.ToString()));

            if (publishGroup.Attributes.Any())
            {
                pnlAttributes.Visible = true;
                phAttributeEdits.Controls.Clear();
                Rock.Attribute.Helper.AddEditControls(publishGroup, phAttributeEdits, true);
            }
        }
        /// <summary>
        /// Checks the settings.  If false is returned, it's expected that the caller will make
        /// the nbNotice visible to inform the user of the "settings" error.
        /// </summary>
        /// <returns>true if settings are valid; false otherwise</returns>
        private bool CheckSettings()
        {
            _rockContext = _rockContext ?? new RockContext();


            _autoFill = GetAttributeValue("AutoFillForm").AsBoolean();

            string registerButtonText = GetAttributeValue("RegisterButtonAltText");

            if (string.IsNullOrWhiteSpace(registerButtonText))
            {
                registerButtonText = "Register";
            }
            btnRegister.Text = registerButtonText;

            var publishGroupService = new PublishGroupService(_rockContext);

            if (_publishGroup == null)
            {
                var publishGroupGuid = PageParameter("PublishGroup").AsGuidOrNull();
                if (publishGroupGuid.HasValue)
                {
                    _publishGroup = publishGroupService.Get(publishGroupGuid.Value);
                }
                else
                {
                    var slug = PageParameter("PublishGroup").ToLower();
                    _publishGroup = publishGroupService.Queryable().Where(pg => pg.Slug == slug).FirstOrDefault();
                }
            }

            if (_publishGroup == null || _publishGroup.PublishGroupStatus != PublishGroupStatus.Approved)
            {
                nbNotice.Heading = "Unknown Group";
                nbNotice.Text    = "<p>This page requires a valid group identifying parameter and there was not one provided.</p>";
                nbNotice.Visible = true;
                return(false);
            }

            if (_publishGroup.RegistrationLink.IsNotNullOrWhiteSpace())
            {
                Response.Redirect(_publishGroup.RegistrationLink, false);
                Context.ApplicationInstance.CompleteRequest();
                return(false);
            }

            _showSpouse       = _publishGroup.AllowSpouseRegistration;
            _defaultGroupRole = _publishGroup.Group.GroupType.DefaultGroupRole;


            _dvcConnectionStatus = DefinedValueCache.Get(GetAttributeValue("ConnectionStatus").AsGuid());
            if (_dvcConnectionStatus == null)
            {
                nbNotice.Heading = "Invalid Connection Status";
                nbNotice.Text    = "<p>The selected Connection Status setting does not exist.</p>";
                return(false);
            }

            _dvcRecordStatus = DefinedValueCache.Get(GetAttributeValue("RecordStatus").AsGuid());
            if (_dvcRecordStatus == null)
            {
                nbNotice.Heading = "Invalid Record Status";
                nbNotice.Text    = "<p>The selected Record Status setting does not exist.</p>";
                return(false);
            }

            _married         = DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.PERSON_MARITAL_STATUS_MARRIED.AsGuid());
            _homeAddressType = DefinedValueCache.Get(Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_HOME.AsGuid());
            _familyType      = GroupTypeCache.Get(Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY.AsGuid());
            _adultRole       = _familyType.Roles.FirstOrDefault(r => r.Guid.Equals(Rock.SystemGuid.GroupRole.GROUPROLE_FAMILY_MEMBER_ADULT.AsGuid()));

            if (_married == null || _homeAddressType == null || _familyType == null || _adultRole == null)
            {
                nbNotice.Heading = "Missing System Value";
                nbNotice.Text    = "<p>There is a missing or invalid system value. Check the settings for Marital Status of 'Married', Location Type of 'Home', Group Type of 'Family', and Family Group Role of 'Adult'.</p>";
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Sends the email.
        /// </summary>
        private bool SendEmail()
        {
            var          rockContext         = new RockContext();
            var          personAliasService  = new PersonAliasService(rockContext);
            var          groupService        = new GroupService(rockContext);
            var          publishGroupService = new PublishGroupService(rockContext);
            Group        group        = null;
            PublishGroup publishGroup = null;
            var          mergeFields  = Rock.Lava.LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson);

            List <RecipientData> recipients = new List <RecipientData>();

            // get person from url
            if (PageParameter("PersonGuid").IsNotNullOrWhiteSpace())
            {
                Guid?personGuid = this.PageParameter("PersonGuid").AsGuidOrNull();
                if (personGuid.HasValue)
                {
                    var personAlias = personAliasService.Get(personGuid.Value);
                    if (personAlias != null)
                    {
                        recipients.Add(new RecipientData(new CommunicationRecipient {
                            PersonAlias = personAlias
                        }, mergeFields));
                    }
                }
            }

            // get group members from url
            if (PageParameter("GroupGuid").IsNotNullOrWhiteSpace())
            {
                Guid?groupGuid = PageParameter("GroupGuid").AsGuidOrNull();

                if (groupGuid.HasValue)
                {
                    group = groupService.Get(groupGuid.Value);

                    var leaders = GetGroupLeaders(group);
                    foreach (var leader in leaders)
                    {
                        recipients.Add(new RecipientData(new CommunicationRecipient {
                            PersonAlias = leader.PrimaryAlias
                        }, mergeFields));
                    }
                }
            }

            // get group members from url
            if (PageParameter("PublishGroupGuid").IsNotNullOrWhiteSpace())
            {
                Guid?publishGroupGuid = PageParameter("PublishGroupGuid").AsGuidOrNull();

                if (publishGroupGuid.HasValue)
                {
                    publishGroup = publishGroupService.Get(publishGroupGuid.Value);
                    if (publishGroup != null)
                    {
                        recipients.Add(new RecipientData(publishGroup.ContactEmail, mergeFields));
                    }
                }
            }

            if (!recipients.Any())
            {
                Guid defaultRecipient = this.GetAttributeValue("DefaultRecipient").AsGuid();
                var  defaultPerson    = personAliasService.Get(defaultRecipient);
                if (defaultPerson != null)
                {
                    recipients.Add(new RecipientData(new CommunicationRecipient {
                        PersonAlias = defaultPerson
                    }, mergeFields));
                }
            }

            if (!recipients.Any())
            {
                Guid defaultGroupGuid = GetAttributeValue("LeaderGroup").AsGuid();
                var  defaultGroup     = groupService.Get(defaultGroupGuid);
                var  leaders          = GetGroupLeaders(defaultGroup);
                foreach (var leader in leaders)
                {
                    recipients.Add(new RecipientData(new CommunicationRecipient {
                        PersonAlias = leader.PrimaryAlias
                    }, mergeFields));
                }
            }

            if (!cpCaptcha.IsAvailable || cpCaptcha.IsResponseValid())
            {
                mergeFields.Add("NickName", tbFirstName.Text);
                mergeFields.Add("LastName", tbLastName.Text);
                mergeFields.Add("Email", tbEmail.Text);
                mergeFields.Add("PublishGroup", publishGroup);
                mergeFields.Add("Group", group);
                mergeFields.Add("Message", tbMessage.Text);
                mergeFields.Add("FromEmail", tbEmail.Text);
                mergeFields.Add("FromName", tbFirstName.Text + " " + tbLastName.Text);

                var message = new RockEmailMessage();
                message.EnabledLavaCommands = GetAttributeValue("EnabledLavaCommands");

                // send email
                foreach (var recipient in recipients)
                {
                    message.AddRecipient(recipient);
                }

                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();

                // set response

                // display response message
                lResponse.Visible = true;
                pnlContactGroupLeaders.Visible = false;
                lResponse.Text = GetAttributeValue("ResponseMessage").ResolveMergeFields(mergeFields, GetAttributeValue("EnabledLavaCommands"));
                return(true);
            }
            else
            {
                lResponse.Visible = true;
                pnlContactGroupLeaders.Visible = true;
                lResponse.Text = "<div class='alert alert-danger'>You appear to be a computer. Check the box above and then click Submit.</div>";
                return(false);
            }
        }
Beispiel #17
0
        /// <summary>Saves the specified publish group status.</summary>
        /// <param name="publishGroupStatus">The publish group status.</param>
        private void Save(PublishGroupStatus publishGroupStatus)
        {
            RockContext         rockContext         = new RockContext();
            PublishGroupService publishGroupService = new PublishGroupService(rockContext);
            PublishGroup        publishGroup        = GetPublishGroup(rockContext, publishGroupService);

            var slug = tbSlug.Text.ToLower().RemoveAllNonAlphaNumericCharacters();

            tbSlug.Text = slug;

            //Test for already taken Slugs
            var isDuplicateSlug = publishGroupService.Queryable()
                                  .Where(pg => pg.Slug == slug && pg.Id != publishGroup.Id && pg.GroupId != publishGroup.Group.Id)
                                  .Any();

            if (isDuplicateSlug)
            {
                nbSlug.Visible = true;
                return;
            }
            else
            {
                nbSlug.Visible    = false;
                publishGroup.Slug = slug;
            }


            bool isApprover = false;

            if (IsUserAuthorized(Rock.Security.Authorization.EDIT))
            {
                isApprover = true;
            }

            if (isApprover)
            {
                publishGroupStatus = ddlStatus.SelectedValueAsEnum <PublishGroupStatus>();
            }
            else if (publishGroupStatus != PublishGroupStatus.Draft)
            {
                if (ddlRegistration.SelectedValue == "4" ||
                    (ddlChildcareOptions.SelectedValue == "2" && ddlChildcareNeedRegistration.SelectedValue == "2"))     //Childcare required && Registration needed.
                {
                    publishGroupStatus = PublishGroupStatus.PendingIT;
                }
            }

            if (publishGroup.PublishGroupStatus == PublishGroupStatus.Approved)
            {
                var tempGroup = publishGroup.Group;
                publishGroup       = ( PublishGroup )publishGroup.Clone();
                publishGroup.Guid  = Guid.NewGuid();
                publishGroup.Id    = 0;
                publishGroup.Group = tempGroup;
                publishGroupService.Add(publishGroup);
            }

            publishGroup.Name                             = tbName.Text;
            publishGroup.ImageId                          = iGroupImage.BinaryFileId;
            publishGroup.PublishGroupStatus               = publishGroupStatus;
            publishGroup.Description                      = tbDescription.Text;
            publishGroup.EndDateTime                      = drPublishDates.UpperValue.Value;
            publishGroup.StartDateTime                    = drPublishDates.LowerValue.Value;
            publishGroup.WeeklyDayOfWeek                  = ddlDayOfWeek.SelectedValueAsEnumOrNull <DayOfWeek>();
            publishGroup.WeeklyTimeOfDay                  = tTimeOfDay.SelectedTime;
            publishGroup.CustomSchedule                   = tbCustomSchedule.Text;
            publishGroup.StartDate                        = dpStartDate.SelectedDate;
            publishGroup.MeetingLocation                  = tbLocationName.Text;
            publishGroup.IsHidden                         = cbIsHidden.Checked;
            publishGroup.RegistrationRequirement          = ( RegistrationRequirement )ddlRegistration.SelectedValue.AsInteger();
            publishGroup.RequiresRegistration             = ddlRegistration.SelectedValue.AsInteger() > 0; //This is obsolete but left in for backward compatability
            publishGroup.RegistrationLink                 = publishGroup.RegistrationRequirement == RegistrationRequirement.CustomRegistration ? tbRegistrationLink.Text : "";
            publishGroup.RegistrationDescription          = tbRegistrationDetails.Text;
            publishGroup.ChildcareRegistrationDescription = ddlChildcareNeedRegistration.SelectedValue == "2" ? tbChildcareRegistrationDetails.Text : "";
            publishGroup.AllowSpouseRegistration          = cbAllowSpouseRegistration.Checked;
            publishGroup.ChildcareOptions                 = ( ChildcareOptions )ddlChildcareOptions.SelectedValue.AsInteger();
            publishGroup.ChildcareAvailable               = ddlChildcareOptions.SelectedValue.AsInteger() > 0;
            publishGroup.ChildcareRegistrationLink        = publishGroup.ChildcareAvailable ? tbChildcareRegistrationLink.Text : "";
            publishGroup.AudienceValues                   = GetSelectedAudiences(rockContext);
            publishGroup.ContactPersonAliasId             = pContactPerson.PersonAliasId.Value;
            publishGroup.RequestorAliasId                 = CurrentPersonAliasId.Value;
            publishGroup.ContactEmail                     = tbContactEmail.Text;
            publishGroup.ContactPhoneNumber               = tbContactPhoneNumber.Text;
            publishGroup.ConfirmationFromName             = tbConfirmationFromName.Text;
            publishGroup.ConfirmationEmail                = tbConfirmationFromEmail.Text;
            publishGroup.ConfirmationSubject              = tbConfirmationSubject.Text;
            publishGroup.ConfirmationBody                 = ceConfirmationBody.Text;

            if (publishGroup.Id == 0)
            {
                publishGroupService.Add(publishGroup);
            }

            if (isApprover && publishGroupStatus == PublishGroupStatus.Approved)
            {
                publishGroup.Group.IsActive = true;
                publishGroup.Group.IsPublic = true;
                //remove all other publish groups for this computer
                publishGroupService.DeleteRange(publishGroupService.Queryable().Where(pg => pg.GroupId == publishGroup.GroupId && pg.Id != publishGroup.Id));
            }
            ;

            //Set the binary file to not be temporary
            if (publishGroup.ImageId.HasValue)
            {
                BinaryFileService binaryFileService = new BinaryFileService(rockContext);
                var binaryFile = binaryFileService.Get(publishGroup.ImageId.Value);
                if (binaryFile != null)
                {
                    binaryFile.IsTemporary = false;
                }
            }

            rockContext.SaveChanges();

            publishGroup.LoadAttributes(rockContext);

            if (publishGroup.Attributes.Any())
            {
                Rock.Attribute.Helper.GetEditValues(phAttributeEdits, publishGroup);
                publishGroup.SaveAttributeValues(rockContext);
            }

            if (publishGroup.PublishGroupStatus != PublishGroupStatus.Draft)
            {
                publishGroup.LaunchWorkflow(GetAttributeValue(AttributeKeys.Workflow).AsGuidOrNull());
            }

            NavigateToParentPage(new Dictionary <string, string> {
                { "GroupId", publishGroup.GroupId.ToString() }
            });
        }