Exemplo n.º 1
0
        /// <summary>
        /// Handles the Delete event of the gMarketingCampaignAds control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param>
        protected void gMarketingCampaignAds_Delete(object sender, RowEventArgs e)
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
            MarketingCampaignAd        marketingCampaignAd        = marketingCampaignAdService.Get((int)e.RowKeyValue);

            marketingCampaignAdService.Delete(marketingCampaignAd, CurrentPersonId);
            marketingCampaignAdService.Save(marketingCampaignAd, CurrentPersonId);
            BindMarketingCampaignAdsGrid();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Binds the marketing campaign ads grid.
        /// </summary>
        private void BindMarketingCampaignAdsGrid()
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
            int marketingCampaignId = int.Parse(hfMarketingCampaignId.Value);
            var qry = marketingCampaignAdService.Queryable().Where(a => a.MarketingCampaignId.Equals(marketingCampaignId));

            gMarketingCampaignAds.DataSource = qry.OrderBy(a => a.StartDate).ThenBy(a => a.Priority).ThenBy(a => a.MarketingCampaignAdType.Name).ToList();
            gMarketingCampaignAds.DataBind();
        }
Exemplo n.º 3
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (!Page.IsPostBack)
            {
                int?adId = PageParameter("Ad").AsInteger();
                if (adId.HasValue)
                {
                    MarketingCampaignAd ad = new MarketingCampaignAdService(new RockContext()).Get(adId.Value);
                    if (ad != null)
                    {
                        // TODO: Still need to add checks for Ad approval, ad type, start/end date etc.

                        var dict = ad.ToLiquid() as Dictionary <string, object>;

                        string layout  = GetAttributeValue("Layout");
                        string content = layout.ResolveMergeFields(dict);

                        // check for errors
                        if (content.Contains("No such template"))
                        {
                            // get template name
                            Match match = Regex.Match(GetAttributeValue("Template"), @"'([^']*)");
                            if (match.Success)
                            {
                                content = String.Format("<div class='alert alert-warning'><h4>Warning</h4>Could not find the template _{1}.liquid in {0}.</div>", ResolveRockUrl("~~/Assets/Liquid"), match.Groups[1].Value);
                            }
                            else
                            {
                                content = "<div class='alert alert-warning'><h4>Warning</h4>Unable to parse the template name from settings.</div>";
                            }
                        }

                        if (content.Contains("error"))
                        {
                            content = "<div class='alert alert-warning'><h4>Warning</h4>" + content + "</div>";
                        }

                        phDetails.Controls.Add(new LiteralControl(content));
                    }
                }
            }
        }
