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…
	
	Add table
		Add a link
		
	
		Reference in a new issue