2013-01-27 23:25:04 +01:00
< ? php
2015-05-28 07:51:12 +02:00
require_once ( " include/Contact.php " );
2015-06-12 00:39:56 +02:00
require_once ( " include/threads.php " );
2015-06-20 08:44:29 +02:00
require_once ( " include/html2bbcode.php " );
require_once ( " include/items.php " );
2015-05-28 07:51:12 +02:00
2013-02-04 00:57:23 +01:00
define ( 'OSTATUS_DEFAULT_POLL_INTERVAL' , 30 ); // given in minutes
2013-03-03 17:58:35 +01:00
define ( 'OSTATUS_DEFAULT_POLL_TIMEFRAME' , 1440 ); // given in minutes
2013-01-27 23:25:04 +01:00
2015-05-26 23:33:38 +02:00
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 ) {
2015-06-20 08:44:29 +02:00
$last = get_config ( 'system' , 'ostatus_last_poll' );
2013-02-04 00:57:23 +01:00
2015-06-20 08:44:29 +02:00
$poll_interval = intval ( get_config ( 'system' , 'ostatus_poll_interval' ));
if ( ! $poll_interval )
$poll_interval = OSTATUS_DEFAULT_POLL_INTERVAL ;
2013-02-04 00:57:23 +01:00
2013-03-03 17:58:35 +01:00
// Don't poll if the interval is set negative
2015-05-26 23:33:38 +02:00
if (( $poll_interval < 0 ) AND ! $override )
2013-03-03 17:58:35 +01:00
return ;
2015-06-20 08:44:29 +02:00
$poll_timeframe = intval ( get_config ( 'system' , 'ostatus_poll_timeframe' ));
if ( ! $poll_timeframe )
$poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME ;
2013-03-03 17:58:35 +01:00
2015-06-20 08:44:29 +02:00
if ( $last AND ! $override ) {
$next = $last + ( $poll_interval * 60 );
if ( $next > time ()) {
logger ( 'poll interval not reached' );
return ;
}
}
2013-02-04 00:57:23 +01:00
2015-06-20 08:44:29 +02:00
logger ( 'cron_start' );
2013-02-04 00:57:23 +01:00
2015-06-20 08:44:29 +02:00
$start = date ( " Y-m-d H:i:s " , time () - ( $poll_timeframe * 60 ));
$conversations = q ( " SELECT `oid`, `url`, `uid` FROM `term` WHERE `type` = 7 AND `term` > '%s' GROUP BY `url`, `uid` ORDER BY `term` DESC " ,
dbesc ( $start ));
2015-06-06 13:15:37 +02:00
2015-06-20 08:44:29 +02:00
foreach ( $conversations AS $conversation ) {
ostatus_completion ( $conversation [ 'url' ], $conversation [ 'uid' ]);
}
2013-02-04 00:57:23 +01:00
2015-06-20 08:44:29 +02:00
logger ( 'cron_end' );
2013-02-04 00:57:23 +01:00
2015-06-20 08:44:29 +02:00
set_config ( 'system' , 'ostatus_last_poll' , time ());
2013-02-04 00:57:23 +01:00
}
2015-06-20 08:44:29 +02:00
function ostatus_completion ( $conversation_url , $uid , $item = array ()) {
$item_stored = - 3 ;
2013-01-27 23:25:04 +01:00
2015-05-26 23:33:38 +02:00
$conversation_url = ostatus_convert_href ( $conversation_url );
2015-06-20 09:15:19 +02:00
// If the thread shouldn't be completed then store the item and go away
if (( intval ( get_config ( 'system' , 'ostatus_poll_interval' )) == - 2 ) AND ( count ( $item ) > 0 )) {
$item_stored = item_store ( $item , true );
return ( $item_stored );
}
2013-02-04 00:57:23 +01:00
// Get the parent
2015-06-20 08:44:29 +02:00
$parents = q ( " SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN
( SELECT `parent` FROM `item` WHERE `id` IN
( SELECT `oid` FROM `term` WHERE `uid` = % d AND `otype` = % d AND `type` = % d AND `url` = '%s' )) " ,
intval ( $uid ), intval ( TERM_OBJ_POST ), intval ( TERM_CONVERSATION ), dbesc ( $conversation_url ));
if ( $parents )
$parent = $parents [ 0 ];
elseif ( count ( $item ) > 0 ) {
$parent = $item ;
$parent [ " type " ] = " remote " ;
$parent [ " verb " ] = ACTIVITY_POST ;
$parent [ " visible " ] = 1 ;
} else {
// Preset the parent
$r = q ( " SELECT `id` FROM `contact` WHERE `self` AND `uid`=%d " , $uid );
if ( ! $r )
return ( - 1 );
$parent = array ();
$parent [ " id " ] = 0 ;
$parent [ " parent " ] = 0 ;
$parent [ " uri " ] = " " ;
$parent [ " contact-id " ] = $r [ 0 ][ " id " ];
$parent [ " type " ] = " remote " ;
$parent [ " verb " ] = ACTIVITY_POST ;
$parent [ " visible " ] = 1 ;
}
2013-02-04 00:57:23 +01:00
2013-01-27 23:25:04 +01:00
$conv = str_replace ( " /conversation/ " , " /api/statusnet/conversation/ " , $conversation_url ) . " .as " ;
2013-06-08 12:28:19 +02:00
$pageno = 1 ;
$items = array ();
2013-01-27 23:25:04 +01:00
2015-06-20 08:44:29 +02:00
logger ( 'fetching conversation url ' . $conv . ' for user ' . $uid );
2013-01-27 23:25:04 +01:00
2013-06-08 12:28:19 +02:00
do {
2015-06-20 08:44:29 +02:00
$conv_arr = z_fetch_url ( $conv . " ?page= " . $pageno );
// If it is a non-ssl site and there is an error, then try ssl or vice versa
if ( ! $conv_arr [ " success " ] AND ( substr ( $conv , 0 , 7 ) == " http:// " )) {
$conv = str_replace ( " http:// " , " https:// " , $conv );
$conv_as = fetch_url ( $conv . " ?page= " . $pageno );
} elseif ( ! $conv_arr [ " success " ] AND ( substr ( $conv , 0 , 8 ) == " https:// " )) {
$conv = str_replace ( " https:// " , " http:// " , $conv );
$conv_as = fetch_url ( $conv . " ?page= " . $pageno );
} else
$conv_as = $conv_arr [ " body " ];
2013-01-27 23:25:04 +01:00
$conv_as = str_replace ( ',"statusnet:notice_info":' , ',"statusnet_notice_info":' , $conv_as );
$conv_as = json_decode ( $conv_as );
2013-06-08 12:28:19 +02:00
if ( @ is_array ( $conv_as -> items ))
$items = array_merge ( $items , $conv_as -> items );
else
break ;
2013-02-23 12:42:55 +01:00
2013-06-08 12:28:19 +02:00
$pageno ++ ;
2013-01-27 23:25:04 +01:00
2013-06-08 12:28:19 +02:00
} while ( true );
2013-03-06 23:23:04 +01:00
2015-06-20 08:44:29 +02:00
logger ( 'fetching conversation done. Found ' . count ( $items ) . ' items' );
if ( ! sizeof ( $items )) {
if ( count ( $item ) > 0 ) {
$item_stored = item_store ( $item , true );
logger ( " Conversation " . $conversation_url . " couldn't be fetched. Item uri " . $item [ " uri " ] . " stored: " . $item_stored , LOGGER_DEBUG );
if ( $item_stored )
2015-06-20 09:15:19 +02:00
complete_conversation ( $item_id , $conversation_url );
2015-06-20 08:44:29 +02:00
return ( $item_stored );
} else
return ( - 2 );
}
2013-06-08 12:28:19 +02:00
$items = array_reverse ( $items );
foreach ( $items as $single_conv ) {
2015-06-20 08:44:29 +02:00
// Test - remove before flight
//$tempfile = tempnam(get_temppath(), "conversation");
//file_put_contents($tempfile, json_encode($single_conv));
2015-05-28 07:51:12 +02:00
if ( isset ( $single_conv -> object -> id ))
2013-06-16 13:28:04 +02:00
$single_conv -> id = $single_conv -> object -> id ;
2015-05-28 07:51:12 +02:00
2015-05-26 23:33:38 +02:00
$plink = ostatus_convert_href ( $single_conv -> id );
2015-05-28 07:51:12 +02:00
if ( isset ( $single_conv -> object -> url ))
$plink = ostatus_convert_href ( $single_conv -> object -> url );
2013-06-08 12:28:19 +02:00
if ( @! $single_conv -> id )
continue ;
2013-03-06 23:23:04 +01:00
2015-06-20 08:44:29 +02:00
logger ( " Got id " . $single_conv -> id , LOGGER_DEBUG );
2013-06-08 12:28:19 +02:00
if ( $first_id == " " ) {
$first_id = $single_conv -> id ;
2013-01-28 01:16:51 +01:00
2015-06-20 08:44:29 +02:00
// The first post of the conversation isn't our first post. There are three options:
// 1. Our conversation hasn't the "real" thread starter
// 2. This first post is a post inside our thread
// 3. This first post is a post inside another thread
if (( $first_id != $parent [ " uri " ]) AND ( $parent [ " uri " ] != " " )) {
$new_parents = q ( " SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN
( SELECT `parent` FROM `item`
WHERE `uid` = % d AND `uri` = '%s' AND `network` IN ( '%s' , '%s' )) LIMIT 1 " ,
intval ( $uid ), dbesc ( $first_id ), dbesc ( NETWORK_OSTATUS ), dbesc ( NETWORK_DFRN ));
if ( $new_parents ) {
if ( $new_parents [ 0 ][ " parent " ] == $parent [ " parent " ]) {
// Option 2: This post is already present inside our thread - but not as thread starter
logger ( " Option 2: uri present in our thread: " . $first_id , LOGGER_DEBUG );
$first_id = $parent [ " uri " ];
} else {
// Option 3: Not so good. We have mixed parents. We have to see how to clean this up.
// For now just take the new parent.
$parent = $new_parents [ 0 ];
$first_id = $parent [ " uri " ];
logger ( " Option 3: mixed parents for uri " . $first_id , LOGGER_DEBUG );
}
2015-06-12 00:39:56 +02:00
} else {
2015-06-20 08:44:29 +02:00
// Option 1: We hadn't got the real thread starter
// We have to clean up our existing messages.
$parent [ " id " ] = 0 ;
$parent [ " uri " ] = $first_id ;
logger ( " Option 1: we have a new parent: " . $first_id , LOGGER_DEBUG );
2015-06-12 00:39:56 +02:00
}
2015-06-20 08:44:29 +02:00
} elseif ( $parent [ " uri " ] == " " ) {
2013-06-08 12:28:19 +02:00
$parent [ " id " ] = 0 ;
$parent [ " uri " ] = $first_id ;
2013-01-28 01:16:51 +01:00
}
2013-06-08 12:28:19 +02:00
}
2013-01-28 01:16:51 +01:00
2015-06-20 08:44:29 +02:00
if ( isset ( $single_conv -> context -> inReplyTo -> id )) {
2013-06-08 12:28:19 +02:00
$parent_uri = $single_conv -> context -> inReplyTo -> id ;
2015-05-26 23:33:38 +02:00
2015-06-20 08:44:29 +02:00
$parent_exists = q ( " SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1 " ,
intval ( $uid ), dbesc ( $parent_uri ), dbesc ( NETWORK_OSTATUS ), dbesc ( NETWORK_DFRN ));
if ( ! $parent_exists ) {
logger ( " Parent " . $parent_uri . " wasn't found here " , LOGGER_DEBUG );
$parent_uri = $parent [ " uri " ];
}
} else
$parent_uri = $parent [ " uri " ];
2015-05-26 23:33:38 +02:00
2015-06-20 08:44:29 +02:00
$message_exists = q ( " SELECT `id`, `parent`, `uri` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s') LIMIT 1 " ,
intval ( $uid ), dbesc ( $single_conv -> id ),
dbesc ( NETWORK_OSTATUS ), dbesc ( NETWORK_DFRN ));
2013-06-08 12:28:19 +02:00
if ( $message_exists ) {
2015-06-20 08:44:29 +02:00
logger ( " Message " . $single_conv -> id . " already existed on the system " , LOGGER_DEBUG );
2013-06-08 12:28:19 +02:00
if ( $parent [ " id " ] != 0 ) {
$existing_message = $message_exists [ 0 ];
2015-01-12 00:14:51 +01:00
2015-06-12 00:39:56 +02:00
// We improved the way we fetch OStatus messages, this shouldn't happen very often now
2015-06-20 08:44:29 +02:00
// To-Do: we have to change the shadow copies as well. This way here is really ugly.
2015-06-07 23:18:02 +02:00
if ( $existing_message [ " parent " ] != $parent [ " id " ]) {
2015-06-12 00:39:56 +02:00
logger ( 'updating id ' . $existing_message [ " id " ] . ' with parent ' . $existing_message [ " parent " ] . ' to parent ' . $parent [ " id " ] . ' uri ' . $parent [ " uri " ] . ' thread ' . $parent_uri , LOGGER_DEBUG );
// Update the parent id of the selected item
$r = q ( " UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `id` = %d " ,
intval ( $parent [ " id " ]), dbesc ( $parent [ " uri " ]), intval ( $existing_message [ " id " ]));
// Update the parent uri in the thread - but only if it points to itself
$r = q ( " UPDATE `item` SET `thr-parent` = '%s' WHERE `id` = %d AND `uri` = `thr-parent` " ,
dbesc ( $parent_uri ), intval ( $existing_message [ " id " ]));
// try to change all items of the same parent
$r = q ( " UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `parent` = %d " ,
intval ( $parent [ " id " ]), dbesc ( $parent [ " uri " ]), intval ( $existing_message [ " parent " ]));
// Update the parent uri in the thread - but only if it points to itself
$r = q ( " UPDATE `item` SET `thr-parent` = '%s' WHERE (`parent` = %d) AND (`uri` = `thr-parent`) " ,
dbesc ( $parent [ " uri " ]), intval ( $existing_message [ " parent " ]));
// Now delete the thread
delete_thread ( $existing_message [ " parent " ]);
2015-06-07 23:18:02 +02:00
}
2013-01-27 23:25:04 +01:00
}
2015-06-20 08:44:29 +02:00
// The item we are having on the system is the one that we wanted to store via the item array
if ( isset ( $item [ " uri " ]) AND ( $item [ " uri " ] == $existing_message [ " uri " ])) {
$item = array ();
$item_stored = 0 ;
}
2013-06-08 12:28:19 +02:00
continue ;
}
2013-01-27 23:25:04 +01:00
2015-05-28 07:51:12 +02:00
$actor = $single_conv -> actor -> id ;
if ( isset ( $single_conv -> actor -> url ))
$actor = $single_conv -> actor -> url ;
2015-01-12 00:14:51 +01:00
$contact = q ( " SELECT `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s' " ,
2015-06-20 08:44:29 +02:00
$uid , normalise_link ( $actor ), NETWORK_STATUSNET );
2015-01-12 00:14:51 +01:00
if ( count ( $contact )) {
2015-05-28 07:51:12 +02:00
logger ( " Found contact for url " . $actor , LOGGER_DEBUG );
2015-01-12 00:14:51 +01:00
$contact_id = $contact [ 0 ][ " id " ];
} else {
2015-05-28 07:51:12 +02:00
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 );
2015-01-12 00:14:51 +01:00
$contact_id = $parent [ " contact-id " ];
}
2013-06-08 12:28:19 +02:00
$arr = array ();
2013-12-27 01:58:21 +01:00
$arr [ " network " ] = NETWORK_OSTATUS ;
2013-06-08 12:28:19 +02:00
$arr [ " uri " ] = $single_conv -> id ;
2015-05-26 23:33:38 +02:00
$arr [ " plink " ] = $plink ;
2015-06-20 08:44:29 +02:00
$arr [ " uid " ] = $uid ;
2015-01-12 00:14:51 +01:00
$arr [ " contact-id " ] = $contact_id ;
2015-06-20 08:44:29 +02:00
$arr [ " parent-uri " ] = $parent_uri ;
2013-06-08 12:28:19 +02:00
$arr [ " created " ] = $single_conv -> published ;
$arr [ " edited " ] = $single_conv -> published ;
2015-06-20 08:44:29 +02:00
$arr [ " owner-name " ] = $single_conv -> actor -> displayName ;
2015-06-13 09:07:13 +02:00
if ( $arr [ " owner-name " ] == '' )
2015-06-20 08:44:29 +02:00
$arr [ " owner-name " ] = $single_conv -> actor -> contact -> displayName ;
2013-06-08 12:28:19 +02:00
if ( $arr [ " owner-name " ] == '' )
2015-06-20 08:44:29 +02:00
$arr [ " owner-name " ] = $single_conv -> actor -> portablecontacts_net -> displayName ;
2013-06-08 12:28:19 +02:00
2015-05-28 07:51:12 +02:00
$arr [ " owner-link " ] = $actor ;
2013-06-08 12:28:19 +02:00
$arr [ " owner-avatar " ] = $single_conv -> actor -> image -> url ;
$arr [ " author-name " ] = $arr [ " owner-name " ];
2015-05-28 07:51:12 +02:00
$arr [ " author-link " ] = $actor ;
2013-06-08 12:28:19 +02:00
$arr [ " author-avatar " ] = $single_conv -> actor -> image -> url ;
2015-06-09 23:53:53 +02:00
$arr [ " body " ] = add_page_info_to_body ( html2bbcode ( $single_conv -> content ));
2015-05-26 23:33:38 +02:00
2015-05-27 08:16:05 +02:00
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 ))
2015-05-26 23:33:38 +02:00
$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 ))
2013-06-08 12:28:19 +02:00
$arr [ " app " ] = $single_conv -> provider -> displayName ;
2015-05-26 23:33:38 +02:00
else
$arr [ " app " ] = " OStatus " ;
2015-06-20 08:44:29 +02:00
$arr [ " app " ] .= " * " ;
$arr [ " object " ] = json_encode ( $single_conv );
2013-06-08 12:28:19 +02:00
$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 );
2015-06-20 08:44:29 +02:00
// Is it a reshared item?
if ( isset ( $item -> verb ) AND ( $item -> verb == " share " ) AND isset ( $item -> object )) {
if ( is_array ( $item -> object ))
$item -> object = $item -> object [ 0 ];
logger ( " Found reshared item " . $single_conv -> object -> id );
// $single_conv->object->context->conversation;
$plink = ostatus_convert_href ( $single_conv -> object -> url );
$arr [ " uri " ] = $single_conv -> object -> id ;
$arr [ " plink " ] = $plink ;
$arr [ " created " ] = $single_conv -> object -> published ;
$arr [ " edited " ] = $single_conv -> object -> published ;
$arr [ " author-name " ] = $single_conv -> object -> actor -> displayName ;
if ( $arr [ " owner-name " ] == '' )
$arr [ " author-name " ] = $single_conv -> object -> actor -> contact -> displayName ;
$arr [ " author-link " ] = $single_conv -> object -> actor -> url ;
$arr [ " author-avatar " ] = $single_conv -> object -> actor -> image -> url ;
$arr [ " body " ] = add_page_info_to_body ( html2bbcode ( $single_conv -> object -> content ));
$arr [ " app " ] = $single_conv -> object -> provider -> displayName . " # " ;
//$arr["verb"] = $single_conv->object->verb;
$arr [ " location " ] = $single_conv -> object -> location -> displayName ;
$arr [ " coord " ] = trim ( $single_conv -> object -> location -> lat . " " . $single_conv -> object -> location -> lon );
}
2013-06-08 12:28:19 +02:00
if ( $arr [ " location " ] == " " )
unset ( $arr [ " location " ]);
if ( $arr [ " coord " ] == " " )
unset ( $arr [ " coord " ]);
2015-06-20 08:44:29 +02:00
// Copy fields from given item array
if ( isset ( $item [ " uri " ]) AND ( $item [ " uri " ] == $arr [ " uri " ])) {
$copy_fields = array ( " owner-name " , " owner-link " , " owner-avatar " , " author-name " , " author-link " , " author-avatar " ,
" gravity " , " body " , " object-type " , " verb " , " created " , " edited " , " coord " , " tag " ,
" attach " , " app " , " type " , " location " , " contact-id " );
foreach ( $copy_fields AS $field )
if ( isset ( $item [ $field ]))
$arr [ $field ] = $item [ $field ];
$arr [ " app " ] .= " + " ;
}
2013-06-08 12:28:19 +02:00
$newitem = item_store ( $arr );
2015-06-20 08:44:29 +02:00
if ( ! $newitem ) {
logger ( " Item wasn't stored " . print_r ( $arr , true ), LOGGER_DEBUG );
continue ;
}
2013-06-08 12:28:19 +02:00
2015-06-20 08:44:29 +02:00
if ( isset ( $item [ " uri " ]) AND ( $item [ " uri " ] == $arr [ " uri " ])) {
$item = array ();
$item_stored = $newitem ;
}
logger ( 'Stored new item ' . $plink . ' for parent ' . $arr [ " parent-uri " ] . ' under id ' . $newitem , LOGGER_DEBUG );
2015-05-26 23:33:38 +02:00
2013-06-08 12:28:19 +02:00
// Add the conversation entry (but don't fetch the whole conversation)
2015-06-20 09:15:19 +02:00
complete_conversation ( $newitem , $conversation_url );
2013-06-08 12:28:19 +02:00
// If the newly created item is the top item then change the parent settings of the thread
2015-06-12 00:39:56 +02:00
// This shouldn't happen anymore. This is supposed to be absolote.
2015-06-20 08:44:29 +02:00
if ( $arr [ " uri " ] == $first_id ) {
2015-01-12 00:14:51 +01:00
logger ( 'setting new parent to id ' . $newitem );
2013-06-08 12:28:19 +02:00
$new_parents = q ( " SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1 " ,
2015-06-20 08:44:29 +02:00
intval ( $uid ), intval ( $newitem ));
2015-06-12 00:39:56 +02:00
if ( $new_parents )
2013-06-08 12:28:19 +02:00
$parent = $new_parents [ 0 ];
2013-01-27 23:25:04 +01:00
}
}
2015-06-20 08:44:29 +02:00
return ( $item_stored );
}
2015-06-20 09:15:19 +02:00
function complete_conversation ( $itemid , $conversation_url ) {
2015-06-20 08:44:29 +02:00
global $a ;
$conversation_url = ostatus_convert_href ( $conversation_url );
$messages = q ( " SELECT `uid`, `parent`, `created`, `received`, `guid` FROM `item` WHERE `id` = %d LIMIT 1 " , intval ( $itemid ));
if ( ! $messages )
return ;
$message = $messages [ 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`, `created`, `received`, `guid`) VALUES (%d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s') " ,
intval ( $message [ " uid " ]), intval ( $itemid ), intval ( TERM_OBJ_POST ), intval ( TERM_CONVERSATION ),
dbesc ( $message [ " created " ]), dbesc ( $conversation_url ), dbesc ( $message [ " created " ]), dbesc ( $message [ " received " ]), dbesc ( $message [ " guid " ]));
logger ( 'Storing conversation url ' . $conversation_url . ' for id ' . $itemid );
}
2013-01-27 23:25:04 +01:00
}
?>