Exemplo n.º 4
0
        protected override void OnLoad( EventArgs e )
        {
            base.OnLoad( e );

            if ( !Page.IsPostBack )
            {
                int? adId = PageParameter( "Ad" ).AsInteger();
                if ( adId.HasValue )
                {
                    MarketingCampaignAd ad = new MarketingCampaignAdService( new RockContext() ).Get( adId.Value );
                    if ( ad != null )
                    {
                        // TODO: Still need to add checks for Ad approval, ad type, start/end date etc.

                        var dict = ad.ToLiquid() as Dictionary<string, object>;

                        string layout = GetAttributeValue( "Layout" );
                        string content = layout.ResolveMergeFields( dict );

                        // check for errors
                        if (content.Contains("No such template"))
                        {
                            // get template name
                            Match match = Regex.Match(GetAttributeValue("Template"), @"'([^']*)");
                            if (match.Success)
                            {
                                content = String.Format("<div class='alert alert-warning'><h4>Warning</h4>Could not find the template _{1}.liquid in {0}.</div>", ResolveRockUrl("~~/Assets/Liquid"), match.Groups[1].Value);
                            }
                            else
                            {
                                content = "<div class='alert alert-warning'><h4>Warning</h4>Unable to parse the template name from settings.</div>";
                            }
                        }

                        if (content.Contains("error"))
                        {
                            content = "<div class='alert alert-warning'><h4>Warning</h4>" + content + "</div>";
                        }

                        phDetails.Controls.Add( new LiteralControl( content ) );
                    }
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Handles the Delete event of the gMarketingCampaignAds control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param>
        protected void gMarketingCampaignAds_Delete( object sender, RowEventArgs e )
        {
            var rockContext = new RockContext();
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService( rockContext );

            MarketingCampaignAd marketingCampaignAd = marketingCampaignAdService.Get( e.RowKeyId );
            if ( marketingCampaignAd != null )
            {
                string errorMessage;
                if ( !marketingCampaignAdService.CanDelete( marketingCampaignAd, out errorMessage ) )
                {
                    mdGridWarning.Show( errorMessage, ModalAlertType.Information );
                    return;
                }

                marketingCampaignAdService.Delete( marketingCampaignAd );
                rockContext.SaveChanges();
            }

            BindGrid();
        }
        /// <summary>
        /// Handles the Delete event of the gMarketingCampaignAds control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param>
        protected void gMarketingCampaignAds_Delete( object sender, RowEventArgs e )
        {
            var rockContext = new RockContext();
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService( rockContext );

            MarketingCampaignAd marketingCampaignAd = marketingCampaignAdService.Get( e.RowKeyId );
            if ( marketingCampaignAd != null )
            {
                string errorMessage;
                if ( !marketingCampaignAdService.CanDelete( marketingCampaignAd, out errorMessage ) )
                {
                    mdGridWarning.Show( errorMessage, ModalAlertType.Information );
                    return;
                }

                marketingCampaignAdService.Delete( marketingCampaignAd );
                rockContext.SaveChanges();
            }

            BindGrid();
        }
Exemplo n.º 7
0
        /// <summary>
        /// Handles the Delete event of the gMarketingCampaignAds control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param>
        protected void gMarketingCampaignAds_Delete(object sender, RowEventArgs e)
        {
            RockTransactionScope.WrapTransaction(() =>
            {
                MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
                MarketingCampaignAd marketingCampaignAd = marketingCampaignAdService.Get(e.RowKeyId);
                if (marketingCampaignAd != null)
                {
                    string errorMessage;
                    if (!marketingCampaignAdService.CanDelete(marketingCampaignAd, out errorMessage))
                    {
                        mdGridWarning.Show(errorMessage, ModalAlertType.Information);
                        return;
                    }

                    marketingCampaignAdService.Delete(marketingCampaignAd, CurrentPersonId);
                    marketingCampaignAdService.Save(marketingCampaignAd, CurrentPersonId);
                }
            });

            BindGrid();
        }
Exemplo n.º 8
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (!Page.IsPostBack)
            {
                int?adId = PageParameter("Ad").AsInteger();
                if (adId.HasValue)
                {
                    MarketingCampaignAd ad = new MarketingCampaignAdService().Get(adId.Value);
                    if (ad != null)
                    {
                        // TODO: Still need to add checks for Ad approval, ad type, start/end date etc.

                        var dict = ad.ToLiquid() as Dictionary <string, object>;

                        string layout       = GetAttributeValue("Layout");
                        string mergedLayout = layout.ResolveMergeFields(dict);

                        phDetails.Controls.Add(new LiteralControl(mergedLayout));
                    }
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Binds the marketing campaign ads grid.
        /// </summary>
        private void BindGrid()
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
            var qry = marketingCampaignAdService.Queryable("MarketingCampaign, MarketingCampaignAdType");

            // limit to current marketingCampaign context (if there is one)
            int?marketingCampaignId = hfMarketingCampaignId.Value.AsInteger(false);

            if (marketingCampaignId.HasValue)
            {
                qry = qry.Where(a => a.MarketingCampaignId == marketingCampaignId);
            }

            // Approval Status
            int approvalStatus = ddlApprovalStatus.SelectedValueAsInt(false) ?? Rock.Constants.All.Id;

            if (approvalStatus != Rock.Constants.All.Id)
            {
                MarketingCampaignAdStatus marketingCampaignAdStatus = ddlApprovalStatus.SelectedValueAsEnum <MarketingCampaignAdStatus>();
                qry = qry.Where(a => a.MarketingCampaignAdStatus == marketingCampaignAdStatus);
            }

            // Priority Range
            if (pPriorityRange.LowerValue.HasValue)
            {
                int lowerValue = pPriorityRange.LowerValue.Value;
                qry = qry.Where(a => a.Priority >= lowerValue);
            }

            if (pPriorityRange.UpperValue.HasValue)
            {
                int upperValue = pPriorityRange.UpperValue.Value;
                qry = qry.Where(a => a.Priority <= upperValue);
            }

            // Ad Type
            int adTypeId = ddlAdType.SelectedValueAsInt() ?? Rock.Constants.All.Id;

            if (adTypeId != Rock.Constants.All.Id)
            {
                qry = qry.Where(a => a.MarketingCampaignAdTypeId == adTypeId);
            }

            // Date Range
            if (pDateRange.LowerValue.HasValue)
            {
                DateTime startDate = pDateRange.LowerValue.Value.Date;
                qry = qry.Where(a => a.StartDate >= startDate);
            }

            if (pDateRange.UpperValue.HasValue)
            {
                // add a whole day to the selected endDate since users will expect to see all the stuff that happened
                // on the endDate up until the very end of that day.

                // calculate the query endDate before including it in the qry statement to avoid Linq error
                var endDate = pDateRange.UpperValue.Value.AddDays(1);
                qry = qry.Where(a => a.StartDate < endDate);
            }

            SortProperty sortProperty = gMarketingCampaignAds.SortProperty;

            if (sortProperty != null)
            {
                qry = qry.Sort(sortProperty);
            }
            else
            {
                qry = qry.OrderBy(a => a.StartDate).ThenBy(a => a.Priority).ThenBy(a => a.MarketingCampaignAdType.Name);
            }

            gMarketingCampaignAds.DataSource = qry.ToList();
            gMarketingCampaignAds.DataBind();
        }
Exemplo n.º 10
0
        /// <summary>
        /// Renders the Ads using Liquid.
        /// </summary>
        private void Render()
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
            var qry = marketingCampaignAdService.Queryable();

            // limit to date range
            DateTime currentDateTime = DateTime.Now.Date;

            qry = qry.Where(a => (a.StartDate <= currentDateTime) && (currentDateTime <= a.EndDate));

            // limit to approved
            qry = qry.Where(a => a.MarketingCampaignAdStatus == MarketingCampaignAdStatus.Approved);

            /* Block Attributes */

            // Audience
            string audience = GetAttributeValue("Audience");

            if (!string.IsNullOrWhiteSpace(audience))
            {
                var idList = new List <int>();
                foreach (string guid in audience.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    var definedValue = DefinedValueCache.Read(new Guid(guid));
                    if (definedValue != null)
                    {
                        idList.Add(definedValue.Id);
                    }
                }
                qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignAudiences.Any(x => idList.Contains(x.AudienceTypeValueId)));
            }

            // AudiencePrimarySecondary
            string audiencePrimarySecondary = GetAttributeValue("AudiencePrimarySecondary");

            if (!string.IsNullOrWhiteSpace(audiencePrimarySecondary))
            {
                // 1 = Primary, 2 = Secondary
                List <int> idlist = audiencePrimarySecondary.SplitDelimitedValues().Select(a => int.Parse(a)).ToList();

                if (idlist.Contains(1) && !idlist.Contains(2))
                {
                    // only show to Primary Audiences
                    qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignAudiences.Any(x => x.IsPrimary == true));
                }
                else if (idlist.Contains(2) && !idlist.Contains(1))
                {
                    // only show to Secondary Audiences
                    qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignAudiences.Any(x => x.IsPrimary == false));
                }
            }

            // Campuses
            string campuses = GetAttributeValue("Campuses");

            if (!string.IsNullOrWhiteSpace(campuses))
            {
                List <int> idlist = campuses.SplitDelimitedValues().Select(a => int.Parse(a)).ToList();
                qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignCampuses.Any(x => idlist.Contains(x.CampusId)));
            }

            // Ad Types
            string adtypes = GetAttributeValue("AdTypes");

            if (!string.IsNullOrWhiteSpace(adtypes))
            {
                List <int> idlist = adtypes.SplitDelimitedValues().Select(a => int.Parse(a)).ToList();
                qry = qry.Where(a => idlist.Contains(a.MarketingCampaignAdTypeId));
            }

            // Image Types
            string        imageTypes      = GetAttributeValue("ImageTypes");
            List <string> imageTypeFilter = null;

            if (!string.IsNullOrWhiteSpace(imageTypes))
            {
                imageTypeFilter = imageTypes.SplitDelimitedValues().ToList();
            }

            // Campus Context
            Campus campusContext = this.ContextEntity <Campus>();

            if (campusContext != null)
            {
                // limit to ads that are targeted to the current campus context
                qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignCampuses.Any(x => x.Id.Equals(campusContext.Id)));
            }


            // Max Items
            string maxItems   = GetAttributeValue("MaxItems");
            int?   maxAdCount = null;

            if (!string.IsNullOrWhiteSpace(maxItems))
            {
                int parsedCount = 0;
                if (int.TryParse(maxItems, out parsedCount))
                {
                    maxAdCount = parsedCount;
                }
            }

            List <MarketingCampaignAd> marketingCampaignAdList;

            qry = qry.OrderBy(a => a.Priority).ThenBy(a => a.StartDate).ThenBy(a => a.MarketingCampaign.Title);
            if (maxAdCount == null)
            {
                marketingCampaignAdList = qry.ToList();
            }
            else
            {
                marketingCampaignAdList = qry.Take(maxAdCount.Value).ToList();
            }

            // build dictionary for liquid
            var ads = new List <Dictionary <string, object> >();

            foreach (var marketingCampaignAd in marketingCampaignAdList)
            {
                var ad = new Dictionary <string, object>();

                // DetailPage
                string detailPageUrl  = string.Empty;
                string detailPageGuid = GetAttributeValue("DetailPage");
                if (!string.IsNullOrWhiteSpace(detailPageGuid))
                {
                    Rock.Model.Page detailPage = new PageService().Get(new Guid(detailPageGuid));
                    if (detailPage != null)
                    {
                        Dictionary <string, string> queryString = new Dictionary <string, string>();
                        queryString.Add("ad", marketingCampaignAd.Id.ToString());
                        detailPageUrl = new PageReference(detailPage.Id, 0, queryString).BuildUrl();
                    }
                }

                string eventGroupName = marketingCampaignAd.MarketingCampaign.EventGroup != null ? marketingCampaignAd.MarketingCampaign.EventGroup.Name : string.Empty;

                // Marketing Campaign Fields
                ad.Add("Title", marketingCampaignAd.MarketingCampaign.Title);
                ad.Add("ContactEmail", marketingCampaignAd.MarketingCampaign.ContactEmail);
                ad.Add("ContactFullName", marketingCampaignAd.MarketingCampaign.ContactFullName);
                ad.Add("ContactPhoneNumber", marketingCampaignAd.MarketingCampaign.ContactPhoneNumber);
                ad.Add("LinkedEvent", eventGroupName);

                // Specific Ad Fields
                ad.Add("AdType", marketingCampaignAd.MarketingCampaignAdType.Name);
                ad.Add("StartDate", marketingCampaignAd.StartDate.ToString());
                ad.Add("EndDate", marketingCampaignAd.EndDate.ToString());
                ad.Add("Priority", marketingCampaignAd.Priority);
                ad.Add("Url", marketingCampaignAd.Url);
                ad.Add("DetailPageUrl", detailPageUrl);

                // Ad Attributes
                var attributes = new List <Dictionary <string, object> >();
                ad.Add("Attributes", attributes);

                marketingCampaignAd.LoadAttributes();
                Rock.Attribute.Helper.AddDisplayControls(marketingCampaignAd, phContent);

                // create image resize width/height from block settings
                Dictionary <string, Rock.Field.ConfigurationValue> imageConfig = new Dictionary <string, Rock.Field.ConfigurationValue>();
                if (!string.IsNullOrWhiteSpace(GetAttributeValue("ImageWidth")) &&
                    Int32.Parse(GetAttributeValue("ImageWidth")) != Int16.MinValue)
                {
                    imageConfig.Add("width", new Rock.Field.ConfigurationValue(GetAttributeValue("ImageWidth")));
                }

                if (!string.IsNullOrWhiteSpace(GetAttributeValue("ImageHeight")) &&
                    Int32.Parse(GetAttributeValue("ImageHeight")) != Int16.MinValue)
                {
                    imageConfig.Add("height", new Rock.Field.ConfigurationValue(GetAttributeValue("ImageHeight")));
                }

                foreach (var item in marketingCampaignAd.Attributes)
                {
                    AttributeCache        attribute       = item.Value;
                    List <AttributeValue> attributeValues = marketingCampaignAd.AttributeValues[attribute.Key];
                    foreach (AttributeValue attributeValue in attributeValues)
                    {
                        string valueHtml = string.Empty;

                        // If Block Attributes limit image types, limit images
                        if (attribute.FieldType.Guid.Equals(new Guid(Rock.SystemGuid.FieldType.IMAGE)))
                        {
                            if (imageTypeFilter != null)
                            {
                                if (!imageTypeFilter.Contains(attribute.Key))
                                {
                                    // skip to next attribute if this is an image attribute and it doesn't match the image key filter
                                    continue;
                                }
                                else
                                {
                                    valueHtml = attribute.FieldType.Field.FormatValue(this, attributeValue.Value, imageConfig, false);
                                }
                            }
                        }
                        else
                        {
                            valueHtml = attribute.FieldType.Field.FormatValue(this, attributeValue.Value, attribute.QualifierValues, false);
                        }

                        var valueNode = new Dictionary <string, object>();
                        valueNode.Add("Key", attribute.Key);
                        valueNode.Add("Name", attribute.Name);
                        valueNode.Add("Value", valueHtml);
                        attributes.Add(valueNode);
                    }
                }

                ads.Add(ad);
            }

            var data = new Dictionary <string, object>();

            data.Add("Ads", ads);
            data.Add("ApplicationPath", HttpRuntime.AppDomainAppVirtualPath);

            string showDebugValue = GetAttributeValue("ShowDebug") ?? string.Empty;
            bool   showDebug      = showDebugValue.Equals("true", StringComparison.OrdinalIgnoreCase);

            string content;

            try
            {
                content = GetTemplate().Render(Hash.FromDictionary(data));
            }
            catch (Exception ex)
            {
                // xslt compile error
                string exMessage = "An excception occurred while compiling the XSLT template.";

                if (ex.InnerException != null)
                {
                    exMessage += "<br /><em>" + ex.InnerException.Message + "</em>";
                }

                content = "<div class='alert warning' style='margin: 24px auto 0 auto; max-width: 500px;' ><strong>XSLT Compile Error</strong><p>" + exMessage + "</p></div>";
            }

            phContent.Controls.Clear();
            phContent.Controls.Add(new LiteralControl(content));
        }
        /// <summary>
        /// Shows the detail.
        /// </summary>
        /// <param name="itemKey">The item key.</param>
        /// <param name="itemKeyValue">The item key value.</param>
        /// <param name="marketingCampaignId">The marketing campaign id.</param>
        public void ShowDetail( string itemKey, int itemKeyValue, int? marketingCampaignId )
        {
            pnlDetails.Visible = false;
            if ( !itemKey.Equals( "marketingCampaignAdId" ) )
            {
                return;
            }

            MarketingCampaignAd marketingCampaignAd = null;

            lbApprove.Visible = IsUserAuthorized( "Approve" );
            lbDeny.Visible = IsUserAuthorized( "Approve" );

            var rockContext = new RockContext();

            if ( !itemKeyValue.Equals( 0 ) )
            {
                marketingCampaignAd = new MarketingCampaignAdService( rockContext ).Get( itemKeyValue );
                marketingCampaignAd.LoadAttributes();
            }
            else
            {
                // only create a new marketing Campaign Ad if the marketingCampaignId was specified
                if ( marketingCampaignId != null )
                {
                    marketingCampaignAd = new MarketingCampaignAd { Id = 0, MarketingCampaignAdStatus = MarketingCampaignAdStatus.PendingApproval };
                    marketingCampaignAd.MarketingCampaignId = marketingCampaignId.Value;
                    marketingCampaignAd.MarketingCampaign = new MarketingCampaignService( rockContext ).Get( marketingCampaignAd.MarketingCampaignId );
                }
            }

            if ( marketingCampaignAd == null )
            {
                return;
            }

            pnlDetails.Visible = true;
            hfMarketingCampaignAdId.Value = marketingCampaignAd.Id.ToString();
            hfMarketingCampaignId.Value = marketingCampaignAd.MarketingCampaignId.ToString();

            if ( marketingCampaignAd.Id.Equals( 0 ) )
            {
                lActionTitleAd.Text = ActionTitle.Add( "Marketing Ad for " + marketingCampaignAd.MarketingCampaign.Title ).FormatAsHtmlTitle();
            }
            else
            {
                lActionTitleAd.Text = ActionTitle.Edit( "Marketing Ad for " + marketingCampaignAd.MarketingCampaign.Title ).FormatAsHtmlTitle();
            }

            LoadDropDowns();
            ddlMarketingCampaignAdType.SetValue( marketingCampaignAd.MarketingCampaignAdTypeId );
            tbPriority.Text = marketingCampaignAd.Priority.ToString();

            SetApprovalValues( marketingCampaignAd.MarketingCampaignAdStatus, new PersonService( rockContext ).Get( marketingCampaignAd.MarketingCampaignStatusPersonId ?? 0 ) );

            if ( itemKeyValue.Equals( 0 ) )
            {
                drpAdDateRange.LowerValue = null;
                drpAdDateRange.UpperValue = null;
                dpAdSingleDate.SelectedDate = null;
            }
            else
            {
                drpAdDateRange.LowerValue = marketingCampaignAd.StartDate;
                drpAdDateRange.UpperValue = marketingCampaignAd.EndDate;
                dpAdSingleDate.SelectedDate = marketingCampaignAd.StartDate;
            }

            tbUrl.Text = marketingCampaignAd.Url;

            LoadAdAttributes( marketingCampaignAd, true, true );

            pnlDetails.Visible = true;
        }
        /// <summary>
        /// Handles the Click event of the btnSave 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 btnSave_Click(object sender, EventArgs e)
        {
            int marketingCampaignAdId = int.Parse(hfMarketingCampaignAdId.Value);
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();

            MarketingCampaignAd marketingCampaignAd;

            if (marketingCampaignAdId.Equals(0))
            {
                marketingCampaignAd = new MarketingCampaignAd {
                    Id = 0
                };
                marketingCampaignAd.MarketingCampaignId = hfMarketingCampaignId.ValueAsInt();
            }
            else
            {
                marketingCampaignAd = marketingCampaignAdService.Get(marketingCampaignAdId);
            }

            if (string.IsNullOrWhiteSpace(ddlMarketingCampaignAdType.SelectedValue))
            {
                ddlMarketingCampaignAdType.ShowErrorMessage(WarningMessage.CannotBeBlank(ddlMarketingCampaignAdType.Label));
                return;
            }

            marketingCampaignAd.MarketingCampaignId       = int.Parse(hfMarketingCampaignId.Value);
            marketingCampaignAd.MarketingCampaignAdTypeId = int.Parse(ddlMarketingCampaignAdType.SelectedValue);
            marketingCampaignAd.Priority = tbPriority.Text.AsInteger() ?? 0;
            marketingCampaignAd.MarketingCampaignAdStatus = (MarketingCampaignAdStatus)int.Parse(hfMarketingCampaignAdStatus.Value);
            if (!string.IsNullOrWhiteSpace(hfMarketingCampaignAdStatusPersonId.Value))
            {
                marketingCampaignAd.MarketingCampaignStatusPersonId = int.Parse(hfMarketingCampaignAdStatusPersonId.Value);
            }
            else
            {
                marketingCampaignAd.MarketingCampaignStatusPersonId = null;
            }

            if (tbAdDateRangeStartDate.SelectedDate == null)
            {
                tbAdDateRangeStartDate.ShowErrorMessage(Rock.Constants.WarningMessage.CannotBeBlank("StartDate"));
                return;
            }

            marketingCampaignAd.StartDate = tbAdDateRangeStartDate.SelectedDate ?? DateTime.MinValue;

            if (tbAdDateRangeEndDate.Visible)
            {
                if (tbAdDateRangeEndDate.SelectedDate == null)
                {
                    tbAdDateRangeEndDate.ShowErrorMessage(Rock.Constants.WarningMessage.CannotBeBlank("EndDate"));
                    return;
                }

                marketingCampaignAd.EndDate = tbAdDateRangeEndDate.SelectedDate ?? DateTime.MaxValue;
            }
            else
            {
                marketingCampaignAd.EndDate = marketingCampaignAd.StartDate;
            }

            if (marketingCampaignAd.EndDate < marketingCampaignAd.StartDate)
            {
                tbAdDateRangeStartDate.ShowErrorMessage(WarningMessage.DateRangeEndDateBeforeStartDate());
            }

            marketingCampaignAd.Url = tbUrl.Text;

            LoadAdAttributes(marketingCampaignAd, false, false);
            Rock.Attribute.Helper.GetEditValues(phAttributes, marketingCampaignAd);

            if (!Page.IsValid)
            {
                return;
            }

            if (!marketingCampaignAd.IsValid)
            {
                return;
            }

            RockTransactionScope.WrapTransaction(() =>
            {
                if (marketingCampaignAd.Id.Equals(0))
                {
                    marketingCampaignAdService.Add(marketingCampaignAd, CurrentPersonId);
                }

                marketingCampaignAdService.Save(marketingCampaignAd, CurrentPersonId);
                Rock.Attribute.Helper.SaveAttributeValues(marketingCampaignAd, CurrentPersonId);
            });

            Dictionary <string, string> qryString = new Dictionary <string, string>();

            qryString["marketingCampaignId"] = hfMarketingCampaignId.Value;
            NavigateToParentPage(qryString);
        }
        /// <summary>
        /// Shows the detail.
        /// </summary>
        /// <param name="itemKey">The item key.</param>
        /// <param name="itemKeyValue">The item key value.</param>
        /// <param name="marketingCampaignId">The marketing campaign id.</param>
        public void ShowDetail(string itemKey, int itemKeyValue, int?marketingCampaignId)
        {
            pnlDetails.Visible = false;
            if (!itemKey.Equals("marketingCampaignAdId"))
            {
                return;
            }

            MarketingCampaignAd marketingCampaignAd = null;

            btnApproveAd.Visible = IsUserAuthorized("Approve");
            btnDenyAd.Visible    = IsUserAuthorized("Approve");

            if (!itemKeyValue.Equals(0))
            {
                marketingCampaignAd = new MarketingCampaignAdService().Get(itemKeyValue);
                marketingCampaignAd.LoadAttributes();
            }
            else
            {
                // only create a new marketing Campaign Ad if the marketingCampaignId was specified
                if (marketingCampaignId != null)
                {
                    marketingCampaignAd = new MarketingCampaignAd {
                        Id = 0, MarketingCampaignAdStatus = MarketingCampaignAdStatus.PendingApproval
                    };
                    marketingCampaignAd.MarketingCampaignId = marketingCampaignId.Value;
                    marketingCampaignAd.MarketingCampaign   = new MarketingCampaignService().Get(marketingCampaignAd.MarketingCampaignId);
                }
            }

            if (marketingCampaignAd == null)
            {
                return;
            }

            pnlDetails.Visible            = true;
            hfMarketingCampaignAdId.Value = marketingCampaignAd.Id.ToString();
            hfMarketingCampaignId.Value   = marketingCampaignAd.MarketingCampaignId.ToString();

            if (marketingCampaignAd.Id.Equals(0))
            {
                lActionTitleAd.Text = ActionTitle.Add("Marketing Ad for " + marketingCampaignAd.MarketingCampaign.Title);
            }
            else
            {
                lActionTitleAd.Text = ActionTitle.Edit("Marketing Ad for " + marketingCampaignAd.MarketingCampaign.Title);
            }

            LoadDropDowns();
            ddlMarketingCampaignAdType.SetValue(marketingCampaignAd.MarketingCampaignAdTypeId);
            tbPriority.Text = marketingCampaignAd.Priority.ToString();

            SetApprovalValues(marketingCampaignAd.MarketingCampaignAdStatus, new PersonService().Get(marketingCampaignAd.MarketingCampaignStatusPersonId ?? 0));

            if (itemKeyValue.Equals(0))
            {
                tbAdDateRangeStartDate.SelectedDate = null;
                tbAdDateRangeEndDate.SelectedDate   = null;
            }
            else
            {
                tbAdDateRangeStartDate.SelectedDate = marketingCampaignAd.StartDate;
                tbAdDateRangeEndDate.SelectedDate   = marketingCampaignAd.EndDate;
            }

            tbUrl.Text = marketingCampaignAd.Url;

            LoadAdAttributes(marketingCampaignAd, true, true);

            pnlDetails.Visible = true;
        }
