Пример #1
0
        /// <summary>
        /// Sets the selection.
        /// </summary>
        /// <param name="controls">The controls.</param>
        /// <param name="selection">The selection.</param>
        public override void SetSelection(Control[] controls, string selection)
        {
            var dvpDataView          = controls.GetByName <DataViewItemPicker>(_CtlDataView);
            var ddlRoleType          = controls.GetByName <RockDropDownList>(_CtlRoleType);
            var ddlFormat            = controls.GetByName <RockDropDownList>(_CtlFormat);
            var ddlGroupMemberStatus = controls.GetByName <RockDropDownList>(_CtlGroupStatus);

            var settings = new GroupParticipationSelectSettings(selection);

            if (!settings.IsValid)
            {
                return;
            }

            ddlFormat.SelectedValue = settings.ListFormat.ToString();

            if (settings.DataViewGuid.HasValue)
            {
                var dsService = new DataViewService(new RockContext());

                var dataView = dsService.Get(settings.DataViewGuid.Value);
                dvpDataView.SetValue(dataView);
            }

            ddlRoleType.SelectedValue          = settings.RoleType.ToStringSafe();
            ddlGroupMemberStatus.SelectedValue = settings.MemberStatus.ToStringSafe();
        }
Пример #2
0
        /// <summary>
        /// Gets the selection.
        /// This is typically a string that contains the values selected with the Controls
        /// </summary>
        /// <param name="controls">The controls.</param>
        /// <returns></returns>
        public override string GetSelection(Control[] controls)
        {
            var dvpDataView          = controls.GetByName <DataViewItemPicker>(_CtlDataView);
            var ddlRoleType          = controls.GetByName <RockDropDownList>(_CtlRoleType);
            var ddlFormat            = controls.GetByName <RockDropDownList>(_CtlFormat);
            var ddlGroupMemberStatus = controls.GetByName <RockDropDownList>(_CtlGroupStatus);

            var settings = new GroupParticipationSelectSettings();

            settings.MemberStatus = ddlGroupMemberStatus.SelectedValue.ConvertToEnumOrNull <GroupMemberStatus>();
            settings.RoleType     = ddlRoleType.SelectedValue.ConvertToEnumOrNull <RoleTypeSpecifier>();
            settings.DataViewGuid = DataComponentSettingsHelper.GetDataViewGuid(dvpDataView.SelectedValue);
            settings.ListFormat   = ddlFormat.SelectedValue.ConvertToEnum <ListFormatSpecifier>(ListFormatSpecifier.GroupAndRole);

            return(settings.ToSelectionString());
        }
Пример #3
0
        /// <summary>
        /// Sets the selection.
        /// </summary>
        /// <param name="controls">The controls.</param>
        /// <param name="selection">The selection.</param>
        public override void SetSelection(Control[] controls, string selection)
        {
            var dvpDataView          = controls.GetByName <DataViewItemPicker>(_CtlDataView);
            var ddlRoleType          = controls.GetByName <RockDropDownList>(_CtlRoleType);
            var ddlFormat            = controls.GetByName <RockDropDownList>(_CtlFormat);
            var ddlGroupMemberStatus = controls.GetByName <RockDropDownList>(_CtlGroupStatus);

            var settings = new GroupParticipationSelectSettings(selection);

            if (!settings.IsValid)
            {
                return;
            }

            ddlFormat.SelectedValue = settings.ListFormat.ToString();

            if (settings.DataViewGuid.HasValue)
            {
                var dsService = new DataViewService(new RockContext());

                var dataView = dsService.Get(settings.DataViewGuid.Value);
                dvpDataView.SetValue(dataView);
            }

            ddlRoleType.SelectedValue = settings.RoleType.ToStringSafe();
            if (settings.MemberStatus.HasValue)
            {
                ddlGroupMemberStatus.SetValue(settings.MemberStatus.ConvertToInt());
            }
            else
            {
                /* [2021-06-02] DJL
                 * Don't use SetValue( int? value ) when trying to set the empty option when any the values in the ListItem have value "0"
                 */
                ddlGroupMemberStatus.SelectedValue = string.Empty;
            }
        }
