Beispiel #1
0
        public BlockActionResult GetMemberData(Guid groupMemberGuid)
        {
            using (var rockContext = new RockContext())
            {
                var member = new GroupMemberService(rockContext)
                             .Queryable()
                             .Include(m => m.Group.GroupType)
                             .FirstOrDefault(m => m.Guid == groupMemberGuid);

                if (member == null)
                {
                    return(ActionBadRequest("We couldn't find that member."));
                }
                else if (!member.Group.IsAuthorized(Authorization.EDIT, RequestContext.CurrentPerson) && !member.Group.IsAuthorized(Authorization.MANAGE_MEMBERS, RequestContext.CurrentPerson))
                {
                    return(ActionBadRequest("You are not authorized to edit members of this group."));
                }

                // Get the header content to send down.
                string headerContent = ShowHeader
                    ? "<StackLayout><Label StyleClass=\"h2\" Text=\"Group Member Edit\" /><Rock:Divider /></StackLayout>"
                    : string.Empty;

                // Get all the attribute fields.
                member.LoadAttributes(rockContext);
                var fields = GetEditableAttributes(member)
                             .Select(a => new MobileField
                {
                    AttributeGuid       = a.Guid,
                    Key                 = a.Key,
                    Title               = a.Name,
                    IsRequired          = a.IsRequired,
                    ConfigurationValues = a.QualifierValues.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.Value),
                    FieldTypeGuid       = a.FieldType.Guid,
#pragma warning disable CS0618 // Type or member is obsolete: Required for Mobile Shell v2 support
                    RockFieldType = a.FieldType.Class,
#pragma warning restore CS0618 // Type or member is obsolete: Required for Mobile Shell v2 support
                    Value = member.GetAttributeValue(a.Key)
                })
                             .ToList();

                // Get all the roles that can be set for this member.
                var roles = GroupTypeCache.Get(member.Group.GroupTypeId)
                            .Roles
                            .OrderBy(r => r.Order)
                            .Select(r => new ListItemViewModel
                {
                    Value = r.Guid.ToString(),
                    Text  = r.Name
                })
                            .ToList();

                // Configure the delete/archive options.
                bool canDelete  = EnableDelete;
                bool canArchive = false;

                if (canDelete)
                {
                    var groupMemberHistoricalService = new GroupMemberHistoricalService(rockContext);
                    var roleIdsWithGroupSync         = member.Group.GroupSyncs.Select(a => a.GroupTypeRoleId).ToList();

                    if (roleIdsWithGroupSync.Contains(member.GroupRoleId))
                    {
                        canDelete = false;
                    }
                    else if (member.Group.GroupType.EnableGroupHistory == true && groupMemberHistoricalService.Queryable().Any(a => a.GroupMemberId == member.Id))
                    {
                        canDelete  = false;
                        canArchive = true;
                    }
                }

                return(ActionOk(new GetMemberDataResult
                {
                    HeaderContent = headerContent,
                    Roles = roles,
                    Fields = fields,
                    CanDelete = canDelete,
                    CanArchive = canArchive,
                    Name = member.Person.FullName,
                    RoleGuid = member.GroupRole.Guid,
                    MemberStatus = member.GroupMemberStatus,
                    Note = member.Note,
                }));
            }
        }