Exemplo n.º 14
0
        /// <summary>
        /// Binds the marketing campaign ads grid.
        /// </summary>
        private void BindMarketingCampaignAdsGrid()
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
            int marketingCampaignId = int.Parse( hfMarketingCampaignId.Value );
            var qry = marketingCampaignAdService.Queryable().Where( a => a.MarketingCampaignId.Equals( marketingCampaignId ) );

            gMarketingCampaignAds.DataSource = qry.OrderBy( a => a.StartDate ).ThenBy( a => a.Priority ).ThenBy( a => a.MarketingCampaignAdType.Name ).ToList();
            gMarketingCampaignAds.DataBind();
        }
Exemplo n.º 15
0
        /// <summary>
        /// Handles the Delete event of the gMarketingCampaignAds control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="RowEventArgs" /> instance containing the event data.</param>
        protected void gMarketingCampaignAds_Delete( object sender, RowEventArgs e )
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
            MarketingCampaignAd marketingCampaignAd = marketingCampaignAdService.Get( (int)e.RowKeyValue );

            marketingCampaignAdService.Delete( marketingCampaignAd, CurrentPersonId );
            marketingCampaignAdService.Save( marketingCampaignAd, CurrentPersonId );
            BindMarketingCampaignAdsGrid();
        }
Exemplo n.º 16
0
        /// <summary>
        /// Handles the Click event of the btnSaveAd 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 btnSaveAd_Click( object sender, EventArgs e )
        {
            int marketingCampaignAdId = int.Parse( hfMarketingCampaignAdId.Value );
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();

            MarketingCampaignAd marketingCampaignAd;
            if ( marketingCampaignAdId.Equals( 0 ) )
            {
                marketingCampaignAd = new MarketingCampaignAd { Id = 0 };
            }
            else
            {
                marketingCampaignAd = marketingCampaignAdService.Get( marketingCampaignAdId );
            }

            marketingCampaignAd.MarketingCampaignId = int.Parse( hfMarketingCampaignId.Value );
            marketingCampaignAd.MarketingCampaignAdTypeId = int.Parse( ddlMarketingCampaignAdType.SelectedValue );
            marketingCampaignAd.Priority = tbPriority.TextAsInteger() ?? 0;
            marketingCampaignAd.MarketingCampaignAdStatus = (MarketingCampaignAdStatus)int.Parse( hfMarketingCampaignAdStatus.Value );
            if ( !string.IsNullOrWhiteSpace( hfMarketingCampaignAdStatusPersonId.Value ) )
            {
                marketingCampaignAd.MarketingCampaignStatusPersonId = int.Parse( hfMarketingCampaignAdStatusPersonId.Value );
            }
            else
            {
                marketingCampaignAd.MarketingCampaignStatusPersonId = null;
            }

            if ( tbAdDateRangeStartDate.SelectedDate == null )
            {
                tbAdDateRangeStartDate.ShowErrorMessage( Rock.Constants.WarningMessage.CannotBeBlank( "StartDate" ) );
                return;
            }

            marketingCampaignAd.StartDate = tbAdDateRangeStartDate.SelectedDate ?? DateTime.MinValue;

            if ( tbAdDateRangeEndDate.Visible )
            {
                if ( tbAdDateRangeEndDate.SelectedDate == null )
                {
                    tbAdDateRangeEndDate.ShowErrorMessage( Rock.Constants.WarningMessage.CannotBeBlank( "EndDate" ) );
                    return;
                }

                marketingCampaignAd.EndDate = tbAdDateRangeEndDate.SelectedDate ?? DateTime.MaxValue;
            }
            else
            {
                marketingCampaignAd.EndDate = marketingCampaignAd.StartDate;
            }

            if ( marketingCampaignAd.EndDate < marketingCampaignAd.StartDate )
            {
                tbAdDateRangeStartDate.ShowErrorMessage( WarningMessage.DateRangeEndDateBeforeStartDate() );
            }

            marketingCampaignAd.Url = tbUrl.Text;

            LoadAdAttributes( marketingCampaignAd, false, false );
            Rock.Attribute.Helper.GetEditValues( phAttributes, marketingCampaignAd );
            Rock.Attribute.Helper.SetErrorIndicators( phAttributes, marketingCampaignAd );

            if ( !Page.IsValid )
            {
                return;
            }

            if ( !marketingCampaignAd.IsValid )
            {
                return;
            }

            RockTransactionScope.WrapTransaction( () =>
                {
                    if ( marketingCampaignAd.Id.Equals( 0 ) )
                    {
                        marketingCampaignAdService.Add( marketingCampaignAd, CurrentPersonId );
                    }

                    marketingCampaignAdService.Save( marketingCampaignAd, CurrentPersonId );
                    Rock.Attribute.Helper.SaveAttributeValues( marketingCampaignAd, CurrentPersonId );
                } );

            pnlMarketingCampaignAdEditor.Visible = false;
            pnlDetails.Visible = true;
            pnlList.Visible = false;

            BindMarketingCampaignAdsGrid();
        }
        /// <summary>
        /// Handles the Click event of the btnSave 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 btnSave_Click( object sender, EventArgs e )
        {
            int marketingCampaignAdId = int.Parse( hfMarketingCampaignAdId.Value );

            var rockContext = new RockContext();
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService( rockContext );

            MarketingCampaignAd marketingCampaignAd;
            if ( marketingCampaignAdId.Equals( 0 ) )
            {
                marketingCampaignAd = new MarketingCampaignAd { Id = 0 };
                marketingCampaignAd.MarketingCampaignId = hfMarketingCampaignId.ValueAsInt();
            }
            else
            {
                marketingCampaignAd = marketingCampaignAdService.Get( marketingCampaignAdId );
            }

            if ( string.IsNullOrWhiteSpace( ddlMarketingCampaignAdType.SelectedValue ) )
            {
                ddlMarketingCampaignAdType.ShowErrorMessage( WarningMessage.CannotBeBlank( ddlMarketingCampaignAdType.Label ) );
                return;
            }

            marketingCampaignAd.MarketingCampaignId = int.Parse( hfMarketingCampaignId.Value );
            marketingCampaignAd.MarketingCampaignAdTypeId = int.Parse( ddlMarketingCampaignAdType.SelectedValue );
            marketingCampaignAd.Priority = tbPriority.Text.AsInteger() ?? 0;
            marketingCampaignAd.MarketingCampaignAdStatus = (MarketingCampaignAdStatus)int.Parse( hfApprovalStatus.Value );
            if ( !string.IsNullOrWhiteSpace( hfApprovalStatusPersonId.Value ) )
            {
                marketingCampaignAd.MarketingCampaignStatusPersonId = int.Parse( hfApprovalStatusPersonId.Value );
            }
            else
            {
                marketingCampaignAd.MarketingCampaignStatusPersonId = null;
            }

            if (drpAdDateRange.Visible)
            {
                marketingCampaignAd.StartDate = drpAdDateRange.LowerValue ?? DateTime.MinValue;
                marketingCampaignAd.EndDate = drpAdDateRange.UpperValue ?? DateTime.MaxValue;
            }

            if (dpAdSingleDate.Visible)
            {
                marketingCampaignAd.StartDate = dpAdSingleDate.SelectedDate ?? DateTime.MinValue;
                marketingCampaignAd.EndDate = marketingCampaignAd.StartDate;
            }

            marketingCampaignAd.Url = tbUrl.Text;

            LoadAdAttributes( marketingCampaignAd, false, false );
            Rock.Attribute.Helper.GetEditValues( phAttributes, marketingCampaignAd );

            if ( !Page.IsValid )
            {
                return;
            }

            if ( !marketingCampaignAd.IsValid )
            {
                return;
            }

            RockTransactionScope.WrapTransaction( () =>
            {
                if ( marketingCampaignAd.Id.Equals( 0 ) )
                {
                    marketingCampaignAdService.Add( marketingCampaignAd );
                }

                rockContext.SaveChanges();

                marketingCampaignAd.SaveAttributeValues( rockContext );
            } );

            Dictionary<string, string> qryString = new Dictionary<string, string>();
            qryString["marketingCampaignId"] = hfMarketingCampaignId.Value;
            NavigateToParentPage( qryString );
        }
