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 );
}
}
+ // 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;
}
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'])
$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",
$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;
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");
--- /dev/null
+<?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);
+?>
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))) {
}
}
}
-
}}
* 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");
'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(),
}
}
}
-
+
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' : '');