mirror of
https://github.com/friendica/friendica
synced 2024-12-21 12:54:56 +01:00
New function to complete threads from ostatus postings
This commit is contained in:
parent
2cb576d305
commit
bc972e16ce
5 changed files with 152 additions and 14 deletions
1
boot.php
1
boot.php
|
@ -208,6 +208,7 @@ define ( 'TERM_CATEGORY', 3 );
|
|||
define ( 'TERM_PCATEGORY', 4 );
|
||||
define ( 'TERM_FILE', 5 );
|
||||
define ( 'TERM_SAVEDSEARCH', 6 );
|
||||
define ( 'TERM_CONVERSATION', 7 );
|
||||
|
||||
define ( 'TERM_OBJ_POST', 1 );
|
||||
define ( 'TERM_OBJ_PHOTO', 2 );
|
||||
|
|
|
@ -831,15 +831,28 @@ function get_atom_elements($feed,$item) {
|
|||
}
|
||||
}
|
||||
|
||||
// Search for ostatus conversation url
|
||||
$links = $item->feed->data["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["feed"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["entry"][0]["child"]["http://www.w3.org/2005/Atom"]["link"];
|
||||
|
||||
foreach ($links as $link) {
|
||||
$conversation = array_shift($link["attribs"]);
|
||||
|
||||
if ($conversation["rel"] == "ostatus:conversation") {
|
||||
$res["ostatus_conversation"] = $conversation["href"];
|
||||
logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]);
|
||||
}
|
||||
};
|
||||
|
||||
$arr = array('feed' => $feed, 'item' => $item, 'result' => $res);
|
||||
|
||||
call_hooks('parse_atom', $arr);
|
||||
|
||||
//if (($res["title"] != "") or (strpos($res["body"], "RT @") > 0)) {
|
||||
//if (strpos($res["body"], "RT @") !== false) {
|
||||
// $debugfile = tempnam("/home/ike/log", "item-res2-");
|
||||
// file_put_contents($debugfile, serialize($arr));
|
||||
//}
|
||||
/*if (strpos($res["body"], "@") !== false) {
|
||||
$debugfile = tempnam("/var/www/virtual/pirati.ca/phptmp/", "item-res2-");
|
||||
file_put_contents($debugfile, serialize($arr));
|
||||
}*/
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
@ -878,6 +891,15 @@ function item_store($arr,$force_parent = false) {
|
|||
unset($arr['dsprsig']);
|
||||
}
|
||||
|
||||
// if an OStatus conversation url was passed in, it is stored and then
|
||||
// removed from the array.
|
||||
$ostatus_conversation = null;
|
||||
|
||||
if (isset($arr["ostatus_conversation"])) {
|
||||
$ostatus_conversation = $arr["ostatus_conversation"];
|
||||
unset($arr["ostatus_conversation"]);
|
||||
}
|
||||
|
||||
if(x($arr, 'gravity'))
|
||||
$arr['gravity'] = intval($arr['gravity']);
|
||||
elseif($arr['parent-uri'] === $arr['uri'])
|
||||
|
@ -969,9 +991,9 @@ function item_store($arr,$force_parent = false) {
|
|||
$deny_cid = $arr['deny_cid'];
|
||||
$deny_gid = $arr['deny_gid'];
|
||||
}
|
||||
else {
|
||||
else {
|
||||
|
||||
// find the parent and snarf the item id and ACL's
|
||||
// find the parent and snarf the item id and ACLs
|
||||
// and anything else we need to inherit
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1",
|
||||
|
@ -1076,6 +1098,7 @@ function item_store($arr,$force_parent = false) {
|
|||
$current_post = $r[0]['id'];
|
||||
logger('item_store: created item ' . $current_post);
|
||||
create_tags_from_item($r[0]['id']);
|
||||
// ostatus_conversation
|
||||
} else {
|
||||
logger('item_store: could not locate created item');
|
||||
return 0;
|
||||
|
@ -1159,6 +1182,7 @@ function item_store($arr,$force_parent = false) {
|
|||
|
||||
if (($cachefile != '') AND !file_exists($cachefile)) {
|
||||
$s = prepare_text($arr['body']);
|
||||
$a = get_app();
|
||||
$stamp1 = microtime(true);
|
||||
file_put_contents($cachefile, $s);
|
||||
$a->save_timestamp($stamp1, "file");
|
||||
|
|
112
include/ostatus_conversation.php
Normal file
112
include/ostatus_conversation.php
Normal file
|
@ -0,0 +1,112 @@
|
|||
<?php
|
||||
require_once("boot.php");
|
||||
if(@is_null($a)) {
|
||||
$a = new App;
|
||||
}
|
||||
|
||||
if(is_null($db)) {
|
||||
@include(".htconfig.php");
|
||||
require_once("dba.php");
|
||||
$db = new dba($db_host, $db_user, $db_pass, $db_data);
|
||||
unset($db_host, $db_user, $db_pass, $db_data);
|
||||
};
|
||||
|
||||
function complete_conversation($itemid, $conversation_url) {
|
||||
global $a;
|
||||
|
||||
require_once('include/html2bbcode.php');
|
||||
require_once('include/items.php');
|
||||
|
||||
$messages = q("SELECT `uid`, `parent` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
|
||||
if (!$messages)
|
||||
return;
|
||||
$message = $messages[0];
|
||||
|
||||
// Get the parent
|
||||
$parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
|
||||
intval($message["uid"]), intval($message["parent"]));
|
||||
if (!$parents)
|
||||
return;
|
||||
$parent = $parents[0];
|
||||
|
||||
// Store conversation url if not done before
|
||||
$conversation = q("SELECT `url` FROM `term` WHERE `uid` = %d AND `oid` = %d AND `otype` = %d AND `type` = %d",
|
||||
intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION));
|
||||
|
||||
if (!$conversation)
|
||||
$r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`) VALUES (%d, %d, %d, %d, '%s', '%s')",
|
||||
intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), '', dbesc($conversation_url));
|
||||
|
||||
$conv = str_replace("/conversation/", "/api/statusnet/conversation/", $conversation_url).".as";
|
||||
|
||||
$conv_as = fetch_url($conv);
|
||||
|
||||
if ($conv_as) {
|
||||
$conv_as = str_replace(',"statusnet:notice_info":', ',"statusnet_notice_info":', $conv_as);
|
||||
$conv_as = json_decode($conv_as);
|
||||
|
||||
$items = array_reverse($conv_as->items);
|
||||
|
||||
foreach ($items as $single_conv) {
|
||||
//print_r($single_conv);
|
||||
|
||||
if (isset($single_conv->context->inReplyTo->id))
|
||||
$parent_uri = $single_conv->context->inReplyTo->id;
|
||||
else
|
||||
$parent_uri = $parent["uri"];
|
||||
|
||||
$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
|
||||
intval($message["uid"]), dbesc($single_conv->id));
|
||||
if ($message_exists) {
|
||||
$existing_message = $message_exists[0];
|
||||
$r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d LIMIT 1",
|
||||
intval($parent["id"]),
|
||||
dbesc($parent["uri"]),
|
||||
dbesc($parent_uri),
|
||||
intval($existing_message["id"]));
|
||||
continue;
|
||||
}
|
||||
|
||||
$arr = array();
|
||||
$arr["uri"] = $single_conv->id;
|
||||
$arr["uid"] = $message["uid"];
|
||||
$arr["contact-id"] = $parent["contact-id"]; // To-Do
|
||||
$arr["parent"] = $parent["id"];
|
||||
$arr["parent-uri"] = $parent["uri"];
|
||||
$arr["thr-parent"] = $parent_uri;
|
||||
$arr["created"] = $single_conv->published;
|
||||
$arr["edited"] = $single_conv->published;
|
||||
$arr["owner-name"] = $single_conv->actor->contact->displayName;
|
||||
//$arr["owner-name"] = $single_conv->actor->contact->preferredUsername;
|
||||
$arr["owner-link"] = $single_conv->actor->id;
|
||||
$arr["owner-avatar"] = $single_conv->actor->image->url;
|
||||
$arr["author-name"] = $single_conv->actor->contact->displayName;
|
||||
//$arr["author-name"] = $single_conv->actor->contact->preferredUsername;
|
||||
$arr["author-link"] = $single_conv->actor->id;
|
||||
$arr["author-avatar"] = $single_conv->actor->image->url;
|
||||
$arr["body"] = html2bbcode($single_conv->content);
|
||||
$arr["app"] = strip_tags($single_conv->statusnet_notice_info->source);
|
||||
if ($arr["app"] == "")
|
||||
$arr["app"] = $single_conv->provider->displayName;
|
||||
$arr["verb"] = $parent["verb"];
|
||||
$arr["visible"] = $parent["visible"];
|
||||
$arr["location"] = $single_conv->location->displayName;
|
||||
$arr["coord"] = trim($single_conv->location->lat." ".$single_conv->location->lon);
|
||||
|
||||
if ($arr["location"] == "")
|
||||
unset($arr["location"]);
|
||||
|
||||
if ($arr["coord"] == "")
|
||||
unset($arr["coord"]);
|
||||
|
||||
item_store($arr);
|
||||
//print_r($arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$id = 282481;
|
||||
$conversation = "http://identi.ca/conversation/98268580";
|
||||
|
||||
complete_conversation($id, $conversation);
|
||||
?>
|
|
@ -158,6 +158,8 @@ function load_hooks() {
|
|||
|
||||
if(! function_exists('call_hooks')) {
|
||||
function call_hooks($name, &$data = null) {
|
||||
$stamp1 = microtime(true);
|
||||
|
||||
$a = get_app();
|
||||
|
||||
if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
|
||||
|
@ -177,7 +179,6 @@ function call_hooks($name, &$data = null) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
|
||||
|
|
|
@ -190,10 +190,10 @@ class Item extends BaseObject {
|
|||
* Maybe we should establish a way to be notified about conversation changes
|
||||
*/
|
||||
$this->check_wall_to_wall();
|
||||
|
||||
|
||||
if($this->is_wall_to_wall() && ($this->get_owner_url() == $this->get_redirect_url()))
|
||||
$osparkle = ' sparkle';
|
||||
|
||||
|
||||
if($this->is_toplevel()) {
|
||||
if($conv->get_profile_owner() == local_user()) {
|
||||
$isstarred = (($item['starred']) ? "starred" : "unstarred");
|
||||
|
@ -283,14 +283,14 @@ class Item extends BaseObject {
|
|||
|
||||
'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
|
||||
'tags' => $tags,
|
||||
'hashtags' => $hashtags,
|
||||
'mentions' => $mentions,
|
||||
'hashtags' => $hashtags,
|
||||
'mentions' => $mentions,
|
||||
'txt_cats' => t('Categories:'),
|
||||
'txt_folders' => t('Filed under:'),
|
||||
'has_cats' => ((count($categories)) ? 'true' : ''),
|
||||
'has_folders' => ((count($folders)) ? 'true' : ''),
|
||||
'categories' => $categories,
|
||||
'folders' => $folders,
|
||||
'categories' => $categories,
|
||||
'folders' => $folders,
|
||||
'body' => $body_e,
|
||||
'text' => $text_e,
|
||||
'id' => $this->get_id(),
|
||||
|
@ -361,12 +361,12 @@ class Item extends BaseObject {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($this->is_toplevel()) {
|
||||
$result['total_comments_num'] = "$total_children";
|
||||
$result['total_comments_text'] = tt('comment', 'comments', $total_children);
|
||||
}
|
||||
|
||||
|
||||
$result['private'] = $item['private'];
|
||||
$result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : '');
|
||||
|
||||
|
|
Loading…
Reference in a new issue