Exemplo n.º 18
0
        /// <summary>
        /// Transforms the XML.
        /// </summary>
        private void TransformXml()
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService();
            var qry = marketingCampaignAdService.Queryable();

            // limit to date range
            DateTime currentDateTime = DateTime.Now.Date;

            qry = qry.Where(a => (a.StartDate <= currentDateTime) && (currentDateTime <= a.EndDate));

            // limit to approved
            qry = qry.Where(a => a.MarketingCampaignAdStatus == MarketingCampaignAdStatus.Approved);

            /* Block Attributes */

            // Audience
            string audience = GetAttributeValue("Audience");

            if (!string.IsNullOrWhiteSpace(audience))
            {
                var idList = new List <int>();
                foreach (string guid in audience.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    var definedValue = DefinedValueCache.Read(new Guid(guid));
                    if (definedValue != null)
                    {
                        idList.Add(definedValue.Id);
                    }
                }
                qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignAudiences.Any(x => idList.Contains(x.AudienceTypeValueId)));
            }

            // AudiencePrimarySecondary
            string audiencePrimarySecondary = GetAttributeValue("AudiencePrimarySecondary");

            if (!string.IsNullOrWhiteSpace(audiencePrimarySecondary))
            {
                // 1 = Primary, 2 = Secondary
                List <int> idlist = audiencePrimarySecondary.SplitDelimitedValues().Select(a => int.Parse(a)).ToList();

                if (idlist.Contains(1) && !idlist.Contains(2))
                {
                    // only show to Primary Audiences
                    qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignAudiences.Any(x => x.IsPrimary == true));
                }
                else if (idlist.Contains(2) && !idlist.Contains(1))
                {
                    // only show to Secondary Audiences
                    qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignAudiences.Any(x => x.IsPrimary == false));
                }
            }

            // Campuses
            string campuses = GetAttributeValue("Campuses");

            if (!string.IsNullOrWhiteSpace(campuses))
            {
                List <int> idlist = campuses.SplitDelimitedValues().Select(a => int.Parse(a)).ToList();
                qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignCampuses.Any(x => idlist.Contains(x.Id)));
            }

            // Ad Types
            string adtypes = GetAttributeValue("AdTypes");

            if (!string.IsNullOrWhiteSpace(adtypes))
            {
                List <int> idlist = adtypes.SplitDelimitedValues().Select(a => int.Parse(a)).ToList();
                qry = qry.Where(a => idlist.Contains(a.MarketingCampaignAdTypeId));
            }

            // Image Attribute Keys
            string        imageAttributeKeys      = GetAttributeValue("ImageAttributeKeys");
            List <string> imageAttributeKeyFilter = null;

            if (!string.IsNullOrWhiteSpace(imageAttributeKeys))
            {
                imageAttributeKeyFilter = imageAttributeKeys.SplitDelimitedValues().ToList();
            }

            // Campus Context
            Campus campusContext = this.ContextEntity <Campus>();

            if (campusContext != null)
            {
                // limit to ads that are targeted to the current campus context
                qry = qry.Where(a => a.MarketingCampaign.MarketingCampaignCampuses.Any(x => x.Id.Equals(campusContext.Id)));
            }


            // Max Items
            string maxItems   = GetAttributeValue("MaxItems");
            int?   maxAdCount = null;

            if (!string.IsNullOrWhiteSpace(maxItems))
            {
                int parsedCount = 0;
                if (int.TryParse(maxItems, out parsedCount))
                {
                    maxAdCount = parsedCount;
                }
            }

            List <MarketingCampaignAd> marketingCampaignAdList;

            qry = qry.OrderBy(a => a.Priority).ThenBy(a => a.StartDate).ThenBy(a => a.MarketingCampaign.Title);
            if (maxAdCount == null)
            {
                marketingCampaignAdList = qry.ToList();
            }
            else
            {
                marketingCampaignAdList = qry.Take(maxAdCount.Value).ToList();
            }

            // build Xml doc
            XDocument doc      = new XDocument();
            XElement  rootNode = new XElement("Ads");

            doc.Add(rootNode);

            foreach (var marketingCampaignAd in marketingCampaignAdList)
            {
                XElement xmlElement = new XElement("Ad");

                // DetailPage
                string detailPageUrl  = string.Empty;
                string detailPageGuid = GetAttributeValue("DetailPage");
                if (!string.IsNullOrWhiteSpace(detailPageGuid))
                {
                    Rock.Model.Page detailPage = new PageService().Get(new Guid("detailPageGuid"));
                    if (detailPage != null)
                    {
                        Dictionary <string, string> queryString = new Dictionary <string, string>();
                        queryString.Add("marketingCampaignAd", marketingCampaignAd.Id.ToString());
                        detailPageUrl = new PageReference(detailPage.Id, 0, queryString).BuildUrl();
                    }
                }

                string eventGroupName = marketingCampaignAd.MarketingCampaign.EventGroup != null ? marketingCampaignAd.MarketingCampaign.EventGroup.Name : string.Empty;

                // Marketing Campaign Fields
                xmlElement.Add(
                    new XAttribute("Title", marketingCampaignAd.MarketingCampaign.Title),
                    new XAttribute("ContactEmail", marketingCampaignAd.MarketingCampaign.ContactEmail),
                    new XAttribute("ContactFullName", marketingCampaignAd.MarketingCampaign.ContactFullName),
                    new XAttribute("ContactPhoneNumber", marketingCampaignAd.MarketingCampaign.ContactPhoneNumber),
                    new XAttribute("LinkedEvent", eventGroupName));

                // Specific Ad Fields
                xmlElement.Add(
                    new XAttribute("AdType", marketingCampaignAd.MarketingCampaignAdType.Name),
                    new XAttribute("StartDate", marketingCampaignAd.StartDate.ToString()),
                    new XAttribute("EndDate", marketingCampaignAd.EndDate.ToString()),
                    new XAttribute("Priority", marketingCampaignAd.Priority),
                    new XAttribute("Url", marketingCampaignAd.Url),
                    new XAttribute("DetailPageUrl", detailPageUrl));

                // Ad Attributes
                XElement attribsNode = new XElement("Attributes");
                xmlElement.Add(attribsNode);

                marketingCampaignAd.LoadAttributes();
                Rock.Attribute.Helper.AddDisplayControls(marketingCampaignAd, phContent);
                foreach (var item in marketingCampaignAd.Attributes)
                {
                    AttributeCache        attribute       = item.Value;
                    List <AttributeValue> attributeValues = marketingCampaignAd.AttributeValues[attribute.Key];
                    foreach (AttributeValue attributeValue in attributeValues)
                    {
                        // If Block Attributes limit image types, limit images
                        if (attribute.FieldType.Guid.Equals(new Guid(Rock.SystemGuid.FieldType.IMAGE)))
                        {
                            if (imageAttributeKeyFilter != null)
                            {
                                if (!imageAttributeKeyFilter.Contains(attribute.Key))
                                {
                                    // skip to next attribute if this is an image attribute and it doesn't match the image key filter
                                    continue;
                                }
                            }
                        }

                        string   valueHtml = attribute.FieldType.Field.FormatValue(this, attributeValue.Value, attribute.QualifierValues, false);
                        XElement valueNode = new XElement("Attribute");
                        valueNode.Add(new XAttribute("Key", attribute.Key));
                        valueNode.Add(new XAttribute("Name", attribute.Name));
                        valueNode.Add(new XAttribute("Value", valueHtml));
                        attribsNode.Add(valueNode);
                    }
                }

                rootNode.Add(xmlElement);
            }

            string showDebugValue = GetAttributeValue("ShowDebug") ?? string.Empty;
            bool   showDebug      = showDebugValue.Equals("true", StringComparison.OrdinalIgnoreCase);

            string fileName = GetAttributeValue("XSLTFile");
            string outputXml;

            if (showDebug || string.IsNullOrWhiteSpace(fileName))
            {
                outputXml = HttpUtility.HtmlEncode(doc.ToString());
            }
            else
            {
                StringBuilder sb = new StringBuilder();
                TextWriter    tw = new StringWriter(sb);

                XslCompiledTransform xslTransformer = new XslCompiledTransform();
                xslTransformer.Load(Server.MapPath(fileName));
                xslTransformer.Transform(doc.CreateReader(), null, tw);
                outputXml = sb.ToString();
            }

            phContent.Controls.Clear();

            phContent.Controls.Add(new LiteralControl(outputXml));
        }
Exemplo n.º 19
0
        /// <summary>
        /// Renders the Ads using Liquid.
        /// </summary>
        private void Render()
        {
            var rockContext = new RockContext();

            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService( rockContext );
            var qry = marketingCampaignAdService.Queryable();

            // limit to date range
            DateTime currentDateTime = RockDateTime.Now.Date;
            qry = qry.Where( a => ( a.StartDate <= currentDateTime ) && ( currentDateTime <= a.EndDate ) );

            // limit to approved
            qry = qry.Where( a => a.MarketingCampaignAdStatus == MarketingCampaignAdStatus.Approved );

            /* Block Attributes */

            // Audience
            string audience = GetAttributeValue( "Audience" );
            if ( !string.IsNullOrWhiteSpace( audience ) )
            {
                var idList = new List<int>();
                foreach ( string guid in audience.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ) )
                {
                    var definedValue = DefinedValueCache.Read( new Guid( guid ) );
                    if ( definedValue != null )
                    {
                        idList.Add( definedValue.Id );
                    }
                }
                qry = qry.Where( a => a.MarketingCampaign.MarketingCampaignAudiences.Any( x => idList.Contains( x.AudienceTypeValueId ) ) );
            }

            // AudiencePrimarySecondary
            string audiencePrimarySecondary = GetAttributeValue( "AudiencePrimarySecondary" );
            if ( !string.IsNullOrWhiteSpace( audiencePrimarySecondary ) )
            {
                // 1 = Primary, 2 = Secondary
                List<int> idlist = audiencePrimarySecondary.SplitDelimitedValues().Select( a => int.Parse( a ) ).ToList();

                if ( idlist.Contains( 1 ) && !idlist.Contains( 2 ) )
                {
                    // only show to Primary Audiences
                    qry = qry.Where( a => a.MarketingCampaign.MarketingCampaignAudiences.Any( x => x.IsPrimary == true ) );
                }
                else if ( idlist.Contains( 2 ) && !idlist.Contains( 1 ) )
                {
                    // only show to Secondary Audiences
                    qry = qry.Where( a => a.MarketingCampaign.MarketingCampaignAudiences.Any( x => x.IsPrimary == false ) );
                }
            }

            // Campuses
            string campuses = GetAttributeValue( "Campuses" );
            if ( !string.IsNullOrWhiteSpace( campuses ) )
            {
                List<int> idlist = campuses.SplitDelimitedValues().Select( a => int.Parse( a ) ).ToList();
                qry = qry.Where( a => a.MarketingCampaign.MarketingCampaignCampuses.Any( x => idlist.Contains( x.CampusId ) ) );
            }

            // Ad Types
            string adtypes = GetAttributeValue( "AdTypes" );
            if ( !string.IsNullOrWhiteSpace( adtypes ) )
            {
                List<int> idlist = adtypes.SplitDelimitedValues().Select( a => int.Parse( a ) ).ToList();
                qry = qry.Where( a => idlist.Contains( a.MarketingCampaignAdTypeId ) );
            }

            // Image Types
            string imageTypes = GetAttributeValue( "ImageTypes" );
            List<string> imageTypeFilter = null;
            if ( !string.IsNullOrWhiteSpace( imageTypes ) )
            {
                imageTypeFilter = imageTypes.SplitDelimitedValues().ToList();
            }

            // Campus Context
            Campus campusContext = this.ContextEntity<Campus>();
            if ( campusContext != null )
            {
                // limit to ads that are targeted to the current campus context
                qry = qry.Where( a => a.MarketingCampaign.MarketingCampaignCampuses.Any( x => x.CampusId.Equals( campusContext.Id ) ) );
            }

            // Max Items
            string maxItems = GetAttributeValue( "MaxItems" );
            int? maxAdCount = null;
            if ( !string.IsNullOrWhiteSpace( maxItems ) )
            {
                int parsedCount = 0;
                if ( int.TryParse( maxItems, out parsedCount ) )
                {
                    maxAdCount = parsedCount;
                }
            }

            List<MarketingCampaignAd> marketingCampaignAdList;
            qry = qry.OrderBy( a => a.Priority ).ThenBy( a => a.StartDate ).ThenBy( a => a.MarketingCampaign.Title );
            if ( maxAdCount == null )
            {
                marketingCampaignAdList = qry.ToList();
            }
            else
            {
                marketingCampaignAdList = qry.Take( maxAdCount.Value ).ToList();
            }

            // build dictionary for liquid
            var ads = new List<Dictionary<string, object>>();

            foreach ( var marketingCampaignAd in marketingCampaignAdList )
            {
                var ad = new Dictionary<string, object>();

                // DetailPage
                string detailPageUrl = string.Empty;
                string detailPageGuid = GetAttributeValue( "DetailPage" );
                if ( !string.IsNullOrWhiteSpace( detailPageGuid ) )
                {
                    Rock.Model.Page detailPage = new PageService( rockContext ).Get( new Guid( detailPageGuid ) );
                    if ( detailPage != null )
                    {
                        Dictionary<string, string> queryString = new Dictionary<string, string>();
                        queryString.Add( "ad", marketingCampaignAd.Id.ToString() );
                        detailPageUrl = new PageReference( detailPage.Id, 0, queryString ).BuildUrl();
                    }
                }

                string eventGroupName = marketingCampaignAd.MarketingCampaign.EventGroup != null ? marketingCampaignAd.MarketingCampaign.EventGroup.Name : string.Empty;

                // Marketing Campaign Fields
                ad.Add( "Title", marketingCampaignAd.MarketingCampaign.Title );
                ad.Add( "ContactEmail", marketingCampaignAd.MarketingCampaign.ContactEmail );
                ad.Add( "ContactFullName", marketingCampaignAd.MarketingCampaign.ContactFullName );
                ad.Add( "ContactPhoneNumber", marketingCampaignAd.MarketingCampaign.ContactPhoneNumber );
                ad.Add( "LinkedEvent", eventGroupName );

                // Specific Ad Fields
                ad.Add( "AdType", marketingCampaignAd.MarketingCampaignAdType.Name );
                ad.Add( "StartDate", marketingCampaignAd.StartDate.ToString() );
                ad.Add( "EndDate", marketingCampaignAd.EndDate.ToString() );
                ad.Add( "Priority", marketingCampaignAd.Priority );
                ad.Add( "Url", marketingCampaignAd.Url );
                ad.Add( "DetailPageUrl", detailPageUrl );

                // Ad Attributes
                var attributes = new List<Dictionary<string, object>>();
                ad.Add( "Attributes", attributes );

                marketingCampaignAd.LoadAttributes();
                Rock.Attribute.Helper.AddDisplayControls( marketingCampaignAd, phContent );

                // create image resize width/height from block settings
                Dictionary<string, Rock.Field.ConfigurationValue> imageConfig = new Dictionary<string, Rock.Field.ConfigurationValue>();
                if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "ImageWidth" ) )
                    && Int32.Parse( GetAttributeValue( "ImageWidth" ) ) != Int16.MinValue )
                    imageConfig.Add( "width", new Rock.Field.ConfigurationValue( GetAttributeValue( "ImageWidth" ) ) );

                if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "ImageHeight" ) )
                    && Int32.Parse( GetAttributeValue( "ImageHeight" ) ) != Int16.MinValue )
                    imageConfig.Add( "height", new Rock.Field.ConfigurationValue( GetAttributeValue( "ImageHeight" ) ) );

                foreach ( var item in marketingCampaignAd.Attributes )
                {
                    AttributeCache attribute = item.Value;
                    List<AttributeValue> attributeValues = marketingCampaignAd.AttributeValues[attribute.Key];
                    foreach ( AttributeValue attributeValue in attributeValues )
                    {
                        string valueHtml = string.Empty;

                        // if block attributes limit image types, limit images
                        if ( attribute.FieldType.Guid.Equals( new Guid( Rock.SystemGuid.FieldType.IMAGE ) ) )
                        {
                            if ( imageTypeFilter != null )
                            {
                                if ( !imageTypeFilter.Contains( attribute.Key ) )
                                {
                                    // skip to next attribute if this is an image attribute and it doesn't match the image key filter
                                    continue;
                                }
                                else
                                {
                                    valueHtml = attribute.FieldType.Field.FormatValue( this, attributeValue.Value, imageConfig, false );
                                }
                            }
                        }
                        else
                        {
                            valueHtml = attribute.FieldType.Field.FormatValue( this, attributeValue.Value, attribute.QualifierValues, false );
                        }

                        var valueNode = new Dictionary<string, object>();
                        valueNode.Add( "Key", attribute.Key );
                        valueNode.Add( "Name", attribute.Name );
                        valueNode.Add( "Value", valueHtml );
                        attributes.Add( valueNode );
                    }
                }

                ads.Add( ad );
            }

            var data = new Dictionary<string, object>();
            data.Add( "Ads", ads );
            data.Add( "ApplicationPath", HttpRuntime.AppDomainAppVirtualPath );

            string content;
            try
            {
                content = GetTemplate().Render( Hash.FromDictionary( data ) );
            }
            catch ( Exception ex )
            {
                // liquid compile error
                string exMessage = "An excception occurred while compiling the Liquid template.";

                if ( ex.InnerException != null )
                    exMessage += "<br /><em>" + ex.InnerException.Message + "</em>";

                content = "<div class='alert warning' style='margin: 24px auto 0 auto; max-width: 500px;' ><strong>Liquid Compile Error</strong><p>" + exMessage + "</p></div>";
            }

            // check for errors
            if (content.Contains("No such template"))
            {
                // get template name
                Match match = Regex.Match(GetAttributeValue("Template"), @"'([^']*)");
                if (match.Success)
                {
                    content = String.Format("<div class='alert alert-warning'><h4>Warning</h4>Could not find the template _{1}.liquid in {0}.</div>", ResolveRockUrl("~~/Assets/Liquid"), match.Groups[1].Value);
                }
                else
                {
                    content = "<div class='alert alert-warning'><h4>Warning</h4>Unable to parse the template name from settings.</div>";
                }
            }

            if (content.Contains("error"))
            {
                content = "<div class='alert alert-warning'><h4>Warning</h4>" + content + "</div>";
            }

            phContent.Controls.Clear();
            phContent.Controls.Add( new LiteralControl( content ) );

            // add debug info
            if (GetAttributeValue("EnableDebug").AsBoolean())
            {
                StringBuilder debugInfo = new StringBuilder();
                debugInfo.Append("<p /><div class='alert alert-info'><h4>Debug Info</h4>");

                debugInfo.Append("<pre>");

                debugInfo.Append("<p /><strong>Ad Data</strong> (referenced as 'Ads.' in Liquid)<br>");
                debugInfo.Append(data.LiquidHelpText() + "</pre>");

                debugInfo.Append("</div>");
                phContent.Controls.Add(new LiteralControl(debugInfo.ToString()));
            }
        }
