protected void rptPartions_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                /*var ddlAttribute = ( DropDownList ) e.Item.FindControl( "ddlAttribute" );
                 * ddlAttribute.DataSource = attributes;
                 * ddlAttribute.DataTextField = "Value";
                 * ddlAttribute.DataValueField = "Key";
                 * ddlAttribute.DataBind();
                 */

                var         partition          = (( PartitionSettings )e.Item.DataItem);
                var         phPartitionControl = ( PlaceHolder )e.Item.FindControl("phPartitionControl");
                RockTextBox tbAttributeKey     = (( RockTextBox )e.Item.FindControl("tbAttributeKey"));
                switch (partition.PartitionType)
                {
                case "Campus":
                    phPartitionControl.Controls.Add(new LiteralControl("<div class='row'><div class='col-md-4'><strong>Name</strong></div><div class='col-md-8'><strong>Group</strong></div>"));

                    foreach (var campus in CampusCache.All())
                    {
                        phPartitionControl.Controls.Add(new LiteralControl("<div class='row'><div class='col-xs-4'>"));
                        var campusCbl = new CheckBox();
                        campusCbl.ID = campus.Guid.ToString() + "_" + partition.Guid + "_checkbox";
                        if (partition.PartitionValue != null)
                        {
                            campusCbl.Checked = partition.PartitionValue.Contains(campus.Guid.ToString());
                        }
                        campusCbl.Text            = campus.Name;
                        campusCbl.CheckedChanged += CampusCbl_CheckedChanged;
                        campusCbl.AutoPostBack    = true;
                        if (partition.PartitionValue != null)
                        {
                            campusCbl.Checked = partition.PartitionValue.Contains(campus.Guid.ToString());
                        }
                        phPartitionControl.Controls.Add(campusCbl);
                        phPartitionControl.Controls.Add(new LiteralControl("</div>"));

                        phPartitionControl.Controls.Add(new LiteralControl("<div class='col-xs-8'>"));
                        var ddlPlacementGroup = new RockDropDownList();
                        ddlPlacementGroup.ID = campus.Guid.ToString() + "_" + partition.Guid + "_group";
                        ddlPlacementGroup.SelectedIndexChanged += DdlPlacementGroup_SelectedIndexChanged;
                        ddlPlacementGroup.AutoPostBack          = true;
                        List <ListItem> groupList = getGroups().Select(g => new ListItem(String.Format("{0} ({1})", g.Name, g.Campus != null ? g.Campus.Name : "No Campus"), g.Id.ToString())).ToList();
                        groupList.Insert(0, new ListItem("Not Mapped", null));
                        ddlPlacementGroup.Items.AddRange(groupList.ToArray());
                        if (partition.GroupMap != null && partition.GroupMap.ContainsKey(campus.Guid.ToString()))
                        {
                            ddlPlacementGroup.SetValue(partition.GroupMap[campus.Guid.ToString()]);
                        }
                        phPartitionControl.Controls.Add(ddlPlacementGroup);
                        phPartitionControl.Controls.Add(new LiteralControl("</div></div>"));
                    }
                    phPartitionControl.Controls.Add(new LiteralControl("</div>"));
                    tbAttributeKey.ReadOnly = true;

                    break;

                case "Schedule":
                    phPartitionControl.Controls.Add(new LiteralControl("<strong>Schedule</strong><br />"));
                    var schedule = new SchedulePicker()
                    {
                        AllowMultiSelect = true, ID = partition.Guid.ToString()
                    };
                    schedule.SelectItem += Schedule_SelectItem;
                    if (!string.IsNullOrWhiteSpace(partition.PartitionValue))
                    {
                        ScheduleService scheduleService = new ScheduleService(new RockContext());
                        List <Guid>     scheduleGuids   = partition.PartitionValue.Split(',').Select(pv => pv.AsGuid()).ToList();

                        schedule.SetValues(scheduleService.GetByGuids(scheduleGuids).ToList().Select(s => s.Id).ToList());
                    }
                    phPartitionControl.Controls.Add(schedule);
                    break;

                case "DefinedType":
                    phPartitionControl.Controls.Add(new LiteralControl("<strong>Defined Type</strong><br />"));
                    var definedTypeRddl = new RockDropDownList()
                    {
                        ID = partition.Guid.ToString()
                    };
                    DefinedTypeService definedTypeService = new DefinedTypeService(new RockContext());
                    var listItems = definedTypeService.Queryable().Select(dt => new { Name = (dt.Category != null ? dt.Category.Name + ": " : "") + dt.Name, Guid = dt.Guid }).ToList();
                    listItems.Insert(0, new { Name = "Select One . . .", Guid = Guid.Empty });
                    definedTypeRddl.DataSource     = listItems;
                    definedTypeRddl.DataTextField  = "Name";
                    definedTypeRddl.DataValueField = "Guid";
                    definedTypeRddl.DataBind();
                    definedTypeRddl.AutoPostBack          = true;
                    definedTypeRddl.SelectedIndexChanged += DefinedTypeRddl_SelectedIndexChanged;
                    if (!string.IsNullOrWhiteSpace(partition.PartitionValue))
                    {
                        definedTypeRddl.SelectedValue = partition.PartitionValue;
                    }
                    phPartitionControl.Controls.Add(definedTypeRddl);
                    break;

                case "Role":
                    if (Settings.EntityTypeGuid == Rock.SystemGuid.EntityType.CONNECTION_OPPORTUNITY.AsGuid())
                    {
                        ConnectionOpportunity connection = ( ConnectionOpportunity )Settings.Entity();
                        var roles = connection.ConnectionOpportunityGroupConfigs.Where(cogc => cogc.GroupMemberRole != null).OrderBy(r => r.GroupTypeId).ThenBy(r => r.GroupMemberRole.Order).Select(r => new { Name = r.GroupType.Name + ": " + r.GroupMemberRole.Name, Guid = r.GroupMemberRole.Guid }).ToList();

                        phPartitionControl.Controls.Add(new LiteralControl("<div class='row'><div class='col-md-4'><strong>Name</strong></div><div class='col-md-8'><strong>Group</strong></div>"));

                        foreach (var role in roles)
                        {
                            phPartitionControl.Controls.Add(new LiteralControl("<div class='row'><div class='col-xs-4'>"));
                            var roleCbl = new CheckBox();
                            roleCbl.ID = role.Guid.ToString() + "_" + partition.Guid + "_checkbox";
                            if (!string.IsNullOrWhiteSpace(partition.PartitionValue))
                            {
                                roleCbl.Checked = partition.PartitionValue.Contains(role.Guid.ToString());
                            }
                            roleCbl.Text            = role.Name;
                            roleCbl.CheckedChanged += CampusCbl_CheckedChanged;
                            roleCbl.AutoPostBack    = true;
                            phPartitionControl.Controls.Add(roleCbl);
                            phPartitionControl.Controls.Add(new LiteralControl("</div>"));

                            phPartitionControl.Controls.Add(new LiteralControl("<div class='col-xs-8'>"));
                            var ddlPlacementGroup = new RockDropDownList();
                            ddlPlacementGroup.ID = role.Guid.ToString() + "_" + partition.Guid + "_group";
                            ddlPlacementGroup.SelectedIndexChanged += DdlPlacementGroup_SelectedIndexChanged;
                            ddlPlacementGroup.AutoPostBack          = true;

                            List <ListItem> groupList = getGroups().Select(g => new ListItem(String.Format("{0} ({1})", g.Name, g.Campus != null ? g.Campus.Name : "No Campus"), g.Id.ToString())).ToList();
                            groupList.Insert(0, new ListItem("Not Mapped", null));
                            ddlPlacementGroup.Items.AddRange(groupList.ToArray());
                            if (partition.GroupMap != null && partition.GroupMap.ContainsKey(role.Guid.ToString()))
                            {
                                ddlPlacementGroup.SetValue(partition.GroupMap[role.Guid.ToString()]);
                            }
                            phPartitionControl.Controls.Add(ddlPlacementGroup);
                            phPartitionControl.Controls.Add(new LiteralControl("</div></div>"));
                        }
                        phPartitionControl.Controls.Add(new LiteralControl("</div>"));
                        tbAttributeKey.ReadOnly = true;
                    }

                    break;
                }

                tbAttributeKey.ID   = "attribute_key_" + partition.Guid.ToString();
                tbAttributeKey.Text = partition.AttributeKey;
                (( LinkButton )e.Item.FindControl("bbPartitionDelete")).CommandArgument = partition.Guid.ToString();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Creates the child controls.
        /// </summary>
        /// <returns></returns>
        public override Control[] CreateChildControls(Type entityType, FilterField filterControl)
        {
            var pGroupPicker = new GroupPicker();

            pGroupPicker.AllowMultiSelect = true;
            pGroupPicker.ID = $"{filterControl.ID}_{nameof( pGroupPicker )}";
            pGroupPicker.AddCssClass("js-group-picker");
            filterControl.Controls.Add(pGroupPicker);

            var cbChildGroups = new RockCheckBox();

            cbChildGroups.ID = $"{filterControl.ID}_{nameof( cbChildGroups )}";
            cbChildGroups.AddCssClass("js-child-groups");
            cbChildGroups.Text = "Include Child Groups";
            filterControl.Controls.Add(cbChildGroups);

            var ddlIntegerCompare = ComparisonHelper.ComparisonControl(ComparisonHelper.NumericFilterComparisonTypes);

            ddlIntegerCompare.Label = "Attendance Count";
            ddlIntegerCompare.ID    = $"{filterControl.ID}_{nameof( ddlIntegerCompare )}";
            ddlIntegerCompare.AddCssClass("js-filter-compare");
            filterControl.Controls.Add(ddlIntegerCompare);

            var tbAttendedCount = new RockTextBox();

            tbAttendedCount.ID    = $"{filterControl.ID}_{nameof( tbAttendedCount )}";
            tbAttendedCount.Label = "&nbsp;"; // give it whitespace label so it lines up nicely
            tbAttendedCount.AddCssClass("js-attended-count");
            filterControl.Controls.Add(tbAttendedCount);

            var slidingDateRangePicker = new SlidingDateRangePicker();

            slidingDateRangePicker.Label = "Date Range";
            slidingDateRangePicker.ID    = $"{filterControl.ID}_{nameof( slidingDateRangePicker )}";
            slidingDateRangePicker.AddCssClass("js-sliding-date-range");
            filterControl.Controls.Add(slidingDateRangePicker);

            var schedulePicker = new SchedulePicker();

            schedulePicker.Label = "Schedules";
            schedulePicker.ID    = $"{filterControl.ID}_{nameof( schedulePicker )}";
            schedulePicker.AddCssClass("js-schedule-picker");
            schedulePicker.AllowMultiSelect = true;
            filterControl.Controls.Add(schedulePicker);

            var controls = new Control[6] {
                pGroupPicker, cbChildGroups, ddlIntegerCompare, tbAttendedCount, slidingDateRangePicker, schedulePicker
            };

            var defaultGroupAttendanceFilterSelection = new GroupAttendanceFilterSelection
            {
                IntegerCompare     = ComparisonType.GreaterThanOrEqualTo.ConvertToInt().ToString(),
                AttendedCount      = 4,
                SlidingDateRange   = slidingDateRangePicker.DelimitedValues,
                IncludeChildGroups = false,
            };

            // set the default values in case this is a newly added filter
            SetSelection(
                entityType,
                controls,
                defaultGroupAttendanceFilterSelection.ToJson());

            return(controls);
        }