New function to complete threads from ostatus postings
This commit is contained in:
parent
2cb576d305
commit
bc972e16ce
1
boot.php
1
boot.php
|
@ -208,6 +208,7 @@ define ( 'TERM_CATEGORY', 3 );
|
||||||
define ( 'TERM_PCATEGORY', 4 );
|
define ( 'TERM_PCATEGORY', 4 );
|
||||||
define ( 'TERM_FILE', 5 );
|
define ( 'TERM_FILE', 5 );
|
||||||
define ( 'TERM_SAVEDSEARCH', 6 );
|
define ( 'TERM_SAVEDSEARCH', 6 );
|
||||||
|
define ( 'TERM_CONVERSATION', 7 );
|
||||||
|
|
||||||
define ( 'TERM_OBJ_POST', 1 );
|
define ( 'TERM_OBJ_POST', 1 );
|
||||||
define ( 'TERM_OBJ_PHOTO', 2 );
|
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);
|
$arr = array('feed' => $feed, 'item' => $item, 'result' => $res);
|
||||||
|
|
||||||
call_hooks('parse_atom', $arr);
|
call_hooks('parse_atom', $arr);
|
||||||
|
|
||||||
//if (($res["title"] != "") or (strpos($res["body"], "RT @") > 0)) {
|
//if (($res["title"] != "") or (strpos($res["body"], "RT @") > 0)) {
|
||||||
//if (strpos($res["body"], "RT @") !== false) {
|
//if (strpos($res["body"], "RT @") !== false) {
|
||||||
// $debugfile = tempnam("/home/ike/log", "item-res2-");
|
/*if (strpos($res["body"], "@") !== false) {
|
||||||
// file_put_contents($debugfile, serialize($arr));
|
$debugfile = tempnam("/var/www/virtual/pirati.ca/phptmp/", "item-res2-");
|
||||||
//}
|
file_put_contents($debugfile, serialize($arr));
|
||||||
|
}*/
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
@ -878,6 +891,15 @@ function item_store($arr,$force_parent = false) {
|
||||||
unset($arr['dsprsig']);
|
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'))
|
if(x($arr, 'gravity'))
|
||||||
$arr['gravity'] = intval($arr['gravity']);
|
$arr['gravity'] = intval($arr['gravity']);
|
||||||
elseif($arr['parent-uri'] === $arr['uri'])
|
elseif($arr['parent-uri'] === $arr['uri'])
|
||||||
|
@ -969,9 +991,9 @@ function item_store($arr,$force_parent = false) {
|
||||||
$deny_cid = $arr['deny_cid'];
|
$deny_cid = $arr['deny_cid'];
|
||||||
$deny_gid = $arr['deny_gid'];
|
$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
|
// and anything else we need to inherit
|
||||||
|
|
||||||
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1",
|
$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'];
|
$current_post = $r[0]['id'];
|
||||||
logger('item_store: created item ' . $current_post);
|
logger('item_store: created item ' . $current_post);
|
||||||
create_tags_from_item($r[0]['id']);
|
create_tags_from_item($r[0]['id']);
|
||||||
|
// ostatus_conversation
|
||||||
} else {
|
} else {
|
||||||
logger('item_store: could not locate created item');
|
logger('item_store: could not locate created item');
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1159,6 +1182,7 @@ function item_store($arr,$force_parent = false) {
|
||||||
|
|
||||||
if (($cachefile != '') AND !file_exists($cachefile)) {
|
if (($cachefile != '') AND !file_exists($cachefile)) {
|
||||||
$s = prepare_text($arr['body']);
|
$s = prepare_text($arr['body']);
|
||||||
|
$a = get_app();
|
||||||
$stamp1 = microtime(true);
|
$stamp1 = microtime(true);
|
||||||
file_put_contents($cachefile, $s);
|
file_put_contents($cachefile, $s);
|
||||||
$a->save_timestamp($stamp1, "file");
|
$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')) {
|
if(! function_exists('call_hooks')) {
|
||||||
function call_hooks($name, &$data = null) {
|
function call_hooks($name, &$data = null) {
|
||||||
|
$stamp1 = microtime(true);
|
||||||
|
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
|
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
|
* Maybe we should establish a way to be notified about conversation changes
|
||||||
*/
|
*/
|
||||||
$this->check_wall_to_wall();
|
$this->check_wall_to_wall();
|
||||||
|
|
||||||
if($this->is_wall_to_wall() && ($this->get_owner_url() == $this->get_redirect_url()))
|
if($this->is_wall_to_wall() && ($this->get_owner_url() == $this->get_redirect_url()))
|
||||||
$osparkle = ' sparkle';
|
$osparkle = ' sparkle';
|
||||||
|
|
||||||
if($this->is_toplevel()) {
|
if($this->is_toplevel()) {
|
||||||
if($conv->get_profile_owner() == local_user()) {
|
if($conv->get_profile_owner() == local_user()) {
|
||||||
$isstarred = (($item['starred']) ? "starred" : "unstarred");
|
$isstarred = (($item['starred']) ? "starred" : "unstarred");
|
||||||
|
@ -283,14 +283,14 @@ class Item extends BaseObject {
|
||||||
|
|
||||||
'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
|
'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
|
||||||
'tags' => $tags,
|
'tags' => $tags,
|
||||||
'hashtags' => $hashtags,
|
'hashtags' => $hashtags,
|
||||||
'mentions' => $mentions,
|
'mentions' => $mentions,
|
||||||
'txt_cats' => t('Categories:'),
|
'txt_cats' => t('Categories:'),
|
||||||
'txt_folders' => t('Filed under:'),
|
'txt_folders' => t('Filed under:'),
|
||||||
'has_cats' => ((count($categories)) ? 'true' : ''),
|
'has_cats' => ((count($categories)) ? 'true' : ''),
|
||||||
'has_folders' => ((count($folders)) ? 'true' : ''),
|
'has_folders' => ((count($folders)) ? 'true' : ''),
|
||||||
'categories' => $categories,
|
'categories' => $categories,
|
||||||
'folders' => $folders,
|
'folders' => $folders,
|
||||||
'body' => $body_e,
|
'body' => $body_e,
|
||||||
'text' => $text_e,
|
'text' => $text_e,
|
||||||
'id' => $this->get_id(),
|
'id' => $this->get_id(),
|
||||||
|
@ -361,12 +361,12 @@ class Item extends BaseObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->is_toplevel()) {
|
if ($this->is_toplevel()) {
|
||||||
$result['total_comments_num'] = "$total_children";
|
$result['total_comments_num'] = "$total_children";
|
||||||
$result['total_comments_text'] = tt('comment', 'comments', $total_children);
|
$result['total_comments_text'] = tt('comment', 'comments', $total_children);
|
||||||
}
|
}
|
||||||
|
|
||||||
$result['private'] = $item['private'];
|
$result['private'] = $item['private'];
|
||||||
$result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : '');
|
$result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : '');
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue