diff --git a/lib/FederatedItems/SingleMemberAdd.php b/lib/FederatedItems/SingleMemberAdd.php index f71c42e7b..2c7aa6a01 100644 --- a/lib/FederatedItems/SingleMemberAdd.php +++ b/lib/FederatedItems/SingleMemberAdd.php @@ -368,6 +368,12 @@ protected function generateMember(FederatedEvent $event, Circle $circle, Member throw new FederatedItemBadRequestException(StatusCode::$MEMBER_ADD[125], 125); } + if ($circle->isConfig(Circle::CFG_LOCAL) + && $federatedUser->getUserType() === Member::TYPE_CIRCLE + && !$federatedUser->getBasedOn()->isConfig(Circle::CFG_LOCAL)) { + throw new FederatedItemBadRequestException(StatusCode::$MEMBER_ADD[131], 131); + } + if ($member->getSingleId() === $circle->getSingleId()) { throw new FederatedItemBadRequestException(StatusCode::$MEMBER_ADD[128], 128); } diff --git a/lib/StatusCode.php b/lib/StatusCode.php index aca51529e..4ffa5e9e7 100644 --- a/lib/StatusCode.php +++ b/lib/StatusCode.php @@ -67,7 +67,8 @@ class StatusCode { 127 => 'Remote Users are not accepted in a non-federated Circle', 128 => 'Cannot add Circle as its own Member', 129 => 'Member does not contains a patron', - 130 => 'Member is invited by an entity that does not belongs to the instance at the origin of the request' + 130 => 'Member is invited by an entity that does not belongs to the instance at the origin of the request', + 131 => 'Member is a non-local Circle' ]; public static $MEMBER_LEVEL = [