/// <summary> /// Handles the Delete event of the gAudiences 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 gAudiences_Delete(object sender, RowEventArgs e) { Guid guid = (Guid)e.RowKeyValue; var audience = DefinedValueCache.Read(guid); if (audience != null) { AudiencesState.Remove(audience.Id); } BindAudienceGrid(); }
/// <summary> /// Binds the audience grid. /// </summary> private void BindAudienceGrid() { var values = new List <DefinedValueCache>(); AudiencesState.ForEach(a => values.Add(DefinedValueCache.Read(a))); gAudiences.DataSource = values .OrderBy(v => v.Order) .ThenBy(v => v.Value) .ToList(); gAudiences.DataBind(); }
/// <summary> /// Handles the Click event of the btnSaveAudience 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 btnSaveAudience_Click(object sender, EventArgs e) { int?definedValueId = ddlAudience.SelectedValueAsInt(); if (definedValueId.HasValue) { AudiencesState.Add(definedValueId.Value); } BindAudienceGrid(); HideDialog(); }
/// <summary> /// Handles the Add event of the gAudiences control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> private void gAudiences_Add(object sender, EventArgs e) { // Bind options to defined type, but remove any that have already been selected ddlAudience.Items.Clear(); var definedType = DefinedTypeCache.Read(Rock.SystemGuid.DefinedType.MARKETING_CAMPAIGN_AUDIENCE_TYPE.AsGuid()); if (definedType != null) { ddlAudience.DataSource = definedType.DefinedValues .Where(v => !AudiencesState.Contains(v.Id)) .ToList(); ddlAudience.DataBind(); } ShowDialog("EventItemAudience", 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) { EventItem eventItem = null; using (var rockContext = new RockContext()) { var validationMessages = new List <string>(); var eventItemService = new EventItemService(rockContext); var eventCalendarItemService = new EventCalendarItemService(rockContext); var eventItemAudienceService = new EventItemAudienceService(rockContext); int eventItemId = hfEventItemId.ValueAsInt(); if (eventItemId != 0) { eventItem = eventItemService .Queryable("EventItemAudiences,EventItemOccurrences.Linkages,EventItemOccurrences") .Where(i => i.Id == eventItemId) .FirstOrDefault(); } if (eventItem == null) { eventItem = new EventItem(); eventItemService.Add(eventItem); } eventItem.Name = tbName.Text; eventItem.IsActive = cbIsActive.Checked; if (!eventItem.IsApproved && cbIsApproved.Checked) { eventItem.ApprovedByPersonAliasId = CurrentPersonAliasId; eventItem.ApprovedOnDateTime = RockDateTime.Now; } eventItem.IsApproved = cbIsApproved.Checked; if (!eventItem.IsApproved) { eventItem.ApprovedByPersonAliasId = null; eventItem.ApprovedByPersonAlias = null; eventItem.ApprovedOnDateTime = null; } eventItem.Description = htmlDescription.Text; eventItem.Summary = tbSummary.Text; eventItem.DetailsUrl = tbDetailUrl.Text; int?orphanedImageId = null; if (eventItem.PhotoId != imgupPhoto.BinaryFileId) { orphanedImageId = eventItem.PhotoId; eventItem.PhotoId = imgupPhoto.BinaryFileId; } // Remove any audiences that were removed in the UI foreach (var eventItemAudience in eventItem.EventItemAudiences.Where(r => !AudiencesState.Contains(r.DefinedValueId)).ToList()) { eventItem.EventItemAudiences.Remove(eventItemAudience); eventItemAudienceService.Delete(eventItemAudience); } // Add or Update audiences from the UI foreach (int audienceId in AudiencesState) { EventItemAudience eventItemAudience = eventItem.EventItemAudiences.Where(a => a.DefinedValueId == audienceId).FirstOrDefault(); if (eventItemAudience == null) { eventItemAudience = new EventItemAudience(); eventItemAudience.DefinedValueId = audienceId; eventItem.EventItemAudiences.Add(eventItemAudience); } } // remove any calendar items that removed in the UI var calendarIds = new List <int>(); calendarIds.AddRange(cblCalendars.SelectedValuesAsInt); var uiCalendarGuids = ItemsState.Where(i => calendarIds.Contains(i.EventCalendarId)).Select(a => a.Guid); foreach (var eventCalendarItem in eventItem.EventCalendarItems.Where(a => !uiCalendarGuids.Contains(a.Guid)).ToList()) { // Make sure user is authorized to remove calendar (they may not have seen every calendar due to security) if (UserCanEdit || eventCalendarItem.EventCalendar.IsAuthorized(Authorization.EDIT, CurrentPerson)) { eventItem.EventCalendarItems.Remove(eventCalendarItem); eventCalendarItemService.Delete(eventCalendarItem); } } // Add or Update calendar items from the UI foreach (var calendar in ItemsState.Where(i => calendarIds.Contains(i.EventCalendarId))) { var eventCalendarItem = eventItem.EventCalendarItems.Where(a => a.Guid == calendar.Guid).FirstOrDefault(); if (eventCalendarItem == null) { eventCalendarItem = new EventCalendarItem(); eventItem.EventCalendarItems.Add(eventCalendarItem); } eventCalendarItem.CopyPropertiesFrom(calendar); } if (!eventItem.EventCalendarItems.Any()) { validationMessages.Add("At least one calendar is required."); } if (!Page.IsValid) { return; } if (!eventItem.IsValid) { // Controls will render the error messages return; } if (validationMessages.Any()) { nbValidation.Text = "Please Correct the Following<ul><li>" + validationMessages.AsDelimited("</li><li>") + "</li></ul>"; nbValidation.Visible = true; return; } // use WrapTransaction since SaveAttributeValues does it's own RockContext.SaveChanges() rockContext.WrapTransaction(() => { rockContext.SaveChanges(); foreach (EventCalendarItem eventCalendarItem in eventItem.EventCalendarItems) { eventCalendarItem.LoadAttributes(); Rock.Attribute.Helper.GetEditValues(phAttributes, eventCalendarItem); eventCalendarItem.SaveAttributeValues(); } if (orphanedImageId.HasValue) { BinaryFileService binaryFileService = new BinaryFileService(rockContext); var binaryFile = binaryFileService.Get(orphanedImageId.Value); if (binaryFile != null) { // marked the old images as IsTemporary so they will get cleaned up later binaryFile.IsTemporary = true; rockContext.SaveChanges(); } } }); // Redirect back to same page so that item grid will show any attributes that were selected to show on grid var qryParams = new Dictionary <string, string>(); if (_calendarId.HasValue) { qryParams["EventCalendarId"] = _calendarId.Value.ToString(); } qryParams["EventItemId"] = eventItem.Id.ToString(); NavigateToPage(RockPage.Guid, qryParams); } }