Пример #4
0
        /// <summary>
        /// Gets the expression.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="entityIdProperty">The entity identifier property.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override Expression GetExpression(RockContext context, MemberExpression entityIdProperty, string selection)
        {
            var settings = new GroupParticipationSelectSettings(selection);

            //
            // Define Candidate Groups.
            //

            // Get the Group Data View that defines the set of candidates from which matching Groups can be selected.
            var dataView = DataComponentSettingsHelper.GetDataViewForFilterComponent(settings.DataViewGuid, context);

            // Evaluate the Data View that defines the candidate Groups.
            var groupService = new GroupService(context);

            var groupQuery = groupService.Queryable();

            if (dataView != null)
            {
                groupQuery = DataComponentSettingsHelper.FilterByDataView(groupQuery, dataView, groupService);
            }
            else
            {
                // Apply a default Group filter to only show Groups that would be visible in a Group List.
                groupQuery = groupQuery.Where(x => x.GroupType.ShowInGroupList);
            }

            var groupKeys = groupQuery.Select(x => x.Id);

            //
            // Construct the Query to return the list of Group Members matching the filter conditions.
            //
            var groupMemberQuery = new GroupMemberService(context).Queryable();

            // Filter By Group.
            groupMemberQuery = groupMemberQuery.Where(x => groupKeys.Contains(x.GroupId));

            // Filter By Group Role Type.
            switch (settings.RoleType)
            {
            case RoleTypeSpecifier.Member:
                groupMemberQuery = groupMemberQuery.Where(x => !x.GroupRole.IsLeader);
                break;

            case RoleTypeSpecifier.Leader:
                groupMemberQuery = groupMemberQuery.Where(x => x.GroupRole.IsLeader);
                break;
            }

            // Filter by Group Member Status.
            if (settings.MemberStatus.HasValue)
            {
                groupMemberQuery = groupMemberQuery.Where(x => x.GroupMemberStatus == settings.MemberStatus.Value);
            }

            //
            // Create a Select Expression to return the requested values.
            //

            // Set the Output Format of the field.
            Expression selectExpression;

            if (settings.ListFormat == ListFormatSpecifier.YesNo)
            {
                // Define a Query to return True/False text indicating if the Person participates in any of the filtered Groups.
                // Note that the text must be returned as an Enumerable to satisfy the expected output of this field.
                var personGroupsQuery = new PersonService(context).Queryable()
                                        .Select(p => new List <string> {
                    groupMemberQuery.Any(s => s.PersonId == p.Id) ? "Yes" : "No"
                });

                selectExpression = SelectExpressionExtractor.Extract(personGroupsQuery, entityIdProperty, "p");
            }
            else
            {
                // Define a Query to return the collection of filtered Groups for each Person.
                Expression <Func <Rock.Model.GroupMember, string> > outputExpression;

                if (settings.ListFormat == ListFormatSpecifier.GroupOnly)
                {
                    outputExpression = ((m => m.Group.Name));
                }
                else
                {
                    outputExpression = ((m => m.Group.Name + " [" + m.GroupRole.Name + "]"));
                }

                // Define a Query to return the collection of filtered Groups for each Person.
                var personGroupsQuery = new PersonService(context).Queryable()
                                        .Select(p => groupMemberQuery.Where(s => s.PersonId == p.Id)
                                                .OrderBy(x => x.Group.Name)
                                                .ThenBy(x => x.GroupRole.Name)
                                                .Select(outputExpression).AsEnumerable());

                selectExpression = SelectExpressionExtractor.Extract(personGroupsQuery, entityIdProperty, "p");
            }

            return(selectExpression);
        }
Пример #5
0
        /// <summary>
        /// Sets the selection.
        /// </summary>
        /// <param name="controls">The controls.</param>
        /// <param name="selection">The selection.</param>
        public override void SetSelection( Control[] controls, string selection )
        {
            var ddlDataView = controls.GetByName<DataViewPicker>( _CtlDataView );
            var ddlRoleType = controls.GetByName<RockDropDownList>( _CtlRoleType );
            var ddlFormat = controls.GetByName<RockDropDownList>( _CtlFormat );
            var ddlGroupMemberStatus = controls.GetByName<RockDropDownList>( _CtlGroupStatus );

            var settings = new GroupParticipationSelectSettings( selection );

            if ( !settings.IsValid )
            {
                return;
            }

            ddlFormat.SelectedValue = settings.ListFormat.ToString();

            if ( settings.DataViewGuid.HasValue )
            {
                var dsService = new DataViewService( new RockContext() );

                var dataView = dsService.Get( settings.DataViewGuid.Value );

                if ( dataView != null )
                {
                    ddlDataView.SelectedValue = dataView.Id.ToString();
                }
            }

            ddlRoleType.SelectedValue = settings.RoleType.ToStringSafe();
            ddlGroupMemberStatus.SelectedValue = settings.MemberStatus.ToStringSafe();
        }
