private void BindCampusTopicsGrid()
 {
     gCampusTopics.DataSource = CampusTopicsState
                                .OrderBy(t => t.TopicType)
                                .ToList();
     gCampusTopics.DataBind();
 }
        /// <summary>
        /// Handles the onServerValidate event of the cvTopicType control.
        /// </summary>
        /// <param name="source"></param>
        /// <param name="args"></param>
        protected void cvTopicType_ServerValidate(object source, ServerValidateEventArgs args)
        {
            int?topicTypeId   = args.Value.AsIntegerOrNull();
            var topicInstance = CampusTopicsState.Find(t => t.TopicTypeId == topicTypeId);

            args.IsValid = topicInstance == null || topicInstance.IsPersisted;
        }
        /// <summary>
        /// Handles the Delete event of the gCampusTopics 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 gCampusTopics_Delete(object sender, RowEventArgs e)
        {
            Guid campusTopicGuid = ( Guid )e.RowKeyValue;

            var item = CampusTopicsState.Find(a => a.Guid.Equals(campusTopicGuid));

            if (item != null)
            {
                CampusTopicsState.Remove(item);
            }

            BindCampusTopicsGrid();
        }
        protected void dlgTopic_SaveClick(object sender, EventArgs e)
        {
            if (!cvTopicType.IsValid)
            {
                return;
            }

            var campusTopicGuid = hfCampusTopicGuid.Value.AsGuidOrNull();

            int            topicTypeId = dvpTopicType.SelectedDefinedValueId.Value;
            var            topicType   = new DefinedValueService(new RockContext()).Get(topicTypeId);
            CampusTopicDTO campusTopic = CampusTopicsState.Find(t => t.TopicTypeId == topicTypeId);

            // If there is an existing campusTopic with the provided topic id just update the existing one, each campus can only
            // have one instance of a topic type
            if (campusTopic == null)
            {
                if (campusTopicGuid == null || campusTopicGuid == Guid.Empty)
                {
                    campusTopic = new CampusTopicDTO()
                    {
                        Guid        = Guid.NewGuid(),
                        IsPersisted = false
                    };

                    CampusTopicsState.Add(campusTopic);
                }
                else
                {
                    campusTopic = CampusTopicsState.Find(t => t.Guid.Equals(campusTopicGuid));
                }
            }

            campusTopic.Email       = ebEmail.Text;
            campusTopic.TopicTypeId = topicTypeId;
            campusTopic.IsPublic    = cbIsPublic.Checked;
            campusTopic.TopicType   = topicType.Value;

            // Clear controls
            cbIsPublic.Checked = false;
            ebEmail.Text       = string.Empty;
            dvpTopicType.ClearSelection();

            dlgTopic.Hide();
            BindCampusTopicsGrid();
        }
        private void SaveCampusTopics(Campus campus, RockContext rockContext)
        {
            // Remove any CampusTopics that were removed in the UI
            var selectedTopics = CampusTopicsState.Select(s => s.Guid);
            var topicsToRemove = campus.CampusTopics.Where(s => !selectedTopics.Contains(s.Guid)).ToList();

            foreach (var campusTopic in topicsToRemove)
            {
                CampusTopicService campusTopicService = new CampusTopicService(rockContext);
                campus.CampusTopics.Remove(campusTopic);
                campusTopicService.Delete(campusTopic);
            }

            // Add/Update any CampusTopics that were added or changed in the UI.
            foreach (var campusTopicState in CampusTopicsState)
            {
                var campusTopic = campus.CampusTopics.FirstOrDefault(s => s.Guid == campusTopicState.Guid);
                if (campusTopic == null)
                {
                    campusTopic = new CampusTopic()
                    {
                        CampusId         = campus.Id,
                        Email            = campusTopicState.Email,
                        IsPublic         = campusTopicState.IsPublic,
                        TopicTypeValueId = campusTopicState.TopicTypeId,
                        Guid             = Guid.NewGuid()
                    };

                    campus.CampusTopics.Add(campusTopic);
                }
                else
                {
                    campusTopic.Email            = campusTopicState.Email;
                    campusTopic.TopicTypeValueId = campusTopicState.TopicTypeId;
                    campusTopic.IsPublic         = campusTopicState.IsPublic;
                }
            }
        }
 /// <summary>
 /// Gets the CampusTopic.
 /// </summary>
 /// <param name="campusScheduleGuid">The CampusSchedule guid.</param>
 private CampusTopicDTO GetCampusTopic(Guid campusScheduleGuid)
 {
     return(CampusTopicsState.Find(s => s.Guid == campusScheduleGuid));
 }