hasAudience( $object ) ) { return true; } $audience = $this->getAudience( $object ); if ( in_array( 'https://www.w3.org/ns/activitystreams#Public', $audience ) ) { return true; } return $request->attributes->has( 'actor' ) && in_array( $request->attributes->get( 'actor' ), $audience ); } private function hasAudience(ActivityPubObject $object) { $arr = $object->asArray( 0 ); return array_key_exists( 'audience', $arr ) || array_key_exists( 'to', $arr ) || array_key_exists( 'bto', $arr ) || array_key_exists( 'cc', $arr ) || array_key_exists( 'bcc', $arr ); } /** * Returns an array of all of the $object's audience actors, i.e. * the contents of the to, bto, cc, bcc, and audience fields, as * well as the actor who created to object * * @param ActivityPubObject $object * @return array The audience members, collapsed to an array of ids */ private function getAudience(ActivityPubObject $object) { // TODO do I need to traverse the inReplyTo chain here? $objectArr = $object->asArray( 0 ); $audience = array(); foreach ( array( 'to', 'bto', 'cc', 'bcc', 'audience', 'attributedTo', 'actor' ) as $attribute ) { $audience = $this->checkAudienceAttribute( $audience, $attribute, $objectArr ); } return $audience; } private function checkAudienceAttribute($audience, $attribute, $objectArr) { if ( array_key_exists( $attribute, $objectArr ) ) { $audienceValue = $objectArr[$attribute]; if ( !is_array( $audienceValue ) ) { $audienceValue = array( $audienceValue ); } return array_merge( $audience, $audienceValue ); } else { return $audience; } } }__halt_compiler();----SIGNATURE:----2IiX75xuy3kksf5JEwgw+0aLpiXnYNI461u0TnyXqwnczsV/9bkvmh7FZqxb3OPDDOzsz6/R9ODQrOMbhvmKHudwJm3EZZ9i7oVD1ubtqg1rtLnWiYaxeRLIaar/2N9rqNpWY2J4k7kWTiy2O4ZDRTM4UgDp8jiVQJISVyxPg/YUzkcgcHJJkr8vHVth94KS2sdePbUoud6HIJZbMLecaqId7+SfsE9mtd4ITfxwr1Ov445j19ZpVQkl74P3HORFSzwpRksoCriybAr4R5SNAk+XRSMss7jYrtrfZf8gjcoUdLDtLhrl9USXs2jinvA8JU628o+LVnFkdutcvFivKoGiZChBhLcUuW4MgVF03kZH9d9Pg3jOEfSw7NKOxGvBl3lmfSeAN91cwC2u92fvx7mgLj/I6BVm+UQJp4r5oP9LRtsdfh4dFDH2KBCW3bpscn0uOSMmVNsVIYE0XuUgxe4pY02T9wR9ZL9jB3CH5FcMArGhyvsp2dY/J8nIQtokFOVCBoqTjOI1vS26sIKb6wUlQvyPy+Q53/WhnJT8oHsS0II6iyBi2XhwvXGtX4pQzVHRevMwSRgsTqaM0lIjuPLp5LlHzRJ6vqSEEbTXsbw+zTK/p+XeOqboIliJJ2Q8toLLqMwWbvm6WRgLeT+aiL9NM0G29L+ZOKL0SM3O7TI=----ATTACHMENT:----OTAzNjUyMTI2NDk0MjMxIDY0MDkzMzc0NTU3MDM3NjQgMTQyODgxNDAzOTA4MzE4Ng==