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:----qe05MiWQydISb3gSQfFjcz1401eXN149YVjDN/v/UHjHGToh8bJKlV4ABppTJ4y8eekIuqrO2v9V65oql628ODbYj6hLiGeqi9NlPWfa6Q2yQwccLEmJow00SfVcygu37HteZPbdY8nRLRzwBtLQhZwYUqfC2cLWHc/2fADA1LvlPW7NuAy+HiPpBrlcV1KUKVMPtCaZ7dpbF+Ryv+Vqp1/+Y+w9Ad9dlwn2GcohPlhR4hQKQ++F/UGPMRvpcWPdWeVxGMHAk3FBaHaG6Ti/nXUM/kg8LyeBSf4g+10GDY7tsednn2xuylfs4ft/PSbWyEQc/bt0tpYdjAILpjko2KKrQyQQ13SmmHsd4zIPCWFfyfybGvtBxldjninawJuLQCHHeKyBOzZ+wrEAE/wVw9XDyph0tm1ZkjAelxBWx9IWebmUn21/mjKiNcXPD1E0lMEhNdV7GfJmLvC+JFODFdwNNtRNHKp1rtWWeGlO9nJUuTfVhH5h5or+NuK0IfoKvBkRc30FUYOsMwhENKikxMx+VDSgpW92XmHUGKHNbgfaPu3nMZpSuTls+po5lutUzSomNlPW+xoCnQZVlcyqpgcVrKufwbp/H3U4/rzLPvUZD2hajPqBWZ3hCuEjluOzuzgUMh5rNE1T0fLsyrmgLZLFB2uH9vp+WfT9RRKV4bg=----ATTACHMENT:----NzMxMzUxNDQ3NTMxODMzMCAyOTg4MDA2ODUzNzE5NjEwIDIwNzAzMTEwNzEwNTA3Nzg=