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, })); } }