Fix: public comments weren't distributed to the followers.
This commit is contained in:
parent
f937dabc9e
commit
8564eeec4e
|
@ -355,6 +355,13 @@ class Item extends BaseObject
|
||||||
unset($item['dsprsig']);
|
unset($item['dsprsig']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($item['diaspora_signed_text'])) {
|
||||||
|
$diaspora_signed_text = $item['diaspora_signed_text'];
|
||||||
|
unset($item['diaspora_signed_text']);
|
||||||
|
} else {
|
||||||
|
$diaspora_signed_text = '';
|
||||||
|
}
|
||||||
|
|
||||||
// Converting the plink
|
// Converting the plink
|
||||||
/// @TODO Check if this is really still needed
|
/// @TODO Check if this is really still needed
|
||||||
if ($item['network'] == NETWORK_OSTATUS) {
|
if ($item['network'] == NETWORK_OSTATUS) {
|
||||||
|
@ -553,7 +560,7 @@ class Item extends BaseObject
|
||||||
|
|
||||||
$fields = ['uri', 'parent-uri', 'id', 'deleted',
|
$fields = ['uri', 'parent-uri', 'id', 'deleted',
|
||||||
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
|
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
|
||||||
'wall', 'private', 'forum_mode'];
|
'wall', 'private', 'forum_mode', 'origin'];
|
||||||
$condition = ['uri' => $item['parent-uri'], 'uid' => $item['uid']];
|
$condition = ['uri' => $item['parent-uri'], 'uid' => $item['uid']];
|
||||||
$params = ['order' => ['id' => false]];
|
$params = ['order' => ['id' => false]];
|
||||||
$parent = dba::selectFirst('item', $fields, $condition, $params);
|
$parent = dba::selectFirst('item', $fields, $condition, $params);
|
||||||
|
@ -805,6 +812,12 @@ class Item extends BaseObject
|
||||||
'signature' => $dsprsig->signature, 'signer' => $dsprsig->signer]);
|
'signature' => $dsprsig->signature, 'signer' => $dsprsig->signer]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($diaspora_signed_text)) {
|
||||||
|
// Formerly we stored the signed text, the signature and the author in different fields.
|
||||||
|
// We now store the raw data so that we are more flexible.
|
||||||
|
dba::insert('sign', ['iid' => $current_post, 'signed_text' => $diaspora_signed_text]);
|
||||||
|
}
|
||||||
|
|
||||||
$deleted = self::tagDeliver($item['uid'], $current_post);
|
$deleted = self::tagDeliver($item['uid'], $current_post);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -849,6 +862,8 @@ class Item extends BaseObject
|
||||||
|
|
||||||
if ($notify) {
|
if ($notify) {
|
||||||
Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", $notify_type, $current_post);
|
Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", $notify_type, $current_post);
|
||||||
|
} elseif (!empty($parent) && $parent['origin']) {
|
||||||
|
Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", "comment-import", $current_post);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $current_post;
|
return $current_post;
|
||||||
|
@ -857,9 +872,10 @@ class Item extends BaseObject
|
||||||
/**
|
/**
|
||||||
* @brief Distributes public items to the receivers
|
* @brief Distributes public items to the receivers
|
||||||
*
|
*
|
||||||
* @param integer $itemid Item ID that should be added
|
* @param integer $itemid Item ID that should be added
|
||||||
|
* @param string $signed_text Original text (for Diaspora signatures), JSON encoded.
|
||||||
*/
|
*/
|
||||||
public static function distribute($itemid)
|
public static function distribute($itemid, $signed_text = '')
|
||||||
{
|
{
|
||||||
$condition = ["`id` IN (SELECT `parent` FROM `item` WHERE `id` = ?)", $itemid];
|
$condition = ["`id` IN (SELECT `parent` FROM `item` WHERE `id` = ?)", $itemid];
|
||||||
$parent = dba::selectFirst('item', ['owner-id'], $condition);
|
$parent = dba::selectFirst('item', ['owner-id'], $condition);
|
||||||
|
@ -894,14 +910,22 @@ class Item extends BaseObject
|
||||||
$users[$contact['uid']] = $contact['uid'];
|
$users[$contact['uid']] = $contact['uid'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$origin_uid = 0;
|
||||||
|
|
||||||
if ($item['uri'] != $item['parent-uri']) {
|
if ($item['uri'] != $item['parent-uri']) {
|
||||||
$parents = dba::select('item', ['uid'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]);
|
$parents = dba::select('item', ['uid', 'origin'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]);
|
||||||
while ($parent = dba::fetch($parents)) {
|
while ($parent = dba::fetch($parents)) {
|
||||||
$users[$parent['uid']] = $parent['uid'];
|
$users[$parent['uid']] = $parent['uid'];
|
||||||
|
if ($parent['origin'] && !$item['origin']) {
|
||||||
|
$origin_uid = $parent['uid'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($users as $uid) {
|
foreach ($users as $uid) {
|
||||||
|
if ($origin_uid == $uid) {
|
||||||
|
$item['diaspora_signed_text'] = $signed_text;
|
||||||
|
}
|
||||||
self::storeForUser($itemid, $item, $uid);
|
self::storeForUser($itemid, $item, $uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1747,6 +1747,12 @@ class Diaspora
|
||||||
|
|
||||||
self::fetchGuid($datarray);
|
self::fetchGuid($datarray);
|
||||||
|
|
||||||
|
// If we are the origin of the parent we store the original data.
|
||||||
|
// We notify our followers during the item storage.
|
||||||
|
if ($parent_item["origin"]) {
|
||||||
|
$datarray['diaspora_signed_text'] = json_encode($data);
|
||||||
|
}
|
||||||
|
|
||||||
$message_id = Item::insert($datarray);
|
$message_id = Item::insert($datarray);
|
||||||
|
|
||||||
if ($message_id <= 0) {
|
if ($message_id <= 0) {
|
||||||
|
@ -1756,20 +1762,10 @@ class Diaspora
|
||||||
if ($message_id) {
|
if ($message_id) {
|
||||||
logger("Stored comment ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
|
logger("Stored comment ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
|
||||||
if ($datarray['uid'] == 0) {
|
if ($datarray['uid'] == 0) {
|
||||||
Item::distribute($message_id);
|
Item::distribute($message_id, json_encode($data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we are the origin of the parent we store the original data and notify our followers
|
|
||||||
if ($message_id && $parent_item["origin"]) {
|
|
||||||
// Formerly we stored the signed text, the signature and the author in different fields.
|
|
||||||
// We now store the raw data so that we are more flexible.
|
|
||||||
dba::insert('sign', ['iid' => $message_id, 'signed_text' => json_encode($data)]);
|
|
||||||
|
|
||||||
// notify others
|
|
||||||
Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $message_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2071,6 +2067,20 @@ class Diaspora
|
||||||
|
|
||||||
$datarray["body"] = self::constructLikeBody($contact, $parent_item, $guid);
|
$datarray["body"] = self::constructLikeBody($contact, $parent_item, $guid);
|
||||||
|
|
||||||
|
// like on comments have the comment as parent. So we need to fetch the toplevel parent
|
||||||
|
if ($parent_item["id"] != $parent_item["parent"]) {
|
||||||
|
$toplevel = dba::selectFirst('item', ['origin'], ['id' => $parent_item["parent"]]);
|
||||||
|
$origin = $toplevel["origin"];
|
||||||
|
} else {
|
||||||
|
$origin = $parent_item["origin"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we are the origin of the parent we store the original data.
|
||||||
|
// We notify our followers during the item storage.
|
||||||
|
if ($origin) {
|
||||||
|
$datarray['diaspora_signed_text'] = json_encode($data);
|
||||||
|
}
|
||||||
|
|
||||||
$message_id = Item::insert($datarray);
|
$message_id = Item::insert($datarray);
|
||||||
|
|
||||||
if ($message_id <= 0) {
|
if ($message_id <= 0) {
|
||||||
|
@ -2080,28 +2090,10 @@ class Diaspora
|
||||||
if ($message_id) {
|
if ($message_id) {
|
||||||
logger("Stored like ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
|
logger("Stored like ".$datarray["guid"]." with message id ".$message_id, LOGGER_DEBUG);
|
||||||
if ($datarray['uid'] == 0) {
|
if ($datarray['uid'] == 0) {
|
||||||
Item::distribute($message_id);
|
Item::distribute($message_id, json_encode($data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// like on comments have the comment as parent. So we need to fetch the toplevel parent
|
|
||||||
if ($parent_item["id"] != $parent_item["parent"]) {
|
|
||||||
$toplevel = dba::selectFirst('item', ['origin'], ['id' => $parent_item["parent"]]);
|
|
||||||
$origin = $toplevel["origin"];
|
|
||||||
} else {
|
|
||||||
$origin = $parent_item["origin"];
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we are the origin of the parent we store the original data and notify our followers
|
|
||||||
if ($message_id && $origin) {
|
|
||||||
// Formerly we stored the signed text, the signature and the author in different fields.
|
|
||||||
// We now store the raw data so that we are more flexible.
|
|
||||||
dba::insert('sign', ['iid' => $message_id, 'signed_text' => json_encode($data)]);
|
|
||||||
|
|
||||||
// notify others
|
|
||||||
Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $message_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue