correct the mastodon "boost" (aka 'share') author attribution by checking for share activities and pulling the original author info from the activity:object
This commit is contained in:
parent
cb5a047e5d
commit
7b173a75e4
1
boot.php
1
boot.php
@ -486,6 +486,7 @@ define ( 'ACTIVITY_JOIN', NAMESPACE_ACTIVITY_SCHEMA . 'join' );
|
||||
define ( 'ACTIVITY_POST', NAMESPACE_ACTIVITY_SCHEMA . 'post' );
|
||||
define ( 'ACTIVITY_UPDATE', NAMESPACE_ACTIVITY_SCHEMA . 'update' );
|
||||
define ( 'ACTIVITY_TAG', NAMESPACE_ACTIVITY_SCHEMA . 'tag' );
|
||||
define ( 'ACTIVITY_SHARE', NAMESPACE_ACTIVITY_SCHEMA . 'share' );
|
||||
define ( 'ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite' );
|
||||
define ( 'ACTIVITY_CREATE', NAMESPACE_ACTIVITY_SCHEMA . 'create' );
|
||||
define ( 'ACTIVITY_WIN', NAMESPACE_ACTIVITY_SCHEMA . 'win' );
|
||||
|
@ -254,6 +254,48 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
else
|
||||
$base_url = '';
|
||||
|
||||
|
||||
$rawverb = $item->get_item_tags(NAMESPACE_ACTIVITY, 'verb');
|
||||
|
||||
// select between supported verbs
|
||||
|
||||
if($rawverb) {
|
||||
$res['verb'] = unxmlify($rawverb[0]['data']);
|
||||
}
|
||||
|
||||
// translate OStatus unfollow to activity streams if it happened to get selected
|
||||
|
||||
if((x($res,'verb')) && ($res['verb'] === 'http://ostatus.org/schema/1.0/unfollow'))
|
||||
$res['verb'] = ACTIVITY_UNFOLLOW;
|
||||
|
||||
|
||||
|
||||
if(array_key_exists('verb',$res) && $res['verb'] === ACTIVITY_SHARE) {
|
||||
// For Mastodon shares ("boosts"), we need to parse the original author information
|
||||
// from the activity:object -> author structure
|
||||
$rawobj = $item->get_item_tags(NAMESPACE_ACTIVITY, 'object');
|
||||
|
||||
if($rawobj) {
|
||||
$rawauthor = $rawobj->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'author');
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name']) {
|
||||
$author['author_name'] = unxmlify($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name']);
|
||||
}
|
||||
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri']) {
|
||||
$author['author_link'] = unxmlify($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri']);
|
||||
}
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
||||
$base = $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
|
||||
foreach($base as $link) {
|
||||
if(!x($author, 'author_photo') || ! $author['author_photo']) {
|
||||
if($link['attribs']['']['rel'] === 'photo' || $link['attribs']['']['rel'] === 'avatar')
|
||||
$author['author_photo'] = unxmlify($link['attribs']['']['href']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// look for a photo. We should check media size and find the best one,
|
||||
// but for now let's just find any author photo
|
||||
|
||||
@ -330,6 +372,7 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$ostatus_protocol = (($item->get_item_tags(NAMESPACE_OSTATUS,'conversation')) ? true : false);
|
||||
|
||||
@ -492,18 +535,6 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
$res['coord'] = unxmlify($rawgeo[0]['data']);
|
||||
|
||||
|
||||
$rawverb = $item->get_item_tags(NAMESPACE_ACTIVITY, 'verb');
|
||||
|
||||
// select between supported verbs
|
||||
|
||||
if($rawverb) {
|
||||
$res['verb'] = unxmlify($rawverb[0]['data']);
|
||||
}
|
||||
|
||||
// translate OStatus unfollow to activity streams if it happened to get selected
|
||||
|
||||
if((x($res,'verb')) && ($res['verb'] === 'http://ostatus.org/schema/1.0/unfollow'))
|
||||
$res['verb'] = ACTIVITY_UNFOLLOW;
|
||||
|
||||
$cats = $item->get_categories();
|
||||
if($cats) {
|
||||
|
Reference in New Issue
Block a user