Пример #6
0
        /// <summary>
        /// Gets the selection.
        /// This is typically a string that contains the values selected with the Controls
        /// </summary>
        /// <param name="controls">The controls.</param>
        /// <returns></returns>
        public override string GetSelection( Control[] controls )
        {
            var ddlDataView = controls.GetByName<DataViewPicker>( _CtlDataView );
            var ddlRoleType = controls.GetByName<RockDropDownList>( _CtlRoleType );
            var ddlFormat = controls.GetByName<RockDropDownList>( _CtlFormat );
            var ddlGroupMemberStatus = controls.GetByName<RockDropDownList>( _CtlGroupStatus );

            var settings = new GroupParticipationSelectSettings();

            settings.MemberStatus = ddlGroupMemberStatus.SelectedValue.ConvertToEnumOrNull<GroupMemberStatus>();
            settings.RoleType = ddlRoleType.SelectedValue.ConvertToEnumOrNull<RoleTypeSpecifier>();
            settings.DataViewGuid = DataComponentSettingsHelper.GetDataViewGuid( ddlDataView.SelectedValue );
            settings.ListFormat = ddlFormat.SelectedValue.ConvertToEnum<ListFormatSpecifier>( ListFormatSpecifier.GroupAndRole );

            return settings.ToSelectionString();
        }
Пример #7
0
        /// <summary>
        /// Gets the expression.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="entityIdProperty">The entity identifier property.</param>
        /// <param name="selection">The selection.</param>
        /// <returns></returns>
        public override Expression GetExpression( RockContext context, MemberExpression entityIdProperty, string selection )
        {
            var settings = new GroupParticipationSelectSettings( selection );

            //
            // Define Candidate Groups.
            //

            // Get the Group Data View that defines the set of candidates from which matching Groups can be selected.
            var dataView = DataComponentSettingsHelper.GetDataViewForFilterComponent( settings.DataViewGuid, context );

            // Evaluate the Data View that defines the candidate Groups.
            var groupService = new GroupService( context );

            var groupQuery = groupService.Queryable();

            if (dataView != null)
            {
                groupQuery = DataComponentSettingsHelper.FilterByDataView( groupQuery, dataView, groupService );
            }
            else
            {
                // Apply a default Group filter to only show Groups that would be visible in a Group List.
                groupQuery = groupQuery.Where( x => x.GroupType.ShowInGroupList );
            }

            var groupKeys = groupQuery.Select( x => x.Id );

            //
            // Construct the Query to return the list of Group Members matching the filter conditions.
            //
            var groupMemberQuery = new GroupMemberService( context ).Queryable();

            // Filter By Group.
            groupMemberQuery = groupMemberQuery.Where( x => groupKeys.Contains( x.GroupId ) );

            // Filter By Group Role Type.
            switch ( settings.RoleType )
            {
                case RoleTypeSpecifier.Member:
                    groupMemberQuery = groupMemberQuery.Where( x => !x.GroupRole.IsLeader );
                    break;

                case RoleTypeSpecifier.Leader:
                    groupMemberQuery = groupMemberQuery.Where( x => x.GroupRole.IsLeader );
                    break;
            }

            // Filter by Group Member Status.
            if ( settings.MemberStatus.HasValue )
            {
                groupMemberQuery = groupMemberQuery.Where( x => x.GroupMemberStatus == settings.MemberStatus.Value );
            }

            //
            // Create a Select Expression to return the requested values.
            //

            // Set the Output Format of the field.
            Expression selectExpression;

            if (settings.ListFormat == ListFormatSpecifier.YesNo)
            {
                // Define a Query to return True/False text indicating if the Person participates in any of the filtered Groups.
                // Note that the text must be returned as an Enumerable to satisfy the expected output of this field.
                var personGroupsQuery = new PersonService( context ).Queryable()
                                                                    .Select( p => new List<string> { groupMemberQuery.Any( s => s.PersonId == p.Id ) ? "Yes" : "No" } );

                selectExpression = SelectExpressionExtractor.Extract( personGroupsQuery, entityIdProperty, "p" );
            }
            else
            {
                // Define a Query to return the collection of filtered Groups for each Person.
                Expression<Func<Rock.Model.GroupMember, string>> outputExpression;

                if (settings.ListFormat == ListFormatSpecifier.GroupOnly)
                {
                    outputExpression = ( ( m => m.Group.Name ) );
                }
                else
                {
                    outputExpression = ( ( m => m.Group.Name + " [" + m.GroupRole.Name + "]" ) );
                }

                // Define a Query to return the collection of filtered Groups for each Person.
                var personGroupsQuery = new PersonService( context ).Queryable()
                                                                    .Select( p => groupMemberQuery.Where( s => s.PersonId == p.Id )
                                                                                                  .OrderBy( x => x.Group.Name )
                                                                                                  .ThenBy( x => x.GroupRole.Name )
                                                                                                  .Select( outputExpression ).AsEnumerable() );

                selectExpression = SelectExpressionExtractor.Extract( personGroupsQuery, entityIdProperty, "p" );
            }

            return selectExpression;
        }