Merge pull request #1617 from annando/1505-diaspora-objecttype
OStatus and Diaspora improvements
This commit is contained in:
commit
f12430a285
|
@ -785,12 +785,21 @@ function diaspora_is_redmatrix($url) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function diaspora_plink($addr, $guid) {
|
function diaspora_plink($addr, $guid) {
|
||||||
$r = q("SELECT `url`, `nick` FROM `fcontact` WHERE `addr`='%s' LIMIT 1", $addr);
|
$r = q("SELECT `url`, `nick`, `network` FROM `fcontact` WHERE `addr`='%s' LIMIT 1", $addr);
|
||||||
|
|
||||||
// Fallback
|
// Fallback
|
||||||
if (!$r)
|
if (!$r)
|
||||||
return 'https://'.substr($addr,strpos($addr,'@')+1).'/posts/'.$guid;
|
return 'https://'.substr($addr,strpos($addr,'@')+1).'/posts/'.$guid;
|
||||||
|
|
||||||
|
// Friendica contacts are often detected as Diaspora contacts in the "fcontact" table
|
||||||
|
// So we try another way as well.
|
||||||
|
$s = q("SELECT `network` FROM `gcontact` WHERE `nurl`='%s' LIMIT 1", dbesc(normalise_link($r[0]["url"])));
|
||||||
|
if ($s)
|
||||||
|
$r[0]["network"] = $s[0]["network"];
|
||||||
|
|
||||||
|
if ($r[0]["network"] == NETWORK_DFRN)
|
||||||
|
return(str_replace("/profile/".$r[0]["nick"]."/", "/display/".$guid, $r[0]["url"]."/"));
|
||||||
|
|
||||||
if (diaspora_is_redmatrix($r[0]["url"]))
|
if (diaspora_is_redmatrix($r[0]["url"]))
|
||||||
return $r[0]["url"]."/?f=&mid=".$guid;
|
return $r[0]["url"]."/?f=&mid=".$guid;
|
||||||
|
|
||||||
|
@ -833,12 +842,19 @@ function diaspora_post($importer,$xml,$msg) {
|
||||||
|
|
||||||
$body = diaspora2bb($xml->raw_message);
|
$body = diaspora2bb($xml->raw_message);
|
||||||
|
|
||||||
// Add OEmbed and other information to the body
|
|
||||||
if (!diaspora_is_redmatrix($contact['url']))
|
|
||||||
$body = add_page_info_to_body($body, false, true);
|
|
||||||
|
|
||||||
$datarray = array();
|
$datarray = array();
|
||||||
|
|
||||||
|
$datarray["object"] = json_encode($xml);
|
||||||
|
|
||||||
|
if($xml->photo->remote_photo_path AND $xml->photo->remote_photo_name)
|
||||||
|
$datarray["object-type"] = ACTIVITY_OBJ_PHOTO;
|
||||||
|
else {
|
||||||
|
$datarray['object-type'] = ACTIVITY_OBJ_NOTE;
|
||||||
|
// Add OEmbed and other information to the body
|
||||||
|
if (!diaspora_is_redmatrix($contact['url']))
|
||||||
|
$body = add_page_info_to_body($body, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
$str_tags = '';
|
$str_tags = '';
|
||||||
|
|
||||||
$cnt = preg_match_all('/@\[url=(.*?)\[\/url\]/ism',$body,$matches,PREG_SET_ORDER);
|
$cnt = preg_match_all('/@\[url=(.*?)\[\/url\]/ism',$body,$matches,PREG_SET_ORDER);
|
||||||
|
@ -872,7 +888,10 @@ function diaspora_post($importer,$xml,$msg) {
|
||||||
$datarray['author-avatar'] = $contact['thumb'];
|
$datarray['author-avatar'] = $contact['thumb'];
|
||||||
$datarray['body'] = $body;
|
$datarray['body'] = $body;
|
||||||
$datarray['tag'] = $str_tags;
|
$datarray['tag'] = $str_tags;
|
||||||
$datarray['app'] = 'Diaspora';
|
if ($xml->provider_display_name)
|
||||||
|
$datarray["app"] = unxmlify($xml->provider_display_name);
|
||||||
|
else
|
||||||
|
$datarray['app'] = 'Diaspora';
|
||||||
|
|
||||||
// if empty content it might be a photo that hasn't arrived yet. If a photo arrives, we'll make it visible.
|
// if empty content it might be a photo that hasn't arrived yet. If a photo arrives, we'll make it visible.
|
||||||
|
|
||||||
|
@ -921,6 +940,8 @@ function diaspora_store_by_guid($guid, $server, $uid = 0) {
|
||||||
$author = $item["author"];
|
$author = $item["author"];
|
||||||
$guid = $item["guid"];
|
$guid = $item["guid"];
|
||||||
$private = $item["private"];
|
$private = $item["private"];
|
||||||
|
$object = $item["object"];
|
||||||
|
$objecttype = $item["object-type"];
|
||||||
|
|
||||||
$message_id = $author.':'.$guid;
|
$message_id = $author.':'.$guid;
|
||||||
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1",
|
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1",
|
||||||
|
@ -954,6 +975,8 @@ function diaspora_store_by_guid($guid, $server, $uid = 0) {
|
||||||
$datarray['tag'] = $str_tags;
|
$datarray['tag'] = $str_tags;
|
||||||
$datarray['app'] = $app;
|
$datarray['app'] = $app;
|
||||||
$datarray['visible'] = ((strlen($body)) ? 1 : 0);
|
$datarray['visible'] = ((strlen($body)) ? 1 : 0);
|
||||||
|
$datarray['object'] = $object;
|
||||||
|
$datarray['object-type'] = $objecttype;
|
||||||
|
|
||||||
if ($datarray['contact-id'] == 0)
|
if ($datarray['contact-id'] == 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1001,11 +1024,14 @@ function diaspora_fetch_message($guid, $server, $level = 0) {
|
||||||
$item["guid"] = unxmlify($source_xml->post->status_message->guid);
|
$item["guid"] = unxmlify($source_xml->post->status_message->guid);
|
||||||
|
|
||||||
$item["private"] = (unxmlify($source_xml->post->status_message->public) == 'false');
|
$item["private"] = (unxmlify($source_xml->post->status_message->public) == 'false');
|
||||||
|
$item["object"] = json_encode($source_xml->post);
|
||||||
|
|
||||||
if(strlen($source_xml->post->asphoto->objectId) && ($source_xml->post->asphoto->objectId != 0) && ($source_xml->post->asphoto->image_url)) {
|
if(strlen($source_xml->post->asphoto->objectId) && ($source_xml->post->asphoto->objectId != 0) && ($source_xml->post->asphoto->image_url)) {
|
||||||
|
$item["object-type"] = ACTIVITY_OBJ_PHOTO;
|
||||||
$body = '[url=' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '][img]' . notags(unxmlify($source_xml->post->asphoto->objectId)) . '[/img][/url]' . "\n";
|
$body = '[url=' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '][img]' . notags(unxmlify($source_xml->post->asphoto->objectId)) . '[/img][/url]' . "\n";
|
||||||
$body = scale_external_images($body,false);
|
$body = scale_external_images($body,false);
|
||||||
} elseif($source_xml->post->asphoto->image_url) {
|
} elseif($source_xml->post->asphoto->image_url) {
|
||||||
|
$item["object-type"] = ACTIVITY_OBJ_PHOTO;
|
||||||
$body = '[img]' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '[/img]' . "\n";
|
$body = '[img]' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '[/img]' . "\n";
|
||||||
$body = scale_external_images($body);
|
$body = scale_external_images($body);
|
||||||
} elseif($source_xml->post->status_message) {
|
} elseif($source_xml->post->status_message) {
|
||||||
|
@ -1015,18 +1041,25 @@ function diaspora_fetch_message($guid, $server, $level = 0) {
|
||||||
if($source_xml->post->status_message->photo->remote_photo_path AND
|
if($source_xml->post->status_message->photo->remote_photo_path AND
|
||||||
$source_xml->post->status_message->photo->remote_photo_name) {
|
$source_xml->post->status_message->photo->remote_photo_name) {
|
||||||
|
|
||||||
|
$item["object-type"] = ACTIVITY_OBJ_PHOTO;
|
||||||
|
|
||||||
$remote_photo_path = notags(unxmlify($source_xml->post->status_message->photo->remote_photo_path));
|
$remote_photo_path = notags(unxmlify($source_xml->post->status_message->photo->remote_photo_path));
|
||||||
$remote_photo_name = notags(unxmlify($source_xml->post->status_message->photo->remote_photo_name));
|
$remote_photo_name = notags(unxmlify($source_xml->post->status_message->photo->remote_photo_name));
|
||||||
|
|
||||||
$body = '[img]'.$remote_photo_path.$remote_photo_name.'[/img]'."\n".$body;
|
$body = '[img]'.$remote_photo_path.$remote_photo_name.'[/img]'."\n".$body;
|
||||||
|
|
||||||
logger('embedded picture link found: '.$body, LOGGER_DEBUG);
|
logger('embedded picture link found: '.$body, LOGGER_DEBUG);
|
||||||
}
|
} else
|
||||||
|
$item["object-type"] = ACTIVITY_OBJ_NOTE;
|
||||||
|
|
||||||
$body = scale_external_images($body);
|
$body = scale_external_images($body);
|
||||||
|
|
||||||
// Add OEmbed and other information to the body
|
// Add OEmbed and other information to the body
|
||||||
$body = add_page_info_to_body($body, false, true);
|
// To-Do: It could be a repeated redmatrix item
|
||||||
|
// Then we shouldn't add further data to it
|
||||||
|
if ($item["object-type"] == ACTIVITY_OBJ_NOTE)
|
||||||
|
$body = add_page_info_to_body($body, false, true);
|
||||||
|
|
||||||
} elseif($source_xml->post->reshare) {
|
} elseif($source_xml->post->reshare) {
|
||||||
// Reshare of a reshare
|
// Reshare of a reshare
|
||||||
return diaspora_fetch_message($source_xml->post->reshare->root_guid, $server, ++$level);
|
return diaspora_fetch_message($source_xml->post->reshare->root_guid, $server, ++$level);
|
||||||
|
@ -1081,16 +1114,17 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
|
|
||||||
$orig_author = notags(unxmlify($xml->root_diaspora_id));
|
$orig_author = notags(unxmlify($xml->root_diaspora_id));
|
||||||
$orig_guid = notags(unxmlify($xml->root_guid));
|
$orig_guid = notags(unxmlify($xml->root_guid));
|
||||||
|
$orig_url = $a->get_baseurl()."/display/".$orig_guid;
|
||||||
|
|
||||||
$create_original_post = false;
|
$create_original_post = false;
|
||||||
|
|
||||||
// Do we already have this item?
|
// Do we already have this item?
|
||||||
$r = q("SELECT `body`, `tag`, `app`, `created`, `author-link`, `plink` FROM `item` WHERE `guid` = '%s' AND `visible` AND NOT `deleted` AND `body` != '' LIMIT 1",
|
$r = q("SELECT `body`, `tag`, `app`, `created`, `plink`, `object`, `object-type`, `uri` FROM `item` WHERE `guid` = '%s' AND `visible` AND NOT `deleted` AND `body` != '' LIMIT 1",
|
||||||
dbesc($orig_guid),
|
dbesc($orig_guid),
|
||||||
dbesc(NETWORK_DIASPORA)
|
dbesc(NETWORK_DIASPORA)
|
||||||
);
|
);
|
||||||
if(count($r)) {
|
if(count($r)) {
|
||||||
logger('reshared message '.$orig_guid." reshared by ".$guid.' already exists on system: '.$orig_url);
|
logger('reshared message '.$orig_guid." reshared by ".$guid.' already exists on system.');
|
||||||
|
|
||||||
// Maybe it is already a reshared item?
|
// Maybe it is already a reshared item?
|
||||||
// Then refetch the content, since there can be many side effects with reshared posts from other networks or reshares from reshares
|
// Then refetch the content, since there can be many side effects with reshared posts from other networks or reshares from reshares
|
||||||
|
@ -1102,9 +1136,10 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$str_tags = $r[0]["tag"];
|
$str_tags = $r[0]["tag"];
|
||||||
$app = $r[0]["app"];
|
$app = $r[0]["app"];
|
||||||
$orig_created = $r[0]["created"];
|
$orig_created = $r[0]["created"];
|
||||||
$orig_author = $r[0]["author-link"];
|
$orig_plink = $r[0]["plink"];
|
||||||
$create_original_post = ($body != "");
|
$orig_uri = $r[0]["uri"];
|
||||||
$orig_url = $a->get_baseurl()."/display/".$orig_guid;
|
$object = $r[0]["object"];
|
||||||
|
$objecttype = $r[0]["object-type"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1113,8 +1148,6 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$str_tags = "";
|
$str_tags = "";
|
||||||
$app = "";
|
$app = "";
|
||||||
|
|
||||||
$orig_url = 'https://'.substr($orig_author,strpos($orig_author,'@')+1).'/posts/'.$orig_guid;
|
|
||||||
|
|
||||||
$server = 'https://'.substr($orig_author,strpos($orig_author,'@')+1);
|
$server = 'https://'.substr($orig_author,strpos($orig_author,'@')+1);
|
||||||
logger('1st try: reshared message '.$orig_guid." reshared by ".$guid.' will be fetched from original server: '.$server);
|
logger('1st try: reshared message '.$orig_guid." reshared by ".$guid.' will be fetched from original server: '.$server);
|
||||||
$item = diaspora_fetch_message($orig_guid, $server);
|
$item = diaspora_fetch_message($orig_guid, $server);
|
||||||
|
@ -1142,11 +1175,16 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$orig_created = $item["created"];
|
$orig_created = $item["created"];
|
||||||
$orig_author = $item["author"];
|
$orig_author = $item["author"];
|
||||||
$orig_guid = $item["guid"];
|
$orig_guid = $item["guid"];
|
||||||
|
$orig_plink = diaspora_plink($orig_author, $orig_guid);
|
||||||
|
$orig_uri = $orig_author.':'.$orig_guid;
|
||||||
$create_original_post = ($body != "");
|
$create_original_post = ($body != "");
|
||||||
$orig_url = $a->get_baseurl()."/display/".$orig_guid;
|
$object = $item["object"];
|
||||||
|
$objecttype = $item["object-type"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$plink = diaspora_plink($diaspora_handle, $guid);
|
||||||
|
|
||||||
$person = find_diaspora_person_by_handle($orig_author);
|
$person = find_diaspora_person_by_handle($orig_author);
|
||||||
|
|
||||||
$created = unxmlify($xml->created_at);
|
$created = unxmlify($xml->created_at);
|
||||||
|
@ -1154,8 +1192,6 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
|
|
||||||
$datarray = array();
|
$datarray = array();
|
||||||
|
|
||||||
$plink = diaspora_plink($diaspora_handle, $guid);
|
|
||||||
|
|
||||||
$datarray['uid'] = $importer['uid'];
|
$datarray['uid'] = $importer['uid'];
|
||||||
$datarray['contact-id'] = $contact['id'];
|
$datarray['contact-id'] = $contact['id'];
|
||||||
$datarray['wall'] = 0;
|
$datarray['wall'] = 0;
|
||||||
|
@ -1184,6 +1220,9 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$datarray['body'] = $body;
|
$datarray['body'] = $body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$datarray["object"] = json_encode($xml);
|
||||||
|
$datarray['object-type'] = $objecttype;
|
||||||
|
|
||||||
$datarray['tag'] = $str_tags;
|
$datarray['tag'] = $str_tags;
|
||||||
$datarray['app'] = $app;
|
$datarray['app'] = $app;
|
||||||
|
|
||||||
|
@ -1199,9 +1238,10 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$datarray2['uid'] = 0;
|
$datarray2['uid'] = 0;
|
||||||
$datarray2['contact-id'] = get_contact($person['url'], 0);
|
$datarray2['contact-id'] = get_contact($person['url'], 0);
|
||||||
$datarray2['guid'] = $orig_guid;
|
$datarray2['guid'] = $orig_guid;
|
||||||
$datarray2['uri'] = $datarray2['parent-uri'] = $orig_author.':'.$orig_guid;
|
$datarray2['uri'] = $datarray2['parent-uri'] = $orig_uri;
|
||||||
$datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = $datarray2['commented'] = $datarray2['received'] = datetime_convert('UTC','UTC',$orig_created);
|
$datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = $datarray2['commented'] = $datarray2['received'] = datetime_convert('UTC','UTC',$orig_created);
|
||||||
$datarray2['plink'] = diaspora_plink($orig_author, $orig_guid);
|
$datarray2['parent'] = 0;
|
||||||
|
$datarray2['plink'] = $orig_plink;
|
||||||
|
|
||||||
$datarray2['author-name'] = $person['name'];
|
$datarray2['author-name'] = $person['name'];
|
||||||
$datarray2['author-link'] = $person['url'];
|
$datarray2['author-link'] = $person['url'];
|
||||||
|
@ -1210,6 +1250,7 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$datarray2['owner-link'] = $datarray2['author-link'];
|
$datarray2['owner-link'] = $datarray2['author-link'];
|
||||||
$datarray2['owner-avatar'] = $datarray2['author-avatar'];
|
$datarray2['owner-avatar'] = $datarray2['author-avatar'];
|
||||||
$datarray2['body'] = $body;
|
$datarray2['body'] = $body;
|
||||||
|
$datarray2["object"] = $object;
|
||||||
|
|
||||||
DiasporaFetchGuid($datarray2);
|
DiasporaFetchGuid($datarray2);
|
||||||
$message_id = item_store($datarray2);
|
$message_id = item_store($datarray2);
|
||||||
|
@ -1295,6 +1336,8 @@ function diaspora_asphoto($importer,$xml,$msg) {
|
||||||
$datarray['author-link'] = $contact['url'];
|
$datarray['author-link'] = $contact['url'];
|
||||||
$datarray['author-avatar'] = $contact['thumb'];
|
$datarray['author-avatar'] = $contact['thumb'];
|
||||||
$datarray['body'] = $body;
|
$datarray['body'] = $body;
|
||||||
|
$datarray["object"] = json_encode($xml);
|
||||||
|
$datarray['object-type'] = ACTIVITY_OBJ_PHOTO;
|
||||||
|
|
||||||
$datarray['app'] = 'Diaspora/Cubbi.es';
|
$datarray['app'] = 'Diaspora/Cubbi.es';
|
||||||
|
|
||||||
|
@ -1464,6 +1507,8 @@ function diaspora_comment($importer,$xml,$msg) {
|
||||||
$datarray['author-link'] = $person['url'];
|
$datarray['author-link'] = $person['url'];
|
||||||
$datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
|
$datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
|
||||||
$datarray['body'] = $body;
|
$datarray['body'] = $body;
|
||||||
|
$datarray["object"] = json_encode($xml);
|
||||||
|
$datarray["object-type"] = ACTIVITY_OBJ_COMMENT;
|
||||||
|
|
||||||
// We can't be certain what the original app is if the message is relayed.
|
// We can't be certain what the original app is if the message is relayed.
|
||||||
if(($parent_item['origin']) && (! $parent_author_signature))
|
if(($parent_item['origin']) && (! $parent_author_signature))
|
||||||
|
|
|
@ -464,12 +464,27 @@ function get_atom_elements($feed, $item, $contact = array()) {
|
||||||
|
|
||||||
// look for a photo. We should check media size and find the best one,
|
// look for a photo. We should check media size and find the best one,
|
||||||
// but for now let's just find any author photo
|
// but for now let's just find any author photo
|
||||||
|
// Additionally we look for an alternate author link. On OStatus this one is the one we want.
|
||||||
|
|
||||||
|
// Search for ostatus conversation url
|
||||||
|
$authorlinks = $item->feed->data["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["feed"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["author"][0]["child"]["http://www.w3.org/2005/Atom"]["link"];
|
||||||
|
if (is_array($authorlinks)) {
|
||||||
|
foreach ($authorlinks as $link) {
|
||||||
|
$linkdata = array_shift($link["attribs"]);
|
||||||
|
|
||||||
|
if ($linkdata["rel"] == "alternate")
|
||||||
|
$res["author-link"] = $linkdata["href"];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
$rawauthor = $item->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'author');
|
$rawauthor = $item->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'author');
|
||||||
|
|
||||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
||||||
$base = $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
|
$base = $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link'];
|
||||||
foreach($base as $link) {
|
foreach($base as $link) {
|
||||||
|
if($link['attribs']['']['rel'] === 'alternate')
|
||||||
|
$res['author-link'] = unxmlify($link['attribs']['']['href']);
|
||||||
|
|
||||||
if(!x($res, 'author-avatar') || !$res['author-avatar']) {
|
if(!x($res, 'author-avatar') || !$res['author-avatar']) {
|
||||||
if($link['attribs']['']['rel'] === 'photo' || $link['attribs']['']['rel'] === 'avatar')
|
if($link['attribs']['']['rel'] === 'photo' || $link['attribs']['']['rel'] === 'avatar')
|
||||||
$res['author-avatar'] = unxmlify($link['attribs']['']['href']);
|
$res['author-avatar'] = unxmlify($link['attribs']['']['href']);
|
||||||
|
@ -828,7 +843,7 @@ function get_atom_elements($feed, $item, $contact = array()) {
|
||||||
logger('get_atom_elements: Looking for status.net repeated message');
|
logger('get_atom_elements: Looking for status.net repeated message');
|
||||||
|
|
||||||
$message = $child["http://activitystrea.ms/spec/1.0/"]["object"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["content"][0]["data"];
|
$message = $child["http://activitystrea.ms/spec/1.0/"]["object"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["content"][0]["data"];
|
||||||
$orig_uri = $child["http://activitystrea.ms/spec/1.0/"]["object"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["id"][0]["data"];
|
$orig_id = ostatus_convert_href($child["http://activitystrea.ms/spec/1.0/"]["object"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["id"][0]["data"]);
|
||||||
$author = $child[SIMPLEPIE_NAMESPACE_ATOM_10]["author"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10];
|
$author = $child[SIMPLEPIE_NAMESPACE_ATOM_10]["author"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10];
|
||||||
$uri = $author["uri"][0]["data"];
|
$uri = $author["uri"][0]["data"];
|
||||||
$name = $author["name"][0]["data"];
|
$name = $author["name"][0]["data"];
|
||||||
|
@ -836,10 +851,10 @@ function get_atom_elements($feed, $item, $contact = array()) {
|
||||||
$avatar = $avatar["href"];
|
$avatar = $avatar["href"];
|
||||||
|
|
||||||
if (($name != "") and ($uri != "") and ($avatar != "") and ($message != "")) {
|
if (($name != "") and ($uri != "") and ($avatar != "") and ($message != "")) {
|
||||||
logger('get_atom_elements: fixing sender of repeated message.');
|
logger('get_atom_elements: fixing sender of repeated message. '.$orig_id, LOGGER_DEBUG);
|
||||||
|
|
||||||
if (!intval(get_config('system','wall-to-wall_share'))) {
|
if (!intval(get_config('system','wall-to-wall_share'))) {
|
||||||
$prefix = share_header($name, $uri, $avatar, "", "", $orig_uri);
|
$prefix = share_header($name, $uri, $avatar, "", "", $orig_link);
|
||||||
|
|
||||||
$res["body"] = $prefix.html2bbcode($message)."[/share]";
|
$res["body"] = $prefix.html2bbcode($message)."[/share]";
|
||||||
} else {
|
} else {
|
||||||
|
@ -864,8 +879,11 @@ function get_atom_elements($feed, $item, $contact = array()) {
|
||||||
$conversation = array_shift($link["attribs"]);
|
$conversation = array_shift($link["attribs"]);
|
||||||
|
|
||||||
if ($conversation["rel"] == "ostatus:conversation") {
|
if ($conversation["rel"] == "ostatus:conversation") {
|
||||||
$res["ostatus_conversation"] = $conversation["href"];
|
$res["ostatus_conversation"] = ostatus_convert_href($conversation["href"]);
|
||||||
logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]);
|
logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]);
|
||||||
|
} elseif ($conversation["rel"] == "alternate") {
|
||||||
|
$res["plink"] = $conversation["href"];
|
||||||
|
logger('get_atom_elements: found plink '.$res["plink"]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1090,6 +1108,14 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
||||||
unset($arr['dsprsig']);
|
unset($arr['dsprsig']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Converting the plink
|
||||||
|
if ($arr['network'] == NETWORK_OSTATUS) {
|
||||||
|
if (isset($arr['plink']))
|
||||||
|
$arr['plink'] = ostatus_convert_href($arr['plink']);
|
||||||
|
elseif (isset($arr['uri']))
|
||||||
|
$arr['plink'] = ostatus_convert_href($arr['uri']);
|
||||||
|
}
|
||||||
|
|
||||||
// if an OStatus conversation url was passed in, it is stored and then
|
// if an OStatus conversation url was passed in, it is stored and then
|
||||||
// removed from the array.
|
// removed from the array.
|
||||||
$ostatus_conversation = null;
|
$ostatus_conversation = null;
|
||||||
|
@ -1115,7 +1141,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
||||||
|
|
||||||
/* check for create date and expire time */
|
/* check for create date and expire time */
|
||||||
$uid = intval($arr['uid']);
|
$uid = intval($arr['uid']);
|
||||||
$r = q("SELECT expire FROM user WHERE uid = %d", $uid);
|
$r = q("SELECT expire FROM user WHERE uid = %d", intval($uid));
|
||||||
if(count($r)) {
|
if(count($r)) {
|
||||||
$expire_interval = $r[0]['expire'];
|
$expire_interval = $r[0]['expire'];
|
||||||
if ($expire_interval>0) {
|
if ($expire_interval>0) {
|
||||||
|
@ -1141,6 +1167,19 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If there is no guid then take the same guid that was taken before for the same plink
|
||||||
|
if ((trim($arr['guid']) == "") AND (trim($arr['plink']) != "")) {
|
||||||
|
logger('item_store: checking for an existing guid for plink '.$arr['plink'], LOGGER_DEBUG);
|
||||||
|
$r = q("SELECT `guid` FROM `item` WHERE `plink` = '%s' AND `guid` != '' LIMIT 1",
|
||||||
|
dbesc(trim($arr['plink']))
|
||||||
|
);
|
||||||
|
|
||||||
|
if(count($r)) {
|
||||||
|
$arr['guid'] = $r[0]["guid"];
|
||||||
|
logger('item_store: found guid '.$arr['guid'].' for plink '.$arr['plink'], LOGGER_DEBUG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Shouldn't happen but we want to make absolutely sure it doesn't leak from a plugin.
|
// Shouldn't happen but we want to make absolutely sure it doesn't leak from a plugin.
|
||||||
// Deactivated, since the bbcode parser can handle with it - and it destroys posts with some smileys that contain "<"
|
// Deactivated, since the bbcode parser can handle with it - and it destroys posts with some smileys that contain "<"
|
||||||
//if((strpos($arr['body'],'<') !== false) || (strpos($arr['body'],'>') !== false))
|
//if((strpos($arr['body'],'<') !== false) || (strpos($arr['body'],'>') !== false))
|
||||||
|
@ -1347,12 +1386,36 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `network` = '%s' AND `uid` = %d LIMIT 1",
|
||||||
dbesc($arr['uri']),
|
dbesc($arr['uri']),
|
||||||
|
dbesc($arr['network']),
|
||||||
intval($arr['uid'])
|
intval($arr['uid'])
|
||||||
);
|
);
|
||||||
if($r && count($r)) {
|
if($r && count($r)) {
|
||||||
logger('item-store: duplicate item ignored. ' . print_r($arr,true));
|
logger('duplicated item with the same uri found. ' . print_r($arr,true));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$r = q("SELECT `id` FROM `item` WHERE `plink` = '%s' AND `network` = '%s' AND `uid` = %d LIMIT 1",
|
||||||
|
dbesc($arr['plink']),
|
||||||
|
dbesc($arr['network']),
|
||||||
|
intval($arr['uid'])
|
||||||
|
);
|
||||||
|
if($r && count($r)) {
|
||||||
|
logger('duplicated item with the same plink found. ' . print_r($arr,true));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for an existing post with the same content. There seems to be a problem with OStatus.
|
||||||
|
$r = q("SELECT `id` FROM `item` WHERE `body` = '%s' AND `network` = '%s' AND `created` = '%s' AND `contact-id` = %d AND `uid` = %d LIMIT 1",
|
||||||
|
dbesc($arr['body']),
|
||||||
|
dbesc($arr['network']),
|
||||||
|
dbesc($arr['created']),
|
||||||
|
intval($arr['contact-id']),
|
||||||
|
intval($arr['uid'])
|
||||||
|
);
|
||||||
|
if($r && count($r)) {
|
||||||
|
logger('duplicated item with the same body found. ' . print_r($arr,true));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2167,6 +2230,12 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test - remove before flight
|
||||||
|
// if ($contact['network'] === NETWORK_OSTATUS) {
|
||||||
|
// $tempfile = tempnam(get_temppath(), "ostatus");
|
||||||
|
// file_put_contents($tempfile, $xml);
|
||||||
|
// }
|
||||||
|
|
||||||
$feed = new SimplePie();
|
$feed = new SimplePie();
|
||||||
$feed->set_raw_data($xml);
|
$feed->set_raw_data($xml);
|
||||||
if($datedir)
|
if($datedir)
|
||||||
|
|
|
@ -1,8 +1,33 @@
|
||||||
<?php
|
<?php
|
||||||
|
require_once("include/Contact.php");
|
||||||
|
|
||||||
define('OSTATUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
|
define('OSTATUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
|
||||||
define('OSTATUS_DEFAULT_POLL_TIMEFRAME', 1440); // given in minutes
|
define('OSTATUS_DEFAULT_POLL_TIMEFRAME', 1440); // given in minutes
|
||||||
|
|
||||||
function check_conversations() {
|
function ostatus_convert_href($href) {
|
||||||
|
$elements = explode(":",$href);
|
||||||
|
|
||||||
|
if ((count($elements) <= 2) OR ($elements[0] != "tag"))
|
||||||
|
return $href;
|
||||||
|
|
||||||
|
$server = explode(",", $elements[1]);
|
||||||
|
$conversation = explode("=", $elements[2]);
|
||||||
|
|
||||||
|
if ((count($elements) == 4) AND ($elements[2] == "post"))
|
||||||
|
return "http://".$server[0]."/notice/".$elements[3];
|
||||||
|
|
||||||
|
if ((count($conversation) != 2) OR ($conversation[1] ==""))
|
||||||
|
return $href;
|
||||||
|
|
||||||
|
if ($elements[3] == "objectType=thread")
|
||||||
|
return "http://".$server[0]."/conversation/".$conversation[1];
|
||||||
|
else
|
||||||
|
return "http://".$server[0]."/notice/".$conversation[1];
|
||||||
|
|
||||||
|
return $href;
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_conversations($override = false) {
|
||||||
$last = get_config('system','ostatus_last_poll');
|
$last = get_config('system','ostatus_last_poll');
|
||||||
|
|
||||||
$poll_interval = intval(get_config('system','ostatus_poll_interval'));
|
$poll_interval = intval(get_config('system','ostatus_poll_interval'));
|
||||||
|
@ -10,16 +35,16 @@ function check_conversations() {
|
||||||
$poll_interval = OSTATUS_DEFAULT_POLL_INTERVAL;
|
$poll_interval = OSTATUS_DEFAULT_POLL_INTERVAL;
|
||||||
|
|
||||||
// Don't poll if the interval is set negative
|
// Don't poll if the interval is set negative
|
||||||
if ($poll_interval < 0)
|
if (($poll_interval < 0) AND !$override)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
$poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
|
$poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
|
||||||
if(! $poll_timeframe)
|
if (!$poll_timeframe)
|
||||||
$poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME;
|
$poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME;
|
||||||
|
|
||||||
if($last) {
|
if ($last AND !$override) {
|
||||||
$next = $last + ($poll_interval * 60);
|
$next = $last + ($poll_interval * 60);
|
||||||
if($next > time()) {
|
if ($next > time()) {
|
||||||
logger('poll interval not reached');
|
logger('poll interval not reached');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -36,7 +61,7 @@ function check_conversations() {
|
||||||
complete_conversation($id, $url);
|
complete_conversation($id, $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger(' cron_end');
|
logger('cron_end');
|
||||||
|
|
||||||
set_config('system','ostatus_last_poll', time());
|
set_config('system','ostatus_last_poll', time());
|
||||||
}
|
}
|
||||||
|
@ -44,6 +69,8 @@ function check_conversations() {
|
||||||
function complete_conversation($itemid, $conversation_url, $only_add_conversation = false) {
|
function complete_conversation($itemid, $conversation_url, $only_add_conversation = false) {
|
||||||
global $a;
|
global $a;
|
||||||
|
|
||||||
|
$conversation_url = ostatus_convert_href($conversation_url);
|
||||||
|
|
||||||
if (intval(get_config('system','ostatus_poll_interval')) == -2)
|
if (intval(get_config('system','ostatus_poll_interval')) == -2)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -107,12 +134,16 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio
|
||||||
$items = array_reverse($items);
|
$items = array_reverse($items);
|
||||||
|
|
||||||
foreach ($items as $single_conv) {
|
foreach ($items as $single_conv) {
|
||||||
// status.net changed the format of the activity streams. This is a quick fix.
|
if (isset($single_conv->object->id))
|
||||||
if (@is_string($single_conv->object->id))
|
|
||||||
$single_conv->id = $single_conv->object->id;
|
$single_conv->id = $single_conv->object->id;
|
||||||
|
|
||||||
if (@!$single_conv->id AND $single_conv->provider->url AND $single_conv->statusnet_notice_info->local_id)
|
logger("Got id ".$single_conv->id, LOGGER_DEBUG);
|
||||||
$single_conv->id = $single_conv->provider->url."notice/".$single_conv->statusnet_notice_info->local_id;
|
|
||||||
|
$plink = ostatus_convert_href($single_conv->id);
|
||||||
|
if (isset($single_conv->object->url))
|
||||||
|
$plink = ostatus_convert_href($single_conv->object->url);
|
||||||
|
|
||||||
|
logger("Got url ".$plink, LOGGER_DEBUG);
|
||||||
|
|
||||||
if (@!$single_conv->id)
|
if (@!$single_conv->id)
|
||||||
continue;
|
continue;
|
||||||
|
@ -120,8 +151,9 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio
|
||||||
if ($first_id == "") {
|
if ($first_id == "") {
|
||||||
$first_id = $single_conv->id;
|
$first_id = $single_conv->id;
|
||||||
|
|
||||||
$new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
|
$new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1",
|
||||||
intval($message["uid"]), dbesc($first_id));
|
intval($message["uid"]), dbesc($first_id),
|
||||||
|
dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
|
||||||
if ($new_parents) {
|
if ($new_parents) {
|
||||||
$parent = $new_parents[0];
|
$parent = $new_parents[0];
|
||||||
logger('adopting new parent '.$parent["id"].' for '.$itemid);
|
logger('adopting new parent '.$parent["id"].' for '.$itemid);
|
||||||
|
@ -136,12 +168,21 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio
|
||||||
else
|
else
|
||||||
$parent_uri = $parent["uri"];
|
$parent_uri = $parent["uri"];
|
||||||
|
|
||||||
$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
|
$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `plink` = '%s' AND `network` IN ('%s','%s') LIMIT 1",
|
||||||
intval($message["uid"]), dbesc($single_conv->id));
|
intval($message["uid"]), dbesc($plink),
|
||||||
|
dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
|
||||||
|
|
||||||
|
if (!$message_exists)
|
||||||
|
$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1",
|
||||||
|
intval($message["uid"]), dbesc($single_conv->id),
|
||||||
|
dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN));
|
||||||
|
|
||||||
if ($message_exists) {
|
if ($message_exists) {
|
||||||
if ($parent["id"] != 0) {
|
if ($parent["id"] != 0) {
|
||||||
$existing_message = $message_exists[0];
|
$existing_message = $message_exists[0];
|
||||||
|
|
||||||
|
logger('updating id '.$existing_message["id"].' to parent '.$parent["id"].' uri '.$parent["uri"].' thread '.$parent_uri, LOGGER_DEBUG);
|
||||||
|
|
||||||
// This is partly bad, since the entry in the thread table isn't updated
|
// This is partly bad, since the entry in the thread table isn't updated
|
||||||
$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d",
|
$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d",
|
||||||
intval($parent["id"]),
|
intval($parent["id"]),
|
||||||
|
@ -152,21 +193,32 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$actor = $single_conv->actor->id;
|
||||||
|
if (isset($single_conv->actor->url))
|
||||||
|
$actor = $single_conv->actor->url;
|
||||||
|
|
||||||
$contact = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
|
$contact = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'",
|
||||||
$message["uid"], normalise_link($single_conv->actor->id), NETWORK_STATUSNET);
|
$message["uid"], normalise_link($actor), NETWORK_STATUSNET);
|
||||||
|
|
||||||
if (count($contact)) {
|
if (count($contact)) {
|
||||||
logger("Found contact for url ".$single_conv->actor->id, LOGGER_DEBUG);
|
logger("Found contact for url ".$actor, LOGGER_DEBUG);
|
||||||
$contact_id = $contact[0]["id"];
|
$contact_id = $contact[0]["id"];
|
||||||
} else {
|
} else {
|
||||||
logger("No contact found for url ".$single_conv->actor->id, LOGGER_DEBUG);
|
logger("No contact found for url ".$actor, LOGGER_DEBUG);
|
||||||
|
|
||||||
|
// Adding a global contact
|
||||||
|
// To-Do: Use this data for the post
|
||||||
|
$global_contact_id = get_contact($actor, 0);
|
||||||
|
|
||||||
|
logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG);
|
||||||
|
|
||||||
$contact_id = $parent["contact-id"];
|
$contact_id = $parent["contact-id"];
|
||||||
}
|
}
|
||||||
|
|
||||||
$arr = array();
|
$arr = array();
|
||||||
$arr["network"] = NETWORK_OSTATUS;
|
$arr["network"] = NETWORK_OSTATUS;
|
||||||
$arr["uri"] = $single_conv->id;
|
$arr["uri"] = $single_conv->id;
|
||||||
$arr["plink"] = $single_conv->id;
|
$arr["plink"] = $plink;
|
||||||
$arr["uid"] = $message["uid"];
|
$arr["uid"] = $message["uid"];
|
||||||
$arr["contact-id"] = $contact_id;
|
$arr["contact-id"] = $contact_id;
|
||||||
if ($parent["id"] != 0)
|
if ($parent["id"] != 0)
|
||||||
|
@ -182,17 +234,26 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio
|
||||||
if ($arr["owner-name"] == '')
|
if ($arr["owner-name"] == '')
|
||||||
$arr["owner-name"] = $single_conv->actor->displayName;
|
$arr["owner-name"] = $single_conv->actor->displayName;
|
||||||
|
|
||||||
$arr["owner-link"] = $single_conv->actor->id;
|
$arr["owner-link"] = $actor;
|
||||||
$arr["owner-avatar"] = $single_conv->actor->image->url;
|
$arr["owner-avatar"] = $single_conv->actor->image->url;
|
||||||
//$arr["author-name"] = $single_conv->actor->contact->displayName;
|
//$arr["author-name"] = $single_conv->actor->contact->displayName;
|
||||||
//$arr["author-name"] = $single_conv->actor->contact->preferredUsername;
|
//$arr["author-name"] = $single_conv->actor->contact->preferredUsername;
|
||||||
$arr["author-name"] = $arr["owner-name"];
|
$arr["author-name"] = $arr["owner-name"];
|
||||||
$arr["author-link"] = $single_conv->actor->id;
|
$arr["author-link"] = $actor;
|
||||||
$arr["author-avatar"] = $single_conv->actor->image->url;
|
$arr["author-avatar"] = $single_conv->actor->image->url;
|
||||||
$arr["body"] = html2bbcode($single_conv->content);
|
$arr["body"] = html2bbcode($single_conv->content);
|
||||||
$arr["app"] = strip_tags($single_conv->statusnet_notice_info->source);
|
|
||||||
if ($arr["app"] == "")
|
if (isset($single_conv->status_net->notice_info->source))
|
||||||
|
$arr["app"] = strip_tags($single_conv->status_net->notice_info->source);
|
||||||
|
elseif (isset($single_conv->statusnet->notice_info->source))
|
||||||
|
$arr["app"] = strip_tags($single_conv->statusnet->notice_info->source);
|
||||||
|
elseif (isset($single_conv->statusnet_notice_info->source))
|
||||||
|
$arr["app"] = strip_tags($single_conv->statusnet_notice_info->source);
|
||||||
|
elseif (isset($single_conv->provider->displayName))
|
||||||
$arr["app"] = $single_conv->provider->displayName;
|
$arr["app"] = $single_conv->provider->displayName;
|
||||||
|
else
|
||||||
|
$arr["app"] = "OStatus";
|
||||||
|
|
||||||
$arr["verb"] = $parent["verb"];
|
$arr["verb"] = $parent["verb"];
|
||||||
$arr["visible"] = $parent["visible"];
|
$arr["visible"] = $parent["visible"];
|
||||||
$arr["location"] = $single_conv->location->displayName;
|
$arr["location"] = $single_conv->location->displayName;
|
||||||
|
@ -206,6 +267,8 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio
|
||||||
|
|
||||||
$newitem = item_store($arr);
|
$newitem = item_store($arr);
|
||||||
|
|
||||||
|
logger('Stored new item '.$plink.' under id '.$newitem, LOGGER_DEBUG);
|
||||||
|
|
||||||
// Add the conversation entry (but don't fetch the whole conversation)
|
// Add the conversation entry (but don't fetch the whole conversation)
|
||||||
complete_conversation($newitem, $conversation_url, true);
|
complete_conversation($newitem, $conversation_url, true);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue