There is now a function to store conversations

This commit is contained in:
Michael 2017-04-28 16:35:53 +00:00
parent 62b6bbeef0
commit c0b5339691
2 changed files with 59 additions and 46 deletions

View file

@ -410,7 +410,60 @@ function uri_to_guid($uri, $host = "") {
return $guid_prefix.$host_hash; return $guid_prefix.$host_hash;
} }
/// @TODO Maybe $arr must be called-by-reference? This function modifies it function store_conversation($arr) {
if (in_array($arr['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) {
$conversation = array('item-uri' => $arr['uri'], 'received' => dbm::date());
if (isset($arr['parent-uri']) AND ($arr['parent-uri'] != $arr['uri'])) {
$conversation['reply-to-uri'] = $arr['parent-uri'];
}
if (isset($arr['thr-parent']) AND ($arr['thr-parent'] != $arr['uri'])) {
$conversation['reply-to-uri'] = $arr['thr-parent'];
}
if (isset($arr['conversation-uri'])) {
$conversation['conversation-uri'] = $arr['conversation-uri'];
}
if (isset($arr['conversation-href'])) {
$conversation['conversation-href'] = $arr['conversation-href'];
}
if (isset($arr['protocol'])) {
$conversation['protocol'] = $arr['protocol'];
}
if (isset($arr['source'])) {
$conversation['source'] = $arr['source'];
}
$conv = dba::fetch_first("SELECT `protocol` FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']);
if (dbm::is_result($conv)) {
if (($conv['protocol'] < $conversation['protocol']) AND ($conv['protocol'] != 0)) {
unset($conversation['protocol']);
unset($conversation['source']);
}
// Replace the conversation entry when the new one is better
//if ((($conv['protocol'] == 0) OR ($conv['protocol'] >= $conversation['protocol'])) AND ($conversation['protocol'] > 0)) {
if (!dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri']))) {
logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG);
}
//}
} else {
if (!dba::insert('conversation', $conversation)) {
logger('Conversation: insert for '.$conversation['item-uri'].' (protocol '.$conversation['protocol'].') failed', LOGGER_DEBUG);
}
}
}
unset($arr['conversation-uri']);
unset($arr['conversation-href']);
unset($arr['protocol']);
unset($arr['source']);
return $arr;
}
/// @TODO add type-hint array /// @TODO add type-hint array
function item_store($arr, $force_parent = false, $notify = false, $dontcache = false) { function item_store($arr, $force_parent = false, $notify = false, $dontcache = false) {
@ -436,6 +489,9 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
} }
} }
// Store conversation data
$arr = store_conversation($arr);
/* /*
* If a Diaspora signature structure was passed in, pull it out of the * If a Diaspora signature structure was passed in, pull it out of the
* item array and set it aside for later storage. * item array and set it aside for later storage.
@ -691,51 +747,6 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
$arr['thr-parent'] = $arr['parent-uri']; $arr['thr-parent'] = $arr['parent-uri'];
if (in_array($arr['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) {
$conversation = array('item-uri' => $arr['uri'], 'received' => dbm::date());
if (isset($arr['thr-parent'])) {
if ($arr['thr-parent'] != $arr['uri']) {
$conversation['reply-to-uri'] = $arr['thr-parent'];
}
}
if (isset($arr['conversation-uri'])) {
$conversation['conversation-uri'] = $arr['conversation-uri'];
}
if (isset($arr['conversation-href'])) {
$conversation['conversation-href'] = $arr['conversation-href'];
}
if (isset($arr['protocol'])) {
$conversation['protocol'] = $arr['protocol'];
}
if (isset($arr['source'])) {
$conversation['source'] = $arr['source'];
}
$conv = dba::fetch_first("SELECT `protocol` FROM `conversation` WHERE `item-uri` = ?", $conversation['item-uri']);
if (dbm::is_result($conv)) {
// Replace the conversation entry when the new one is better
if ((($conv['protocol'] == 0) OR ($conv['protocol'] > $conversation['protocol'])) AND ($conversation['protocol'] > 0)) {
if (!dba::update('conversation', $conversation, array('item-uri' => $conversation['item-uri']))) {
logger('Conversation: update for '.$conversation['item-uri'].' from '.$conv['protocol'].' to '.$conversation['protocol'].' failed', LOGGER_DEBUG);
}
}
} else {
if (!dba::insert('conversation', $conversation)) {
logger('Conversation: insert for '.$conversation['item-uri'].' (protocol '.$conversation['protocol'].') failed', LOGGER_DEBUG);
}
}
}
unset($arr['conversation-uri']);
unset($arr['conversation-href']);
unset($arr['protocol']);
unset($arr['source']);
if ($arr['parent-uri'] === $arr['uri']) { if ($arr['parent-uri'] === $arr['uri']) {
$parent_id = 0; $parent_id = 0;
$parent_deleted = 0; $parent_deleted = 0;

View file

@ -916,6 +916,8 @@ class ostatus {
($item["verb"] == ACTIVITY_LIKE) OR ($conversation_url == "")) { ($item["verb"] == ACTIVITY_LIKE) OR ($conversation_url == "")) {
$item_stored = item_store($item, $all_threads); $item_stored = item_store($item, $all_threads);
return $item_stored; return $item_stored;
} elseif (count($item) > 0) {
$item = store_conversation($item);
} }
// Get the parent // Get the parent