Exemplo n.º 20
0
        /// <summary>
        /// Binds the marketing campaign ads grid.
        /// </summary>
        private void BindGrid()
        {
            MarketingCampaignAdService marketingCampaignAdService = new MarketingCampaignAdService( new RockContext() );
            var qry = marketingCampaignAdService.Queryable( "MarketingCampaign, MarketingCampaignAdType" );

            // limit to current marketingCampaign context (if there is one)
            int? marketingCampaignId = hfMarketingCampaignId.Value.AsIntegerOrNull();
            if ( marketingCampaignId.HasValue )
            {
                qry = qry.Where( a => a.MarketingCampaignId == marketingCampaignId );
            }

            // Approval Status
            int approvalStatus = ddlApprovalStatus.SelectedValueAsInt( false ) ?? Rock.Constants.All.Id;
            if ( approvalStatus != Rock.Constants.All.Id )
            {
                MarketingCampaignAdStatus marketingCampaignAdStatus = ddlApprovalStatus.SelectedValueAsEnum<MarketingCampaignAdStatus>();
                qry = qry.Where( a => a.MarketingCampaignAdStatus == marketingCampaignAdStatus );
            }

            // Priority Range
            if ( pPriorityRange.LowerValue.HasValue )
            {
                int lowerValue = (int)pPriorityRange.LowerValue.Value;
                qry = qry.Where( a => a.Priority >= lowerValue );
            }

            if ( pPriorityRange.UpperValue.HasValue )
            {
                int upperValue = (int)pPriorityRange.UpperValue.Value;
                qry = qry.Where( a => a.Priority <= upperValue );
            }

            // Ad Type
            int adTypeId = ddlAdType.SelectedValueAsInt() ?? Rock.Constants.All.Id;
            if ( adTypeId != Rock.Constants.All.Id )
            {
                qry = qry.Where( a => a.MarketingCampaignAdTypeId == adTypeId );
            }

            // Date Range
            if ( pDateRange.LowerValue.HasValue )
            {
                DateTime startDate = pDateRange.LowerValue.Value.Date;
                qry = qry.Where( a => a.StartDate >= startDate );
            }

            if ( pDateRange.UpperValue.HasValue )
            {
                // add a whole day to the selected endDate since users will expect to see all the stuff that happened
                // on the endDate up until the very end of that day.

                // calculate the query endDate before including it in the qry statement to avoid Linq error
                var endDate = pDateRange.UpperValue.Value.AddDays( 1 );
                qry = qry.Where( a => a.StartDate < endDate );
            }

            SortProperty sortProperty = gMarketingCampaignAds.SortProperty;

            if ( sortProperty != null )
            {
                qry = qry.Sort( sortProperty );
            }
            else
            {
                qry = qry.OrderBy( a => a.StartDate ).ThenBy( a => a.Priority ).ThenBy( a => a.MarketingCampaignAdType.Name );
            }

            gMarketingCampaignAds.DataSource = qry.ToList();
            gMarketingCampaignAds.DataBind();
        }